mirror of
https://github.com/brl/mutter.git
synced 2024-11-29 19:40:43 -05:00
2008-04-11 Emmanuele Bassi <ebassi@openedhand.com>
* README: Add a note about the Shader API changes. * clutter/clutter-deprecated.h: Add deprecation symbols. * clutter/clutter-shader.[ch]: Rename the :bound read-only property to :compiled. Also rename clutter_shader_bind() and clutter_shader_is_bound() to clutter_shader_compil() and clutter_shader_is_compiled(), respectively. * clutter/glx/clutter-stage-glx.c: (clutter_stage_glx_unrealize): Update after clutter_shader_release_all() rename. * tests/test-shader.c (button_release_cb), (main): Update.
This commit is contained in:
parent
0535283b77
commit
8867c1bae5
17
ChangeLog
17
ChangeLog
@ -1,3 +1,20 @@
|
|||||||
|
2008-04-11 Emmanuele Bassi <ebassi@openedhand.com>
|
||||||
|
|
||||||
|
* README: Add a note about the Shader API changes.
|
||||||
|
|
||||||
|
* clutter/clutter-deprecated.h: Add deprecation symbols.
|
||||||
|
|
||||||
|
* clutter/clutter-shader.[ch]: Rename the :bound read-only
|
||||||
|
property to :compiled. Also rename clutter_shader_bind()
|
||||||
|
and clutter_shader_is_bound() to clutter_shader_compil() and
|
||||||
|
clutter_shader_is_compiled(), respectively.
|
||||||
|
|
||||||
|
* clutter/glx/clutter-stage-glx.c:
|
||||||
|
(clutter_stage_glx_unrealize): Update after
|
||||||
|
clutter_shader_release_all() rename.
|
||||||
|
|
||||||
|
* tests/test-shader.c (button_release_cb), (main): Update.
|
||||||
|
|
||||||
2008-04-10 Emmanuele Bassi <ebassi@openedhand.com>
|
2008-04-10 Emmanuele Bassi <ebassi@openedhand.com>
|
||||||
|
|
||||||
* clutter/eglx/clutter-backend-egl.c:
|
* clutter/eglx/clutter-backend-egl.c:
|
||||||
|
6
README
6
README
@ -146,6 +146,12 @@ wanting to port to newer releases (See NEWS for general new feature info).
|
|||||||
Release Notes for Clutter 0.8
|
Release Notes for Clutter 0.8
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
|
* ClutterShader API has been slightly changed: the ClutterStage:bound
|
||||||
|
property, clutter_shader_bind() and clutter_shader_is_bound() have
|
||||||
|
been renamed to :compiled, clutter_shader_compile() and
|
||||||
|
clutter_shader_is_compiled(), respectively. The previously semi-private
|
||||||
|
clutter_shader_release_all() function is now not exported anymore.
|
||||||
|
|
||||||
* ClutterStage is not an abstract type anymore: it can be instantiated
|
* ClutterStage is not an abstract type anymore: it can be instantiated
|
||||||
using clutter_stage_new() and it can be properly subclassed. If the
|
using clutter_stage_new() and it can be properly subclassed. If the
|
||||||
backend supports multiple stages, every stage will be a new window,
|
backend supports multiple stages, every stage will be a new window,
|
||||||
|
@ -39,4 +39,7 @@
|
|||||||
#define clutter_entry_set_position clutter_entry_set_position_REPLACED_BY_clutter_entry_set_cursor_position
|
#define clutter_entry_set_position clutter_entry_set_position_REPLACED_BY_clutter_entry_set_cursor_position
|
||||||
#define clutter_entry_get_position clutter_entry_get_position_REPLACED_BY_clutter_entry_get_cursor_position
|
#define clutter_entry_get_position clutter_entry_get_position_REPLACED_BY_clutter_entry_get_cursor_position
|
||||||
|
|
||||||
|
#define clutter_shader_bind clutter_shader_bind_REPLACED_BY_clutter_shader_compile
|
||||||
|
#define clutter_shader_is_bound clutter_shader_is_bound_REPLACED_BY_clutter_shader_is_compiled
|
||||||
|
|
||||||
#endif /* CLUTTER_DEPRECATED_H */
|
#endif /* CLUTTER_DEPRECATED_H */
|
||||||
|
@ -68,7 +68,7 @@ typedef enum {
|
|||||||
|
|
||||||
struct _ClutterShaderPrivate
|
struct _ClutterShaderPrivate
|
||||||
{
|
{
|
||||||
guint bound : 1; /* Shader is bound to the GL context */
|
guint compiled : 1; /* Shader is bound to the GL context */
|
||||||
guint is_enabled : 1;
|
guint is_enabled : 1;
|
||||||
|
|
||||||
guint vertex_is_glsl : 1;
|
guint vertex_is_glsl : 1;
|
||||||
@ -89,7 +89,7 @@ enum
|
|||||||
|
|
||||||
PROP_VERTEX_SOURCE,
|
PROP_VERTEX_SOURCE,
|
||||||
PROP_FRAGMENT_SOURCE,
|
PROP_FRAGMENT_SOURCE,
|
||||||
PROP_BOUND,
|
PROP_COMPILED,
|
||||||
PROP_ENABLED
|
PROP_ENABLED
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -164,8 +164,8 @@ clutter_shader_get_property (GObject *object,
|
|||||||
case PROP_FRAGMENT_SOURCE:
|
case PROP_FRAGMENT_SOURCE:
|
||||||
g_value_set_string (value, priv->fragment_source);
|
g_value_set_string (value, priv->fragment_source);
|
||||||
break;
|
break;
|
||||||
case PROP_BOUND:
|
case PROP_COMPILED:
|
||||||
g_value_set_boolean (value, priv->bound);
|
g_value_set_boolean (value, priv->compiled);
|
||||||
break;
|
break;
|
||||||
case PROP_ENABLED:
|
case PROP_ENABLED:
|
||||||
g_value_set_boolean (value, priv->is_enabled);
|
g_value_set_boolean (value, priv->is_enabled);
|
||||||
@ -237,19 +237,19 @@ clutter_shader_class_init (ClutterShaderClass *klass)
|
|||||||
NULL,
|
NULL,
|
||||||
CLUTTER_PARAM_READWRITE));
|
CLUTTER_PARAM_READWRITE));
|
||||||
/**
|
/**
|
||||||
* ClutterShader:bound:
|
* ClutterShader:compiled:
|
||||||
*
|
*
|
||||||
* Whether the shader is bound (compiled and linked, ready for use
|
* Whether the shader is compiled and linked, ready for use
|
||||||
* in the GL context).
|
* in the GL context.
|
||||||
*
|
*
|
||||||
* Since: 0.6
|
* Since: 0.8
|
||||||
*/
|
*/
|
||||||
g_object_class_install_property
|
g_object_class_install_property
|
||||||
(object_class,
|
(object_class,
|
||||||
PROP_BOUND,
|
PROP_COMPILED,
|
||||||
g_param_spec_boolean ("bound",
|
g_param_spec_boolean ("compiled",
|
||||||
"Bound",
|
"Compiled",
|
||||||
"Whether the shader is bound",
|
"Whether the shader is compiled and linked",
|
||||||
FALSE,
|
FALSE,
|
||||||
CLUTTER_PARAM_READABLE));
|
CLUTTER_PARAM_READABLE));
|
||||||
/**
|
/**
|
||||||
@ -276,7 +276,7 @@ clutter_shader_init (ClutterShader *self)
|
|||||||
|
|
||||||
priv = self->priv = CLUTTER_SHADER_GET_PRIVATE (self);
|
priv = self->priv = CLUTTER_SHADER_GET_PRIVATE (self);
|
||||||
|
|
||||||
priv->bound = FALSE;
|
priv->compiled = FALSE;
|
||||||
|
|
||||||
priv->vertex_source = NULL;
|
priv->vertex_source = NULL;
|
||||||
priv->fragment_source = NULL;
|
priv->fragment_source = NULL;
|
||||||
@ -334,7 +334,7 @@ clutter_shader_set_fragment_source (ClutterShader *shader,
|
|||||||
/* release shader if bound when changing the source, the shader will
|
/* release shader if bound when changing the source, the shader will
|
||||||
* automatically be rebound on the next use.
|
* automatically be rebound on the next use.
|
||||||
*/
|
*/
|
||||||
if (clutter_shader_is_bound (shader))
|
if (clutter_shader_is_compiled (shader))
|
||||||
clutter_shader_release (shader);
|
clutter_shader_release (shader);
|
||||||
|
|
||||||
is_glsl = !g_str_has_prefix (data, "!!ARBfp");
|
is_glsl = !g_str_has_prefix (data, "!!ARBfp");
|
||||||
@ -380,7 +380,7 @@ clutter_shader_set_vertex_source (ClutterShader *shader,
|
|||||||
/* release shader if bound when changing the source, the shader will
|
/* release shader if bound when changing the source, the shader will
|
||||||
* automatically be rebound on the next use.
|
* automatically be rebound on the next use.
|
||||||
*/
|
*/
|
||||||
if (clutter_shader_is_bound (shader))
|
if (clutter_shader_is_compiled (shader))
|
||||||
clutter_shader_release (shader);
|
clutter_shader_release (shader);
|
||||||
|
|
||||||
is_glsl = !g_str_has_prefix (data, "!!ARBvp");
|
is_glsl = !g_str_has_prefix (data, "!!ARBvp");
|
||||||
@ -452,20 +452,20 @@ bind_glsl_shader (ClutterShader *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_shader_bind:
|
* clutter_shader_compile:
|
||||||
* @shader: a #ClutterShader
|
* @shader: a #ClutterShader
|
||||||
* @error: return location for a #GError, or %NULL
|
* @error: return location for a #GError, or %NULL
|
||||||
*
|
*
|
||||||
* Compile and link GLSL sources set for vertex and fragment shaders for
|
* Compiles and links GLSL sources set for vertex and fragment shaders for
|
||||||
* a #ClutterShader. If the compilation fails and a #GError return location is
|
* a #ClutterShader. If the compilation fails and a #GError return location is
|
||||||
* provided the error will contain the errors from the compiler, if any.
|
* provided the error will contain the errors from the compiler, if any.
|
||||||
*
|
*
|
||||||
* Return value: returns TRUE if the shader was succesfully bound.
|
* Return value: returns TRUE if the shader was succesfully compiled.
|
||||||
*
|
*
|
||||||
* Since: 0.6
|
* Since: 0.8
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
clutter_shader_bind (ClutterShader *shader,
|
clutter_shader_compile (ClutterShader *shader,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
ClutterShaderPrivate *priv;
|
ClutterShaderPrivate *priv;
|
||||||
@ -474,8 +474,8 @@ clutter_shader_bind (ClutterShader *shader,
|
|||||||
|
|
||||||
priv = shader->priv;
|
priv = shader->priv;
|
||||||
|
|
||||||
if (priv->bound)
|
if (priv->compiled)
|
||||||
return priv->bound;
|
return priv->compiled;
|
||||||
|
|
||||||
if ((priv->vertex_source && !priv->vertex_is_glsl) ||
|
if ((priv->vertex_source && !priv->vertex_is_glsl) ||
|
||||||
(priv->fragment_source && !priv->fragment_is_glsl))
|
(priv->fragment_source && !priv->fragment_is_glsl))
|
||||||
@ -485,8 +485,8 @@ clutter_shader_bind (ClutterShader *shader,
|
|||||||
g_set_error (error, CLUTTER_SHADER_ERROR,
|
g_set_error (error, CLUTTER_SHADER_ERROR,
|
||||||
CLUTTER_SHADER_ERROR_NO_ASM,
|
CLUTTER_SHADER_ERROR_NO_ASM,
|
||||||
"ASM shaders not supported");
|
"ASM shaders not supported");
|
||||||
priv->bound = FALSE;
|
priv->compiled = FALSE;
|
||||||
return priv->bound;
|
return priv->compiled;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
|
if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
|
||||||
@ -494,23 +494,21 @@ clutter_shader_bind (ClutterShader *shader,
|
|||||||
g_set_error (error, CLUTTER_SHADER_ERROR,
|
g_set_error (error, CLUTTER_SHADER_ERROR,
|
||||||
CLUTTER_SHADER_ERROR_NO_GLSL,
|
CLUTTER_SHADER_ERROR_NO_GLSL,
|
||||||
"GLSL shaders not supported");
|
"GLSL shaders not supported");
|
||||||
priv->bound = FALSE;
|
priv->compiled = FALSE;
|
||||||
return priv->bound;
|
return priv->compiled;
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->bound = bind_glsl_shader (shader, error);
|
priv->compiled = bind_glsl_shader (shader, error);
|
||||||
|
g_object_notify (G_OBJECT (shader), "compiled");
|
||||||
|
|
||||||
if (priv->bound)
|
return priv->compiled;
|
||||||
g_object_notify (G_OBJECT (shader), "bound");
|
|
||||||
|
|
||||||
return priv->bound;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_shader_release:
|
* clutter_shader_release:
|
||||||
* @shader: a #ClutterShader
|
* @shader: a #ClutterShader
|
||||||
*
|
*
|
||||||
* Free up any GL context resources held by the shader.
|
* Frees up any GL context resources held by the shader.
|
||||||
*
|
*
|
||||||
* Since: 0.6
|
* Since: 0.6
|
||||||
*/
|
*/
|
||||||
@ -523,7 +521,7 @@ clutter_shader_release (ClutterShader *shader)
|
|||||||
|
|
||||||
priv = shader->priv;
|
priv = shader->priv;
|
||||||
|
|
||||||
if (!priv->bound)
|
if (!priv->compiled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_assert (priv->program);
|
g_assert (priv->program);
|
||||||
@ -540,13 +538,13 @@ clutter_shader_release (ClutterShader *shader)
|
|||||||
priv->vertex_shader = 0;
|
priv->vertex_shader = 0;
|
||||||
priv->fragment_shader = 0;
|
priv->fragment_shader = 0;
|
||||||
priv->program = 0;
|
priv->program = 0;
|
||||||
priv->bound = FALSE;
|
priv->compiled = FALSE;
|
||||||
|
|
||||||
g_object_notify (G_OBJECT (shader), "bound");
|
g_object_notify (G_OBJECT (shader), "compiled");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_shader_is_bound:
|
* clutter_shader_is_compiled:
|
||||||
* @shader: a #ClutterShader
|
* @shader: a #ClutterShader
|
||||||
*
|
*
|
||||||
* Checks whether @shader is is currently compiled, linked and bound
|
* Checks whether @shader is is currently compiled, linked and bound
|
||||||
@ -554,14 +552,14 @@ clutter_shader_release (ClutterShader *shader)
|
|||||||
*
|
*
|
||||||
* Return value: %TRUE if the shader is compiled, linked and ready for use.
|
* Return value: %TRUE if the shader is compiled, linked and ready for use.
|
||||||
*
|
*
|
||||||
* Since: 0.6
|
* Since: 0.8
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
clutter_shader_is_bound (ClutterShader *shader)
|
clutter_shader_is_compiled (ClutterShader *shader)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (CLUTTER_IS_SHADER (shader), FALSE);
|
g_return_val_if_fail (CLUTTER_IS_SHADER (shader), FALSE);
|
||||||
|
|
||||||
return shader->priv->bound;
|
return shader->priv->compiled;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -569,9 +567,11 @@ clutter_shader_is_bound (ClutterShader *shader)
|
|||||||
* @shader: a #ClutterShader
|
* @shader: a #ClutterShader
|
||||||
* @enabled: The new state of the shader.
|
* @enabled: The new state of the shader.
|
||||||
*
|
*
|
||||||
* Enable a shader, will attempt to bind the shader if it isn't already bound.
|
* Enables a shader. This function will attempt to compile and link
|
||||||
* When FALSE is passed in the default state of the GL pipeline will be used
|
* the shader, if it isn't already.
|
||||||
* instead.
|
*
|
||||||
|
* When @enabled is %FALSE the default state of the GL pipeline will be
|
||||||
|
* used instead.
|
||||||
*
|
*
|
||||||
* Since: 0.6
|
* Since: 0.6
|
||||||
*/
|
*/
|
||||||
@ -590,7 +590,7 @@ clutter_shader_set_is_enabled (ClutterShader *shader,
|
|||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
gboolean res;
|
gboolean res;
|
||||||
|
|
||||||
res = clutter_shader_bind (shader, &error);
|
res = clutter_shader_compile (shader, &error);
|
||||||
if (!res)
|
if (!res)
|
||||||
{
|
{
|
||||||
g_warning ("Unable to bind the shader: %s",
|
g_warning ("Unable to bind the shader: %s",
|
||||||
@ -658,8 +658,8 @@ clutter_shader_set_uniform_1f (ClutterShader *shader,
|
|||||||
cogl_program_uniform_1f (location, foo);
|
cogl_program_uniform_1f (location, foo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* clutter_shader_release_all:
|
* _clutter_shader_release_all:
|
||||||
*
|
*
|
||||||
* Iterate through all #ClutterShaders and tell them to release GL context
|
* Iterate through all #ClutterShaders and tell them to release GL context
|
||||||
* related sources.
|
* related sources.
|
||||||
@ -667,7 +667,7 @@ clutter_shader_set_uniform_1f (ClutterShader *shader,
|
|||||||
* Since: 0.6
|
* Since: 0.6
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
clutter_shader_release_all (void)
|
_clutter_shader_release_all (void)
|
||||||
{
|
{
|
||||||
g_list_foreach (clutter_shaders_list,
|
g_list_foreach (clutter_shaders_list,
|
||||||
(GFunc) clutter_shader_release,
|
(GFunc) clutter_shader_release,
|
||||||
|
@ -83,10 +83,10 @@ void clutter_shader_set_is_enabled (ClutterShader *sh
|
|||||||
gboolean enabled);
|
gboolean enabled);
|
||||||
gboolean clutter_shader_get_is_enabled (ClutterShader *shader);
|
gboolean clutter_shader_get_is_enabled (ClutterShader *shader);
|
||||||
|
|
||||||
gboolean clutter_shader_bind (ClutterShader *shader,
|
gboolean clutter_shader_compile (ClutterShader *shader,
|
||||||
GError **error);
|
GError **error);
|
||||||
void clutter_shader_release (ClutterShader *shader);
|
void clutter_shader_release (ClutterShader *shader);
|
||||||
gboolean clutter_shader_is_bound (ClutterShader *shader);
|
gboolean clutter_shader_is_compiled (ClutterShader *shader);
|
||||||
|
|
||||||
void clutter_shader_set_vertex_source (ClutterShader *shader,
|
void clutter_shader_set_vertex_source (ClutterShader *shader,
|
||||||
const gchar *data,
|
const gchar *data,
|
||||||
@ -102,7 +102,7 @@ void clutter_shader_set_uniform_1f (ClutterShader *sh
|
|||||||
const gchar *name,
|
const gchar *name,
|
||||||
gfloat value);
|
gfloat value);
|
||||||
/* should be private and internal */
|
/* should be private and internal */
|
||||||
void clutter_shader_release_all (void);
|
void _clutter_shader_release_all (void);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ clutter_stage_glx_unrealize (ClutterActor *actor)
|
|||||||
clutter_x11_trap_x_errors ();
|
clutter_x11_trap_x_errors ();
|
||||||
|
|
||||||
/* Unrealize all shaders, since the GL context is going away */
|
/* Unrealize all shaders, since the GL context is going away */
|
||||||
clutter_shader_release_all ();
|
_clutter_shader_release_all ();
|
||||||
|
|
||||||
if (G_UNLIKELY (was_offscreen))
|
if (G_UNLIKELY (was_offscreen))
|
||||||
{
|
{
|
||||||
|
@ -163,8 +163,7 @@ button_release_cb (ClutterActor *actor,
|
|||||||
* possible to iterate through a set of alternate shader sources (glsl ->
|
* possible to iterate through a set of alternate shader sources (glsl ->
|
||||||
* asm -> cg?) and the one that succesfully compiles is used.
|
* asm -> cg?) and the one that succesfully compiles is used.
|
||||||
*/
|
*/
|
||||||
clutter_shader_bind (shader, &error);
|
clutter_shader_compile (shader, &error);
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
g_print ("unable to set shaders[%i] named '%s': %s",
|
g_print ("unable to set shaders[%i] named '%s': %s",
|
||||||
@ -211,7 +210,7 @@ main (gint argc,
|
|||||||
|
|
||||||
error = NULL;
|
error = NULL;
|
||||||
clutter_shader_set_fragment_source (shader, shaders[shader_no].source, -1);
|
clutter_shader_set_fragment_source (shader, shaders[shader_no].source, -1);
|
||||||
clutter_shader_bind (shader, &error);
|
clutter_shader_compile (shader, &error);
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
g_print ("unable to load shaders[%d] named '%s': %s\n",
|
g_print ("unable to load shaders[%d] named '%s': %s\n",
|
||||||
|
Loading…
Reference in New Issue
Block a user