1
0
Fork 0
mutter-performance-source/clutter
Neil Roberts 2ee0e40848 Merge cogl-program-{gl,gles}.c into one cogl-program.c
This merges the two implementations of CoglProgram for the GLES2 and
GL backends into one. The implementation is more like the GLES2
version which would track the uniform values and delay sending them to
GL. CoglProgram is now effectively just a GList of CoglShaders along
with an array of stored uniform values. CoglProgram never actually
creates a GL program, instead this is left up to the GLSL material
backend. This is necessary on GLES2 where we may need to relink the
user's program with different generated shaders depending on the other
emulated fixed function state. It will also be necessary in the future
GLSL backends for regular OpenGL. The GLSL and ARBfp material backends
are now the ones that create and link the GL program from the list of
shaders. The linked program is attached to the private material state
so that it can be reused if the CoglProgram is used again with the
same material. This does mean the program will get relinked if the
shader is used with multiple materials. This will be particularly bad
if the legacy cogl_program_use function is used because that
effectively always makes one-shot materials. This problem will
hopefully be alleviated if we make a hash table with a cache of
generated programs. The cogl program would then need to become part of
the hash lookup.

Each CoglProgram now has an age counter which is incremented every
time a shader is added. This is used by the material backends to
detect when we need to create a new GL program for the user program.

The internal _cogl_use_program function now takes a GL program handle
rather than a CoglProgram. It no longer needs any special differences
for GLES2. The GLES2 wrapper function now also uses this function to
bind its generated shaders.

The ARBfp shaders no longer store a copy of the program source but
instead just directly create a program object when cogl_shader_source
is called. This avoids having to reupload the source if the same
shader is used in multiple materials.

There are currently a few gross hacks to get the GLES2 backend to work
with this. The problem is that the GLSL material backend is now
generating a complete GL program but the GLES2 wrapper still needs to
add its fixed function emulation shaders if the program doesn't
provide either a vertex or fragment shader. There is a new function in
the GLES2 wrapper called _cogl_gles2_use_program which replaces the
previous cogl_program_use implementation. It extracts the GL shaders
from the GL program object and creates a new GL program containing all
of the shaders plus its fixed function emulation. This new program is
returned to the GLSL material backend so that it can still flush the
custom uniforms using it. The user_program is attached to the GLES2
settings struct as before but its stored using a GL program handle
rather than a CoglProgram pointer. This hack will go away once the
GLSL material backend replaces the GLES2 wrapper by generating the
code itself.

Under Mesa this currently generates some GL errors when glClear is
called in test-cogl-shader-glsl. I think this is due to a bug in Mesa
however. When the user program on the material is changed the GLSL
backend gets notified and deletes the GL program that it linked from
the user shaders. The program will still be bound in GL
however. Leaving a deleted shader bound exposes a bug in Mesa's
glClear implementation. More details are here:

https://bugs.freedesktop.org/show_bug.cgi?id=31194
2010-10-28 19:51:42 +01:00
..
cally Avoid mixing declarations and code 2010-10-25 13:18:25 +01:00
cogl Merge cogl-program-{gl,gles}.c into one cogl-program.c 2010-10-28 19:51:42 +01:00
egl Clean up clutter-private.h/4 2010-10-21 12:22:17 +01:00
fruity Clean up clutter-private.h/4 2010-10-21 12:22:17 +01:00
glx Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
osx Clean up clutter-private.h/4 2010-10-21 12:22:17 +01:00
wayland Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
win32 Merge branch 'private-cleanup' 2010-10-25 23:44:53 +01:00
x11 Merge branch 'private-cleanup' 2010-10-25 23:44:53 +01:00
clutter-action.c docs: Description fixes for Action and Constraint 2010-05-26 14:09:24 +01:00
clutter-action.h Add named modifiers for Action and Constraint 2010-05-20 11:19:51 +01:00
clutter-actor-box.c Merge branch 'private-cleanup' 2010-10-25 23:44:53 +01:00
clutter-actor-meta-private.h Add copyright notices 2010-10-21 13:13:00 +01:00
clutter-actor-meta.c Add copyright notices 2010-10-21 13:13:00 +01:00
clutter-actor-meta.h Add copyright notices 2010-10-21 13:13:00 +01:00
clutter-actor-private.h Add copyright notices 2010-10-21 13:13:00 +01:00
clutter-actor.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-actor.h docs: Fix the annotations of ActorClass 2010-10-04 11:26:46 +01:00
clutter-align-constraint.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-align-constraint.h Remove trailin enum commas, avoiding C++ warnings. 2010-09-13 15:45:55 +01:00
clutter-alpha.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-alpha.h
clutter-animatable.c Use G_DEFINE_INTERFACE 2010-10-18 11:26:44 +01:00
clutter-animatable.h animatable: Allow passing a NULL animation 2010-07-31 10:56:09 +01:00
clutter-animation.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-animation.h animation: Allow detaching an animation from an actor 2010-09-10 11:18:53 +01:00
clutter-animator.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-animator.h animator,state: Mark variadic functions that ends with NULL 2010-06-07 14:22:26 +01:00
clutter-backend-private.h Add copyright notices 2010-10-21 13:13:00 +01:00
clutter-backend.c Clean up clutter-private.h/4 2010-10-21 12:22:17 +01:00
clutter-backend.h Clean up clutter-private.h/4 2010-10-21 12:22:17 +01:00
clutter-behaviour-depth.c Added documentation for alpha parameter in Behaviour constructors. 2010-09-09 16:34:21 +01:00
clutter-behaviour-depth.h
clutter-behaviour-ellipse.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-behaviour-ellipse.h Remove the last few fixed-point entry points 2009-06-19 16:38:35 +01:00
clutter-behaviour-opacity.c Added documentation for alpha parameter in Behaviour constructors. 2010-09-09 16:34:21 +01:00
clutter-behaviour-opacity.h docs: Fix gtk-doc warnings 2010-04-22 16:39:18 +01:00
clutter-behaviour-path.c Added documentation for alpha parameter in Behaviour constructors. 2010-09-09 16:34:21 +01:00
clutter-behaviour-path.h docs: Fix the 'Since' annotation for some functions 2009-11-19 11:51:21 +00:00
clutter-behaviour-rotate.c Added documentation for alpha parameter in Behaviour constructors. 2010-09-09 16:34:21 +01:00
clutter-behaviour-rotate.h Remove the last few fixed-point entry points 2009-06-19 16:38:35 +01:00
clutter-behaviour-scale.c Added documentation for alpha parameter in Behaviour constructors. 2010-09-09 16:34:21 +01:00
clutter-behaviour-scale.h Remove the last few fixed-point entry points 2009-06-19 16:38:35 +01:00
clutter-behaviour.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-behaviour.h
clutter-bezier.c analysis: Use static functions when possible 2010-06-01 12:08:18 +01:00
clutter-bezier.h
clutter-bin-layout.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-bin-layout.h [layout, docs] Clean up BinLayout documentation 2009-10-14 11:31:29 +01:00
clutter-bind-constraint.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-bind-constraint.h constraint: Re-implement using update_allocation() 2010-09-17 12:17:50 +01:00
clutter-binding-pool.c binding-pool: Use the correct marshaller 2010-10-25 00:39:13 +01:00
clutter-binding-pool.h
clutter-blur-effect.c blur-effect: fix paint volume padding 2010-09-29 15:12:57 +01:00
clutter-blur-effect.h effect: Add BlurEffect 2010-06-03 14:10:55 +01:00
clutter-box-layout.c box-layout: Plug a memory leak 2010-10-08 13:29:49 +01:00
clutter-box-layout.h Add "homogeneous" mode to ClutterBoxLayout. 2010-03-25 09:41:54 +00:00
clutter-box.c Remove unnecessary GLib version checks 2010-10-18 11:26:45 +01:00
clutter-box.h docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-cairo-texture.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-cairo-texture.h cairo-texture: Allow overriding the surface creation 2010-10-18 11:26:45 +01:00
clutter-child-meta.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-child-meta.h
clutter-click-action.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-click-action.h click-action: Add get_button() 2010-08-26 16:39:39 +01:00
clutter-clone.c Merge branch 'private-cleanup' 2010-10-25 23:44:53 +01:00
clutter-clone.h
clutter-color.c Use G_DEFINE_BOXED_TYPE for all boxed types 2010-10-18 11:26:45 +01:00
clutter-color.h color: Add Color.interpolate() method 2010-10-11 15:39:19 +01:00
clutter-colorize-effect.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-colorize-effect.h effect: Add ColorizeEffect 2010-06-03 14:10:55 +01:00
clutter-constraint.c docs: Add sub-classing notes on ActorMeta and Constraint 2010-09-17 14:54:31 +01:00
clutter-constraint.h constraint: Add ::update_allocation() 2010-09-17 12:17:50 +01:00
clutter-container.c Remove unnecessary GLib version checks 2010-10-18 11:26:45 +01:00
clutter-container.h container: Add child_notify() wrapper 2010-09-30 14:58:23 +01:00
clutter-debug.h debug: Do not use '&' in the messages 2010-10-19 01:42:19 +01:00
clutter-deform-effect.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-deform-effect.h effect: Add DeformEffect 2010-06-10 18:40:29 +01:00
clutter-deprecated.h Fix copy-and-paste errors in the deprecation macros 2009-07-21 09:22:38 +01:00
clutter-desaturate-effect.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-desaturate-effect.h effect: Add DesaturateEffect 2010-06-03 14:10:55 +01:00
clutter-device-manager-private.h Add copyright notices 2010-10-21 13:13:00 +01:00
clutter-device-manager.c Clean up clutter-private.h/4 2010-10-21 12:22:17 +01:00
clutter-device-manager.h docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-drag-action.c Remove conditional wrappers for property installation/notification 2010-10-18 11:26:45 +01:00
clutter-drag-action.h drag-action: Added x-drag-threshold and y-drag-threshold properties 2010-09-07 10:40:49 +01:00
clutter-effect.c paint volumes: another pass at the design 2010-09-29 15:12:57 +01:00
clutter-effect.h effect: Fix up the class ABI 2010-10-04 11:30:32 +01:00
clutter-enum-types.c.in
clutter-enum-types.h.in
clutter-event.c Clean up clutter-private.h/4 2010-10-21 12:22:17 +01:00
clutter-event.h Remove trailin enum commas, avoiding C++ warnings. 2010-09-13 15:45:55 +01:00
clutter-feature.c Clean up clutter-private.h/4 2010-10-21 12:22:17 +01:00
clutter-feature.h docs: Document SWAP_EVENTS feature flag 2010-02-15 19:03:37 +00:00
clutter-fixed-layout.c layout-manager: Implement set_container() 2010-06-07 22:40:34 +01:00
clutter-fixed-layout.h [layout, docs] Document FixedLayout 2009-10-14 11:31:29 +01:00
clutter-fixed.c Add caller-allocates annotations 2010-09-08 17:04:21 +01:00
clutter-fixed.h
clutter-flow-layout.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-flow-layout.h [layout] Remove FlowLayout:wrap 2009-10-14 11:31:30 +01:00
clutter-frame-source.c Remove unnecessary GLib version checks 2010-10-18 11:26:45 +01:00
clutter-frame-source.h
clutter-group.c paint volumes: another pass at the design 2010-09-29 15:12:57 +01:00
clutter-group.h
clutter-id-pool.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-id-pool.h
clutter-input-device.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-input-device.h device: Allow updating devices from embedding toolkits 2010-02-17 18:21:50 +00:00
clutter-interval.c interval: Remember to chain up to parent in finalize() 2010-10-25 00:31:36 +01:00
clutter-interval.h interval: Add a pointer variant to compute_value() 2010-05-24 15:06:14 +01:00
clutter-keysyms-compat.h keysyms: Update the macros to CLUTTER_KEY_* 2010-09-10 17:54:52 +01:00
clutter-keysyms-table.h
clutter-keysyms-update.pl keysyms: Update the macros to CLUTTER_KEY_* 2010-09-10 17:54:52 +01:00
clutter-keysyms.h keysyms: Update the macros to CLUTTER_KEY_* 2010-09-10 17:54:52 +01:00
clutter-layout-manager.c Remove unnecessary GLib version checks 2010-10-18 11:26:45 +01:00
clutter-layout-manager.h layout: Let begin_animation() return the Alpha 2009-12-13 01:23:54 +00:00
clutter-layout-meta.c Conditionally use g_object_notify_by_pspec 2010-08-10 17:12:06 +01:00
clutter-layout-meta.h layout: Add padding to LayoutMeta 2009-12-02 11:36:25 +00:00
clutter-list-model.c Further annotation fixes 2010-09-08 16:41:47 +01:00
clutter-list-model.h
clutter-main.c Clean up clutter-private.h/4 2010-10-21 12:22:17 +01:00
clutter-main.h Initialize accessibility support on clutter_init 2010-07-05 16:45:43 +01:00
clutter-marshal.list binding-pool: Use the correct marshaller 2010-10-25 00:39:13 +01:00
clutter-master-clock.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-master-clock.h ensure next iteration 2009-07-10 11:38:42 +01:00
clutter-media.c Use G_DEFINE_INTERFACE 2010-10-18 11:26:44 +01:00
clutter-media.h Miscellaneous documentation fixes 2010-05-19 16:10:05 +01:00
clutter-model-private.h
clutter-model.c Further annotation fixes 2010-09-08 16:41:47 +01:00
clutter-model.h
clutter-offscreen-effect.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-offscreen-effect.h offscreen-effect: Rename create_target to create_buffer 2010-09-01 18:05:53 +01:00
clutter-page-turn-effect.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-page-turn-effect.h effect: Add PageTurnEffect 2010-06-10 18:40:29 +01:00
clutter-paint-volume-private.h Add copyright notices 2010-10-21 13:13:00 +01:00
clutter-paint-volume.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-path-constraint.c docs: Add PathConstraint 2010-10-25 16:09:40 +01:00
clutter-path-constraint.h docs: Add PathConstraint 2010-10-25 16:09:40 +01:00
clutter-path.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-path.h [path] MOVE_TO and LINE_TO only use a pair of coordinates 2009-10-06 10:43:41 +01:00
clutter-private.h Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-profile.c profile: Update to uprof-0.3 dep for --enable-profile 2010-09-14 12:43:16 +01:00
clutter-profile.h profile: Update to uprof-0.3 dep for --enable-profile 2010-09-14 12:43:16 +01:00
clutter-rectangle.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-rectangle.h
clutter-score.c Further annotation fixes 2010-09-08 16:41:47 +01:00
clutter-score.h
clutter-script-parser.c script: Fix the memory management 2010-10-19 01:42:19 +01:00
clutter-script-private.h script: Fix the memory management 2010-10-19 01:42:19 +01:00
clutter-script.c script: Fix the memory management 2010-10-19 01:42:19 +01:00
clutter-script.h
clutter-scriptable.c Use G_DEFINE_INTERFACE 2010-10-18 11:26:44 +01:00
clutter-scriptable.h Remove the internal copy of JSON-GLib 2010-09-29 15:57:28 +01:00
clutter-settings.c Conditionally use g_object_notify_by_pspec 2010-08-10 17:12:06 +01:00
clutter-settings.h settings: Migrate Backend settings to a new object 2010-06-21 15:55:36 +01:00
clutter-shader-effect.c Remove unused variables 2010-10-19 01:42:19 +01:00
clutter-shader-effect.h docs: Effects fixes for the API reference 2010-06-03 14:34:41 +01:00
clutter-shader-types.c shader-types: Check the size of the values 2010-06-16 17:14:57 +01:00
clutter-shader-types.h
clutter-shader.c introspection: Add annotations 2010-09-03 12:14:50 +01:00
clutter-shader.h
clutter-stage-manager-private.h Add copyright notices 2010-10-21 13:13:00 +01:00
clutter-stage-manager.c Clean up clutter-private.h/2 2010-10-21 11:30:19 +01:00
clutter-stage-manager.h Miscellaneous documentation fixes 2010-05-19 16:10:05 +01:00
clutter-stage-private.h Add copyright notices 2010-10-21 13:13:00 +01:00
clutter-stage-window.c Use G_DEFINE_INTERFACE 2010-10-18 11:26:44 +01:00
clutter-stage-window.h Further annotation fixes 2010-09-08 16:41:47 +01:00
clutter-stage.c Merge branch 'private-cleanup' 2010-10-25 23:44:53 +01:00
clutter-stage.h stage: Add the NO_CLEAR_ON_PAINT hint 2010-07-13 14:57:48 +01:00
clutter-state.c state: Correct the documentation 2010-10-25 17:21:20 +01:00
clutter-state.h Use G_DEFINE_BOXED_TYPE for all boxed types 2010-10-18 11:26:45 +01:00
clutter-table-layout.c Plug a memory leak in clutter-table-layout 2010-10-08 12:11:39 +01:00
clutter-table-layout.h table-layout: Invert row/column in arguments 2010-09-23 15:17:58 +01:00
clutter-text.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-text.h text: Add :font-description 2010-02-03 14:38:13 +00:00
clutter-texture.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-texture.h [texture] Support picking textures according to their alpha channel 2010-05-28 16:07:17 +01:00
clutter-timeline.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-timeline.h Remove the last few fixed-point entry points 2009-06-19 16:38:35 +01:00
clutter-timeout-interval.c Whitespace fixes 2010-02-01 10:40:34 +00:00
clutter-timeout-interval.h
clutter-timeout-pool.c Remove unnecessary GLib version checks 2010-10-18 11:26:45 +01:00
clutter-timeout-pool.h docs: API reference fixes 2010-09-20 13:15:44 +01:00
clutter-types.h actor-box: Add setters for origin and size 2010-10-25 15:45:35 +01:00
clutter-units.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-units.h units: Cache the pixels value inside Units 2009-10-16 15:25:37 +01:00
clutter-util.c paint_volume: Splits out clutter_paint_volume code 2010-09-29 15:13:00 +01:00
clutter-util.h Deprecate clutter_util_next_p2() 2010-02-06 10:49:33 +00:00
clutter-version.h.in docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter.h Add ClutterPathConstraint 2010-10-25 15:46:04 +01:00
clutter.pc.in build: Start moving to a non-recursive layout 2010-09-29 14:40:15 +01:00
Makefile.am Merge branch 'private-cleanup' 2010-10-25 23:44:53 +01:00