| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The previous code to initialise the depth state on the default
pipeline wasn't initialising the magic number. If you later tried to
retrieve the depth state using cogl_pipeline_get_depth_state you would
end up with an invalid depth state struct and you would just get
warnings if you tried to use it for anything. This patch just replaces
the initialisation with a call to cogl_depth_state_init because it
uses the same values anyway.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit be9d5b34c66ac81656e37779eb64891a062f90af)
|
|
|
|
|
|
|
|
|
|
|
|
| |
_cogl_shader_compile_real spews a warning when
shader compilation fails if COGL_GL_DEBUG is
defined. This warning is never freed.
https://bugzilla.gnome.org/show_bug.cgi?id=672243
Reviewed-by: Neil Roberts <neil@linux.intel.com>
(cherry picked from commit dc00c2724998c422dcd597b87f222553e67f3801)
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The 1.0 wrapper for cogl_path_curve_to was using the wrong value for
y_1 so it wouldn't work.
The patch was written by Dénes Almási.
https://bugzilla.gnome.org/show_bug.cgi?id=672174
Reviewed-by: Neil Roberts <neil@linux.intel.com>
(cherry picked from commit c8f8dbec7e2b36e350b4e12368a060eed39333da)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
cogl_texture_get_data uses find_best_gl_get_data_format from the
texture driver which returns the closest format to use for retrieving
pixel data given an intended format. However this function doesn't
know about the texture we are reading data from so it doesn't know
that the data we will actually receive will have the same premult
status as the texture's format. With the GL driver, this function ends
up returning exactly the same format as passed in which means it will
never do a premult conversion. Under GLES it always returns
COGL_PIXEL_FORMAT_RGBA_8888 so it will always make the data unpremult
even if the final requested format is premultiplied.
This patch fixes it so that it copies the premult status of the
closest_format from the format of the underlying texture. That way it
will later convert or not depending on the requested target format.
Note this patch breaks test-sub-texture with the GL driver because
that is incorrectly trying to read the texture data back as RGBA_8888
even though it depends on it not doing a premult conversion. The test
was already broken with GLES2 and remains broken.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit 39c6bf59cbb571538acbda51714375f0d65098b9)
Conflicts:
cogl/cogl-texture.c
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Both the cogl_texture_get_data and _cogl_blit_begin implementations
will internally try to create an FBO for a texture and have fallbacks
if the FBO fails. However neither of them were catching errors when
allocating the framebuffer so the fallback wouldn't work properly.
This patch just adds an explicit call to cogl_framebuffer_allocate for
these uses and causes it to use the next fallback if it fails.
Based on a patch by Adel Gadllah.
https://bugzilla.gnome.org/show_bug.cgi?id=669368
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit ec1bb4ce39ea0103fa0d1d408ca325922fdb7131)
|
|
|
|
|
|
|
|
|
|
|
| |
When calling cogl_texture_get_data we need to ensure that any
framebuffers rendering to the texture have flushed their journals.
https://bugzilla.gnome.org/show_bug.cgi?id=668913
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit 43bc0a4b0de72743c4eedd3cd6175c8b8c6cc658)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Cogl keeps a pointer to the last used onscreen framebuffer from the
context to implement the deprecated cogl_set_draw_buffer function
which can take COGL_WINDOW_BUFFER as the target to use the last
onscreen buffer. Previously this would also take a reference to that
pointer. However that was causing a circular reference between the
framebuffer and the context which makes it impossible to clean up
resources properly when onscreen buffers are used. This patch instead
changes it to just store the pointer and then clear the pointer during
_cogl_onscreen_free as a kind of cheap weak reference.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry-pick from commit 39ca3e51dfaa652ae4a0d936fff32a5edaca6c5f)
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch moves the call to _cogl_destroy_texture_units() from
_cogl_context_free() to later on. When destroying a GL texture the
texture units are checked. This would end up accessing invalid memory
so we need to try to destroy the texture units only after everything
that might be referencing a texture has been destroyed.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit 1566941c2fe67fa7d95f489aeede1d0801427614)
|
|
|
|
|
|
|
|
|
| |
When setting a matrix uniform value the transpose property was getting
lost and left uninitialized.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit c6373246631055d4bb3fccec73d5fe8fa2101f5e)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
On GLES2, we need to specify an array size for the texture coord
varying array. Previously this size would be decided in one of the
following ways:
- For generated vertex shaders it is always the number of layers in
the pipeline.
- For generated fragment shaders it is the highest sampled texture
unit in the pipeline or the number of attributes supplied by the
primitive, whichever is higher.
- For user shaders it is usually the number of attributes supplied by
the primitive. However, if the application tries to compile the
shader and query the result before using it, it will always be at
least 4.
These shaders can quite easily end up with different values for the
declaration which makes it fail to link. This patch changes it so that
all of the shaders are generated with the maximum of the number of
texture attributes supplied by the primitive and the number of layers
in the pipeline. If this value changes then the shaders are
regenerated, including user shaders. That way all of the shaders will
always have the same value.
https://bugzilla.gnome.org/show_bug.cgi?id=662184
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit 00f0a66ec949a641db744f56230c2bcfc98c1883)
|
|
|
|
|
|
| |
While this will emit a warning on systems using the GNU libc, on other
platforms (especially MingW), it will lead to a crash because of msgfmt
doesn't check for NULL.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Both the GLSL and the ARBfp pipeline backends were using a variable
called last_used_for_pipeline to keep track of the last pipeline that
the shader or program state was used for. If this address is the same
as last time when the pipeline state is flushed then Cogl will only
flush the uniforms that have been modified, otherwise it will flush
all of them. The problem with this is that there was nothing to keep
that address alive so it could be destroyed and reused for a different
pipeline by the time the shader state is reused. This is quite likely
to happen in an application using legacy state because in that case
the shader state will always be used with a one-shot pipeline that
will likely be recycled in the next frame.
There is already a destroy callback to unref the shader state when the
pipeline is destroyed so this patch just makes that callback also
clear the last_used_for_pipeline pointer if it matches the pipeline
being destroyed.
https://bugzilla.gnome.org/show_bug.cgi?id=662542
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit 49e733fcdcb12978ae165c6352e2c0acb6bc6757)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously the EGL backend was directly prodding the width/height
members of the framebuffer structure when a configure notify event is
received. However this doesn't set the dirty flag for the viewport so
Cogl will continue using the wrong viewport y offset. The GLX backend
is already using an abstraction for updating the size which does set
the flag. This patch just makes the EGL backend also use that
abstraction.
(cherry picked from commit 1d67085e8a523891f72bb3c5d2a5275f541555ca)
|
|
|
|
|
|
|
|
|
| |
This just adds the new cogl mailing list to the template release
message from make release-message
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit 8052e37c70d55f5ded0fd9d3e3dac3efb7cd1932)
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Now that we have reasonably good Windows support, we'd like to make
sure each release still compiles there.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit 8c9c01a6f4bba0174751973bec599359f92eace9)
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously the instructions were telling the developer to run
./build/config.guess to get the build name to pass to
configure. However that file only exists after running automake so
it's a bit awkward. This patch makes it download config.guess from the
gitweb for automake and just explicitly run it.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit dfb7c765672091fce1f4297ad864c38d2cba3e53)
|
|
|
|
|
|
|
|
|
| |
The instructions mentioned the Clutter source tree instead of the Cogl
source tree.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit a08c1978cb5b70f39064e1d516e5ff5059184190)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The -c option for wget and -C - option to curl are used to make it
continue the download if the file already exists. The idea was that it
wouldn't waste time downloading the files again if the file already
exists. However this causes problems if the remote file gets larger
because the download will continue from the size of the old file so it
will get corrupt. Instead let's just explicitly check if the file
already exists and avoid calling wget or curl altogether.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit c2721664aac000588e0a20b0bb1f8e896b18eddc)
|
|
|
|
|
|
| |
Reviewed-by: Neil Roberts <neil@linux.intel.com>
(cherry picked from commit 8325ca00b8b04f65ab833714cfa2b43094676cbc)
|
|
|
|
|
|
|
|
|
|
|
|
| |
During arbfp codegen we weren't checking for NULL textures and so we
would crash when trying to query a NULL texture's GL texture target.
Since NULL texture targets result in ctx->default_gl_texture_2d_tex
being bound we can assume that a NULL texture corresponds to a
GL_TEXTURE_2D target.
Reviewed-by: Neil Roberts <neil@linux.intel.com>
(cherry picked from commit dd5208b0ba248990e92b71f6c420757eb06c4b9c)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If we failed to create a native texture from pixmap via EGL or GLX then
we shouldn't call the winsys's texture_pixmap_x11_damage_notify
function. By doing the validation in cogl-texture-pixmap-x11.c the
winsys code can continue to assume that it doesn't need to verify there
is a valid tex_pixmap->winsys pointer.
Thanks to Damien Leone <dleone@nvidia.com> for catching this issue.
https://bugzilla.gnome.org/show_bug.cgi?id=660184
(cherry picked from commit 1f61868fed78457c0da487d2a270804fb70dce8f)
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When freeing a pipeline in _cogl_pipeline_free we weren't making sure to
free the layers_cache which was leading to a memory leak.
Thanks to Sunjin Yang for finding this.
https://bugzilla.gnome.org/show_bug.cgi?id=660986
Reviewed-by: Neil Roberts <neil@linux.intel.com>
(cherry picked from commit 762c730d493b633f7e369b8f264358152cc2fa8b)
|
|
|
|
|
|
|
|
|
|
|
| |
Uninitialized textures could contain random bits. That makes the test
fail as glColorMask is used to let only one of the RGB pass through.
https://bugzilla.gnome.org/show_bug.cgi?id=660387
Reviewed-by: Neil Roberts <neil@linux.intel.com>
(cherry picked from commit e7cdb1b11b47c81fe9e9a4815a3a2085343e03e8)
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
mesa_wgl.h can no longer be fetched from upstream and since it's no
longer used anyway we don't fetch this any more. This also updates
the blurb printed after fetching dependencies to show how to run
./configure so we pass --enable-wgl not --enable-stub-winsys and
to also pass the -I path for the cogl-cross/include directory which has
the latest gl.h we fetched so the build doesn't try and use the headers
shipped with the mingw toolchain which may be out-of-date.
Reviewed-by: Neil Roberts <neil@linux.intel.com>
|
| |
|
|
|
|
|
| |
This tweaks the overview of Cogl to use more technical terminology
instead of saying Cogl is used to "draw pretty pictures".
|
|
|
|
|
| |
This documents that `make check` should be run as part of the release
process.
|
|
|
|
|
|
|
| |
This ports the backface culling conformance test to work without
Clutter.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
|
|
|
|
|
|
|
|
|
| |
When testing with COGL_DEBUG=disable-npot-textures all of the tests
would fail because the testing infrastructure itself ends up creating
a sliced texture and then trying to use it as a render target. This
just modifies test-utils to use 512x512 for the size of the texture.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
|
|
|
|
|
|
|
|
|
|
|
|
| |
cogl_rectangle has some validation code to check whether the first
layer has a sliced texture. If so it will abandon the rest of the
layers and print a warning. However it was even doing this pruning and
displaying the warning if there is only one layer. This patch just
makes it check whether the pipeline actually has more than one layer
before pruning or displaying the warning but it will still fallback to
the multiple quads path.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This adds an internal function to set the backface culling state on a
pipeline. This includes properties to set the culling mode (front,
back or both) and also to set which face is considered the front
(COGL_WINDING_CLOCKWISE or COGL_WINDING_COUNTER_CLOCKWISE). The actual
front face flushed to GL depends on whether we are rendering to an
offscreen buffer or not. This means that when changing between on- and
off- screen framebuffers it now checks whether the last flushed
pipeline has backface culling enabled and forces a reflush of the cull
face state if so.
The backface culling is now set on a pipeline as part of the legacy
state. This is important because some code in Cogl assumes it can
flush a temporary pipeline to revert to a known state, but previously
this wouldn't disable backface culling so things such as flushing the
clip stack could get confused.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When changing between two framebuffers that have different color masks
it now forces the pipeline to flush the mask by setting
current_pipeline_changes_since_flush. For this to work there needs to
be a common bit of code that gets called when the framebuffers are
changed that has access to both the old framebuffer and the new
framebuffer. _cogl_set_framebuffers_real can't be used for this
because when it is called from cogl_pop_framebuffer the stack entries
have already changed so it can't know the old framebuffer. This patch
adds a new function called notify_buffers_changed which should get
called whenever the buffers are changed and it explicitly gets passed
pointers to the old and new buffers. cogl_pop_framebuffer now calls
this instead of trying to use _cogl_set_framebuffers_real to force a
flush.
This patch also fixes the ctx->window_buffer pointer. Previously this
was implemented by searching in the framebuffer stack for an onscreen
framebuffer whenever the current buffers are changed. However it does
this after the stack has already changed so it won't usually find the
right buffer.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
|
|
|
|
|
|
|
|
| |
There is a currently a bug where pushing a buffer with a different
color mask will not cause the color mask to be flushed. This adds a
test to demonstrate that.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The ARBfp backend can't handle fog so it tries to check for when it's
enabled and bails out. However it was checking using the global legacy
state value on the CoglContext but this doesn't necessarily reflect
the state that will actually be used by the pipeline because Cogl may
have internally pushed a different pipeline.
This patch adds an internal _cogl_pipeline_get_fog_enabled which the
ARBfp backend now uses.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Some code in Cogl such as when flushing a stencil clip assumes that it
can push a temporary simple pipeline to reset to a known state for
internal drawing operations. However this breaks down if the
application has set any legacy state because that is set globally so
it will also get applied to the internal pipeline.
_cogl_draw_attributes already had an internal flag to disable applying
the legacy state but I think this is quite awkward to use because not
all places that push a pipeline draw the attribute buffers directly so
it is difficult to pass the flag down through the layers.
Conceptually the legacy state is meant to be like a layer on top of
the purely pipeline-based state API so I think ideally we should have
an internal function to push the source without the applying the
legacy state. The legacy state can't be applied as the pipeline is
pushed because the global state can be modified even after it is
pushed. This patch adds a _cogl_push_source() function which takes an
extra boolean flag to mark whether to enable the legacy state. The
value of this flag is stored alongside the pipeline in the pipeline
stack. Another new internal function called
_cogl_get_enable_legacy_state queries whether the top entry in the
pipeline stack has legacy state enabled. cogl-primitives and the
vertex array drawing code now use this to determine whether to apply
the legacy state when drawing. The COGL_DRAW_SKIP_LEGACY_STATE flag is
now removed.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
|