Commit Graph

2450 Commits

Author SHA1 Message Date
Georges Basile Stavracas Neto
038a3170bf cogl/framebuffer: Add cogl_framebuffer_flush
In future patches, we'll create additional CoglFramebuffers that
will be shared via DMA-Buf with PipeWire. When recording frames,
we'll blit the current onscreen framebuffer into the shared one.

However, that presents a problem: cogl_framebuffer_blit() mimics
glBlitFramebuffer() semantics, and doesn't do an implicit flush
of the GPU command stream. As a consequence, clients may receive
unblitted or incomplete framebuffers.

We could use cogl_framebuffer_finish() to ensure the commands were
submitted to the GPU, but it is too harsh -- it blocks the CPU
completely until the commands are finished!

Add cogl_framebuffer_flush(), which ensures the command stream is
submitted to the GPU without blocking the CPU. Even though we don't
use the framebuffer specifically, it may be useful in the future
for e.g. a potential Vulkan backend to have access to the framebuffer.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/1086
2020-02-28 10:52:34 -03:00
Adam Jackson
41992757e0 cogl: GLES3 has sync objects
https://gitlab.gnome.org/GNOME/mutter/merge_requests/882
2020-02-19 17:55:46 +00:00
Adam Jackson
445af61a68 cogl: GLES3 has vertex array objects
https://gitlab.gnome.org/GNOME/mutter/merge_requests/882
2020-02-19 17:55:46 +00:00
Adam Jackson
03ef335a70 cogl: GLES3 has sampler objects
https://gitlab.gnome.org/GNOME/mutter/merge_requests/882
2020-02-19 17:55:46 +00:00
Adam Jackson
b4226daadb cogl: GLES3 has glGetStringi
https://gitlab.gnome.org/GNOME/mutter/merge_requests/882
2020-02-19 17:55:46 +00:00
Adam Jackson
5c704e3f81 cogl: Remove no-op cogl_shader_compile and cogl_shader_get_info_log
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1024
2020-02-12 21:55:44 +00:00
Adam Jackson
c1bdaba5ac cogl: Inline cogl_use_program into its one caller
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1015
2020-01-31 17:26:25 +00:00
Adam Jackson
640ad4718e cogl: Inline _cogl_framebuffer_remove_all_dependencies into its one caller
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1015
2020-01-31 17:26:25 +00:00
Adam Jackson
985b3b32ce cogl: Remove unused _cogl_pipeline_get_layers
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1015
2020-01-31 17:26:25 +00:00
Adam Jackson
795491c80a cogl: Remove unused cogl_program_use and friends
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1015
2020-01-31 17:26:25 +00:00
Adam Jackson
f5e2310dc7 cogl: Remove unused _cogl_framebuffer_set_clip_stack
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1015
2020-01-31 17:26:25 +00:00
Adam Jackson
c5a936e0e8 cogl: Remove unused _cogl_framebuffer_{push,pop}_projection
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1015
2020-01-31 17:26:25 +00:00
Adam Jackson
600dd155ce cogl: Remove unused p-axis texture wrap mode
Unused since removing 3D textures.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/1015
2020-01-31 17:26:25 +00:00
Adam Jackson
99043e2af2 cogl: Mark _cogl_buffer_access_to_gl_enum static
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1015
2020-01-31 17:26:25 +00:00
Adam Jackson
e0d2e1096d cogl: Remove unused _cogl_framebuffer_try_creating_gl_fbo
Unused since the cogl-gles2 removal in 7e8a8649.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/1015
2020-01-31 17:26:25 +00:00
Adam Jackson
136c09585d cogl: Remove unused cogl.symbols
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1015
2020-01-31 17:26:25 +00:00
Adam Jackson
5b1ff5935e cogl: Clean up private feature flags and GLSL builtin handling of same
https://gitlab.gnome.org/GNOME/mutter/merge_requests/995
2020-01-16 18:38:20 +00:00
Adam Jackson
347619a85f cogl: Remove unused GL imports from the CoglContext vtable
Notably this deletes cogl-fixed-functions.h since we are no longer using
any of the GL1-style fixed-function pipeline API.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/995
2020-01-16 18:38:20 +00:00
Adam Jackson
282eab45f7 cogl: Stop using glPointSize in big-GL
Just pass it in to the vertex shader like in GLES, it's one less thing
to vary between drivers. mutter is, shall we say, not a heavy user of
point primitives, so any performance impact (it might be measurable, who
knows) is not an issue. Again, the feature flag remains to be cleaned up
in a future commit.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/995
2020-01-16 18:38:20 +00:00
Adam Jackson
35f21c5bc0 cogl: Stop using glAlphaFunc in big-GL
We're always running through the GLSL pipeline so the fixed-function
alpha test is never invoked. This change does not yet remove the
alpha-test feture bit from the context because this bit of uniform
handling is going to be simplified in a future commit.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/995
2020-01-16 18:38:20 +00:00
Adam Jackson
9f2662c7f8 cogl: Remove fixed-function handling for layer color
This can't matter anymore, glColor* doesn't get used when drawing
through a shader.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/995
2020-01-16 18:38:20 +00:00
Adam Jackson
71a2ba7a98 cogl: Remove fixed-function workaround for point sprite coordinates
https://gitlab.gnome.org/GNOME/mutter/merge_requests/995
2020-01-16 18:38:20 +00:00
Adam Jackson
3f2ad5a50a cogl: Remove builtin/texcoord attribute tracking bitmasks from CoglContext
These were only being set from the fixed-function pipeline.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/995
2020-01-16 18:38:20 +00:00
Adam Jackson
abd094d135 cogl: Remove stray references to gl*Pointer, which we're never calling
https://gitlab.gnome.org/GNOME/mutter/merge_requests/995
2020-01-16 18:38:20 +00:00
Adam Jackson
737763112e cogl: Remove unused CoglMatrixMode
https://gitlab.gnome.org/GNOME/mutter/merge_requests/995
2020-01-16 18:38:20 +00:00
Jonas Ådahl
6e5ac0b585 Use G_GNUC_FALLTHROUGH instead of comments
Get the same task done in a bit more C:y way.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/998
2020-01-09 17:58:29 +01:00
Adam Jackson
498264959a cogl: Add support for GL_ANGLE_pack_reverse_row_order
This is the GLES equivalent of GL_MESA_pack_invert.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/980
2019-12-18 16:01:51 -05:00
Adam Jackson
e32e20521d cogl: Update documentation for COGL_PRIVATE_FEATURE_ANY_GL
https://gitlab.gnome.org/GNOME/mutter/merge_requests/973
2019-12-18 16:33:54 +00:00
Adam Jackson
9d5092cef5 cogl: Remove COGL_PRIVATE_FEATURE_GL_PROGRAMMABLE
Only the backend cares about this at all, and it's always set.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/973
2019-12-18 16:33:54 +00:00
Adam Jackson
68d0c11d88 cogl: Remove COGL_PRIVATE_FEATURE_GL_EMBEDDED
Only the driver backend cares about this now, we can equivalently check
that the driver is COGL_DRIVER_GLES2.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/973
2019-12-18 16:33:54 +00:00
Adam Jackson
fdf830940b cogl: Remove COGL_PRIVATE_FEATURE_GL_WEB
https://gitlab.gnome.org/GNOME/mutter/merge_requests/973
2019-12-18 16:33:54 +00:00
Adam Jackson
10daade1c0 cogl: Remove COGL_PRIVATE_FEATURE_GL_FIXED, track it in the driver
At this point only the gl driver is at all aware of the difference
between core and compat contexts. COGL_PRIVATE_FEATURE_GL_FIXED is also
now quite misnamed, since we're using the GLSL pipeline even for pre-GL3
contexts. Remove the private feature and handle the few remaining
differences by checking the driver class inside the gl driver.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/973
2019-12-18 16:33:54 +00:00
Adam Jackson
9a3a6dc212 cogl: Move GL-specific context setup/teardown into the driver
https://gitlab.gnome.org/GNOME/mutter/merge_requests/973
2019-12-18 16:33:54 +00:00
Adam Jackson
f9599b64d0 cogl: Add context_{,de}init hooks to CoglDriverVtable
There's quite a bit of CoglContext that properly belongs to the driver.
Add some hooks to allow the context to create/destroy such state. We
don't have driver-private storage in the CoglContext yet, though we
probably should.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/973
2019-12-18 16:33:54 +00:00
Adam Jackson
d5a70c7669 cogl: Remove unneeded X11 includes from various headers
https://gitlab.gnome.org/GNOME/mutter/merge_requests/977
2019-12-18 16:06:35 +00:00
Adam Jackson
573ba108d9 cogl: Remove unused xlib state from CoglContext
https://gitlab.gnome.org/GNOME/mutter/merge_requests/977
2019-12-18 16:06:35 +00:00
Adam Jackson
9325bd9d8e cogl: Remove unneeded GLX includes from cogl-framebuffer-private.h
https://gitlab.gnome.org/GNOME/mutter/merge_requests/977
2019-12-18 16:06:35 +00:00
Adam Jackson
420fb28d3f cogl: Move GLX-related headers into winsys/
Makes it harder to accidentally include them from the core.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/977
2019-12-18 16:06:35 +00:00
Adam Jackson
5613f4f7f4 cogl: Remove unused explicit blend-enable controls
https://gitlab.gnome.org/GNOME/mutter/merge_requests/978
2019-12-18 15:58:52 +00:00
Daniel van Vugt
02db9ee577 cogl: Remove reference to nonexistent type CoglVertex2f
It is actually CoglVertexP2.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/979
2019-12-18 15:50:36 +00:00
Daniel van Vugt
4aab814c37 cogl: Upload clipping rectangles in parallel
That is as a single array in a single GL operation. Instead of doing
each one as a separate upload.

Closes: https://gitlab.gnome.org/GNOME/mutter/issues/971

https://gitlab.gnome.org/GNOME/mutter/merge_requests/969
2019-12-18 11:52:23 +08:00
Daniel van Vugt
a48206e827 cogl: Simplify add_stencil_clip_region coordinates
https://gitlab.gnome.org/GNOME/mutter/merge_requests/969
2019-12-18 11:46:58 +08:00
Daniel van Vugt
99cc435730 cogl: Add function cogl_2d_primitives_immediate
For use in batching multiple primitives as a single GL upload.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/969
2019-12-18 11:46:54 +08:00
Jonas Ådahl
40205d8f1b cogl: Make pipeline creation introspectable
This means CoglContext is now also introspected, although its
constructor and some getters are skipped to avoid having to expose even
more types. This makes it possible to create pipelines using Javascript.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
4ede6ea8c5 cogl: Remove the framebuffer and source stacks
They have been deprecated for a long time, and all their uses in clutter
and mutter has been removed. This also removes some no longer needed
legacy state tracking, as they were only ever excercised in certain
circumstances when there was sources (pipelines or materials) on the now
removed source stack.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
77b3c0d670 cogl: Remove API implicitly switching between built in pipelines
This means cogl_set_source_color*() that switches to the opaque or
blending pipeline, or cogl_source_set_texture() which switches to the
texture pipeline.

Left is the opaque pipeline, as it is still used to compare other
pipelines to check whether they are opaque or not, and as the default
pipeline still pushed to the source stack during initialization.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
3819291cb7 cogl: Remove API implicitly using framebuffer stack
E.g. cogl_frustum(), cogl_push_matrix(), etc.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
30964051fe cogl: Remove declaration for long gone function
It was removed in 2011, but the declaration lingered. Until now.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
ae4ae61a5f cogl: Remove deprecated primitives functions
Such as cogl_rectangle() and cogl_polygon().

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
a91138c8f8 cogl/context: Remove unusued window_buffer field
It kept track of the last "window" (i.e. CoglOnscreen) was the active
on. It was used by API removed in the past, so also remove the left over
field.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
27b6d1892f cogl/path: Remove API using deprecated Cogl API
The implicit stacks are going away, so remove API that depend on it.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
2a8f0c2801 cogl/tests: Port away from legacy implicit stack based API
Use the new API where state (framebuffer, pipeline) is always passed as
parameters, instead of using the implicit material and framebuffer
stack.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
9e2e44c0c2 cogl/tests/warp-modes: Test CoglPrimitive instead of cogl_polygon()
Change the warp modes test to sanity check CoglPrimitive based polygon
drawing instead of cogl_polygon(). This removes some checks, as
cogl_polygon() has explicitly documented special behaviour for automatic
wrap modes, which CoglPrimitive does not.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
5e117b3f5a cogl/tests: Remove testing of legacy API
Some tests just test that deprecated API still work as they should.
Those APIs are being removed, so prepare by removing their tests.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
294b4eda4c cogl/tests/backface-culling: Port to non-deprecated API
Usage of cogl_polygon() was ported to CoglPrimitive, and implicit
framebuffer stack API was ported to explicit framebuffer based API.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
7faf9f91db cogl/tests/backface-culling: Stop testing legacy state
It's going away, so stop testing it.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
4b5abdc988 cogl/tests: Remove test-materials
It wasn't compiled, nor ported to the new test suite, and tests
deprecated functionality that are being removed. Lets drop it.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
e696f639ab cogl/pixel-buffer: Remove declaration hidden behind #if
Doesn't lead to anywhere, isn't used anywhere, so lets remove it.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
66f02ae93d cogl/pango: Remove deprecated API using implicit fb stack
Remove the implicit framebuffer stack using cogl_pango_render_*() API
that was replaced with the newer cogl_pango_show_*() API.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
e8e5ccf82d cogl/tests: Remove test-fixed
It was a non-built non-ported test case for removed code.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
98c0fe934b cogl: Remove CoglVertexBuffer
It was deprecated, relied on deprecated API (implicit framebuffers,
mateiarls etc), and was unused. Lets remove it.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Jonas Ådahl
49c8d42317 clutter: Introduce paint contexts
When painting, actors rely on semi global state tracked by the state to
get various things needed for painting, such as the current draw
framebuffer. Having state hidden in such ways can be very deceiving as
it's hard to follow changes spread out, and adding more and more state
that should be tracked during a paint gets annoying as they will not
change in isolation but one by one in their own places. To do this
better, introduce a paint context that is passed along in paint calls
that contains the necessary state needed during painting.

The paint context implements a framebuffer stack just as Cogl works,
which is currently needed for offscreen rendering used by clutter.

The same context is passed around for paint nodes, contents and effects
as well.

In this commit, the context is only introduced, but not used. It aims to
replace the Cogl framebuffer stack, and will allow actors to know what
view it is currently painted on.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
2019-12-03 19:02:14 +00:00
Carlos Garnacho
a586f6a152 cogl: Drop unused struct field
We only ever stored that the current clip uses the stencil buffer, but
never read it back. It doesn't seem like we'll have an use for it.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/867
2019-11-22 21:07:05 +00:00
Carlos Garnacho
a1116bc6c8 cogl: Add support for clipping regions
This uses the stencil buffer to poke holes in the shape of the
given cairo_region_t that we will draw through.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/867
2019-11-22 21:07:05 +00:00
Robert Mader
8e172aeecb cleanup: Use g_clear_handle_id() for g_source_remove()
It makes sure we do not forget to zero the id and lets us avoid
zero checks before. We use it for all new code, lets clean up the
existing code base.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/947
2019-11-22 01:27:40 +01:00
Robert Mader
92375c75f8 cleanup: Use g_clear_signal_handler() where possible
This is inspired by 98892391d7 where the usage of
`g_signal_handler_disconnect()` without resetting the corresponding
handler id later resulted in a bug. Using `g_clear_signal_handler()`
makes sure we avoid similar bugs and is almost always the better
alternative. We use it for new code, let's clean up the old code to
also use it.

A further benefit is that it can get called even if the passed id is
0, allowing us to remove a lot of now unnessecary checks, and the fact
that `g_clear_signal_handler()` checks for the right type size, forcing us
to clean up all places where we used `guint` instead of `gulong`.

No functional changes intended here and all changes should be trivial,
thus bundled in one big commit.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/940
2019-11-21 15:02:27 +00:00
Adam Jackson
22d1febf3c cogl: Remove unused CoglShaderLanguage
There is only GLSL.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/819
2019-11-20 12:15:49 -05:00
Adam Jackson
5aa971b177 cogl: Collapse some COGL_PIPELINE_{VERT,FRAG,PROG}END arrays
There is only GLSL now.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/819
2019-11-20 12:15:49 -05:00
Adam Jackson
e922c640ef cogl: Remove unused CoglPipelineFragend::passthrough
https://gitlab.gnome.org/GNOME/mutter/merge_requests/819
2019-11-20 12:15:49 -05:00
Adam Jackson
f5050a4f80 cogl: Remove unused CoglPipelineFragend::pipeline_set_parent_notify
https://gitlab.gnome.org/GNOME/mutter/merge_requests/819
2019-11-20 12:15:49 -05:00
Adam Jackson
8cac82318f cogl: Remove unused CoglPipelineProgramType
There is only GLSL.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/819
2019-11-20 12:15:45 -05:00
Adam Jackson
23e9fd3dfa cogl: Remove unused COGL_OBJECT_DEFINE_DEPRECATED_REF_COUNTING
https://gitlab.gnome.org/GNOME/mutter/merge_requests/933
2019-11-20 11:59:15 -05:00
Adam Jackson
13fd213064 cogl: Remove unported test-vertex-buffer-mutability
https://gitlab.gnome.org/GNOME/mutter/merge_requests/933
2019-11-20 11:59:15 -05:00
Adam Jackson
c69dc7566b cogl: Remove unused includes of cogl-vertex-buffer-private.h
https://gitlab.gnome.org/GNOME/mutter/merge_requests/933
2019-11-20 11:59:15 -05:00
Adam Jackson
c6f5b7f1a1 cogl: Remove unused deprecated cogl_framebuffer_{,v}draw_*
https://gitlab.gnome.org/GNOME/mutter/merge_requests/933
2019-11-20 11:59:15 -05:00
Adam Jackson
1076b31464 cogl: Remove unused deprecated cogl_onscreen_{add,remove}_swap_buffers_callback
https://gitlab.gnome.org/GNOME/mutter/merge_requests/933
2019-11-20 11:59:15 -05:00
Adam Jackson
0d006bc8d9 cogl: Remove unused deprecated cogl_matrix_ortho
https://gitlab.gnome.org/GNOME/mutter/merge_requests/933
2019-11-20 11:59:15 -05:00
Adam Jackson
794d3239c7 cogl: Remove deprecated cogl_color_set_from_*
https://gitlab.gnome.org/GNOME/mutter/merge_requests/933
2019-11-20 11:59:15 -05:00
Thomas Hindoe Paaboel Andersen
d3afe4308a test: use correct enum
The function create_texture() in test-wrap-modes.c takes a
TestUtilsTextureFlags. However a CoglTextureFlags is passed instead
in two calls. As the enums are identical this patch changes it to
use the TestUtils type.

The enum definitions:

typedef enum
{
  COGL_TEXTURE_NONE           = 0,
  COGL_TEXTURE_NO_AUTO_MIPMAP = 1 << 0,
  COGL_TEXTURE_NO_SLICING     = 1 << 1,
  COGL_TEXTURE_NO_ATLAS       = 1 << 2
} CoglTextureFlags;

typedef enum
{
  TEST_UTILS_TEXTURE_NONE           = 0,
  TEST_UTILS_TEXTURE_NO_AUTO_MIPMAP = 1 << 0,
  TEST_UTILS_TEXTURE_NO_SLICING     = 1 << 1,
  TEST_UTILS_TEXTURE_NO_ATLAS       = 1 << 2
} TestUtilsTextureFlags;

https://gitlab.gnome.org/GNOME/mutter/merge_requests/938
2019-11-16 00:14:20 +01:00
Thomas Hindoe Paaboel Andersen
d48fec8855 cogl: drop extraneous parentheses
Fixes a compile warning with clang

https://gitlab.gnome.org/GNOME/mutter/merge_requests/938
2019-11-16 00:14:14 +01:00
Thomas Hindoe Paaboel Andersen
d992722c24 cogl: correct check for COGL_OFFSCREEN_DISABLE_DEPTH_AND_STENCIL
In _cogl_offscreen_gl_allocate we only want to perform certain actions if
COGL_OFFSCREEN_DISABLE_DEPTH_AND_STENCIL is not set in create_flags.

We perfrom this check with:

if (!offscreen->create_flags & COGL_OFFSCREEN_DISABLE_DEPTH_AND_STENCIL)

which is not correct as we negate the create_flags before the bitwise &.

It happens to work as intended though, as CoglOffscreenFlags only has one
element, and that element has the value 1. If the flag is not set then the
nagation of create_flags is true and the bitwise and with the element value
is true as well.
If any flag is set then the negation will give 0 and the bitwise & will be
false.

So while it works correctly it is fragile as either additional flags or a
change in the enum element value will break this check. This patch makes
things a bit more safe by adding parentheses to let the bitwise & happen
before the negation.

Definition of the enum:

typedef enum
{
  COGL_OFFSCREEN_DISABLE_DEPTH_AND_STENCIL = 1
} CoglOffscreenFlags;

https://gitlab.gnome.org/GNOME/mutter/merge_requests/938
2019-11-16 00:13:59 +01:00
Thomas Hindoe Paaboel Andersen
81bb4f0051 cogl: return correct enum type
cogl_pipeline_get_front_face_winding() is supposed to return a CoglWinding. It
takes a CoglPipeline as argument and does the following input validation:

g_return_val_if_fail (cogl_is_pipeline (pipeline),
                      COGL_PIPELINE_CULL_FACE_MODE_NONE);

The returned COGL_PIPELINE_CULL_FACE_MODE_NONE is not a winding.

The function was added with this check 8 years ago in
5369b3c601

I do not see any of the two options in the CoglWinding as particularly good
choice for a return value on bad input, but let's go with
COGL_WINDING_CLOCKWISE as that is equivalent with the behavior for all
these years.

Definitions of the two enums:

typedef enum
{
  COGL_WINDING_CLOCKWISE,
  COGL_WINDING_COUNTER_CLOCKWISE
} CoglWinding;

typedef enum
{
  COGL_PIPELINE_CULL_FACE_MODE_NONE,
  COGL_PIPELINE_CULL_FACE_MODE_FRONT,
  COGL_PIPELINE_CULL_FACE_MODE_BACK,
  COGL_PIPELINE_CULL_FACE_MODE_BOTH
} CoglPipelineCullFaceMode;

https://gitlab.gnome.org/GNOME/mutter/merge_requests/934
2019-11-13 20:37:05 +01:00
Adam Jackson
9cbf83d59c cogl: glBlendFuncSeparate is always available
So we don't need glBlendFunc.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/903
2019-11-08 12:15:39 +00:00
Adam Jackson
07ca100130 cogl: glBlendEquationSeparate is always available
So we don't need glBlendEquation.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/903
2019-11-08 12:15:39 +00:00
Adam Jackson
806ebc464a cogl: Remove cogl_texture_2d_gl_new_from_foreign
As noted in <cogl-texture-2d-gl.h> (now also removed), this is for
allowing external GL callers to promote one of their textures to a
CoglTexture. We aren't doing that and don't want to start.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/883
2019-11-07 12:47:23 +00:00
Adam Jackson
54ac1f6b59 test: Remove unreferenced test-texture-rectangle
This isn't even built, and it's testing GL_TEXTURE_RECTANGLE_ARB, which
is not even a code path we support anymore since we require real NPOT.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/883
2019-11-07 12:47:23 +00:00
Adam Jackson
9b16b74b5d cogl: Remove unused stuff from cogl-material-compat.[ch]
You could probably move (most of) what's left into a static-inline kind
of header that only gets consumed by the tests.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/922
2019-11-07 12:33:35 +00:00
Adam Jackson
e5b0f474ab cogl: Remove some unused framebuffer API
https://gitlab.gnome.org/GNOME/mutter/merge_requests/913
2019-11-01 16:48:12 -04:00
Carlos Garnacho
d47324e8d7 cogl/egl: Explicitly initialize age variable
In case of error, it's untouched by EGL, which probably means an
invalid read.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/906
2019-10-30 17:09:03 +00:00
Carlos Garnacho
ee4638ef5c cogl/egl: Make surface current before querying buffer age
Unknown since when, we started deferring the eglMakeCurrent for the
current framebuffer till we started painting on it, which means we
are preparing for rendering a view without guarantees that the
framebuffer we will paint to is the current drawing surface for the
EGL context.

A fairly common case where that assumption will break is multimonitor
set ups, in this case we will be preparing to paint to a view while
the current draw surface is that of the previously rendered view's.

Mesa will in this case return EGL_BAD_SURFACE when querying the buffer
age, since the surface is not yet the current draw surface. This
makes us give up on buffer age checks, and paint the whole view. Since
the problem repeats when painting the next view, we are effectively
doing full-screen redraws on all monitors.

Since cogl usually works implicitly, and querying the buffer age is
meaningless if you're not meant to paint on a surface, make the surface
the current draw surface implicitly before querying the buffer age.

This brings us glorious partial invalidations back when several views
had to be repainted.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/906
2019-10-30 17:09:03 +00:00
Carlos Garnacho
6ee7c0f486 cogl/egl: Warn when we fail to query a buffer age.
In order to avoid log spamming, just warn once it starts to happen, not
on every frame for every onscreen. Just knowing that this is happening
is a hint that something's going wrong.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/906
2019-10-30 17:09:03 +00:00
Adam Jackson
f4f7e31303 cogl: Fix GLES2 fallback
Say you're using intel gen3, you poor soul. Your big-GL maxes out at 1.5
unless you use dirty tricks, but you do have GLES2. We try to fall back
to GLES in this case, but we only ever say eglBindAPI(EGL_OPENGL_API).
So when we go to do CreateContext, even though we think we've requested
GLES 2.0, the driver will compare that "2.0" against the maximum big-GL
version, and things will fail.

Fix this by binding EGL_OPENGL_ES_API before trying a GLES context.

https://gitlab.gnome.org/GNOME/mutter/issues/635
2019-10-30 16:14:32 +00:00
Thomas Hindoe Paaboel Andersen
7c036c5896 cogl: fix a compile warning
In find_onscreen_for_xid() we want to loop over the framebuffers
and skip any that is not onscreen.

The code today does this by negating the framebuffer type variable
and skipping if that equals COGL_FRAMEBUFFER_TYPE_ONSCREEN. This
actually works as the enum used will function as a boolean:

typedef enum _CoglFramebufferType {
  COGL_FRAMEBUFFER_TYPE_ONSCREEN,
  COGL_FRAMEBUFFER_TYPE_OFFSCREEN
} CoglFramebufferType;

But it is a bit weird logic and fragile if more types are added.
(not that I can think of any different type...)

To simplify this, and to silence a warning in clang this patch just
changes it to a != test.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/905
2019-10-30 16:02:45 +00:00
Adam Jackson
793c2ac58d cogl: Remove unused cogl-deprecated.h
https://gitlab.gnome.org/GNOME/mutter/merge_requests/896
2019-10-30 02:28:40 +00:00
Adam Jackson
13d9e4db30 cogl: Remove unused cogl/cogl-pango.h
https://gitlab.gnome.org/GNOME/mutter/merge_requests/896
2019-10-30 02:28:40 +00:00
Adam Jackson
e84dbd7faf cogl: Remove unused CoglPipelineLightingState
https://gitlab.gnome.org/GNOME/mutter/merge_requests/904
2019-10-29 16:00:02 -04:00
Adam Jackson
711023ea93 cogl: Remove unused COGL_PIPELINE_STATE_LIGHTING
https://gitlab.gnome.org/GNOME/mutter/merge_requests/904
2019-10-29 16:00:01 -04:00
Adam Jackson
468dc99dc9 cogl: Remove unused pipeline lighting API
https://gitlab.gnome.org/GNOME/mutter/merge_requests/904
2019-10-29 15:59:59 -04:00
Adam Jackson
6b8ee80fd0 cogl: Remove unused deprecated material lighting API
https://gitlab.gnome.org/GNOME/mutter/merge_requests/904
2019-10-29 15:59:53 -04:00
Adam Jackson
17e39ad79c cogl: Remove support for cogl.conf
There are still environment variables for these controls, but having
them in a config file doesn't really make sense for mutter. Even if it
did we probably don't want to be parsing the same file as some
standalone version of cogl.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/902
2019-10-29 19:25:37 +00:00