cogl: Pass Context where possible

Avoids using the macro & global variable

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3857>
This commit is contained in:
Bilal Elmoussaoui 2024-06-29 14:16:15 +02:00 committed by Marge Bot
parent 24f46448ce
commit 3fd7cdba09
22 changed files with 127 additions and 194 deletions

View File

@ -261,6 +261,7 @@ cogl_pango_glyph_cache_add_to_global_atlas (CoglPangoGlyphCache *cache,
static gboolean static gboolean
cogl_pango_glyph_cache_add_to_local_atlas (CoglPangoGlyphCache *cache, cogl_pango_glyph_cache_add_to_local_atlas (CoglPangoGlyphCache *cache,
CoglContext *context,
PangoFont *font, PangoFont *font,
PangoGlyph glyph, PangoGlyph glyph,
CoglPangoGlyphCacheValue *value) CoglPangoGlyphCacheValue *value)
@ -282,7 +283,8 @@ cogl_pango_glyph_cache_add_to_local_atlas (CoglPangoGlyphCache *cache,
/* If we couldn't find one then start a new atlas */ /* If we couldn't find one then start a new atlas */
if (atlas == NULL) if (atlas == NULL)
{ {
atlas = _cogl_atlas_new (COGL_PIXEL_FORMAT_A_8, atlas = _cogl_atlas_new (context,
COGL_PIXEL_FORMAT_A_8,
COGL_ATLAS_CLEAR_TEXTURE | COGL_ATLAS_CLEAR_TEXTURE |
COGL_ATLAS_DISABLE_MIGRATION, COGL_ATLAS_DISABLE_MIGRATION,
cogl_pango_glyph_cache_update_position_cb); cogl_pango_glyph_cache_update_position_cb);
@ -309,6 +311,7 @@ cogl_pango_glyph_cache_add_to_local_atlas (CoglPangoGlyphCache *cache,
CoglPangoGlyphCacheValue * CoglPangoGlyphCacheValue *
cogl_pango_glyph_cache_lookup (CoglPangoGlyphCache *cache, cogl_pango_glyph_cache_lookup (CoglPangoGlyphCache *cache,
CoglContext *context,
gboolean create, gboolean create,
PangoFont *font, PangoFont *font,
PangoGlyph glyph) PangoGlyph glyph)
@ -350,6 +353,7 @@ cogl_pango_glyph_cache_lookup (CoglPangoGlyphCache *cache,
value) && value) &&
/* If it fails try the local atlas */ /* If it fails try the local atlas */
!cogl_pango_glyph_cache_add_to_local_atlas (cache, !cogl_pango_glyph_cache_add_to_local_atlas (cache,
context,
font, font,
glyph, glyph,
value)) value))

View File

@ -75,6 +75,7 @@ cogl_pango_glyph_cache_free (CoglPangoGlyphCache *cache);
COGL_EXPORT CoglPangoGlyphCacheValue * COGL_EXPORT CoglPangoGlyphCacheValue *
cogl_pango_glyph_cache_lookup (CoglPangoGlyphCache *cache, cogl_pango_glyph_cache_lookup (CoglPangoGlyphCache *cache,
CoglContext *context,
gboolean create, gboolean create,
PangoFont *font, PangoFont *font,
PangoGlyph glyph); PangoGlyph glyph);

View File

@ -503,6 +503,7 @@ cogl_pango_renderer_get_cached_glyph (PangoRenderer *renderer,
&priv->no_mipmap_caches); &priv->no_mipmap_caches);
return cogl_pango_glyph_cache_lookup (caches->glyph_cache, return cogl_pango_glyph_cache_lookup (caches->glyph_cache,
priv->ctx,
create, font, glyph); create, font, glyph);
} }

View File

@ -50,8 +50,6 @@
#include <stdlib.h> #include <stdlib.h>
static GQuark atlas_private_key = 0;
G_DEFINE_FINAL_TYPE (CoglAtlasTexture, cogl_atlas_texture, COGL_TYPE_TEXTURE) G_DEFINE_FINAL_TYPE (CoglAtlasTexture, cogl_atlas_texture, COGL_TYPE_TEXTURE)
static void static void
@ -171,8 +169,6 @@ _cogl_atlas_texture_post_reorganize_cb (void *user_data)
{ {
CoglAtlas *atlas = user_data; CoglAtlas *atlas = user_data;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (atlas->map) if (atlas->map)
{ {
CoglAtlasTextureGetRectanglesData data; CoglAtlasTextureGetRectanglesData data;
@ -204,24 +200,13 @@ _cogl_atlas_texture_post_reorganize_cb (void *user_data)
} }
/* Notify any listeners that an atlas has changed */ /* Notify any listeners that an atlas has changed */
g_hook_list_invoke (&ctx->atlas_reorganize_callbacks, FALSE); g_hook_list_invoke (&atlas->context->atlas_reorganize_callbacks, FALSE);
}
static void
_cogl_atlas_texture_atlas_destroyed_cb (void *user_data)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
/* Remove the atlas from the global list */
ctx->atlases = g_slist_remove (ctx->atlases, user_data);
} }
static CoglAtlas * static CoglAtlas *
_cogl_atlas_texture_create_atlas (CoglContext *ctx) _cogl_atlas_texture_create_atlas (CoglContext *ctx)
{ {
atlas_private_key = g_quark_from_static_string ("-cogl-atlas-texture-create-key"); CoglAtlas *atlas = _cogl_atlas_new (ctx, COGL_PIXEL_FORMAT_RGBA_8888,
CoglAtlas *atlas = _cogl_atlas_new (COGL_PIXEL_FORMAT_RGBA_8888,
0, 0,
_cogl_atlas_texture_update_position_cb); _cogl_atlas_texture_update_position_cb);
@ -231,17 +216,6 @@ _cogl_atlas_texture_create_atlas (CoglContext *ctx)
atlas); atlas);
ctx->atlases = g_slist_prepend (ctx->atlases, atlas); ctx->atlases = g_slist_prepend (ctx->atlases, atlas);
/* Set some data on the atlas so we can get notification when it is
destroyed in order to remove it from the list. ctx->atlases
effectively holds a weak reference. We don't need a strong
reference because the atlas textures take a reference on the
atlas so it will stay alive */
g_object_set_qdata_full (G_OBJECT (atlas),
atlas_private_key,
atlas,
_cogl_atlas_texture_atlas_destroyed_cb);
return atlas; return atlas;
} }

View File

@ -54,8 +54,11 @@ cogl_atlas_dispose (GObject *object)
COGL_NOTE (ATLAS, "%p: Atlas destroyed", atlas); COGL_NOTE (ATLAS, "%p: Atlas destroyed", atlas);
if (atlas->texture) /* Remove the atlas from the global list */
g_object_unref (atlas->texture); atlas->context->atlases = g_slist_remove (atlas->context->atlases, atlas);
g_clear_object (&atlas->texture);
g_clear_object (&atlas->context);
if (atlas->map) if (atlas->map)
_cogl_rectangle_map_free (atlas->map); _cogl_rectangle_map_free (atlas->map);
@ -79,7 +82,8 @@ cogl_atlas_class_init (CoglAtlasClass *class)
} }
CoglAtlas * CoglAtlas *
_cogl_atlas_new (CoglPixelFormat texture_format, _cogl_atlas_new (CoglContext *context,
CoglPixelFormat texture_format,
CoglAtlasFlags flags, CoglAtlasFlags flags,
CoglAtlasUpdatePositionCallback update_position_cb) CoglAtlasUpdatePositionCallback update_position_cb)
{ {
@ -88,6 +92,7 @@ _cogl_atlas_new (CoglPixelFormat texture_format,
atlas->update_position_cb = update_position_cb; atlas->update_position_cb = update_position_cb;
atlas->map = NULL; atlas->map = NULL;
atlas->texture = NULL; atlas->texture = NULL;
atlas->context = g_object_ref (context);
atlas->flags = flags; atlas->flags = flags;
atlas->texture_format = texture_format; atlas->texture_format = texture_format;
g_hook_list_init (&atlas->pre_reorganize_callbacks, sizeof (GHook)); g_hook_list_init (&atlas->pre_reorganize_callbacks, sizeof (GHook));
@ -183,7 +188,8 @@ _cogl_atlas_get_next_size (unsigned int *map_width,
} }
static void static void
_cogl_atlas_get_initial_size (CoglPixelFormat format, _cogl_atlas_get_initial_size (CoglContext *ctx,
CoglPixelFormat format,
unsigned int *map_width, unsigned int *map_width,
unsigned int *map_height) unsigned int *map_height)
{ {
@ -192,8 +198,6 @@ _cogl_atlas_get_initial_size (CoglPixelFormat format,
GLenum gl_format; GLenum gl_format;
GLenum gl_type; GLenum gl_type;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
g_return_if_fail (cogl_pixel_format_get_n_planes (format) == 1); g_return_if_fail (cogl_pixel_format_get_n_planes (format) == 1);
ctx->driver_vtable->pixel_format_to_gl (ctx, ctx->driver_vtable->pixel_format_to_gl (ctx,
@ -228,7 +232,8 @@ _cogl_atlas_get_initial_size (CoglPixelFormat format,
} }
static CoglRectangleMap * static CoglRectangleMap *
_cogl_atlas_create_map (CoglPixelFormat format, _cogl_atlas_create_map (CoglContext *ctx,
CoglPixelFormat format,
unsigned int map_width, unsigned int map_width,
unsigned int map_height, unsigned int map_height,
unsigned int n_textures, unsigned int n_textures,
@ -238,8 +243,6 @@ _cogl_atlas_create_map (CoglPixelFormat format,
GLenum gl_format; GLenum gl_format;
GLenum gl_type; GLenum gl_type;
_COGL_GET_CONTEXT (ctx, NULL);
ctx->driver_vtable->pixel_format_to_gl (ctx, ctx->driver_vtable->pixel_format_to_gl (ctx,
format, format,
&gl_intformat, &gl_intformat,
@ -299,8 +302,6 @@ _cogl_atlas_create_texture (CoglAtlas *atlas,
CoglTexture *tex; CoglTexture *tex;
GError *ignore_error = NULL; GError *ignore_error = NULL;
_COGL_GET_CONTEXT (ctx, NULL);
g_return_val_if_fail ( g_return_val_if_fail (
cogl_pixel_format_get_n_planes (atlas->texture_format) == 1, cogl_pixel_format_get_n_planes (atlas->texture_format) == 1,
NULL); NULL);
@ -314,7 +315,7 @@ _cogl_atlas_create_texture (CoglAtlas *atlas,
/* Create a buffer of zeroes to initially clear the texture */ /* Create a buffer of zeroes to initially clear the texture */
clear_data = g_malloc0 (width * height * bpp); clear_data = g_malloc0 (width * height * bpp);
clear_bmp = cogl_bitmap_new_for_data (ctx, clear_bmp = cogl_bitmap_new_for_data (atlas->context,
width, width,
height, height,
atlas->texture_format, atlas->texture_format,
@ -339,7 +340,7 @@ _cogl_atlas_create_texture (CoglAtlas *atlas,
} }
else else
{ {
tex = cogl_texture_2d_new_with_size (ctx, width, height); tex = cogl_texture_2d_new_with_size (atlas->context, width, height);
_cogl_texture_set_internal_format (tex, _cogl_texture_set_internal_format (tex,
atlas->texture_format); atlas->texture_format);
@ -469,10 +470,12 @@ _cogl_atlas_reserve_space (CoglAtlas *atlas,
_cogl_atlas_get_next_size (&map_width, &map_height); _cogl_atlas_get_next_size (&map_width, &map_height);
} }
else else
_cogl_atlas_get_initial_size (atlas->texture_format, _cogl_atlas_get_initial_size (atlas->context,
atlas->texture_format,
&map_width, &map_height); &map_width, &map_height);
new_map = _cogl_atlas_create_map (atlas->texture_format, new_map = _cogl_atlas_create_map (atlas->context,
atlas->texture_format,
map_width, map_height, map_width, map_height,
data.n_textures, data.textures); data.n_textures, data.textures);
@ -623,10 +626,8 @@ _cogl_atlas_copy_rectangle (CoglAtlas *atlas,
CoglBlitData blit_data; CoglBlitData blit_data;
GError *ignore_error = NULL; GError *ignore_error = NULL;
_COGL_GET_CONTEXT (ctx, NULL);
/* Create a new texture at the right size */ /* Create a new texture at the right size */
tex = create_migration_texture (ctx, width, height, internal_format); tex = create_migration_texture (atlas->context, width, height, internal_format);
if (!cogl_texture_allocate (tex, &ignore_error)) if (!cogl_texture_allocate (tex, &ignore_error))
{ {
g_error_free (ignore_error); g_error_free (ignore_error);

View File

@ -58,6 +58,7 @@ struct _CoglAtlas
GObject parent_instance; GObject parent_instance;
CoglRectangleMap *map; CoglRectangleMap *map;
CoglContext *context;
CoglTexture *texture; CoglTexture *texture;
CoglPixelFormat texture_format; CoglPixelFormat texture_format;
@ -70,8 +71,9 @@ struct _CoglAtlas
}; };
COGL_EXPORT CoglAtlas * COGL_EXPORT CoglAtlas *
_cogl_atlas_new (CoglPixelFormat texture_format, _cogl_atlas_new (CoglContext *context,
CoglAtlasFlags flags, CoglPixelFormat texture_format,
CoglAtlasFlags flags,
CoglAtlasUpdatePositionCallback update_position_cb); CoglAtlasUpdatePositionCallback update_position_cb);
COGL_EXPORT gboolean COGL_EXPORT gboolean

View File

@ -214,8 +214,6 @@ validate_blend_statements (CoglBlendStringStatement *statements,
const char *error_string; const char *error_string;
CoglBlendStringError detail = COGL_BLEND_STRING_ERROR_INVALID_ERROR; CoglBlendStringError detail = COGL_BLEND_STRING_ERROR_INVALID_ERROR;
_COGL_GET_CONTEXT (ctx, 0);
for (i = 0; i < n_statements; i++) for (i = 0; i < n_statements; i++)
for (j = 0; j < statements[i].function->argc; j++) for (j = 0; j < statements[i].function->argc; j++)
{ {

View File

@ -303,8 +303,7 @@ cogl_pipeline_set_layer_wrap_mode_s (CoglPipeline *pipeline,
CoglSamplerCacheWrapMode internal_mode = CoglSamplerCacheWrapMode internal_mode =
public_to_internal_wrap_mode (mode); public_to_internal_wrap_mode (mode);
const CoglSamplerCacheEntry *sampler_state; const CoglSamplerCacheEntry *sampler_state;
CoglContext *ctx = pipeline->context;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
g_return_if_fail (COGL_IS_PIPELINE (pipeline)); g_return_if_fail (COGL_IS_PIPELINE (pipeline));
@ -343,11 +342,12 @@ cogl_pipeline_set_layer_wrap_mode_t (CoglPipeline *pipeline,
CoglSamplerCacheWrapMode internal_mode = CoglSamplerCacheWrapMode internal_mode =
public_to_internal_wrap_mode (mode); public_to_internal_wrap_mode (mode);
const CoglSamplerCacheEntry *sampler_state; const CoglSamplerCacheEntry *sampler_state;
CoglContext *ctx;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
g_return_if_fail (COGL_IS_PIPELINE (pipeline)); g_return_if_fail (COGL_IS_PIPELINE (pipeline));
ctx = pipeline->context;
/* Note: this will ensure that the layer exists, creating one if it /* Note: this will ensure that the layer exists, creating one if it
* doesn't already. * doesn't already.
* *
@ -383,11 +383,11 @@ cogl_pipeline_set_layer_wrap_mode (CoglPipeline *pipeline,
CoglSamplerCacheWrapMode internal_mode = CoglSamplerCacheWrapMode internal_mode =
public_to_internal_wrap_mode (mode); public_to_internal_wrap_mode (mode);
const CoglSamplerCacheEntry *sampler_state; const CoglSamplerCacheEntry *sampler_state;
CoglContext *ctx;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
g_return_if_fail (COGL_IS_PIPELINE (pipeline)); g_return_if_fail (COGL_IS_PIPELINE (pipeline));
ctx = pipeline->context;
/* Note: this will ensure that the layer exists, creating one if it /* Note: this will ensure that the layer exists, creating one if it
* doesn't already. * doesn't already.
* *
@ -510,8 +510,6 @@ cogl_pipeline_set_layer_point_sprite_coords_enabled (CoglPipeline *pipeline,
CoglPipelineLayer *new; CoglPipelineLayer *new;
CoglPipelineLayer *authority; CoglPipelineLayer *authority;
_COGL_GET_CONTEXT (ctx, FALSE);
g_return_val_if_fail (COGL_IS_PIPELINE (pipeline), FALSE); g_return_val_if_fail (COGL_IS_PIPELINE (pipeline), FALSE);
/* Note: this will ensure that the layer exists, creating one if it /* Note: this will ensure that the layer exists, creating one if it
@ -1268,14 +1266,14 @@ cogl_pipeline_set_layer_filters (CoglPipeline *pipeline,
CoglPipelineLayer *layer; CoglPipelineLayer *layer;
CoglPipelineLayer *authority; CoglPipelineLayer *authority;
const CoglSamplerCacheEntry *sampler_state; const CoglSamplerCacheEntry *sampler_state;
CoglContext *ctx;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
g_return_if_fail (COGL_IS_PIPELINE (pipeline)); g_return_if_fail (COGL_IS_PIPELINE (pipeline));
g_return_if_fail (mag_filter == COGL_PIPELINE_FILTER_NEAREST || g_return_if_fail (mag_filter == COGL_PIPELINE_FILTER_NEAREST ||
mag_filter == COGL_PIPELINE_FILTER_LINEAR); mag_filter == COGL_PIPELINE_FILTER_LINEAR);
ctx = pipeline->context;
/* Note: this will ensure that the layer exists, creating one if it /* Note: this will ensure that the layer exists, creating one if it
* doesn't already. * doesn't already.
* *

View File

@ -86,8 +86,6 @@ _cogl_pipeline_blend_state_equal (CoglPipeline *authority0,
CoglPipelineBlendState *blend_state0 = &authority0->big_state->blend_state; CoglPipelineBlendState *blend_state0 = &authority0->big_state->blend_state;
CoglPipelineBlendState *blend_state1 = &authority1->big_state->blend_state; CoglPipelineBlendState *blend_state1 = &authority1->big_state->blend_state;
_COGL_GET_CONTEXT (ctx, FALSE);
if (blend_state0->blend_equation_rgb != blend_state1->blend_equation_rgb) if (blend_state0->blend_equation_rgb != blend_state1->blend_equation_rgb)
return FALSE; return FALSE;
@ -217,8 +215,7 @@ _cogl_pipeline_get_all_uniform_values (CoglPipeline *pipeline,
const CoglBoxedValue **values) const CoglBoxedValue **values)
{ {
GetUniformsClosure data; GetUniformsClosure data;
CoglContext *ctx = pipeline->context;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
memset (values, 0, memset (values, 0,
sizeof (const CoglBoxedValue *) * ctx->n_uniform_names); sizeof (const CoglBoxedValue *) * ctx->n_uniform_names);
@ -252,8 +249,7 @@ _cogl_pipeline_uniforms_state_equal (CoglPipeline *authority0,
const CoglBoxedValue **values0, **values1; const CoglBoxedValue **values0, **values1;
int n_longs; int n_longs;
int i; int i;
CoglContext *ctx = authority0->context;
_COGL_GET_CONTEXT (ctx, FALSE);
if (authority0 == authority1) if (authority0 == authority1)
return TRUE; return TRUE;
@ -556,8 +552,6 @@ cogl_pipeline_set_blend (CoglPipeline *pipeline,
int count; int count;
CoglPipelineBlendState *blend_state; CoglPipelineBlendState *blend_state;
_COGL_GET_CONTEXT (ctx, FALSE);
g_return_val_if_fail (COGL_IS_PIPELINE (pipeline), FALSE); g_return_val_if_fail (COGL_IS_PIPELINE (pipeline), FALSE);
count = count =
@ -633,8 +627,6 @@ cogl_pipeline_set_blend_constant (CoglPipeline *pipeline,
CoglPipeline *authority; CoglPipeline *authority;
CoglPipelineBlendState *blend_state; CoglPipelineBlendState *blend_state;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
g_return_if_fail (COGL_IS_PIPELINE (pipeline)); g_return_if_fail (COGL_IS_PIPELINE (pipeline));
authority = _cogl_pipeline_get_authority (pipeline, state); authority = _cogl_pipeline_get_authority (pipeline, state);
@ -740,8 +732,6 @@ cogl_pipeline_set_depth_state (CoglPipeline *pipeline,
CoglPipeline *authority; CoglPipeline *authority;
CoglDepthState *orig_state; CoglDepthState *orig_state;
_COGL_GET_CONTEXT (ctx, FALSE);
g_return_val_if_fail (COGL_IS_PIPELINE (pipeline), FALSE); g_return_val_if_fail (COGL_IS_PIPELINE (pipeline), FALSE);
g_return_val_if_fail (depth_state->magic == COGL_DEPTH_STATE_MAGIC, FALSE); g_return_val_if_fail (depth_state->magic == COGL_DEPTH_STATE_MAGIC, FALSE);
@ -949,7 +939,6 @@ cogl_pipeline_set_per_vertex_point_size (CoglPipeline *pipeline,
CoglPipelineState state = COGL_PIPELINE_STATE_PER_VERTEX_POINT_SIZE; CoglPipelineState state = COGL_PIPELINE_STATE_PER_VERTEX_POINT_SIZE;
CoglPipeline *authority; CoglPipeline *authority;
_COGL_GET_CONTEXT (ctx, FALSE);
g_return_val_if_fail (COGL_IS_PIPELINE (pipeline), FALSE); g_return_val_if_fail (COGL_IS_PIPELINE (pipeline), FALSE);
authority = _cogl_pipeline_get_authority (pipeline, state); authority = _cogl_pipeline_get_authority (pipeline, state);
@ -996,11 +985,9 @@ _cogl_pipeline_override_uniform (CoglPipeline *pipeline,
CoglPipelineUniformsState *uniforms_state; CoglPipelineUniformsState *uniforms_state;
int override_index; int override_index;
_COGL_GET_CONTEXT (ctx, NULL);
g_return_val_if_fail (COGL_IS_PIPELINE (pipeline), NULL); g_return_val_if_fail (COGL_IS_PIPELINE (pipeline), NULL);
g_return_val_if_fail (location >= 0, NULL); g_return_val_if_fail (location >= 0, NULL);
g_return_val_if_fail (location < ctx->n_uniform_names, NULL); g_return_val_if_fail (location < pipeline->context->n_uniform_names, NULL);
/* - Flush journal primitives referencing the current state. /* - Flush journal primitives referencing the current state.
* - Make sure the pipeline has no dependants so it may be modified. * - Make sure the pipeline has no dependants so it may be modified.
@ -1271,8 +1258,6 @@ _cogl_pipeline_hash_blend_state (CoglPipeline *authority,
CoglPipelineBlendState *blend_state = &authority->big_state->blend_state; CoglPipelineBlendState *blend_state = &authority->big_state->blend_state;
unsigned int hash; unsigned int hash;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (!authority->real_blend_enable) if (!authority->real_blend_enable)
return; return;

View File

@ -71,9 +71,10 @@ struct _CoglProgramUniform
the last time it was flushed. This will cause it to requery all of the last time it was flushed. This will cause it to requery all of
the locations and assume that all uniforms are dirty */ the locations and assume that all uniforms are dirty */
void void
_cogl_program_flush_uniforms (CoglProgram *program, _cogl_program_flush_uniforms (CoglContext *ctx,
GLuint gl_program, CoglProgram *program,
gboolean gl_program_changed); GLuint gl_program,
gboolean gl_program_changed);
gboolean gboolean
_cogl_program_has_fragment_shader (CoglProgram *self); _cogl_program_has_fragment_shader (CoglProgram *self);

View File

@ -46,8 +46,6 @@ cogl_program_dispose (GObject *object)
CoglProgram *program = COGL_PROGRAM (object); CoglProgram *program = COGL_PROGRAM (object);
int i; int i;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
/* Unref all of the attached shaders and destroy the list */ /* Unref all of the attached shaders and destroy the list */
g_slist_free_full (program->attached_shaders, g_object_unref); g_slist_free_full (program->attached_shaders, g_object_unref);
@ -105,8 +103,6 @@ void
cogl_program_attach_shader (CoglProgram *program, cogl_program_attach_shader (CoglProgram *program,
CoglShader *shader) CoglShader *shader)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (!COGL_IS_PROGRAM (program) || !COGL_IS_SHADER (shader)) if (!COGL_IS_PROGRAM (program) || !COGL_IS_SHADER (shader))
return; return;
@ -247,15 +243,14 @@ cogl_program_set_uniform_matrix (CoglProgram *program,
} }
void void
_cogl_program_flush_uniforms (CoglProgram *program, _cogl_program_flush_uniforms (CoglContext *ctx,
CoglProgram *program,
GLuint gl_program, GLuint gl_program,
gboolean gl_program_changed) gboolean gl_program_changed)
{ {
CoglProgramUniform *uniform; CoglProgramUniform *uniform;
int i; int i;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
for (i = 0; i < program->custom_uniforms->len; i++) for (i = 0; i < program->custom_uniforms->len; i++)
{ {
uniform = &g_array_index (program->custom_uniforms, uniform = &g_array_index (program->custom_uniforms,

View File

@ -45,10 +45,10 @@ static void
cogl_shader_dispose (GObject *object) cogl_shader_dispose (GObject *object)
{ {
CoglShader *shader = COGL_SHADER (object); CoglShader *shader = COGL_SHADER (object);
CoglContext *ctx = shader->compilation_pipeline->context;
/* Frees shader resources but its handle is not /* Frees shader resources but its handle is not
released! Do that separately before this! */ released! Do that separately before this! */
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (shader->gl_handle) if (shader->gl_handle)
GE (ctx, glDeleteShader (shader->gl_handle)); GE (ctx, glDeleteShader (shader->gl_handle));
@ -74,8 +74,6 @@ cogl_create_shader (CoglShaderType type)
{ {
CoglShader *shader; CoglShader *shader;
_COGL_GET_CONTEXT (ctx, NULL);
switch (type) switch (type)
{ {
case COGL_SHADER_TYPE_VERTEX: case COGL_SHADER_TYPE_VERTEX:
@ -101,8 +99,6 @@ cogl_shader_source (CoglShader *self,
{ {
g_return_if_fail (COGL_IS_SHADER (self)); g_return_if_fail (COGL_IS_SHADER (self));
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
self->source = g_strdup (source); self->source = g_strdup (source);
} }
@ -111,7 +107,5 @@ cogl_shader_get_shader_type (CoglShader *self)
{ {
g_return_val_if_fail (COGL_IS_SHADER (self), COGL_SHADER_TYPE_VERTEX); g_return_val_if_fail (COGL_IS_SHADER (self), COGL_SHADER_TYPE_VERTEX);
_COGL_GET_CONTEXT (ctx, COGL_SHADER_TYPE_VERTEX);
return self->type; return self->type;
} }

View File

@ -149,8 +149,7 @@ destroy_shader_state (void *user_data)
{ {
CoglPipelineFragendShaderStateCache *cache = user_data; CoglPipelineFragendShaderStateCache *cache = user_data;
CoglPipelineFragendShaderState *shader_state = cache->shader_state; CoglPipelineFragendShaderState *shader_state = cache->shader_state;
CoglContext *ctx = cache->instance->context;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (shader_state->cache_entry && if (shader_state->cache_entry &&
shader_state->cache_entry->pipeline != cache->instance) shader_state->cache_entry->pipeline != cache->instance)
@ -297,10 +296,9 @@ _cogl_pipeline_fragend_glsl_start (CoglPipeline *pipeline,
CoglPipeline *authority; CoglPipeline *authority;
CoglPipelineCacheEntry *cache_entry = NULL; CoglPipelineCacheEntry *cache_entry = NULL;
CoglProgram *user_program = cogl_pipeline_get_user_program (pipeline); CoglProgram *user_program = cogl_pipeline_get_user_program (pipeline);
CoglContext *ctx = pipeline->context;
int i; int i;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
/* Now lookup our glsl backend private state */ /* Now lookup our glsl backend private state */
shader_state = get_shader_state (pipeline); shader_state = get_shader_state (pipeline);
@ -426,8 +424,6 @@ ensure_texture_lookup_generated (CoglPipelineFragendShaderState *shader_state,
int unit_index = _cogl_pipeline_layer_get_unit_index (layer); int unit_index = _cogl_pipeline_layer_get_unit_index (layer);
CoglPipelineSnippetData snippet_data; CoglPipelineSnippetData snippet_data;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (shader_state->unit_state[unit_index].sampled) if (shader_state->unit_state[unit_index].sampled)
return; return;
@ -990,8 +986,7 @@ _cogl_pipeline_fragend_glsl_end (CoglPipeline *pipeline,
unsigned long pipelines_difference) unsigned long pipelines_difference)
{ {
CoglPipelineFragendShaderState *shader_state = get_shader_state (pipeline); CoglPipelineFragendShaderState *shader_state = get_shader_state (pipeline);
CoglContext *ctx = pipeline->context;
_COGL_GET_CONTEXT (ctx, FALSE);
if (shader_state->source) if (shader_state->source)
{ {
@ -1092,7 +1087,7 @@ _cogl_pipeline_fragend_glsl_pre_change_notify (CoglPipeline *pipeline,
CoglPipelineState change, CoglPipelineState change,
const CoglColor *new_color) const CoglColor *new_color)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); CoglContext *ctx = pipeline->context;
if ((change & _cogl_pipeline_get_state_for_fragment_codegen (ctx))) if ((change & _cogl_pipeline_get_state_for_fragment_codegen (ctx)))
dirty_shader_state (pipeline); dirty_shader_state (pipeline);
@ -1112,7 +1107,7 @@ _cogl_pipeline_fragend_glsl_layer_pre_change_notify (
CoglPipelineLayer *layer, CoglPipelineLayer *layer,
CoglPipelineLayerState change) CoglPipelineLayerState change)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); CoglContext *ctx = owner->context;
if ((change & _cogl_pipeline_get_layer_state_for_fragment_codegen (ctx))) if ((change & _cogl_pipeline_get_layer_state_for_fragment_codegen (ctx)))
{ {

View File

@ -123,20 +123,24 @@ typedef struct _CoglTextureUnit
} CoglTextureUnit; } CoglTextureUnit;
CoglTextureUnit * CoglTextureUnit *
_cogl_get_texture_unit (int index_); _cogl_get_texture_unit (CoglContext *ctx,
int index_);
void void
_cogl_destroy_texture_units (CoglContext *ctx); _cogl_destroy_texture_units (CoglContext *ctx);
void void
_cogl_set_active_texture_unit (int unit_index); _cogl_set_active_texture_unit (CoglContext *ctx,
int unit_index);
void void
_cogl_bind_gl_texture_transient (GLenum gl_target, _cogl_bind_gl_texture_transient (CoglContext *ctx,
GLuint gl_texture); GLenum gl_target,
GLuint gl_texture);
void void
_cogl_delete_gl_texture (GLuint gl_texture); _cogl_delete_gl_texture (CoglContext *ctx,
GLuint gl_texture);
void void
_cogl_pipeline_flush_gl_state (CoglContext *context, _cogl_pipeline_flush_gl_state (CoglContext *context,

View File

@ -89,9 +89,9 @@ texture_unit_free (CoglTextureUnit *unit)
} }
CoglTextureUnit * CoglTextureUnit *
_cogl_get_texture_unit (int index_) _cogl_get_texture_unit (CoglContext *ctx,
int index_)
{ {
_COGL_GET_CONTEXT (ctx, NULL);
CoglGLContext *glctx = _cogl_driver_gl_context(ctx); CoglGLContext *glctx = _cogl_driver_gl_context(ctx);
if (glctx->texture_units->len < (index_ + 1)) if (glctx->texture_units->len < (index_ + 1))
@ -128,9 +128,9 @@ _cogl_destroy_texture_units (CoglContext *ctx)
} }
void void
_cogl_set_active_texture_unit (int unit_index) _cogl_set_active_texture_unit (CoglContext *ctx,
int unit_index)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
CoglGLContext *glctx = _cogl_driver_gl_context(ctx); CoglGLContext *glctx = _cogl_driver_gl_context(ctx);
if (glctx->active_texture_unit != unit_index) if (glctx->active_texture_unit != unit_index)
@ -161,13 +161,12 @@ _cogl_set_active_texture_unit (int unit_index)
* CoglTextureUnit. * CoglTextureUnit.
*/ */
void void
_cogl_bind_gl_texture_transient (GLenum gl_target, _cogl_bind_gl_texture_transient (CoglContext *ctx,
GLuint gl_texture) GLenum gl_target,
GLuint gl_texture)
{ {
CoglTextureUnit *unit; CoglTextureUnit *unit;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
/* We choose to always make texture unit 1 active for transient /* We choose to always make texture unit 1 active for transient
* binds so that in the common case where multitexturing isn't used * binds so that in the common case where multitexturing isn't used
* we can simply ignore the state of this texture unit. Notably we * we can simply ignore the state of this texture unit. Notably we
@ -175,8 +174,8 @@ _cogl_bind_gl_texture_transient (GLenum gl_target,
* in case the driver doesn't have a sparse data structure for * in case the driver doesn't have a sparse data structure for
* texture units. * texture units.
*/ */
_cogl_set_active_texture_unit (1); _cogl_set_active_texture_unit (ctx, 1);
unit = _cogl_get_texture_unit (1); unit = _cogl_get_texture_unit (ctx, 1);
if (unit->gl_texture == gl_texture && !unit->dirty_gl_texture) if (unit->gl_texture == gl_texture && !unit->dirty_gl_texture)
return; return;
@ -187,11 +186,11 @@ _cogl_bind_gl_texture_transient (GLenum gl_target,
} }
void void
_cogl_delete_gl_texture (GLuint gl_texture) _cogl_delete_gl_texture (CoglContext *ctx,
GLuint gl_texture)
{ {
int i; int i;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
CoglGLContext *glctx = _cogl_driver_gl_context(ctx); CoglGLContext *glctx = _cogl_driver_gl_context(ctx);
for (i = 0; i < glctx->texture_units->len; i++) for (i = 0; i < glctx->texture_units->len; i++)
@ -220,7 +219,7 @@ _cogl_pipeline_texture_storage_change_notify (CoglTexture *texture)
{ {
int i; int i;
_COGL_GET_CONTEXT (ctx, NO_RETVAL); CoglContext *ctx = cogl_texture_get_context (texture);
CoglGLContext *glctx = _cogl_driver_gl_context(ctx); CoglGLContext *glctx = _cogl_driver_gl_context(ctx);
for (i = 0; i < glctx->texture_units->len; i++) for (i = 0; i < glctx->texture_units->len; i++)
@ -306,7 +305,7 @@ _cogl_pipeline_flush_color_blend_alpha_depth_state (
unsigned long pipelines_difference, unsigned long pipelines_difference,
gboolean with_color_attrib) gboolean with_color_attrib)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); CoglContext *ctx = pipeline->context;
if (pipelines_difference & COGL_PIPELINE_STATE_BLEND) if (pipelines_difference & COGL_PIPELINE_STATE_BLEND)
{ {
@ -410,10 +409,8 @@ _cogl_pipeline_flush_color_blend_alpha_depth_state (
} }
static int static int
get_max_activateable_texture_units (void) get_max_activateable_texture_units (CoglContext *ctx)
{ {
_COGL_GET_CONTEXT (ctx, 0);
if (G_UNLIKELY (ctx->max_activateable_texture_units == -1)) if (G_UNLIKELY (ctx->max_activateable_texture_units == -1))
{ {
GLint values[3]; GLint values[3];
@ -469,17 +466,16 @@ static gboolean
flush_layers_common_gl_state_cb (CoglPipelineLayer *layer, void *user_data) flush_layers_common_gl_state_cb (CoglPipelineLayer *layer, void *user_data)
{ {
CoglPipelineFlushLayerState *flush_state = user_data; CoglPipelineFlushLayerState *flush_state = user_data;
int unit_index = flush_state->i; CoglContext *ctx = layer->owner->context;
CoglTextureUnit *unit = _cogl_get_texture_unit (unit_index); int unit_index = flush_state->i;
unsigned long layers_difference = CoglTextureUnit *unit = _cogl_get_texture_unit (ctx, unit_index);
unsigned long layers_difference =
flush_state->layer_differences[unit_index]; flush_state->layer_differences[unit_index];
_COGL_GET_CONTEXT (ctx, FALSE);
/* There may not be enough texture units so we can bail out if /* There may not be enough texture units so we can bail out if
* that's the case... * that's the case...
*/ */
if (G_UNLIKELY (unit_index >= get_max_activateable_texture_units ())) if (G_UNLIKELY (unit_index >= get_max_activateable_texture_units (ctx)))
{ {
static gboolean shown_warning = FALSE; static gboolean shown_warning = FALSE;
@ -505,7 +501,7 @@ flush_layers_common_gl_state_cb (CoglPipelineLayer *layer, void *user_data)
&gl_texture, &gl_texture,
&gl_target); &gl_target);
_cogl_set_active_texture_unit (unit_index); _cogl_set_active_texture_unit (ctx, unit_index);
/* NB: There are several Cogl components and some code in /* NB: There are several Cogl components and some code in
* Clutter that will temporarily bind arbitrary GL textures to * Clutter that will temporarily bind arbitrary GL textures to
@ -579,8 +575,6 @@ _cogl_pipeline_flush_common_gl_state (CoglPipeline *pipeline,
{ {
CoglPipelineFlushLayerState state; CoglPipelineFlushLayerState state;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
_cogl_pipeline_flush_color_blend_alpha_depth_state (pipeline, _cogl_pipeline_flush_color_blend_alpha_depth_state (pipeline,
pipelines_difference, pipelines_difference,
with_color_attrib); with_color_attrib);
@ -706,11 +700,10 @@ _cogl_sampler_gl_free (CoglContext *context, CoglSamplerCacheEntry *entry)
* state. * state.
*/ */
static void static void
foreach_texture_unit_update_filter_and_wrap_modes (void) foreach_texture_unit_update_filter_and_wrap_modes (CoglContext *ctx)
{ {
int i; int i;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
CoglGLContext *glctx = _cogl_driver_gl_context(ctx); CoglGLContext *glctx = _cogl_driver_gl_context(ctx);
for (i = 0; i < glctx->texture_units->len; i++) for (i = 0; i < glctx->texture_units->len; i++)
@ -746,7 +739,8 @@ static gboolean
compare_layer_differences_cb (CoglPipelineLayer *layer, void *user_data) compare_layer_differences_cb (CoglPipelineLayer *layer, void *user_data)
{ {
CoglPipelineCompareLayersState *state = user_data; CoglPipelineCompareLayersState *state = user_data;
CoglTextureUnit *unit = _cogl_get_texture_unit (state->i); CoglContext *ctx = layer->owner->context;
CoglTextureUnit *unit = _cogl_get_texture_unit (ctx, state->i);
if (unit->layer == layer) if (unit->layer == layer)
state->layer_differences[state->i] = unit->layer_changes_since_flush; state->layer_differences[state->i] = unit->layer_changes_since_flush;
@ -1137,7 +1131,7 @@ done:
/* Handle the fact that OpenGL associates texture filter and wrap /* Handle the fact that OpenGL associates texture filter and wrap
* modes with the texture objects not the texture units... */ * modes with the texture objects not the texture units... */
if (!_cogl_has_private_feature (ctx, COGL_PRIVATE_FEATURE_SAMPLER_OBJECTS)) if (!_cogl_has_private_feature (ctx, COGL_PRIVATE_FEATURE_SAMPLER_OBJECTS))
foreach_texture_unit_update_filter_and_wrap_modes (); foreach_texture_unit_update_filter_and_wrap_modes (ctx);
/* If this pipeline has more than one layer then we always need /* If this pipeline has more than one layer then we always need
* to make sure we rebind the texture for unit 1. * to make sure we rebind the texture for unit 1.
@ -1147,10 +1141,10 @@ done:
* object parameters. cogl-pipeline.c (See * object parameters. cogl-pipeline.c (See
* _cogl_bind_gl_texture_transient) * _cogl_bind_gl_texture_transient)
*/ */
unit1 = _cogl_get_texture_unit (1); unit1 = _cogl_get_texture_unit (ctx, 1);
if (cogl_pipeline_get_n_layers (pipeline) > 1 && unit1->dirty_gl_texture) if (cogl_pipeline_get_n_layers (pipeline) > 1 && unit1->dirty_gl_texture)
{ {
_cogl_set_active_texture_unit (1); _cogl_set_active_texture_unit (ctx, 1);
GE (ctx, glBindTexture (unit1->gl_target, unit1->gl_texture)); GE (ctx, glBindTexture (unit1->gl_target, unit1->gl_texture));
unit1->dirty_gl_texture = FALSE; unit1->dirty_gl_texture = FALSE;
} }

View File

@ -188,8 +188,7 @@ _cogl_pipeline_progend_glsl_get_attrib_location (CoglPipeline *pipeline,
{ {
CoglPipelineProgramState *program_state = get_program_state (pipeline); CoglPipelineProgramState *program_state = get_program_state (pipeline);
int *locations; int *locations;
CoglContext *ctx = pipeline->context;
_COGL_GET_CONTEXT (ctx, -1);
g_return_val_if_fail (program_state != NULL, -1); g_return_val_if_fail (program_state != NULL, -1);
g_return_val_if_fail (program_state->program != 0, -1); g_return_val_if_fail (program_state->program != 0, -1);
@ -268,8 +267,7 @@ destroy_program_state (void *user_data)
{ {
CoglPipelineProgramStateCache *cache = user_data; CoglPipelineProgramStateCache *cache = user_data;
CoglPipelineProgramState *program_state = cache->program_state; CoglPipelineProgramState *program_state = cache->program_state;
CoglContext *ctx = cache->instance->context;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
/* If the program state was last used for this pipeline then clear /* If the program state was last used for this pipeline then clear
it so that if same address gets used again for a new pipeline it so that if same address gets used again for a new pipeline
@ -338,12 +336,11 @@ dirty_program_state (CoglPipeline *pipeline)
} }
static void static void
link_program (GLint gl_program) link_program (CoglContext *ctx,
GLint gl_program)
{ {
GLint link_status; GLint link_status;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
GE( ctx, glLinkProgram (gl_program) ); GE( ctx, glLinkProgram (gl_program) );
GE( ctx, glGetProgramiv (gl_program, GL_LINK_STATUS, &link_status) ); GE( ctx, glGetProgramiv (gl_program, GL_LINK_STATUS, &link_status) );
@ -385,8 +382,7 @@ get_uniform_cb (CoglPipeline *pipeline,
CoglPipelineProgramState *program_state = state->program_state; CoglPipelineProgramState *program_state = state->program_state;
UnitState *unit_state = &program_state->unit_state[state->unit]; UnitState *unit_state = &program_state->unit_state[state->unit];
GLint uniform_location; GLint uniform_location;
CoglContext *ctx = pipeline->context;
_COGL_GET_CONTEXT (ctx, FALSE);
/* We can reuse the source buffer to create the uniform name because /* We can reuse the source buffer to create the uniform name because
the program has now been linked */ the program has now been linked */
@ -438,8 +434,7 @@ update_constants_cb (CoglPipeline *pipeline,
UpdateUniformsState *state = user_data; UpdateUniformsState *state = user_data;
CoglPipelineProgramState *program_state = state->program_state; CoglPipelineProgramState *program_state = state->program_state;
UnitState *unit_state = &program_state->unit_state[state->unit++]; UnitState *unit_state = &program_state->unit_state[state->unit++];
CoglContext *ctx = pipeline->context;
_COGL_GET_CONTEXT (ctx, FALSE);
if (unit_state->combine_constant_uniform != -1 && if (unit_state->combine_constant_uniform != -1 &&
(state->update_all || unit_state->dirty_combine_constant)) (state->update_all || unit_state->dirty_combine_constant))
@ -569,8 +564,7 @@ _cogl_pipeline_progend_glsl_flush_uniforms (CoglPipeline *pipeline,
CoglPipelineUniformsState *uniforms_state; CoglPipelineUniformsState *uniforms_state;
FlushUniformsClosure data; FlushUniformsClosure data;
int n_uniform_longs; int n_uniform_longs;
CoglContext *ctx = pipeline->context;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (pipeline->differences & COGL_PIPELINE_STATE_UNIFORMS) if (pipeline->differences & COGL_PIPELINE_STATE_UNIFORMS)
uniforms_state = &pipeline->big_state->uniforms_state; uniforms_state = &pipeline->big_state->uniforms_state;
@ -664,8 +658,7 @@ _cogl_shader_compile_real (CoglShader *shader,
{ {
GLenum gl_type; GLenum gl_type;
GLint status; GLint status;
CoglContext *ctx = pipeline->context;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (shader->gl_handle) if (shader->gl_handle)
{ {
@ -743,8 +736,7 @@ _cogl_pipeline_progend_glsl_end (CoglPipeline *pipeline,
UpdateUniformsState state; UpdateUniformsState state;
CoglProgram *user_program; CoglProgram *user_program;
CoglPipelineCacheEntry *cache_entry = NULL; CoglPipelineCacheEntry *cache_entry = NULL;
CoglContext *ctx = pipeline->context;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
program_state = get_program_state (pipeline); program_state = get_program_state (pipeline);
@ -845,7 +837,7 @@ _cogl_pipeline_progend_glsl_end (CoglPipeline *pipeline,
GE( ctx, glBindAttribLocation (program_state->program, GE( ctx, glBindAttribLocation (program_state->program,
0, "cogl_position_in")); 0, "cogl_position_in"));
link_program (program_state->program); link_program (ctx, program_state->program);
program_changed = TRUE; program_changed = TRUE;
} }
@ -925,7 +917,7 @@ _cogl_pipeline_progend_glsl_end (CoglPipeline *pipeline,
program_changed); program_changed);
if (user_program) if (user_program)
_cogl_program_flush_uniforms (user_program, _cogl_program_flush_uniforms (ctx, user_program,
gl_program, gl_program,
program_changed); program_changed);
@ -939,7 +931,7 @@ _cogl_pipeline_progend_glsl_pre_change_notify (CoglPipeline *pipeline,
CoglPipelineState change, CoglPipelineState change,
const CoglColor *new_color) const CoglColor *new_color)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); CoglContext *ctx = pipeline->context;
if ((change & (_cogl_pipeline_get_state_for_vertex_codegen (ctx) | if ((change & (_cogl_pipeline_get_state_for_vertex_codegen (ctx) |
_cogl_pipeline_get_state_for_fragment_codegen (ctx)))) _cogl_pipeline_get_state_for_fragment_codegen (ctx))))
@ -976,8 +968,8 @@ _cogl_pipeline_progend_glsl_layer_pre_change_notify (
CoglPipelineLayer *layer, CoglPipelineLayer *layer,
CoglPipelineLayerState change) CoglPipelineLayerState change)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
CoglTextureUnit *unit; CoglTextureUnit *unit;
CoglContext *ctx = owner->context;
if ((change & (_cogl_pipeline_get_layer_state_for_fragment_codegen (ctx) | if ((change & (_cogl_pipeline_get_layer_state_for_fragment_codegen (ctx) |
COGL_PIPELINE_LAYER_STATE_AFFECTS_VERTEX_CODEGEN))) COGL_PIPELINE_LAYER_STATE_AFFECTS_VERTEX_CODEGEN)))
@ -1008,7 +1000,7 @@ _cogl_pipeline_progend_glsl_layer_pre_change_notify (
* the changes so we can try to minimize redundant OpenGL calls if * the changes so we can try to minimize redundant OpenGL calls if
* the same layer is flushed again. * the same layer is flushed again.
*/ */
unit = _cogl_get_texture_unit (_cogl_pipeline_layer_get_unit_index (layer)); unit = _cogl_get_texture_unit (ctx, _cogl_pipeline_layer_get_unit_index (layer));
if (unit->layer == layer) if (unit->layer == layer)
unit->layer_changes_since_flush |= change; unit->layer_changes_since_flush |= change;
} }
@ -1026,8 +1018,7 @@ _cogl_pipeline_progend_glsl_pre_paint (CoglPipeline *pipeline,
gboolean need_modelview; gboolean need_modelview;
gboolean need_projection; gboolean need_projection;
graphene_matrix_t modelview, projection; graphene_matrix_t modelview, projection;
CoglContext *ctx = pipeline->context;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
program_state = get_program_state (pipeline); program_state = get_program_state (pipeline);
@ -1152,8 +1143,7 @@ update_float_uniform (CoglPipeline *pipeline,
{ {
float (* float_getter_func) (CoglPipeline *) = getter_func; float (* float_getter_func) (CoglPipeline *) = getter_func;
float value; float value;
CoglContext *ctx = pipeline->context;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
value = float_getter_func (pipeline); value = float_getter_func (pipeline);
GE( ctx, glUniform1f (uniform_location, value) ); GE( ctx, glUniform1f (uniform_location, value) );

View File

@ -108,8 +108,7 @@ destroy_shader_state (void *user_data)
{ {
CoglPipelineVertendShaderStateCache *cache = user_data; CoglPipelineVertendShaderStateCache *cache = user_data;
CoglPipelineVertendShaderState *shader_state = cache->shader_state; CoglPipelineVertendShaderState *shader_state = cache->shader_state;
CoglContext *ctx = cache->instance->context;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (shader_state->cache_entry && if (shader_state->cache_entry &&
shader_state->cache_entry->pipeline != cache->instance) shader_state->cache_entry->pipeline != cache->instance)
@ -390,8 +389,7 @@ _cogl_pipeline_vertend_glsl_start (CoglPipeline *pipeline,
CoglPipelineVertendShaderState *shader_state; CoglPipelineVertendShaderState *shader_state;
CoglPipelineCacheEntry *cache_entry = NULL; CoglPipelineCacheEntry *cache_entry = NULL;
CoglProgram *user_program = cogl_pipeline_get_user_program (pipeline); CoglProgram *user_program = cogl_pipeline_get_user_program (pipeline);
CoglContext *ctx = pipeline->context;
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
/* Now lookup our glsl backend private state (allocating if /* Now lookup our glsl backend private state (allocating if
* necessary) */ * necessary) */
@ -513,8 +511,6 @@ _cogl_pipeline_vertend_glsl_add_layer (CoglPipeline *pipeline,
CoglPipelineSnippetData snippet_data; CoglPipelineSnippetData snippet_data;
int layer_index = layer->index; int layer_index = layer->index;
_COGL_GET_CONTEXT (ctx, FALSE);
shader_state = get_shader_state (pipeline); shader_state = get_shader_state (pipeline);
if (shader_state->source == NULL) if (shader_state->source == NULL)
@ -581,8 +577,7 @@ _cogl_pipeline_vertend_glsl_end (CoglPipeline *pipeline,
unsigned long pipelines_difference) unsigned long pipelines_difference)
{ {
CoglPipelineVertendShaderState *shader_state; CoglPipelineVertendShaderState *shader_state;
CoglContext *ctx = pipeline->context;
_COGL_GET_CONTEXT (ctx, FALSE);
shader_state = get_shader_state (pipeline); shader_state = get_shader_state (pipeline);
@ -728,7 +723,7 @@ _cogl_pipeline_vertend_glsl_pre_change_notify (CoglPipeline *pipeline,
CoglPipelineState change, CoglPipelineState change,
const CoglColor *new_color) const CoglColor *new_color)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); CoglContext *ctx = pipeline->context;
if ((change & _cogl_pipeline_get_state_for_vertex_codegen (ctx))) if ((change & _cogl_pipeline_get_state_for_vertex_codegen (ctx)))
dirty_shader_state (pipeline); dirty_shader_state (pipeline);

View File

@ -63,7 +63,8 @@ void
_cogl_texture_2d_gl_free (CoglTexture2D *tex_2d) _cogl_texture_2d_gl_free (CoglTexture2D *tex_2d)
{ {
if (tex_2d->gl_texture) if (tex_2d->gl_texture)
_cogl_delete_gl_texture (tex_2d->gl_texture); _cogl_delete_gl_texture (cogl_texture_get_context (COGL_TEXTURE (tex_2d)),
tex_2d->gl_texture);
#if defined (HAVE_EGL) #if defined (HAVE_EGL)
g_clear_pointer (&tex_2d->egl_image_external.user_data, g_clear_pointer (&tex_2d->egl_image_external.user_data,
@ -161,7 +162,7 @@ allocate_with_size (CoglTexture2D *tex_2d,
tex_2d->gl_internal_format = gl_intformat; tex_2d->gl_internal_format = gl_intformat;
_cogl_bind_gl_texture_transient (GL_TEXTURE_2D, _cogl_bind_gl_texture_transient (ctx, GL_TEXTURE_2D,
gl_texture); gl_texture);
/* Clear any GL errors */ /* Clear any GL errors */
@ -358,7 +359,7 @@ cogl_texture_2d_gl_bind_egl_image (CoglTexture2D *tex_2d,
{ {
CoglContext *ctx = cogl_texture_get_context (COGL_TEXTURE (tex_2d)); CoglContext *ctx = cogl_texture_get_context (COGL_TEXTURE (tex_2d));
_cogl_bind_gl_texture_transient (GL_TEXTURE_2D, _cogl_bind_gl_texture_transient (ctx, GL_TEXTURE_2D,
tex_2d->gl_texture); tex_2d->gl_texture);
_cogl_gl_util_clear_gl_errors (ctx); _cogl_gl_util_clear_gl_errors (ctx);
@ -464,7 +465,7 @@ _cogl_texture_2d_gl_flush_legacy_texobj_filters (CoglTexture *tex,
tex_2d->gl_legacy_texobj_mag_filter = mag_filter; tex_2d->gl_legacy_texobj_mag_filter = mag_filter;
/* Apply new filters to the texture */ /* Apply new filters to the texture */
_cogl_bind_gl_texture_transient (GL_TEXTURE_2D, _cogl_bind_gl_texture_transient (ctx, GL_TEXTURE_2D,
tex_2d->gl_texture); tex_2d->gl_texture);
GE( ctx, glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter) ); GE( ctx, glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter) );
GE( ctx, glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter) ); GE( ctx, glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter) );
@ -493,7 +494,7 @@ _cogl_texture_2d_gl_flush_legacy_texobj_wrap_modes (CoglTexture *tex,
if (tex_2d->gl_legacy_texobj_wrap_mode_s != wrap_mode_s || if (tex_2d->gl_legacy_texobj_wrap_mode_s != wrap_mode_s ||
tex_2d->gl_legacy_texobj_wrap_mode_t != wrap_mode_t) tex_2d->gl_legacy_texobj_wrap_mode_t != wrap_mode_t)
{ {
_cogl_bind_gl_texture_transient (GL_TEXTURE_2D, _cogl_bind_gl_texture_transient (ctx, GL_TEXTURE_2D,
tex_2d->gl_texture); tex_2d->gl_texture);
GE( ctx, glTexParameteri (GL_TEXTURE_2D, GE( ctx, glTexParameteri (GL_TEXTURE_2D,
GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_S,
@ -530,7 +531,7 @@ _cogl_texture_2d_gl_copy_from_framebuffer (CoglTexture2D *tex_2d,
(COGL_FRAMEBUFFER_STATE_ALL & (COGL_FRAMEBUFFER_STATE_ALL &
~COGL_FRAMEBUFFER_STATE_CLIP)); ~COGL_FRAMEBUFFER_STATE_CLIP));
_cogl_bind_gl_texture_transient (GL_TEXTURE_2D, _cogl_bind_gl_texture_transient (ctx, GL_TEXTURE_2D,
tex_2d->gl_texture); tex_2d->gl_texture);
ctx->glCopyTexSubImage2D (GL_TEXTURE_2D, ctx->glCopyTexSubImage2D (GL_TEXTURE_2D,
@ -645,7 +646,7 @@ _cogl_texture_2d_gl_get_data (CoglTexture2D *tex_2d,
width, width,
bpp); bpp);
_cogl_bind_gl_texture_transient (tex_2d->gl_target, _cogl_bind_gl_texture_transient (ctx, tex_2d->gl_target,
tex_2d->gl_texture); tex_2d->gl_texture);
ctx->texture_driver->gl_get_tex_image (ctx, ctx->texture_driver->gl_get_tex_image (ctx,

View File

@ -122,7 +122,7 @@ cogl_texture_gl_set_max_level (CoglTexture *texture,
cogl_texture_set_max_level_set (texture, max_level); cogl_texture_set_max_level_set (texture, max_level);
_cogl_bind_gl_texture_transient (gl_target, _cogl_bind_gl_texture_transient (ctx, gl_target,
gl_handle); gl_handle);
GE( ctx, glTexParameteri (gl_target, GE( ctx, glTexParameteri (gl_target,
@ -143,7 +143,7 @@ _cogl_texture_gl_generate_mipmaps (CoglTexture *texture)
cogl_texture_get_gl_texture (texture, &gl_handle, &gl_target); cogl_texture_get_gl_texture (texture, &gl_handle, &gl_target);
_cogl_bind_gl_texture_transient (gl_target, _cogl_bind_gl_texture_transient (ctx, gl_target,
gl_handle); gl_handle);
GE( ctx, glGenerateMipmap (gl_target) ); GE( ctx, glGenerateMipmap (gl_target) );
} }

View File

@ -64,7 +64,7 @@ _cogl_texture_driver_gen (CoglContext *ctx,
GE (ctx, glGenTextures (1, &tex)); GE (ctx, glGenTextures (1, &tex));
_cogl_bind_gl_texture_transient (gl_target, tex); _cogl_bind_gl_texture_transient (ctx, gl_target, tex);
switch (gl_target) switch (gl_target)
{ {
@ -213,7 +213,7 @@ _cogl_texture_driver_upload_subregion_to_gl (CoglContext *ctx,
src_y, src_y,
bpp); bpp);
_cogl_bind_gl_texture_transient (gl_target, gl_handle); _cogl_bind_gl_texture_transient (ctx, gl_target, gl_handle);
/* Clear any GL errors */ /* Clear any GL errors */
_cogl_gl_util_clear_gl_errors (ctx); _cogl_gl_util_clear_gl_errors (ctx);
@ -320,7 +320,7 @@ _cogl_texture_driver_upload_to_gl (CoglContext *ctx,
cogl_bitmap_get_rowstride (source_bmp), cogl_bitmap_get_rowstride (source_bmp),
0, 0, 0, bpp); 0, 0, 0, bpp);
_cogl_bind_gl_texture_transient (gl_target, gl_handle); _cogl_bind_gl_texture_transient (ctx, gl_target, gl_handle);
/* Clear any GL errors */ /* Clear any GL errors */
_cogl_gl_util_clear_gl_errors (ctx); _cogl_gl_util_clear_gl_errors (ctx);

View File

@ -79,7 +79,7 @@ _cogl_texture_driver_gen (CoglContext *ctx,
GE (ctx, glGenTextures (1, &tex)); GE (ctx, glGenTextures (1, &tex));
_cogl_bind_gl_texture_transient (gl_target, tex); _cogl_bind_gl_texture_transient (ctx, gl_target, tex);
switch (gl_target) switch (gl_target)
{ {
@ -267,7 +267,7 @@ _cogl_texture_driver_upload_subregion_to_gl (CoglContext *ctx,
return FALSE; return FALSE;
} }
_cogl_bind_gl_texture_transient (gl_target, gl_handle); _cogl_bind_gl_texture_transient (ctx, gl_target, gl_handle);
/* Clear any GL errors */ /* Clear any GL errors */
_cogl_gl_util_clear_gl_errors (ctx); _cogl_gl_util_clear_gl_errors (ctx);
@ -369,7 +369,7 @@ _cogl_texture_driver_upload_to_gl (CoglContext *ctx,
/* Setup gl alignment to match rowstride and top-left corner */ /* Setup gl alignment to match rowstride and top-left corner */
_cogl_texture_driver_prep_gl_for_pixels_upload (ctx, rowstride, bpp); _cogl_texture_driver_prep_gl_for_pixels_upload (ctx, rowstride, bpp);
_cogl_bind_gl_texture_transient (gl_target, gl_handle); _cogl_bind_gl_texture_transient (ctx, gl_target, gl_handle);
data = _cogl_bitmap_gl_bind (bmp, data = _cogl_bitmap_gl_bind (bmp,
COGL_BUFFER_ACCESS_READ, COGL_BUFFER_ACCESS_READ,

View File

@ -1329,7 +1329,7 @@ _cogl_winsys_texture_pixmap_x11_update (CoglTexturePixmapX11 *tex_pixmap,
COGL_NOTE (TEXTURE_PIXMAP, "Rebinding GLXPixmap for %p", tex_pixmap); COGL_NOTE (TEXTURE_PIXMAP, "Rebinding GLXPixmap for %p", tex_pixmap);
_cogl_bind_gl_texture_transient (gl_target, gl_handle); _cogl_bind_gl_texture_transient (ctx, gl_target, gl_handle);
if (texture_info->pixmap_bound) if (texture_info->pixmap_bound)
glx_renderer->glXReleaseTexImage (xlib_renderer->xdpy, glx_renderer->glXReleaseTexImage (xlib_renderer->xdpy,