mirror of
https://github.com/brl/mutter.git
synced 2025-02-26 17:54:10 +00:00
cogl: Port Program away from CoglObject
This also switches from using CoglHandle to CoglProgram where appropriate which allowed dropping a duplicated function that had the wrong signature... Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3193>
This commit is contained in:
parent
3aaae11d6b
commit
bbdc0b42fc
@ -135,7 +135,7 @@ struct _ClutterShaderEffectPrivate
|
|||||||
|
|
||||||
ClutterShaderType shader_type;
|
ClutterShaderType shader_type;
|
||||||
|
|
||||||
CoglHandle program;
|
CoglProgram *program;
|
||||||
CoglShader *shader;
|
CoglShader *shader;
|
||||||
|
|
||||||
GHashTable *uniforms;
|
GHashTable *uniforms;
|
||||||
@ -147,7 +147,7 @@ typedef struct _ClutterShaderEffectClassPrivate
|
|||||||
used when the class implements get_static_shader_source without
|
used when the class implements get_static_shader_source without
|
||||||
calling set_shader_source. They will be shared by all instances
|
calling set_shader_source. They will be shared by all instances
|
||||||
of this class */
|
of this class */
|
||||||
CoglHandle program;
|
CoglProgram *program;
|
||||||
CoglShader *shader;
|
CoglShader *shader;
|
||||||
} ClutterShaderEffectClassPrivate;
|
} ClutterShaderEffectClassPrivate;
|
||||||
|
|
||||||
@ -184,7 +184,7 @@ clutter_shader_effect_clear (ClutterShaderEffect *self,
|
|||||||
|
|
||||||
if (priv->program != NULL)
|
if (priv->program != NULL)
|
||||||
{
|
{
|
||||||
cogl_object_unref (priv->program);
|
g_object_unref (priv->program);
|
||||||
|
|
||||||
priv->program = NULL;
|
priv->program = NULL;
|
||||||
}
|
}
|
||||||
@ -364,7 +364,7 @@ clutter_shader_effect_try_static_source (ClutterShaderEffect *self)
|
|||||||
priv->shader = g_object_ref (class_priv->shader);
|
priv->shader = g_object_ref (class_priv->shader);
|
||||||
|
|
||||||
if (class_priv->program != NULL)
|
if (class_priv->program != NULL)
|
||||||
priv->program = cogl_object_ref (class_priv->program);
|
priv->program = g_object_ref (class_priv->program);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -524,7 +524,7 @@ clutter_shader_effect_get_shader (ClutterShaderEffect *effect)
|
|||||||
* Return value: (transfer none): a pointer to the program's handle,
|
* Return value: (transfer none): a pointer to the program's handle,
|
||||||
* or %NULL
|
* or %NULL
|
||||||
*/
|
*/
|
||||||
CoglHandle
|
CoglProgram*
|
||||||
clutter_shader_effect_get_program (ClutterShaderEffect *effect)
|
clutter_shader_effect_get_program (ClutterShaderEffect *effect)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (CLUTTER_IS_SHADER_EFFECT (effect),
|
g_return_val_if_fail (CLUTTER_IS_SHADER_EFFECT (effect),
|
||||||
|
@ -95,6 +95,6 @@ void clutter_shader_effect_set_uniform_value (ClutterShaderEffect *ef
|
|||||||
CLUTTER_EXPORT
|
CLUTTER_EXPORT
|
||||||
CoglShader* clutter_shader_effect_get_shader (ClutterShaderEffect *effect);
|
CoglShader* clutter_shader_effect_get_shader (ClutterShaderEffect *effect);
|
||||||
CLUTTER_EXPORT
|
CLUTTER_EXPORT
|
||||||
CoglHandle clutter_shader_effect_get_program (ClutterShaderEffect *effect);
|
CoglProgram* clutter_shader_effect_get_program (ClutterShaderEffect *effect);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
@ -214,7 +214,7 @@ typedef struct
|
|||||||
{
|
{
|
||||||
CoglPipelineAlphaFuncState alpha_state;
|
CoglPipelineAlphaFuncState alpha_state;
|
||||||
CoglPipelineBlendState blend_state;
|
CoglPipelineBlendState blend_state;
|
||||||
CoglHandle user_program;
|
CoglProgram *user_program;
|
||||||
CoglDepthState depth_state;
|
CoglDepthState depth_state;
|
||||||
float point_size;
|
float point_size;
|
||||||
unsigned int non_zero_point_size : 1;
|
unsigned int non_zero_point_size : 1;
|
||||||
|
@ -33,9 +33,6 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
CoglPipeline *
|
|
||||||
_cogl_pipeline_get_user_program (CoglPipeline *pipeline);
|
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
_cogl_pipeline_has_vertex_snippets (CoglPipeline *pipeline);
|
_cogl_pipeline_has_vertex_snippets (CoglPipeline *pipeline);
|
||||||
|
|
||||||
|
@ -47,19 +47,6 @@
|
|||||||
#define GL_FUNC_ADD 0x8006
|
#define GL_FUNC_ADD 0x8006
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CoglPipeline *
|
|
||||||
_cogl_pipeline_get_user_program (CoglPipeline *pipeline)
|
|
||||||
{
|
|
||||||
CoglPipeline *authority;
|
|
||||||
|
|
||||||
g_return_val_if_fail (cogl_is_pipeline (pipeline), NULL);
|
|
||||||
|
|
||||||
authority =
|
|
||||||
_cogl_pipeline_get_authority (pipeline, COGL_PIPELINE_STATE_USER_SHADER);
|
|
||||||
|
|
||||||
return authority->big_state->user_program;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
_cogl_pipeline_color_equal (CoglPipeline *authority0,
|
_cogl_pipeline_color_equal (CoglPipeline *authority0,
|
||||||
CoglPipeline *authority1)
|
CoglPipeline *authority1)
|
||||||
@ -707,7 +694,7 @@ cogl_pipeline_set_blend_constant (CoglPipeline *pipeline,
|
|||||||
pipeline->dirty_real_blend_enable = TRUE;
|
pipeline->dirty_real_blend_enable = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
CoglHandle
|
CoglProgram*
|
||||||
cogl_pipeline_get_user_program (CoglPipeline *pipeline)
|
cogl_pipeline_get_user_program (CoglPipeline *pipeline)
|
||||||
{
|
{
|
||||||
CoglPipeline *authority;
|
CoglPipeline *authority;
|
||||||
@ -728,7 +715,7 @@ cogl_pipeline_get_user_program (CoglPipeline *pipeline)
|
|||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
cogl_pipeline_set_user_program (CoglPipeline *pipeline,
|
cogl_pipeline_set_user_program (CoglPipeline *pipeline,
|
||||||
CoglHandle program)
|
CoglProgram *program)
|
||||||
{
|
{
|
||||||
CoglPipelineState state = COGL_PIPELINE_STATE_USER_SHADER;
|
CoglPipelineState state = COGL_PIPELINE_STATE_USER_SHADER;
|
||||||
CoglPipeline *authority;
|
CoglPipeline *authority;
|
||||||
@ -770,10 +757,10 @@ cogl_pipeline_set_user_program (CoglPipeline *pipeline,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (program != NULL)
|
if (program != NULL)
|
||||||
cogl_object_ref (program);
|
g_object_ref (program);
|
||||||
if (authority == pipeline &&
|
if (authority == pipeline &&
|
||||||
pipeline->big_state->user_program != NULL)
|
pipeline->big_state->user_program != NULL)
|
||||||
cogl_object_unref (pipeline->big_state->user_program);
|
g_object_unref (pipeline->big_state->user_program);
|
||||||
pipeline->big_state->user_program = program;
|
pipeline->big_state->user_program = program;
|
||||||
|
|
||||||
pipeline->dirty_real_blend_enable = TRUE;
|
pipeline->dirty_real_blend_enable = TRUE;
|
||||||
@ -1359,7 +1346,7 @@ void
|
|||||||
_cogl_pipeline_hash_user_shader_state (CoglPipeline *authority,
|
_cogl_pipeline_hash_user_shader_state (CoglPipeline *authority,
|
||||||
CoglPipelineHashState *state)
|
CoglPipelineHashState *state)
|
||||||
{
|
{
|
||||||
CoglHandle user_program = authority->big_state->user_program;
|
CoglProgram *user_program = authority->big_state->user_program;
|
||||||
state->hash = _cogl_util_one_at_a_time_hash (state->hash, &user_program,
|
state->hash = _cogl_util_one_at_a_time_hash (state->hash, &user_program,
|
||||||
sizeof (user_program));
|
sizeof (user_program));
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
#include "cogl/cogl-pipeline.h"
|
#include "cogl/cogl-pipeline.h"
|
||||||
#include "cogl/cogl-color.h"
|
#include "cogl/cogl-color.h"
|
||||||
#include "cogl/cogl-depth-state.h"
|
#include "cogl/cogl-depth-state.h"
|
||||||
|
#include "cogl/deprecated/cogl-program.h"
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
@ -352,13 +353,13 @@ cogl_pipeline_get_per_vertex_point_size (CoglPipeline *pipeline);
|
|||||||
*
|
*
|
||||||
* Return value: (transfer none): The current user program or %NULL.
|
* Return value: (transfer none): The current user program or %NULL.
|
||||||
*/
|
*/
|
||||||
COGL_EXPORT CoglHandle
|
COGL_EXPORT CoglProgram*
|
||||||
cogl_pipeline_get_user_program (CoglPipeline *pipeline);
|
cogl_pipeline_get_user_program (CoglPipeline *pipeline);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_pipeline_set_user_program:
|
* cogl_pipeline_set_user_program:
|
||||||
* @pipeline: a #CoglPipeline object.
|
* @pipeline: a #CoglPipeline object.
|
||||||
* @program: A #CoglHandle to a linked CoglProgram
|
* @program: A linked CoglProgram
|
||||||
*
|
*
|
||||||
* Associates a linked CoglProgram with the given pipeline so that the
|
* Associates a linked CoglProgram with the given pipeline so that the
|
||||||
* program can take full control of vertex and/or fragment processing.
|
* program can take full control of vertex and/or fragment processing.
|
||||||
@ -367,7 +368,7 @@ cogl_pipeline_get_user_program (CoglPipeline *pipeline);
|
|||||||
* program with a #CoglPipeline:
|
* program with a #CoglPipeline:
|
||||||
* |[
|
* |[
|
||||||
* CoglShader *shader;
|
* CoglShader *shader;
|
||||||
* CoglHandle program;
|
* CoglProgram *program;
|
||||||
* CoglPipeline *pipeline;
|
* CoglPipeline *pipeline;
|
||||||
*
|
*
|
||||||
* shader = cogl_create_shader (COGL_SHADER_TYPE_FRAGMENT);
|
* shader = cogl_create_shader (COGL_SHADER_TYPE_FRAGMENT);
|
||||||
@ -396,7 +397,7 @@ cogl_pipeline_get_user_program (CoglPipeline *pipeline);
|
|||||||
*/
|
*/
|
||||||
COGL_EXPORT void
|
COGL_EXPORT void
|
||||||
cogl_pipeline_set_user_program (CoglPipeline *pipeline,
|
cogl_pipeline_set_user_program (CoglPipeline *pipeline,
|
||||||
CoglHandle program);
|
CoglProgram *program);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_pipeline_set_depth_state: (skip)
|
* cogl_pipeline_set_depth_state: (skip)
|
||||||
|
@ -363,7 +363,7 @@ _cogl_pipeline_free (CoglPipeline *pipeline)
|
|||||||
|
|
||||||
if (pipeline->differences & COGL_PIPELINE_STATE_USER_SHADER &&
|
if (pipeline->differences & COGL_PIPELINE_STATE_USER_SHADER &&
|
||||||
pipeline->big_state->user_program)
|
pipeline->big_state->user_program)
|
||||||
cogl_object_unref (pipeline->big_state->user_program);
|
g_object_unref (pipeline->big_state->user_program);
|
||||||
|
|
||||||
if (pipeline->differences & COGL_PIPELINE_STATE_UNIFORMS)
|
if (pipeline->differences & COGL_PIPELINE_STATE_UNIFORMS)
|
||||||
{
|
{
|
||||||
@ -675,7 +675,7 @@ _cogl_pipeline_change_implies_transparency (CoglPipeline *pipeline,
|
|||||||
*
|
*
|
||||||
* TODO: check that it isn't just a vertex shader!
|
* TODO: check that it isn't just a vertex shader!
|
||||||
*/
|
*/
|
||||||
if (_cogl_pipeline_get_user_program (pipeline) != NULL)
|
if (cogl_pipeline_get_user_program (pipeline) != NULL)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -862,7 +862,7 @@ _cogl_pipeline_copy_differences (CoglPipeline *dest,
|
|||||||
{
|
{
|
||||||
if (src->big_state->user_program)
|
if (src->big_state->user_program)
|
||||||
big_state->user_program =
|
big_state->user_program =
|
||||||
cogl_object_ref (src->big_state->user_program);
|
g_object_ref (src->big_state->user_program);
|
||||||
else
|
else
|
||||||
big_state->user_program = NULL;
|
big_state->user_program = NULL;
|
||||||
}
|
}
|
||||||
|
@ -30,14 +30,13 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "cogl/cogl-object-private.h"
|
#include "cogl/cogl-boxed-value.h"
|
||||||
#include "cogl/deprecated/cogl-shader-private.h"
|
|
||||||
|
|
||||||
typedef struct _CoglProgram CoglProgram;
|
typedef struct _CoglProgram CoglProgram;
|
||||||
|
|
||||||
struct _CoglProgram
|
struct _CoglProgram
|
||||||
{
|
{
|
||||||
CoglObject _parent;
|
GObject parent_instance;
|
||||||
|
|
||||||
GSList *attached_shaders;
|
GSList *attached_shaders;
|
||||||
|
|
||||||
@ -47,6 +46,7 @@ struct _CoglProgram
|
|||||||
unsigned int age;
|
unsigned int age;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
typedef struct _CoglProgramUniform CoglProgramUniform;
|
typedef struct _CoglProgramUniform CoglProgramUniform;
|
||||||
|
|
||||||
struct _CoglProgramUniform
|
struct _CoglProgramUniform
|
||||||
@ -76,7 +76,7 @@ _cogl_program_flush_uniforms (CoglProgram *program,
|
|||||||
gboolean gl_program_changed);
|
gboolean gl_program_changed);
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
_cogl_program_has_fragment_shader (CoglHandle handle);
|
_cogl_program_has_fragment_shader (CoglProgram *self);
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
_cogl_program_has_vertex_shader (CoglHandle handle);
|
_cogl_program_has_vertex_shader (CoglProgram *self);
|
||||||
|
@ -32,27 +32,18 @@
|
|||||||
|
|
||||||
#include "cogl/cogl-util.h"
|
#include "cogl/cogl-util.h"
|
||||||
#include "cogl/cogl-context-private.h"
|
#include "cogl/cogl-context-private.h"
|
||||||
#include "cogl/cogl-object-private.h"
|
|
||||||
|
|
||||||
#include "cogl/deprecated/cogl-shader-private.h"
|
#include "cogl/deprecated/cogl-shader-private.h"
|
||||||
#include "cogl/deprecated/cogl-program-private.h"
|
#include "cogl/deprecated/cogl-program-private.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
static void _cogl_program_free (CoglProgram *program);
|
G_DEFINE_TYPE (CoglProgram, cogl_program, G_TYPE_OBJECT);
|
||||||
|
|
||||||
COGL_HANDLE_DEFINE (Program, program);
|
|
||||||
|
|
||||||
/* A CoglProgram is effectively just a list of shaders that will be
|
|
||||||
used together and a set of values for the custom uniforms. No
|
|
||||||
actual GL program is created - instead this is the responsibility
|
|
||||||
of the GLSL material backend. The uniform values are collected in
|
|
||||||
an array and then flushed whenever the material backend requests
|
|
||||||
it. */
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_cogl_program_free (CoglProgram *program)
|
cogl_program_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
|
CoglProgram *program = COGL_PROGRAM (object);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
|
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
|
||||||
@ -73,36 +64,52 @@ _cogl_program_free (CoglProgram *program)
|
|||||||
|
|
||||||
g_array_free (program->custom_uniforms, TRUE);
|
g_array_free (program->custom_uniforms, TRUE);
|
||||||
|
|
||||||
g_free (program);
|
G_OBJECT_CLASS (cogl_program_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
CoglHandle
|
static void
|
||||||
|
cogl_program_init (CoglProgram *program)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
cogl_program_class_init (CoglProgramClass *class)
|
||||||
|
{
|
||||||
|
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
||||||
|
|
||||||
|
object_class->dispose = cogl_program_dispose;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* A CoglProgram is effectively just a list of shaders that will be
|
||||||
|
used together and a set of values for the custom uniforms. No
|
||||||
|
actual GL program is created - instead this is the responsibility
|
||||||
|
of the GLSL material backend. The uniform values are collected in
|
||||||
|
an array and then flushed whenever the material backend requests
|
||||||
|
it. */
|
||||||
|
|
||||||
|
CoglProgram*
|
||||||
cogl_create_program (void)
|
cogl_create_program (void)
|
||||||
{
|
{
|
||||||
CoglProgram *program;
|
CoglProgram *program;
|
||||||
|
|
||||||
program = g_new0 (CoglProgram, 1);
|
program = g_object_new (COGL_TYPE_PROGRAM, NULL);
|
||||||
|
|
||||||
program->custom_uniforms =
|
program->custom_uniforms =
|
||||||
g_array_new (FALSE, FALSE, sizeof (CoglProgramUniform));
|
g_array_new (FALSE, FALSE, sizeof (CoglProgramUniform));
|
||||||
program->age = 0;
|
program->age = 0;
|
||||||
|
|
||||||
return _cogl_program_handle_new (program);
|
return program;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cogl_program_attach_shader (CoglHandle program_handle,
|
cogl_program_attach_shader (CoglProgram *program,
|
||||||
CoglShader *shader)
|
CoglShader *shader)
|
||||||
{
|
{
|
||||||
CoglProgram *program;
|
|
||||||
|
|
||||||
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
|
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
|
||||||
|
|
||||||
if (!cogl_is_program (program_handle) || !COGL_IS_SHADER (shader))
|
if (!COGL_IS_PROGRAM (program) || !COGL_IS_SHADER (shader))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
program = program_handle;
|
|
||||||
|
|
||||||
program->attached_shaders
|
program->attached_shaders
|
||||||
= g_slist_prepend (program->attached_shaders,
|
= g_slist_prepend (program->attached_shaders,
|
||||||
g_object_ref (shader));
|
g_object_ref (shader));
|
||||||
@ -111,7 +118,7 @@ cogl_program_attach_shader (CoglHandle program_handle,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cogl_program_link (CoglHandle handle)
|
cogl_program_link (CoglProgram *program)
|
||||||
{
|
{
|
||||||
/* There's no point in linking the program here because it will have
|
/* There's no point in linking the program here because it will have
|
||||||
to be relinked with a different fixed functionality shader
|
to be relinked with a different fixed functionality shader
|
||||||
@ -119,18 +126,14 @@ cogl_program_link (CoglHandle handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
cogl_program_get_uniform_location (CoglHandle handle,
|
cogl_program_get_uniform_location (CoglProgram *program,
|
||||||
const char *uniform_name)
|
const char *uniform_name)
|
||||||
{
|
{
|
||||||
|
g_return_val_if_fail (COGL_IS_PROGRAM (program), -1);
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
CoglProgram *program;
|
|
||||||
CoglProgramUniform *uniform;
|
CoglProgramUniform *uniform;
|
||||||
|
|
||||||
if (!cogl_is_program (handle))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
program = handle;
|
|
||||||
|
|
||||||
/* We can't just ask the GL program object for the uniform location
|
/* We can't just ask the GL program object for the uniform location
|
||||||
directly because it will change every time the program is linked
|
directly because it will change every time the program is linked
|
||||||
with a different shader. Instead we make our own mapping of
|
with a different shader. Instead we make our own mapping of
|
||||||
@ -165,7 +168,7 @@ cogl_program_modify_uniform (CoglProgram *program,
|
|||||||
{
|
{
|
||||||
CoglProgramUniform *uniform;
|
CoglProgramUniform *uniform;
|
||||||
|
|
||||||
g_return_val_if_fail (cogl_is_program (program), NULL);
|
g_return_val_if_fail (COGL_IS_PROGRAM (program), NULL);
|
||||||
g_return_val_if_fail (uniform_no >= 0 &&
|
g_return_val_if_fail (uniform_no >= 0 &&
|
||||||
uniform_no < program->custom_uniforms->len,
|
uniform_no < program->custom_uniforms->len,
|
||||||
NULL);
|
NULL);
|
||||||
@ -178,64 +181,64 @@ cogl_program_modify_uniform (CoglProgram *program,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cogl_program_set_uniform_1f (CoglHandle handle,
|
cogl_program_set_uniform_1f (CoglProgram *program,
|
||||||
int uniform_location,
|
int uniform_location,
|
||||||
float value)
|
float value)
|
||||||
{
|
{
|
||||||
CoglProgramUniform *uniform;
|
CoglProgramUniform *uniform;
|
||||||
|
|
||||||
uniform = cogl_program_modify_uniform (handle, uniform_location);
|
uniform = cogl_program_modify_uniform (program, uniform_location);
|
||||||
_cogl_boxed_value_set_1f (&uniform->value, value);
|
_cogl_boxed_value_set_1f (&uniform->value, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cogl_program_set_uniform_1i (CoglHandle handle,
|
cogl_program_set_uniform_1i (CoglProgram *program,
|
||||||
int uniform_location,
|
int uniform_location,
|
||||||
int value)
|
int value)
|
||||||
{
|
{
|
||||||
CoglProgramUniform *uniform;
|
CoglProgramUniform *uniform;
|
||||||
|
|
||||||
uniform = cogl_program_modify_uniform (handle, uniform_location);
|
uniform = cogl_program_modify_uniform (program, uniform_location);
|
||||||
_cogl_boxed_value_set_1i (&uniform->value, value);
|
_cogl_boxed_value_set_1i (&uniform->value, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cogl_program_set_uniform_float (CoglHandle handle,
|
cogl_program_set_uniform_float (CoglProgram *program,
|
||||||
int uniform_location,
|
int uniform_location,
|
||||||
int n_components,
|
int n_components,
|
||||||
int count,
|
int count,
|
||||||
const float *value)
|
const float *value)
|
||||||
{
|
{
|
||||||
CoglProgramUniform *uniform;
|
CoglProgramUniform *uniform;
|
||||||
|
|
||||||
uniform = cogl_program_modify_uniform (handle, uniform_location);
|
uniform = cogl_program_modify_uniform (program, uniform_location);
|
||||||
_cogl_boxed_value_set_float (&uniform->value, n_components, count, value);
|
_cogl_boxed_value_set_float (&uniform->value, n_components, count, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cogl_program_set_uniform_int (CoglHandle handle,
|
cogl_program_set_uniform_int (CoglProgram *program,
|
||||||
int uniform_location,
|
int uniform_location,
|
||||||
int n_components,
|
int n_components,
|
||||||
int count,
|
int count,
|
||||||
const int *value)
|
const int *value)
|
||||||
{
|
{
|
||||||
CoglProgramUniform *uniform;
|
CoglProgramUniform *uniform;
|
||||||
|
|
||||||
uniform = cogl_program_modify_uniform (handle, uniform_location);
|
uniform = cogl_program_modify_uniform (program, uniform_location);
|
||||||
_cogl_boxed_value_set_int (&uniform->value, n_components, count, value);
|
_cogl_boxed_value_set_int (&uniform->value, n_components, count, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cogl_program_set_uniform_matrix (CoglHandle handle,
|
cogl_program_set_uniform_matrix (CoglProgram *program,
|
||||||
int uniform_location,
|
int uniform_location,
|
||||||
int dimensions,
|
int dimensions,
|
||||||
int count,
|
int count,
|
||||||
gboolean transpose,
|
gboolean transpose,
|
||||||
const float *value)
|
const float *value)
|
||||||
{
|
{
|
||||||
CoglProgramUniform *uniform;
|
CoglProgramUniform *uniform;
|
||||||
|
|
||||||
uniform = cogl_program_modify_uniform (handle, uniform_location);
|
uniform = cogl_program_modify_uniform (program, uniform_location);
|
||||||
_cogl_boxed_value_set_matrix (&uniform->value,
|
_cogl_boxed_value_set_matrix (&uniform->value,
|
||||||
dimensions,
|
dimensions,
|
||||||
count,
|
count,
|
||||||
@ -245,8 +248,8 @@ cogl_program_set_uniform_matrix (CoglHandle handle,
|
|||||||
|
|
||||||
void
|
void
|
||||||
_cogl_program_flush_uniforms (CoglProgram *program,
|
_cogl_program_flush_uniforms (CoglProgram *program,
|
||||||
GLuint gl_program,
|
GLuint gl_program,
|
||||||
gboolean gl_program_changed)
|
gboolean gl_program_changed)
|
||||||
{
|
{
|
||||||
CoglProgramUniform *uniform;
|
CoglProgramUniform *uniform;
|
||||||
int i;
|
int i;
|
||||||
@ -300,13 +303,13 @@ _cogl_program_has_shader_type (CoglProgram *program,
|
|||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
_cogl_program_has_fragment_shader (CoglHandle handle)
|
_cogl_program_has_fragment_shader (CoglProgram *program)
|
||||||
{
|
{
|
||||||
return _cogl_program_has_shader_type (handle, COGL_SHADER_TYPE_FRAGMENT);
|
return _cogl_program_has_shader_type (program, COGL_SHADER_TYPE_FRAGMENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
_cogl_program_has_vertex_shader (CoglHandle handle)
|
_cogl_program_has_vertex_shader (CoglProgram *program)
|
||||||
{
|
{
|
||||||
return _cogl_program_has_shader_type (handle, COGL_SHADER_TYPE_VERTEX);
|
return _cogl_program_has_shader_type (program, COGL_SHADER_TYPE_VERTEX);
|
||||||
}
|
}
|
||||||
|
40
cogl/cogl/deprecated/cogl-program.h
Normal file
40
cogl/cogl/deprecated/cogl-program.h
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Cogl
|
||||||
|
*
|
||||||
|
* A Low Level GPU Graphics and Utilities API
|
||||||
|
*
|
||||||
|
* Copyright (C) 2008,2009 Intel Corporation.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person
|
||||||
|
* obtaining a copy of this software and associated documentation
|
||||||
|
* files (the "Software"), to deal in the Software without
|
||||||
|
* restriction, including without limitation the rights to use, copy,
|
||||||
|
* modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
* of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be
|
||||||
|
* included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||||
|
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define COGL_TYPE_PROGRAM (cogl_program_get_type ())
|
||||||
|
|
||||||
|
COGL_EXPORT
|
||||||
|
G_DECLARE_FINAL_TYPE (CoglProgram,
|
||||||
|
cogl_program,
|
||||||
|
COGL,
|
||||||
|
PROGRAM,
|
||||||
|
GObject)
|
@ -37,6 +37,7 @@
|
|||||||
#include "cogl/cogl-types.h"
|
#include "cogl/cogl-types.h"
|
||||||
#include "cogl/cogl-defines.h"
|
#include "cogl/cogl-defines.h"
|
||||||
#include "cogl/cogl-macros.h"
|
#include "cogl/cogl-macros.h"
|
||||||
|
#include "cogl/deprecated/cogl-program.h"
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
@ -294,31 +295,16 @@ cogl_shader_get_shader_type (CoglShader *self);
|
|||||||
* Create a new cogl program object that can be used to replace parts of the GL
|
* Create a new cogl program object that can be used to replace parts of the GL
|
||||||
* rendering pipeline with custom code.
|
* rendering pipeline with custom code.
|
||||||
*
|
*
|
||||||
* Returns: a new cogl program.
|
* Returns: (transfer full): a new cogl program.
|
||||||
* Deprecated: 1.16: Use #CoglSnippet api
|
* Deprecated: 1.16: Use #CoglSnippet api
|
||||||
*/
|
*/
|
||||||
COGL_DEPRECATED_FOR (cogl_snippet_)
|
COGL_DEPRECATED_FOR (cogl_snippet_)
|
||||||
COGL_EXPORT CoglHandle
|
COGL_EXPORT CoglProgram*
|
||||||
cogl_create_program (void);
|
cogl_create_program (void);
|
||||||
|
|
||||||
/**
|
|
||||||
* cogl_is_program:
|
|
||||||
* @handle: A CoglHandle
|
|
||||||
*
|
|
||||||
* Gets whether the given handle references an existing program object.
|
|
||||||
*
|
|
||||||
* Returns: %TRUE if the handle references a program,
|
|
||||||
* %FALSE otherwise
|
|
||||||
*
|
|
||||||
* Deprecated: 1.16: Use #CoglSnippet api
|
|
||||||
*/
|
|
||||||
COGL_DEPRECATED_FOR (cogl_snippet_)
|
|
||||||
COGL_EXPORT gboolean
|
|
||||||
cogl_is_program (CoglHandle handle);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_program_attach_shader:
|
* cogl_program_attach_shader:
|
||||||
* @program_handle: a #CoglHandle for a shdaer program.
|
* @program: a #CoglProgram for a shader program.
|
||||||
* @shader: a #CoglShader for a vertex of fragment shader.
|
* @shader: a #CoglShader for a vertex of fragment shader.
|
||||||
*
|
*
|
||||||
* Attaches a shader to a program object. A program can have multiple
|
* Attaches a shader to a program object. A program can have multiple
|
||||||
@ -330,12 +316,12 @@ cogl_is_program (CoglHandle handle);
|
|||||||
*/
|
*/
|
||||||
COGL_DEPRECATED_FOR (cogl_snippet_)
|
COGL_DEPRECATED_FOR (cogl_snippet_)
|
||||||
COGL_EXPORT void
|
COGL_EXPORT void
|
||||||
cogl_program_attach_shader (CoglHandle program_handle,
|
cogl_program_attach_shader (CoglProgram *program,
|
||||||
CoglShader *shader);
|
CoglShader *shader);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_program_link:
|
* cogl_program_link:
|
||||||
* @handle: a #CoglHandle for a shader program.
|
* @program: A shader program.
|
||||||
*
|
*
|
||||||
* Links a program making it ready for use. Note that calling this
|
* Links a program making it ready for use. Note that calling this
|
||||||
* function is optional. If it is not called the program will
|
* function is optional. If it is not called the program will
|
||||||
@ -345,11 +331,11 @@ cogl_program_attach_shader (CoglHandle program_handle,
|
|||||||
*/
|
*/
|
||||||
COGL_DEPRECATED_FOR (cogl_snippet_)
|
COGL_DEPRECATED_FOR (cogl_snippet_)
|
||||||
COGL_EXPORT void
|
COGL_EXPORT void
|
||||||
cogl_program_link (CoglHandle handle);
|
cogl_program_link (CoglProgram *program);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_program_get_uniform_location:
|
* cogl_program_get_uniform_location:
|
||||||
* @handle: a #CoglHandle for a shader program.
|
* @program: A shader program.
|
||||||
* @uniform_name: the name of a uniform.
|
* @uniform_name: the name of a uniform.
|
||||||
*
|
*
|
||||||
* Retrieve the location (offset) of a uniform variable in a shader program,
|
* Retrieve the location (offset) of a uniform variable in a shader program,
|
||||||
@ -361,12 +347,12 @@ cogl_program_link (CoglHandle handle);
|
|||||||
*/
|
*/
|
||||||
COGL_DEPRECATED_FOR (cogl_snippet_)
|
COGL_DEPRECATED_FOR (cogl_snippet_)
|
||||||
COGL_EXPORT int
|
COGL_EXPORT int
|
||||||
cogl_program_get_uniform_location (CoglHandle handle,
|
cogl_program_get_uniform_location (CoglProgram *program,
|
||||||
const char *uniform_name);
|
const char *uniform_name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_program_set_uniform_1f:
|
* cogl_program_set_uniform_1f:
|
||||||
* @program: A #CoglHandle for a linked program
|
* @program: A linked program
|
||||||
* @uniform_location: the uniform location retrieved from
|
* @uniform_location: the uniform location retrieved from
|
||||||
* cogl_program_get_uniform_location().
|
* cogl_program_get_uniform_location().
|
||||||
* @value: the new value of the uniform.
|
* @value: the new value of the uniform.
|
||||||
@ -377,13 +363,13 @@ cogl_program_get_uniform_location (CoglHandle handle,
|
|||||||
*/
|
*/
|
||||||
COGL_DEPRECATED_FOR (cogl_snippet_)
|
COGL_DEPRECATED_FOR (cogl_snippet_)
|
||||||
COGL_EXPORT void
|
COGL_EXPORT void
|
||||||
cogl_program_set_uniform_1f (CoglHandle program,
|
cogl_program_set_uniform_1f (CoglProgram *program,
|
||||||
int uniform_location,
|
int uniform_location,
|
||||||
float value);
|
float value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_program_set_uniform_1i:
|
* cogl_program_set_uniform_1i:
|
||||||
* @program: A #CoglHandle for a linked program
|
* @program: A linked program
|
||||||
* @uniform_location: the uniform location retrieved from
|
* @uniform_location: the uniform location retrieved from
|
||||||
* cogl_program_get_uniform_location().
|
* cogl_program_get_uniform_location().
|
||||||
* @value: the new value of the uniform.
|
* @value: the new value of the uniform.
|
||||||
@ -394,13 +380,13 @@ cogl_program_set_uniform_1f (CoglHandle program,
|
|||||||
*/
|
*/
|
||||||
COGL_DEPRECATED_FOR (cogl_snippet_)
|
COGL_DEPRECATED_FOR (cogl_snippet_)
|
||||||
COGL_EXPORT void
|
COGL_EXPORT void
|
||||||
cogl_program_set_uniform_1i (CoglHandle program,
|
cogl_program_set_uniform_1i (CoglProgram *program,
|
||||||
int uniform_location,
|
int uniform_location,
|
||||||
int value);
|
int value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_program_set_uniform_float:
|
* cogl_program_set_uniform_float:
|
||||||
* @program: A #CoglHandle for a linked program
|
* @program: A linked program
|
||||||
* @uniform_location: the uniform location retrieved from
|
* @uniform_location: the uniform location retrieved from
|
||||||
* cogl_program_get_uniform_location().
|
* cogl_program_get_uniform_location().
|
||||||
* @n_components: The number of components for the uniform. For
|
* @n_components: The number of components for the uniform. For
|
||||||
@ -415,15 +401,15 @@ cogl_program_set_uniform_1i (CoglHandle program,
|
|||||||
*/
|
*/
|
||||||
COGL_DEPRECATED_FOR (cogl_snippet_)
|
COGL_DEPRECATED_FOR (cogl_snippet_)
|
||||||
COGL_EXPORT void
|
COGL_EXPORT void
|
||||||
cogl_program_set_uniform_float (CoglHandle program,
|
cogl_program_set_uniform_float (CoglProgram *program,
|
||||||
int uniform_location,
|
int uniform_location,
|
||||||
int n_components,
|
int n_components,
|
||||||
int count,
|
int count,
|
||||||
const float *value);
|
const float *value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_program_set_uniform_int:
|
* cogl_program_set_uniform_int:
|
||||||
* @program: A #CoglHandle for a linked program
|
* @program: A linked program
|
||||||
* @uniform_location: the uniform location retrieved from
|
* @uniform_location: the uniform location retrieved from
|
||||||
* cogl_program_get_uniform_location().
|
* cogl_program_get_uniform_location().
|
||||||
* @n_components: The number of components for the uniform. For
|
* @n_components: The number of components for the uniform. For
|
||||||
@ -438,15 +424,15 @@ cogl_program_set_uniform_float (CoglHandle program,
|
|||||||
*/
|
*/
|
||||||
COGL_DEPRECATED_FOR (cogl_snippet_)
|
COGL_DEPRECATED_FOR (cogl_snippet_)
|
||||||
COGL_EXPORT void
|
COGL_EXPORT void
|
||||||
cogl_program_set_uniform_int (CoglHandle program,
|
cogl_program_set_uniform_int (CoglProgram *program,
|
||||||
int uniform_location,
|
int uniform_location,
|
||||||
int n_components,
|
int n_components,
|
||||||
int count,
|
int count,
|
||||||
const int *value);
|
const int *value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cogl_program_set_uniform_matrix:
|
* cogl_program_set_uniform_matrix:
|
||||||
* @program: A #CoglHandle for a linked program
|
* @program: A linked program
|
||||||
* @uniform_location: the uniform location retrieved from
|
* @uniform_location: the uniform location retrieved from
|
||||||
* cogl_program_get_uniform_location().
|
* cogl_program_get_uniform_location().
|
||||||
* @dimensions: The dimensions of the matrix. So for for example pass
|
* @dimensions: The dimensions of the matrix. So for for example pass
|
||||||
@ -462,11 +448,11 @@ cogl_program_set_uniform_int (CoglHandle program,
|
|||||||
*/
|
*/
|
||||||
COGL_DEPRECATED_FOR (cogl_snippet_)
|
COGL_DEPRECATED_FOR (cogl_snippet_)
|
||||||
COGL_EXPORT void
|
COGL_EXPORT void
|
||||||
cogl_program_set_uniform_matrix (CoglHandle program,
|
cogl_program_set_uniform_matrix (CoglProgram *program,
|
||||||
int uniform_location,
|
int uniform_location,
|
||||||
int dimensions,
|
int dimensions,
|
||||||
int count,
|
int count,
|
||||||
gboolean transpose,
|
gboolean transpose,
|
||||||
const float *value);
|
const float *value);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
@ -52,6 +52,7 @@
|
|||||||
#include "cogl/driver/gl/cogl-pipeline-vertend-glsl-private.h"
|
#include "cogl/driver/gl/cogl-pipeline-vertend-glsl-private.h"
|
||||||
#include "cogl/driver/gl/cogl-pipeline-progend-glsl-private.h"
|
#include "cogl/driver/gl/cogl-pipeline-progend-glsl-private.h"
|
||||||
#include "deprecated/cogl-program-private.h"
|
#include "deprecated/cogl-program-private.h"
|
||||||
|
#include "deprecated/cogl-shader-private.h"
|
||||||
|
|
||||||
/* These are used to generalise updating some uniforms that are
|
/* These are used to generalise updating some uniforms that are
|
||||||
required when building for drivers missing some fixed function
|
required when building for drivers missing some fixed function
|
||||||
|
@ -58,6 +58,7 @@ cogl_egl_defines_h = configure_file(
|
|||||||
)
|
)
|
||||||
|
|
||||||
cogl_deprecated_headers = [
|
cogl_deprecated_headers = [
|
||||||
|
'deprecated/cogl-program.h',
|
||||||
'deprecated/cogl-shader.h',
|
'deprecated/cogl-shader.h',
|
||||||
'deprecated/cogl-clutter.h',
|
'deprecated/cogl-clutter.h',
|
||||||
'deprecated/cogl-type-casts.h',
|
'deprecated/cogl-type-casts.h',
|
||||||
|
@ -188,7 +188,7 @@ static void
|
|||||||
set_shader_num (int new_no)
|
set_shader_num (int new_no)
|
||||||
{
|
{
|
||||||
CoglShader *shader;
|
CoglShader *shader;
|
||||||
CoglHandle program;
|
CoglProgram *program;
|
||||||
CoglPipeline *pipeline;
|
CoglPipeline *pipeline;
|
||||||
CoglContext *ctx =
|
CoglContext *ctx =
|
||||||
clutter_backend_get_cogl_context (clutter_get_default_backend ());
|
clutter_backend_get_cogl_context (clutter_get_default_backend ());
|
||||||
@ -225,7 +225,7 @@ set_shader_num (int new_no)
|
|||||||
cogl_program_set_uniform_1f (program, uniform_no, 1.0f / image_height);
|
cogl_program_set_uniform_1f (program, uniform_no, 1.0f / image_height);
|
||||||
|
|
||||||
cogl_pipeline_set_user_program (pipeline, program);
|
cogl_pipeline_set_user_program (pipeline, program);
|
||||||
cogl_object_unref (program);
|
g_object_unref (program);
|
||||||
|
|
||||||
shader_no = new_no;
|
shader_no = new_no;
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ paint (TestState *state)
|
|||||||
CoglColor color;
|
CoglColor color;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
CoglShader *shader;
|
CoglShader *shader;
|
||||||
CoglHandle program;
|
CoglProgram *program;
|
||||||
|
|
||||||
cogl_color_init_from_4ub (&color, 0, 0, 0, 255);
|
cogl_color_init_from_4ub (&color, 0, 0, 0, 255);
|
||||||
cogl_framebuffer_clear (test_fb, COGL_BUFFER_BIT_COLOR, &color);
|
cogl_framebuffer_clear (test_fb, COGL_BUFFER_BIT_COLOR, &color);
|
||||||
@ -80,7 +80,7 @@ paint (TestState *state)
|
|||||||
|
|
||||||
/* Draw it again using the program. It should look exactly the same */
|
/* Draw it again using the program. It should look exactly the same */
|
||||||
cogl_pipeline_set_user_program (pipeline, program);
|
cogl_pipeline_set_user_program (pipeline, program);
|
||||||
cogl_object_unref (program);
|
g_object_unref (program);
|
||||||
|
|
||||||
cogl_framebuffer_draw_rectangle (test_fb, pipeline,
|
cogl_framebuffer_draw_rectangle (test_fb, pipeline,
|
||||||
50, 0, 100, 50);
|
50, 0, 100, 50);
|
||||||
|
@ -88,7 +88,7 @@ create_pipeline_for_shader (TestState *state, const char *shader_source)
|
|||||||
{
|
{
|
||||||
CoglPipeline *pipeline;
|
CoglPipeline *pipeline;
|
||||||
CoglShader *shader;
|
CoglShader *shader;
|
||||||
CoglHandle program;
|
CoglProgram *program;
|
||||||
|
|
||||||
pipeline = cogl_pipeline_new (test_ctx);
|
pipeline = cogl_pipeline_new (test_ctx);
|
||||||
|
|
||||||
@ -101,7 +101,7 @@ create_pipeline_for_shader (TestState *state, const char *shader_source)
|
|||||||
cogl_pipeline_set_user_program (pipeline, program);
|
cogl_pipeline_set_user_program (pipeline, program);
|
||||||
|
|
||||||
g_object_unref (shader);
|
g_object_unref (shader);
|
||||||
cogl_object_unref (program);
|
g_object_unref (program);
|
||||||
|
|
||||||
return pipeline;
|
return pipeline;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user