.gitlab
.gitlab-ci
clutter
cogl
cogl
cogl-pango
test-fixtures
tests
conform
meson
meson.build
mutter-cogl.test.in
test-alpha-test.c
test-alpha-textures.c
test-atlas-migration.c
test-backface-culling.c
test-blend-strings.c
test-blend.c
test-color-hsl.c
test-conform-main.c
test-copy-replace-texture.c
test-custom-attributes.c
test-declarations.h
test-depth-test.c
test-euler.c
test-fence.c
test-fixtures.c
test-framebuffer-get-bits.c
test-just-vertex-shader.c
test-layer-remove.c
test-map-buffer-range.c
test-multitexture.c
test-no-gl-header.c
test-npot-texture.c
test-object.c
test-offscreen.c
test-pipeline-cache-unrefs-texture.c
test-pipeline-shader-state.c
test-pipeline-uniforms.c
test-pipeline-user-matrix.c
test-pixel-buffer.c
test-point-size-attribute.c
test-point-size.c
test-point-sprite.c
test-premult.c
test-primitive-and-journal.c
test-primitive.c
test-read-texture-formats.c
test-readpixels.c
test-snippets.c
test-sparse-pipeline.c
test-sub-texture.c
test-texture-get-set-data.c
test-texture-mipmaps.c
test-texture-no-allocate.c
test-texture-pixmap-x11.c
test-texture-rg.c
test-version.c
test-viewport.c
test-wrap-modes.c
test-write-texture-formats.c
data
unit
README
config.env.in
meson.build
run-tests.sh
test-launcher.sh
.gitignore
cogl-config.h.meson
cogl-mutter-config.h.in
config-custom.h
meson.build
data
doc
meson
po
src
tools
.gitignore
.gitlab-ci.yml
COPYING
NEWS
README.md
config.h.meson
meson.build
meson_options.txt
mutter.doap

In plenty of places a non-static function was defined but didn't have the corresponding declaration. Fix this by adding them, or alternatively making them static.
95 lines
3.0 KiB
C
95 lines
3.0 KiB
C
#include <cogl/cogl.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include "test-declarations.h"
|
|
#include "test-utils.h"
|
|
|
|
void
|
|
test_pipeline_shader_state (void)
|
|
{
|
|
CoglOffscreen *offscreen;
|
|
CoglFramebuffer *fb;
|
|
CoglPipeline *base_pipeline;
|
|
CoglPipeline *draw_pipeline;
|
|
CoglTexture2D *tex;
|
|
CoglSnippet *snippet;
|
|
|
|
float width = cogl_framebuffer_get_width (test_fb);
|
|
float height = cogl_framebuffer_get_height (test_fb);
|
|
|
|
cogl_framebuffer_orthographic (test_fb,
|
|
0, 0, width, height,
|
|
-1,
|
|
100);
|
|
|
|
tex = cogl_texture_2d_new_with_size (test_ctx, 128, 128);
|
|
offscreen = cogl_offscreen_new_with_texture (tex);
|
|
fb = offscreen;
|
|
cogl_framebuffer_clear4f (fb, COGL_BUFFER_BIT_COLOR, 0, 0, 0, 1);
|
|
cogl_object_unref (offscreen);
|
|
|
|
cogl_framebuffer_clear4f (test_fb, COGL_BUFFER_BIT_COLOR, 1, 1, 0, 1);
|
|
|
|
|
|
/* Setup a template pipeline... */
|
|
|
|
base_pipeline = cogl_pipeline_new (test_ctx);
|
|
cogl_pipeline_set_layer_texture (base_pipeline, 1, tex);
|
|
cogl_pipeline_set_color4f (base_pipeline, 1, 0, 0, 1);
|
|
|
|
|
|
/* Derive a pipeline from the template, making a change that affects
|
|
* fragment processing but making sure not to affect vertex
|
|
* processing... */
|
|
|
|
draw_pipeline = cogl_pipeline_copy (base_pipeline);
|
|
snippet = cogl_snippet_new (COGL_SNIPPET_HOOK_FRAGMENT,
|
|
NULL, /* declarations */
|
|
"cogl_color_out = vec4 (0.0, 1.0, 0.1, 1.1);");
|
|
cogl_pipeline_add_snippet (draw_pipeline, snippet);
|
|
cogl_object_unref (snippet);
|
|
|
|
cogl_framebuffer_draw_rectangle (test_fb, draw_pipeline,
|
|
0, 0, width, height);
|
|
|
|
cogl_object_unref (draw_pipeline);
|
|
|
|
cogl_framebuffer_finish (test_fb);
|
|
|
|
|
|
/* At this point we should have provoked cogl to cache some vertex
|
|
* shader state for the draw_pipeline with the base_pipeline because
|
|
* none of the changes made to the draw_pipeline affected vertex
|
|
* processing. (NB: cogl will cache shader state with the oldest
|
|
* ancestor that the state is still valid for to maximize the chance
|
|
* that it can be used with other derived pipelines)
|
|
*
|
|
* Now we make a change to the base_pipeline to make sure that this
|
|
* cached vertex shader gets invalidated.
|
|
*/
|
|
|
|
cogl_pipeline_set_layer_texture (base_pipeline, 0, tex);
|
|
|
|
|
|
/* Now we derive another pipeline from base_pipeline to verify that
|
|
* it doesn't end up re-using the old cached state
|
|
*/
|
|
|
|
draw_pipeline = cogl_pipeline_copy (base_pipeline);
|
|
snippet = cogl_snippet_new (COGL_SNIPPET_HOOK_FRAGMENT,
|
|
NULL, /* declarations */
|
|
"cogl_color_out = vec4 (0.0, 0.0, 1.1, 1.1);");
|
|
cogl_pipeline_add_snippet (draw_pipeline, snippet);
|
|
cogl_object_unref (snippet);
|
|
|
|
cogl_framebuffer_draw_rectangle (test_fb, draw_pipeline,
|
|
0, 0, width, height);
|
|
|
|
cogl_object_unref (draw_pipeline);
|
|
|
|
|
|
test_utils_check_region (test_fb, 0, 0, width, height,
|
|
0x0000ffff);
|
|
}
|