mirror of
https://github.com/brl/mutter.git
synced 2024-11-22 08:00:42 -05:00
cogl: Remove always-set COGL_FEATURE_ID_OFFSCREEN
https://gitlab.gnome.org/GNOME/mutter/merge_requests/866
This commit is contained in:
parent
4523251849
commit
6a8830a551
@ -729,18 +729,6 @@ allocate_space (CoglAtlasTexture *atlas_tex,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we can't use FBOs then it will be too slow to migrate textures
|
|
||||||
and we shouldn't use the atlas */
|
|
||||||
if (!cogl_has_feature (ctx, COGL_FEATURE_ID_OFFSCREEN))
|
|
||||||
{
|
|
||||||
g_set_error_literal (error,
|
|
||||||
COGL_SYSTEM_ERROR,
|
|
||||||
COGL_SYSTEM_ERROR_UNSUPPORTED,
|
|
||||||
"Atlasing disabled because migrations "
|
|
||||||
"would be too slow");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Look for an existing atlas that can hold the texture */
|
/* Look for an existing atlas that can hold the texture */
|
||||||
for (l = ctx->atlases; l; l = l->next)
|
for (l = ctx->atlases; l; l = l->next)
|
||||||
{
|
{
|
||||||
|
@ -177,7 +177,6 @@ cogl_is_context (void *object);
|
|||||||
* @COGL_FEATURE_ID_TEXTURE_RG: Support for
|
* @COGL_FEATURE_ID_TEXTURE_RG: Support for
|
||||||
* %COGL_TEXTURE_COMPONENTS_RG as the internal components of a
|
* %COGL_TEXTURE_COMPONENTS_RG as the internal components of a
|
||||||
* texture.
|
* texture.
|
||||||
* @COGL_FEATURE_ID_OFFSCREEN: Offscreen rendering support
|
|
||||||
* @COGL_FEATURE_ID_OFFSCREEN_MULTISAMPLE: Multisample support for
|
* @COGL_FEATURE_ID_OFFSCREEN_MULTISAMPLE: Multisample support for
|
||||||
* offscreen framebuffers
|
* offscreen framebuffers
|
||||||
* @COGL_FEATURE_ID_ONSCREEN_MULTIPLE: Multiple onscreen framebuffers
|
* @COGL_FEATURE_ID_ONSCREEN_MULTIPLE: Multiple onscreen framebuffers
|
||||||
@ -208,7 +207,6 @@ cogl_is_context (void *object);
|
|||||||
*/
|
*/
|
||||||
typedef enum _CoglFeatureID
|
typedef enum _CoglFeatureID
|
||||||
{
|
{
|
||||||
COGL_FEATURE_ID_OFFSCREEN,
|
|
||||||
COGL_FEATURE_ID_OFFSCREEN_MULTISAMPLE,
|
COGL_FEATURE_ID_OFFSCREEN_MULTISAMPLE,
|
||||||
COGL_FEATURE_ID_ONSCREEN_MULTIPLE,
|
COGL_FEATURE_ID_ONSCREEN_MULTIPLE,
|
||||||
COGL_FEATURE_ID_UNSIGNED_INT_INDICES,
|
COGL_FEATURE_ID_UNSIGNED_INT_INDICES,
|
||||||
|
@ -728,14 +728,6 @@ cogl_framebuffer_allocate (CoglFramebuffer *framebuffer,
|
|||||||
{
|
{
|
||||||
CoglOffscreen *offscreen = COGL_OFFSCREEN (framebuffer);
|
CoglOffscreen *offscreen = COGL_OFFSCREEN (framebuffer);
|
||||||
|
|
||||||
if (!cogl_has_feature (ctx, COGL_FEATURE_ID_OFFSCREEN))
|
|
||||||
{
|
|
||||||
g_set_error_literal (error, COGL_SYSTEM_ERROR,
|
|
||||||
COGL_SYSTEM_ERROR_UNSUPPORTED,
|
|
||||||
"Offscreen framebuffers not supported by system");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!cogl_texture_allocate (offscreen->texture, error))
|
if (!cogl_texture_allocate (offscreen->texture, error))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -546,9 +546,6 @@ get_texture_bits_via_offscreen (CoglTexture *meta_texture,
|
|||||||
GError *ignore_error = NULL;
|
GError *ignore_error = NULL;
|
||||||
CoglPixelFormat real_format;
|
CoglPixelFormat real_format;
|
||||||
|
|
||||||
if (!cogl_has_feature (ctx, COGL_FEATURE_ID_OFFSCREEN))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
offscreen = _cogl_offscreen_new_with_texture_full
|
offscreen = _cogl_offscreen_new_with_texture_full
|
||||||
(sub_texture,
|
(sub_texture,
|
||||||
COGL_OFFSCREEN_DISABLE_DEPTH_AND_STENCIL,
|
COGL_OFFSCREEN_DISABLE_DEPTH_AND_STENCIL,
|
||||||
|
@ -279,9 +279,7 @@ _cogl_framebuffer_gl_bind (CoglFramebuffer *framebuffer, GLenum target)
|
|||||||
const CoglWinsysVtable *winsys =
|
const CoglWinsysVtable *winsys =
|
||||||
_cogl_framebuffer_get_winsys (framebuffer);
|
_cogl_framebuffer_get_winsys (framebuffer);
|
||||||
winsys->onscreen_bind (COGL_ONSCREEN (framebuffer));
|
winsys->onscreen_bind (COGL_ONSCREEN (framebuffer));
|
||||||
/* glBindFramebuffer is an an extension with OpenGL ES 1.1 */
|
GE (ctx, glBindFramebuffer (target, 0));
|
||||||
if (cogl_has_feature (ctx, COGL_FEATURE_ID_OFFSCREEN))
|
|
||||||
GE (ctx, glBindFramebuffer (target, 0));
|
|
||||||
|
|
||||||
/* Initialise the glDrawBuffer state the first time the context
|
/* Initialise the glDrawBuffer state the first time the context
|
||||||
* is bound to the default framebuffer. If the winsys is using a
|
* is bound to the default framebuffer. If the winsys is using a
|
||||||
|
@ -238,35 +238,6 @@ allocate_from_bitmap (CoglTexture2D *tex_2d,
|
|||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
/* Keep a copy of the first pixel so that if glGenerateMipmap isn't
|
|
||||||
supported we can fallback to using GL_GENERATE_MIPMAP */
|
|
||||||
if (!cogl_has_feature (ctx, COGL_FEATURE_ID_OFFSCREEN))
|
|
||||||
{
|
|
||||||
GError *ignore = NULL;
|
|
||||||
uint8_t *data = _cogl_bitmap_map (upload_bmp,
|
|
||||||
COGL_BUFFER_ACCESS_READ, 0,
|
|
||||||
&ignore);
|
|
||||||
CoglPixelFormat format = cogl_bitmap_get_format (upload_bmp);
|
|
||||||
|
|
||||||
tex_2d->first_pixel.gl_format = gl_format;
|
|
||||||
tex_2d->first_pixel.gl_type = gl_type;
|
|
||||||
|
|
||||||
if (data)
|
|
||||||
{
|
|
||||||
memcpy (tex_2d->first_pixel.data, data,
|
|
||||||
cogl_pixel_format_get_bytes_per_pixel (format, 0));
|
|
||||||
_cogl_bitmap_unmap (upload_bmp);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_warning ("Failed to read first pixel of bitmap for "
|
|
||||||
"glGenerateMipmap fallback");
|
|
||||||
g_error_free (ignore);
|
|
||||||
memset (tex_2d->first_pixel.data, 0,
|
|
||||||
cogl_pixel_format_get_bytes_per_pixel (format, 0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tex_2d->gl_texture =
|
tex_2d->gl_texture =
|
||||||
ctx->texture_driver->gen (ctx, GL_TEXTURE_2D, internal_format);
|
ctx->texture_driver->gen (ctx, GL_TEXTURE_2D, internal_format);
|
||||||
if (!ctx->texture_driver->upload_to_gl (ctx,
|
if (!ctx->texture_driver->upload_to_gl (ctx,
|
||||||
@ -724,32 +695,7 @@ _cogl_texture_2d_gl_get_gl_handle (CoglTexture2D *tex_2d)
|
|||||||
void
|
void
|
||||||
_cogl_texture_2d_gl_generate_mipmap (CoglTexture2D *tex_2d)
|
_cogl_texture_2d_gl_generate_mipmap (CoglTexture2D *tex_2d)
|
||||||
{
|
{
|
||||||
CoglContext *ctx = COGL_TEXTURE (tex_2d)->context;
|
_cogl_texture_gl_generate_mipmaps (COGL_TEXTURE (tex_2d));
|
||||||
|
|
||||||
/* glGenerateMipmap is defined in the FBO extension. If it's not
|
|
||||||
available we'll fallback to temporarily enabling
|
|
||||||
GL_GENERATE_MIPMAP and reuploading the first pixel */
|
|
||||||
if (cogl_has_feature (ctx, COGL_FEATURE_ID_OFFSCREEN))
|
|
||||||
_cogl_texture_gl_generate_mipmaps (COGL_TEXTURE (tex_2d));
|
|
||||||
#ifdef HAVE_COGL_GL
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_cogl_bind_gl_texture_transient (GL_TEXTURE_2D,
|
|
||||||
tex_2d->gl_texture,
|
|
||||||
tex_2d->is_foreign);
|
|
||||||
|
|
||||||
GE( ctx, glTexParameteri (GL_TEXTURE_2D,
|
|
||||||
GL_GENERATE_MIPMAP,
|
|
||||||
GL_TRUE) );
|
|
||||||
GE( ctx, glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 1, 1,
|
|
||||||
tex_2d->first_pixel.gl_format,
|
|
||||||
tex_2d->first_pixel.gl_type,
|
|
||||||
tex_2d->first_pixel.data) );
|
|
||||||
GE( ctx, glTexParameteri (GL_TEXTURE_2D,
|
|
||||||
GL_GENERATE_MIPMAP,
|
|
||||||
GL_FALSE) );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
@ -793,36 +739,6 @@ _cogl_texture_2d_gl_copy_from_bitmap (CoglTexture2D *tex_2d,
|
|||||||
&gl_format,
|
&gl_format,
|
||||||
&gl_type);
|
&gl_type);
|
||||||
|
|
||||||
/* If this touches the first pixel then we'll update our copy */
|
|
||||||
if (dst_x == 0 && dst_y == 0 &&
|
|
||||||
!cogl_has_feature (ctx, COGL_FEATURE_ID_OFFSCREEN))
|
|
||||||
{
|
|
||||||
GError *ignore = NULL;
|
|
||||||
uint8_t *data =
|
|
||||||
_cogl_bitmap_map (upload_bmp, COGL_BUFFER_ACCESS_READ, 0, &ignore);
|
|
||||||
int bpp = cogl_pixel_format_get_bytes_per_pixel (upload_format, 0);
|
|
||||||
|
|
||||||
tex_2d->first_pixel.gl_format = gl_format;
|
|
||||||
tex_2d->first_pixel.gl_type = gl_type;
|
|
||||||
|
|
||||||
if (data)
|
|
||||||
{
|
|
||||||
memcpy (tex_2d->first_pixel.data,
|
|
||||||
(data +
|
|
||||||
cogl_bitmap_get_rowstride (upload_bmp) * src_y +
|
|
||||||
bpp * src_x),
|
|
||||||
bpp);
|
|
||||||
_cogl_bitmap_unmap (bmp);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_warning ("Failed to read first bitmap pixel for "
|
|
||||||
"glGenerateMipmap fallback");
|
|
||||||
g_error_free (ignore);
|
|
||||||
memset (tex_2d->first_pixel.data, 0, bpp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
status = ctx->texture_driver->upload_subregion_to_gl (ctx,
|
status = ctx->texture_driver->upload_subregion_to_gl (ctx,
|
||||||
tex,
|
tex,
|
||||||
FALSE,
|
FALSE,
|
||||||
|
@ -416,7 +416,6 @@ _cogl_driver_update_features (CoglContext *ctx,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
flags |= COGL_FEATURE_OFFSCREEN;
|
flags |= COGL_FEATURE_OFFSCREEN;
|
||||||
COGL_FLAGS_SET (ctx->features, COGL_FEATURE_ID_OFFSCREEN, TRUE);
|
|
||||||
COGL_FLAGS_SET (private_features,
|
COGL_FLAGS_SET (private_features,
|
||||||
COGL_PRIVATE_FEATURE_QUERY_FRAMEBUFFER_BITS,
|
COGL_PRIVATE_FEATURE_QUERY_FRAMEBUFFER_BITS,
|
||||||
TRUE);
|
TRUE);
|
||||||
|
@ -304,7 +304,6 @@ _cogl_driver_update_features (CoglContext *context,
|
|||||||
flags |= COGL_FEATURE_OFFSCREEN;
|
flags |= COGL_FEATURE_OFFSCREEN;
|
||||||
/* Note GLES 2 core doesn't support mipmaps for npot textures or
|
/* Note GLES 2 core doesn't support mipmaps for npot textures or
|
||||||
* repeat modes other than CLAMP_TO_EDGE. */
|
* repeat modes other than CLAMP_TO_EDGE. */
|
||||||
COGL_FLAGS_SET (context->features, COGL_FEATURE_ID_OFFSCREEN, TRUE);
|
|
||||||
|
|
||||||
COGL_FLAGS_SET (private_features, COGL_PRIVATE_FEATURE_ANY_GL, TRUE);
|
COGL_FLAGS_SET (private_features, COGL_PRIVATE_FEATURE_ANY_GL, TRUE);
|
||||||
COGL_FLAGS_SET (private_features, COGL_PRIVATE_FEATURE_ALPHA_TEXTURES, TRUE);
|
COGL_FLAGS_SET (private_features, COGL_PRIVATE_FEATURE_ALPHA_TEXTURES, TRUE);
|
||||||
@ -312,7 +311,6 @@ _cogl_driver_update_features (CoglContext *context,
|
|||||||
if (context->glGenRenderbuffers)
|
if (context->glGenRenderbuffers)
|
||||||
{
|
{
|
||||||
flags |= COGL_FEATURE_OFFSCREEN;
|
flags |= COGL_FEATURE_OFFSCREEN;
|
||||||
COGL_FLAGS_SET (context->features, COGL_FEATURE_ID_OFFSCREEN, TRUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (context->glBlitFramebuffer)
|
if (context->glBlitFramebuffer)
|
||||||
|
@ -2223,19 +2223,15 @@ get_fbconfig_for_depth (CoglContext *context,
|
|||||||
|
|
||||||
stencil = value;
|
stencil = value;
|
||||||
|
|
||||||
/* glGenerateMipmap is defined in the offscreen extension */
|
glx_renderer->glXGetFBConfigAttrib (dpy,
|
||||||
if (cogl_has_feature (context, COGL_FEATURE_ID_OFFSCREEN))
|
fbconfigs[i],
|
||||||
{
|
GLX_BIND_TO_MIPMAP_TEXTURE_EXT,
|
||||||
glx_renderer->glXGetFBConfigAttrib (dpy,
|
&value);
|
||||||
fbconfigs[i],
|
|
||||||
GLX_BIND_TO_MIPMAP_TEXTURE_EXT,
|
|
||||||
&value);
|
|
||||||
|
|
||||||
if (value < mipmap)
|
if (value < mipmap)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
mipmap = value;
|
mipmap = value;
|
||||||
}
|
|
||||||
|
|
||||||
*fbconfig_ret = fbconfigs[i];
|
*fbconfig_ret = fbconfigs[i];
|
||||||
*can_mipmap_ret = mipmap;
|
*can_mipmap_ret = mipmap;
|
||||||
|
@ -36,12 +36,6 @@ check_flags (TestFlags flags,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & TEST_REQUIREMENT_OFFSCREEN &&
|
|
||||||
!cogl_has_feature (test_ctx, COGL_FEATURE_ID_OFFSCREEN))
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flags & TEST_REQUIREMENT_FENCE &&
|
if (flags & TEST_REQUIREMENT_FENCE &&
|
||||||
!cogl_has_feature (test_ctx, COGL_FEATURE_ID_FENCE))
|
!cogl_has_feature (test_ctx, COGL_FEATURE_ID_FENCE))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user