mirror of
https://github.com/brl/mutter.git
synced 2025-02-19 22:54:08 +00:00
cogl-attribute: Fix binding an attribute to cogl_tex_coord_in
If an application tries to bind an attribute to cogl_tex_coord_in then on GLES2 it would try to directly use that as the name of the GL attribute. However in the generated shader that is actually #defined to cogl_tex_coord0_in so we need to remap the name. This adds a parameter to validate_cogl_attribute_name so that it can optionally return a real_attribute_name. If it doesn't set this then the calling function will default to the Cogl attribute name. This fixes test-texture-3d with the GLES2 driver. Reviewed-by: Robert Bragg <robert@linux.intel.com>
This commit is contained in:
parent
2fdb7fc743
commit
d3e6f2bc83
@ -61,6 +61,7 @@ COGL_OBJECT_DEFINE (Attribute, attribute);
|
|||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
validate_cogl_attribute_name (const char *name,
|
validate_cogl_attribute_name (const char *name,
|
||||||
|
char **real_attribute_name,
|
||||||
CoglAttributeNameID *name_id,
|
CoglAttributeNameID *name_id,
|
||||||
gboolean *normalized,
|
gboolean *normalized,
|
||||||
int *texture_unit)
|
int *texture_unit)
|
||||||
@ -78,7 +79,10 @@ validate_cogl_attribute_name (const char *name,
|
|||||||
*normalized = TRUE;
|
*normalized = TRUE;
|
||||||
}
|
}
|
||||||
else if (strcmp (name, "tex_coord_in") == 0)
|
else if (strcmp (name, "tex_coord_in") == 0)
|
||||||
|
{
|
||||||
|
*real_attribute_name = "cogl_tex_coord0_in";
|
||||||
*name_id = COGL_ATTRIBUTE_NAME_ID_TEXTURE_COORD_ARRAY;
|
*name_id = COGL_ATTRIBUTE_NAME_ID_TEXTURE_COORD_ARRAY;
|
||||||
|
}
|
||||||
else if (strncmp (name, "tex_coord", strlen ("tex_coord")) == 0)
|
else if (strncmp (name, "tex_coord", strlen ("tex_coord")) == 0)
|
||||||
{
|
{
|
||||||
char *endptr;
|
char *endptr;
|
||||||
@ -86,7 +90,7 @@ validate_cogl_attribute_name (const char *name,
|
|||||||
if (strcmp (endptr, "_in") != 0)
|
if (strcmp (endptr, "_in") != 0)
|
||||||
{
|
{
|
||||||
g_warning ("Texture coordinate attributes should either be named "
|
g_warning ("Texture coordinate attributes should either be named "
|
||||||
"\"cogl_tex_coord\" or named with a texture unit index "
|
"\"cogl_tex_coord_in\" or named with a texture unit index "
|
||||||
"like \"cogl_tex_coord2_in\"\n");
|
"like \"cogl_tex_coord2_in\"\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -112,12 +116,14 @@ _cogl_attribute_register_attribute_name (CoglContext *context,
|
|||||||
{
|
{
|
||||||
CoglAttributeNameState *name_state = g_new (CoglAttributeNameState, 1);
|
CoglAttributeNameState *name_state = g_new (CoglAttributeNameState, 1);
|
||||||
int name_index = context->n_attribute_names++;
|
int name_index = context->n_attribute_names++;
|
||||||
|
char *name_copy = g_strdup (name);
|
||||||
|
|
||||||
name_state->name = g_strdup (name);
|
name_state->name = NULL;
|
||||||
name_state->name_index = name_index;
|
name_state->name_index = name_index;
|
||||||
if (strncmp (name, "cogl_", 5) == 0)
|
if (strncmp (name, "cogl_", 5) == 0)
|
||||||
{
|
{
|
||||||
if (!validate_cogl_attribute_name (name,
|
if (!validate_cogl_attribute_name (name,
|
||||||
|
&name_state->name,
|
||||||
&name_state->name_id,
|
&name_state->name_id,
|
||||||
&name_state->normalized_default,
|
&name_state->normalized_default,
|
||||||
&name_state->texture_unit))
|
&name_state->texture_unit))
|
||||||
@ -130,8 +136,11 @@ _cogl_attribute_register_attribute_name (CoglContext *context,
|
|||||||
name_state->texture_unit = 0;
|
name_state->texture_unit = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (name_state->name == NULL)
|
||||||
|
name_state->name = name_copy;
|
||||||
|
|
||||||
g_hash_table_insert (context->attribute_name_states_hash,
|
g_hash_table_insert (context->attribute_name_states_hash,
|
||||||
name_state->name, name_state);
|
name_copy, name_state);
|
||||||
|
|
||||||
if (G_UNLIKELY (context->attribute_name_index_map == NULL))
|
if (G_UNLIKELY (context->attribute_name_index_map == NULL))
|
||||||
context->attribute_name_index_map =
|
context->attribute_name_index_map =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user