mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-01-05 02:10:19 +01:00
gl/msaa: Use GL_IMG_multisampled_render_to_texture when available
Some OpenGLES platforms support GL_IMG_multisampled_render_to_texture instead of GL_EXT_multisampled_render_to_texture.
This commit is contained in:
parent
3bedff0c00
commit
ba4a4eae05
3 changed files with 41 additions and 3 deletions
|
|
@ -249,6 +249,14 @@ _cairo_gl_context_init (cairo_gl_context_t *ctx)
|
|||
glGetIntegerv(GL_MAX_SAMPLES_EXT, &ctx->num_samples);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CAIRO_HAS_GLESV2_SURFACE && defined(GL_MAX_SAMPLES_IMG)
|
||||
if (ctx->has_packed_depth_stencil &&
|
||||
_cairo_gl_has_extension ("GL_IMG_multisampled_render_to_texture")) {
|
||||
glGetIntegerv(GL_MAX_SAMPLES_IMG, &ctx->num_samples);
|
||||
}
|
||||
#endif
|
||||
|
||||
ctx->supports_msaa = ctx->num_samples > 1;
|
||||
if (ctx->num_samples > MAX_MSAA_SAMPLES)
|
||||
ctx->num_samples = MAX_MSAA_SAMPLES;
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ typedef struct _cairo_gl_dispatch_entry {
|
|||
offsetof(cairo_gl_dispatch_t, name) }
|
||||
#define DISPATCH_ENTRY_ARB_OES(name) { { "gl"#name, "gl"#name"ARB", "gl"#name"OES" }, \
|
||||
offsetof(cairo_gl_dispatch_t, name) }
|
||||
#define DISPATCH_ENTRY_EXT_EXT(name) { { "gl"#name, "gl"#name"EXT", "gl"#name"EXT" }, \
|
||||
#define DISPATCH_ENTRY_EXT_IMG(name) { { "gl"#name, "gl"#name"EXT", "gl"#name"IMG" }, \
|
||||
offsetof(cairo_gl_dispatch_t, name) }
|
||||
#define DISPATCH_ENTRY_CUSTOM(name, name2) { { "gl"#name, "gl"#name2, "gl"#name }, \
|
||||
offsetof(cairo_gl_dispatch_t, name)}
|
||||
|
|
@ -117,8 +117,12 @@ cairo_private cairo_gl_dispatch_entry_t dispatch_fbo_entries[] = {
|
|||
DISPATCH_ENTRY_EXT (FramebufferRenderbuffer),
|
||||
DISPATCH_ENTRY_EXT (DeleteRenderbuffers),
|
||||
DISPATCH_ENTRY_EXT (BlitFramebuffer),
|
||||
DISPATCH_ENTRY_EXT_EXT (RenderbufferStorageMultisample),
|
||||
DISPATCH_ENTRY_EXT_EXT (FramebufferTexture2DMultisample),
|
||||
DISPATCH_ENTRY_LAST
|
||||
};
|
||||
|
||||
cairo_private cairo_gl_dispatch_entry_t dispatch_multisampling_entries[] = {
|
||||
DISPATCH_ENTRY_EXT_IMG (RenderbufferStorageMultisample),
|
||||
DISPATCH_ENTRY_EXT_IMG (FramebufferTexture2DMultisample),
|
||||
DISPATCH_ENTRY_LAST
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -205,6 +205,27 @@ _cairo_gl_dispatch_init_fbo (cairo_gl_dispatch_t *dispatch,
|
|||
return CAIRO_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static cairo_status_t
|
||||
_cairo_gl_dispatch_init_multisampling (cairo_gl_dispatch_t *dispatch,
|
||||
cairo_gl_get_proc_addr_func_t get_proc_addr,
|
||||
int gl_version,
|
||||
cairo_gl_flavor_t gl_flavor)
|
||||
{
|
||||
/* For the multisampling table, there are two GLES versions of the
|
||||
* extension, so we put one in the EXT slot and one in the real ES slot.*/
|
||||
cairo_gl_dispatch_name_t dispatch_name = CAIRO_GL_DISPATCH_NAME_CORE;
|
||||
if (gl_flavor == CAIRO_GL_FLAVOR_ES) {
|
||||
if (_cairo_gl_has_extension ("GL_EXT_multisampled_render_to_texture"))
|
||||
dispatch_name = CAIRO_GL_DISPATCH_NAME_EXT;
|
||||
else if (_cairo_gl_has_extension ("GL_IMG_multisampled_render_to_texture"))
|
||||
dispatch_name = CAIRO_GL_DISPATCH_NAME_ES;
|
||||
}
|
||||
_cairo_gl_dispatch_init_entries (dispatch, get_proc_addr,
|
||||
dispatch_multisampling_entries,
|
||||
dispatch_name);
|
||||
return CAIRO_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
cairo_status_t
|
||||
_cairo_gl_dispatch_init (cairo_gl_dispatch_t *dispatch,
|
||||
cairo_gl_get_proc_addr_func_t get_proc_addr)
|
||||
|
|
@ -231,5 +252,10 @@ _cairo_gl_dispatch_init (cairo_gl_dispatch_t *dispatch,
|
|||
if (status != CAIRO_STATUS_SUCCESS)
|
||||
return status;
|
||||
|
||||
status = _cairo_gl_dispatch_init_multisampling (dispatch, get_proc_addr,
|
||||
gl_version, gl_flavor);
|
||||
if (status != CAIRO_STATUS_SUCCESS)
|
||||
return status;
|
||||
|
||||
return CAIRO_STATUS_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue