mirror of
https://github.com/brl/mutter.git
synced 2024-11-26 01:50:42 -05:00
Move all of the GL function pointers directly to CoglContext
Instead of storing all of the feature function pointers in the driver specific data of the CoglContext they are now all stored directly in CoglContext. There is a single header containing the description of the functions which gets included by cogl-context.h. There is a single function in cogl-feature-private.c to check for all of these functions. The name of the function pointer variables have been changed from ctx->drv.pf_glWhatever to just ctx->glWhatever. The feature flags that get set when an extension is available are now separated from the table of extensions. This is necessary because different extensions can mean different things on GLES and GL. For example, having access to glMapBuffer implies read and write support on GL but only write support on GLES. The flags are instead set in the driver specific init function by checking whether the function pointers were successfully resolved. _cogl_feature_check has been changed to assume the feature is supported if any of the listed extensions are available instead of requiring all of them. This makes it more convenient to specify alternate names for the extension. Nothing else had previously listed more than one name for an extension so this shouldn't cause any problems.
This commit is contained in:
parent
17a558a386
commit
dae02a99a5
@ -104,7 +104,6 @@ cogl_driver_sources =
|
||||
|
||||
if COGL_DRIVER_GL
|
||||
cogl_driver_sources += \
|
||||
$(srcdir)/driver/gl/cogl-feature-functions-gl.h \
|
||||
$(srcdir)/driver/gl/cogl-gl.c \
|
||||
$(srcdir)/driver/gl/cogl-texture-driver-gl.c \
|
||||
$(srcdir)/driver/gl/cogl-context-driver-gl.h \
|
||||
@ -113,7 +112,6 @@ endif
|
||||
|
||||
if COGL_DRIVER_GLES
|
||||
cogl_driver_sources += \
|
||||
$(srcdir)/driver/gles/cogl-feature-functions-gles.h \
|
||||
$(srcdir)/driver/gles/cogl-gles.c \
|
||||
$(srcdir)/driver/gles/cogl-texture-driver-gles.c \
|
||||
$(srcdir)/driver/gles/cogl-context-driver-gles.h \
|
||||
@ -210,6 +208,7 @@ cogl_sources_c = \
|
||||
$(srcdir)/cogl-clip-state.c \
|
||||
$(srcdir)/cogl2-clip-state.h \
|
||||
$(srcdir)/cogl2-clip-state.c \
|
||||
$(srcdir)/cogl-ext-functions.h \
|
||||
$(srcdir)/cogl-feature-private.h \
|
||||
$(srcdir)/cogl-feature-private.c \
|
||||
$(srcdir)/cogl-fixed.c \
|
||||
|
@ -49,26 +49,26 @@
|
||||
|
||||
#if defined (HAVE_COGL_GL)
|
||||
|
||||
#define glGenBuffers ctx->drv.pf_glGenBuffers
|
||||
#define glBindBuffer ctx->drv.pf_glBindBuffer
|
||||
#define glBufferData ctx->drv.pf_glBufferData
|
||||
#define glBufferSubData ctx->drv.pf_glBufferSubData
|
||||
#define glGetBufferSubData ctx->drv.pf_glGetBufferSubData
|
||||
#define glDeleteBuffers ctx->drv.pf_glDeleteBuffers
|
||||
#define glMapBuffer ctx->drv.pf_glMapBuffer
|
||||
#define glUnmapBuffer ctx->drv.pf_glUnmapBuffer
|
||||
#define glClientActiveTexture ctx->drv.pf_glClientActiveTexture
|
||||
#define glGenBuffers ctx->glGenBuffers
|
||||
#define glBindBuffer ctx->glBindBuffer
|
||||
#define glBufferData ctx->glBufferData
|
||||
#define glBufferSubData ctx->glBufferSubData
|
||||
#define glGetBufferSubData ctx->glGetBufferSubData
|
||||
#define glDeleteBuffers ctx->glDeleteBuffers
|
||||
#define glMapBuffer ctx->glMapBuffer
|
||||
#define glUnmapBuffer ctx->glUnmapBuffer
|
||||
#define glClientActiveTexture ctx->glClientActiveTexture
|
||||
#ifndef GL_ARRAY_BUFFER
|
||||
#define GL_ARRAY_BUFFER GL_ARRAY_BUFFER_ARB
|
||||
#endif
|
||||
|
||||
#define glVertexAttribPointer ctx->drv.pf_glVertexAttribPointer
|
||||
#define glEnableVertexAttribArray ctx->drv.pf_glEnableVertexAttribArray
|
||||
#define glDisableVertexAttribArray ctx->drv.pf_glDisableVertexAttribArray
|
||||
#define glVertexAttribPointer ctx->glVertexAttribPointer
|
||||
#define glEnableVertexAttribArray ctx->glEnableVertexAttribArray
|
||||
#define glDisableVertexAttribArray ctx->glDisableVertexAttribArray
|
||||
#define MAY_HAVE_PROGRAMABLE_GL
|
||||
|
||||
#define glDrawRangeElements(mode, start, end, count, type, indices) \
|
||||
ctx->drv.pf_glDrawRangeElements (mode, start, end, count, type, indices)
|
||||
ctx->glDrawRangeElements (mode, start, end, count, type, indices)
|
||||
|
||||
#else /* GLES 1/2 */
|
||||
|
||||
|
@ -222,7 +222,7 @@ validate_blend_statements (CoglBlendStringStatement *statements,
|
||||
if (n_statements == 2)
|
||||
{
|
||||
/* glBlendEquationSeperate is GL 2.0 only */
|
||||
if (!ctx->drv.pf_glBlendEquationSeparate &&
|
||||
if (!ctx->glBlendEquationSeparate &&
|
||||
statements[0].function->type != statements[1].function->type)
|
||||
{
|
||||
error_string = "Separate blend functions for the RGB an A "
|
||||
|
@ -51,18 +51,18 @@
|
||||
|
||||
#if defined (HAVE_COGL_GL)
|
||||
|
||||
#define glGenBuffers ctx->drv.pf_glGenBuffers
|
||||
#define glBindBuffer ctx->drv.pf_glBindBuffer
|
||||
#define glBufferData ctx->drv.pf_glBufferData
|
||||
#define glBufferSubData ctx->drv.pf_glBufferSubData
|
||||
#define glGetBufferSubData ctx->drv.pf_glGetBufferSubData
|
||||
#define glDeleteBuffers ctx->drv.pf_glDeleteBuffers
|
||||
#define glGenBuffers ctx->glGenBuffers
|
||||
#define glBindBuffer ctx->glBindBuffer
|
||||
#define glBufferData ctx->glBufferData
|
||||
#define glBufferSubData ctx->glBufferSubData
|
||||
#define glGetBufferSubData ctx->glGetBufferSubData
|
||||
#define glDeleteBuffers ctx->glDeleteBuffers
|
||||
|
||||
#endif
|
||||
|
||||
/* These two are always accessed through an extension, even on GLES */
|
||||
#define glMapBuffer ctx->drv.pf_glMapBuffer
|
||||
#define glUnmapBuffer ctx->drv.pf_glUnmapBuffer
|
||||
#define glMapBuffer ctx->glMapBuffer
|
||||
#define glUnmapBuffer ctx->glUnmapBuffer
|
||||
|
||||
#ifndef GL_PIXEL_PACK_BUFFER
|
||||
#define GL_PIXEL_PACK_BUFFER 0x88EB
|
||||
|
@ -264,6 +264,27 @@ struct _CoglContext
|
||||
unsigned int winsys_features
|
||||
[COGL_FLAGS_N_INTS_FOR_SIZE (COGL_WINSYS_FEATURE_N_FEATURES)];
|
||||
void *winsys;
|
||||
|
||||
/* This defines a list of function pointers that Cogl uses from
|
||||
either GL or GLES. All functions are accessed indirectly through
|
||||
these pointers rather than linking to them directly */
|
||||
#ifndef APIENTRY
|
||||
#define APIENTRY
|
||||
#endif
|
||||
|
||||
#define COGL_EXT_BEGIN(name, \
|
||||
min_gl_major, min_gl_minor, \
|
||||
gles_availability, \
|
||||
extension_suffixes, extension_names)
|
||||
#define COGL_EXT_FUNCTION(ret, name, args) \
|
||||
ret (APIENTRY * name) args;
|
||||
#define COGL_EXT_END()
|
||||
|
||||
#include "cogl-ext-functions.h"
|
||||
|
||||
#undef COGL_EXT_BEGIN
|
||||
#undef COGL_EXT_FUNCTION
|
||||
#undef COGL_EXT_END
|
||||
};
|
||||
|
||||
CoglContext *
|
||||
|
@ -47,7 +47,7 @@
|
||||
|
||||
#ifdef HAVE_COGL_GL
|
||||
#include "cogl-pipeline-fragend-arbfp-private.h"
|
||||
#define glActiveTexture _context->drv.pf_glActiveTexture
|
||||
#define glActiveTexture _context->glActiveTexture
|
||||
#endif
|
||||
|
||||
/* This isn't defined in the GLES headers */
|
||||
|
438
cogl/cogl-ext-functions.h
Normal file
438
cogl/cogl-ext-functions.h
Normal file
@ -0,0 +1,438 @@
|
||||
/*
|
||||
* Cogl
|
||||
*
|
||||
* An object oriented GL/GLES Abstraction/Utility Layer
|
||||
*
|
||||
* Copyright (C) 2009, 2011 Intel Corporation.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/* This is included multiple times with different definitions for
|
||||
* these macros. The macros are given the following arguments:
|
||||
*
|
||||
* COGL_EXT_BEGIN:
|
||||
*
|
||||
* @name: a unique symbol name for this feature
|
||||
*
|
||||
* @min_gl_major: the major part of the minimum GL version where these
|
||||
* functions are available in core, or 255 if it isn't available in
|
||||
* any version.
|
||||
* @min_gl_minor: the minor part of the minimum GL version where these
|
||||
* functions are available in core, or 255 if it isn't available in
|
||||
* any version.
|
||||
*
|
||||
* @gles_availability: flags to specify which versions of GLES the
|
||||
* functions are available in. Should be a combination of
|
||||
* COGL_EXT_IN_GLES and COGL_EXT_IN_GLES2.
|
||||
*
|
||||
* @extension_suffixes: A zero-separated list of suffixes in a
|
||||
* string. These are appended to the extension name to get a complete
|
||||
* extension name to try. The suffix is also appended to all of the
|
||||
* function names. The suffix can optionally include a ':' to specify
|
||||
* an alternate suffix for the function names.
|
||||
*
|
||||
* @extension_names: A list of extension names to try. If any of these
|
||||
* extensions match then it will be used.
|
||||
*/
|
||||
COGL_EXT_BEGIN (offscreen,
|
||||
255, 255,
|
||||
COGL_EXT_IN_GLES2,
|
||||
/* for some reason the ARB version of this
|
||||
extension doesn't have an ARB suffix for the
|
||||
functions */
|
||||
"ARB:\0EXT\0OES\0",
|
||||
"framebuffer_object\0")
|
||||
COGL_EXT_FUNCTION (void, glGenRenderbuffers,
|
||||
(GLsizei n,
|
||||
GLuint *renderbuffers))
|
||||
COGL_EXT_FUNCTION (void, glDeleteRenderbuffers,
|
||||
(GLsizei n,
|
||||
const GLuint *renderbuffers))
|
||||
COGL_EXT_FUNCTION (void, glBindRenderbuffer,
|
||||
(GLenum target,
|
||||
GLuint renderbuffer))
|
||||
COGL_EXT_FUNCTION (void, glRenderbufferStorage,
|
||||
(GLenum target,
|
||||
GLenum internalformat,
|
||||
GLsizei width,
|
||||
GLsizei height))
|
||||
COGL_EXT_FUNCTION (void, glGenFramebuffers,
|
||||
(GLsizei n,
|
||||
GLuint *framebuffers))
|
||||
COGL_EXT_FUNCTION (void, glBindFramebuffer,
|
||||
(GLenum target,
|
||||
GLuint framebuffer))
|
||||
COGL_EXT_FUNCTION (void, glFramebufferTexture2D,
|
||||
(GLenum target,
|
||||
GLenum attachment,
|
||||
GLenum textarget,
|
||||
GLuint texture,
|
||||
GLint level))
|
||||
COGL_EXT_FUNCTION (void, glFramebufferRenderbuffer,
|
||||
(GLenum target,
|
||||
GLenum attachment,
|
||||
GLenum renderbuffertarget,
|
||||
GLuint renderbuffer))
|
||||
COGL_EXT_FUNCTION (GLenum, glCheckFramebufferStatus,
|
||||
(GLenum target))
|
||||
COGL_EXT_FUNCTION (void, glDeleteFramebuffers,
|
||||
(GLsizei n,
|
||||
const GLuint *framebuffers))
|
||||
COGL_EXT_FUNCTION (void, glGenerateMipmap,
|
||||
(GLenum target))
|
||||
COGL_EXT_FUNCTION (void, glGetFramebufferAttachmentParameteriv,
|
||||
(GLenum target,
|
||||
GLenum attachment,
|
||||
GLenum pname,
|
||||
GLint *params))
|
||||
COGL_EXT_END ()
|
||||
|
||||
COGL_EXT_BEGIN (offscreen_blit, 255, 255,
|
||||
0, /* not in either GLES */
|
||||
"EXT\0ANGLE\0",
|
||||
"framebuffer_blit\0")
|
||||
COGL_EXT_FUNCTION (void, glBlitFramebuffer,
|
||||
(GLint srcX0,
|
||||
GLint srcY0,
|
||||
GLint srcX1,
|
||||
GLint srcY1,
|
||||
GLint dstX0,
|
||||
GLint dstY0,
|
||||
GLint dstX1,
|
||||
GLint dstY1,
|
||||
GLbitfield mask,
|
||||
GLenum filter))
|
||||
COGL_EXT_END ()
|
||||
|
||||
COGL_EXT_BEGIN (offscreen_multisample, 255, 255,
|
||||
0, /* not in either GLES */
|
||||
"EXT\0",
|
||||
"framebuffer_multisample\0")
|
||||
COGL_EXT_FUNCTION (void, glRenderbufferStorageMultisample,
|
||||
(GLenum target,
|
||||
GLsizei samples,
|
||||
GLenum internalformat,
|
||||
GLsizei width,
|
||||
GLsizei height))
|
||||
COGL_EXT_END ()
|
||||
|
||||
/* ARB_fragment_program */
|
||||
COGL_EXT_BEGIN (arbfp, 255, 255,
|
||||
0, /* not in either GLES */
|
||||
"ARB\0",
|
||||
"fragment_program\0")
|
||||
COGL_EXT_FUNCTION (void, glGenPrograms,
|
||||
(GLsizei n,
|
||||
GLuint *programs))
|
||||
COGL_EXT_FUNCTION (void, glDeletePrograms,
|
||||
(GLsizei n,
|
||||
GLuint *programs))
|
||||
COGL_EXT_FUNCTION (void, glBindProgram,
|
||||
(GLenum target,
|
||||
GLuint program))
|
||||
COGL_EXT_FUNCTION (void, glProgramString,
|
||||
(GLenum target,
|
||||
GLenum format,
|
||||
GLsizei len,
|
||||
const void *program))
|
||||
COGL_EXT_FUNCTION (void, glProgramLocalParameter4fv,
|
||||
(GLenum target,
|
||||
GLuint index,
|
||||
GLfloat *params))
|
||||
COGL_EXT_END ()
|
||||
|
||||
/* The function names in OpenGL 2.0 are different so we can't easily
|
||||
just check for GL 2.0 */
|
||||
COGL_EXT_BEGIN (shaders_glsl, 2, 0,
|
||||
COGL_EXT_IN_GLES2,
|
||||
"\0",
|
||||
"\0")
|
||||
COGL_EXT_FUNCTION (GLuint, glCreateProgram,
|
||||
(void))
|
||||
COGL_EXT_FUNCTION (GLuint, glCreateShader,
|
||||
(GLenum shaderType))
|
||||
COGL_EXT_FUNCTION (void, glShaderSource,
|
||||
(GLuint shader,
|
||||
GLsizei count,
|
||||
const GLchar **string,
|
||||
const GLint *length))
|
||||
COGL_EXT_FUNCTION (void, glCompileShader,
|
||||
(GLuint shader))
|
||||
COGL_EXT_FUNCTION (void, glDeleteShader,
|
||||
(GLuint shader))
|
||||
COGL_EXT_FUNCTION (void, glAttachShader,
|
||||
(GLuint program,
|
||||
GLuint shader))
|
||||
COGL_EXT_FUNCTION (void, glLinkProgram,
|
||||
(GLuint program))
|
||||
COGL_EXT_FUNCTION (void, glUseProgram,
|
||||
(GLuint program))
|
||||
COGL_EXT_FUNCTION (GLint, glGetUniformLocation,
|
||||
(GLuint program,
|
||||
const GLchar *name))
|
||||
COGL_EXT_FUNCTION (void, glDeleteProgram,
|
||||
(GLuint program))
|
||||
COGL_EXT_FUNCTION (void, glGetShaderInfoLog,
|
||||
(GLuint shader,
|
||||
GLsizei maxLength,
|
||||
GLsizei *length,
|
||||
GLchar *infoLog))
|
||||
COGL_EXT_FUNCTION (void, glGetShaderiv,
|
||||
(GLuint shader,
|
||||
GLenum pname,
|
||||
GLint *params))
|
||||
|
||||
COGL_EXT_FUNCTION (void, glVertexAttribPointer,
|
||||
(GLuint index,
|
||||
GLint size,
|
||||
GLenum type,
|
||||
GLboolean normalized,
|
||||
GLsizei stride,
|
||||
const GLvoid *pointer))
|
||||
COGL_EXT_FUNCTION (void, glEnableVertexAttribArray,
|
||||
(GLuint index))
|
||||
COGL_EXT_FUNCTION (void, glDisableVertexAttribArray,
|
||||
(GLuint index))
|
||||
|
||||
COGL_EXT_FUNCTION (void, glUniform1f,
|
||||
(GLint location,
|
||||
GLfloat v0))
|
||||
COGL_EXT_FUNCTION (void, glUniform2f,
|
||||
(GLint location,
|
||||
GLfloat v0,
|
||||
GLfloat v1))
|
||||
COGL_EXT_FUNCTION (void, glUniform3f,
|
||||
(GLint location,
|
||||
GLfloat v0,
|
||||
GLfloat v1,
|
||||
GLfloat v2))
|
||||
COGL_EXT_FUNCTION (void, glUniform4f,
|
||||
(GLint location,
|
||||
GLfloat v0,
|
||||
GLfloat v1,
|
||||
GLfloat v2,
|
||||
GLfloat v3))
|
||||
COGL_EXT_FUNCTION (void, glUniform1fv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLfloat * value))
|
||||
COGL_EXT_FUNCTION (void, glUniform2fv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLfloat * value))
|
||||
COGL_EXT_FUNCTION (void, glUniform3fv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLfloat * value))
|
||||
COGL_EXT_FUNCTION (void, glUniform4fv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLfloat * value))
|
||||
COGL_EXT_FUNCTION (void, glUniform1i,
|
||||
(GLint location,
|
||||
GLint v0))
|
||||
COGL_EXT_FUNCTION (void, glUniform2i,
|
||||
(GLint location,
|
||||
GLint v0,
|
||||
GLint v1))
|
||||
COGL_EXT_FUNCTION (void, glUniform3i,
|
||||
(GLint location,
|
||||
GLint v0,
|
||||
GLint v1,
|
||||
GLint v2))
|
||||
COGL_EXT_FUNCTION (void, glUniform4i,
|
||||
(GLint location,
|
||||
GLint v0,
|
||||
GLint v1,
|
||||
GLint v2,
|
||||
GLint v3))
|
||||
COGL_EXT_FUNCTION (void, glUniform1iv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLint * value))
|
||||
COGL_EXT_FUNCTION (void, glUniform2iv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLint * value))
|
||||
COGL_EXT_FUNCTION (void, glUniform3iv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLint * value))
|
||||
COGL_EXT_FUNCTION (void, glUniform4iv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLint * value))
|
||||
COGL_EXT_FUNCTION (void, glUniformMatrix2fv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
GLboolean transpose,
|
||||
const GLfloat *value))
|
||||
COGL_EXT_FUNCTION (void, glUniformMatrix3fv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
GLboolean transpose,
|
||||
const GLfloat *value))
|
||||
COGL_EXT_FUNCTION (void, glUniformMatrix4fv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
GLboolean transpose,
|
||||
const GLfloat *value))
|
||||
|
||||
COGL_EXT_FUNCTION (void, glGetProgramiv,
|
||||
(GLuint program,
|
||||
GLenum pname,
|
||||
GLint *params))
|
||||
|
||||
COGL_EXT_FUNCTION (void, glGetProgramInfoLog,
|
||||
(GLuint program,
|
||||
GLsizei bufSize,
|
||||
GLsizei *length,
|
||||
GLchar *infoLog))
|
||||
|
||||
COGL_EXT_END ()
|
||||
|
||||
COGL_EXT_BEGIN (vbos, 1, 5,
|
||||
COGL_EXT_IN_GLES |
|
||||
COGL_EXT_IN_GLES2,
|
||||
"ARB\0",
|
||||
"vertex_buffer_object\0")
|
||||
COGL_EXT_FUNCTION (void, glGenBuffers,
|
||||
(GLuint n,
|
||||
GLuint *buffers))
|
||||
COGL_EXT_FUNCTION (void, glBindBuffer,
|
||||
(GLenum target,
|
||||
GLuint buffer))
|
||||
COGL_EXT_FUNCTION (void, glBufferData,
|
||||
(GLenum target,
|
||||
GLsizeiptr size,
|
||||
const GLvoid *data,
|
||||
GLenum usage))
|
||||
COGL_EXT_FUNCTION (void, glBufferSubData,
|
||||
(GLenum target,
|
||||
GLintptr offset,
|
||||
GLsizeiptr size,
|
||||
const GLvoid *data))
|
||||
COGL_EXT_FUNCTION (void, glDeleteBuffers,
|
||||
(GLsizei n,
|
||||
const GLuint *buffers))
|
||||
COGL_EXT_END ()
|
||||
|
||||
/* GLES doesn't support mapping buffers in core so this has to be a
|
||||
separate check */
|
||||
COGL_EXT_BEGIN (map_vbos, 1, 5,
|
||||
0, /* not in GLES core */
|
||||
"ARB\0OES\0",
|
||||
"vertex_buffer_object\0mapbuffer\0")
|
||||
COGL_EXT_FUNCTION (void *, glMapBuffer,
|
||||
(GLenum target,
|
||||
GLenum access))
|
||||
COGL_EXT_FUNCTION (GLboolean, glUnmapBuffer,
|
||||
(GLenum target))
|
||||
COGL_EXT_END ()
|
||||
|
||||
COGL_EXT_BEGIN (draw_range_elements, 1, 2,
|
||||
0, /* not in either GLES */
|
||||
"\0",
|
||||
"\0")
|
||||
COGL_EXT_FUNCTION (void, glDrawRangeElements,
|
||||
(GLenum mode,
|
||||
GLuint start,
|
||||
GLuint end,
|
||||
GLsizei count,
|
||||
GLenum type,
|
||||
const GLvoid *indices))
|
||||
COGL_EXT_END ()
|
||||
|
||||
COGL_EXT_BEGIN (blending, 1, 2,
|
||||
COGL_EXT_IN_GLES2,
|
||||
"\0",
|
||||
"\0")
|
||||
COGL_EXT_FUNCTION (void, glBlendEquation,
|
||||
(GLenum mode))
|
||||
COGL_EXT_FUNCTION (void, glBlendColor,
|
||||
(GLclampf red,
|
||||
GLclampf green,
|
||||
GLclampf blue,
|
||||
GLclampf alpha))
|
||||
COGL_EXT_END ()
|
||||
|
||||
COGL_EXT_BEGIN (texture_3d, 1, 2,
|
||||
0, /* not in either GLES */
|
||||
"OES\0",
|
||||
"texture_3D\0")
|
||||
COGL_EXT_FUNCTION (void, glTexImage3D,
|
||||
(GLenum target, GLint level,
|
||||
GLint internalFormat,
|
||||
GLsizei width, GLsizei height,
|
||||
GLsizei depth, GLint border,
|
||||
GLenum format, GLenum type,
|
||||
const GLvoid *pixels))
|
||||
COGL_EXT_FUNCTION (void, glTexSubImage3D,
|
||||
(GLenum target, GLint level,
|
||||
GLint xoffset, GLint yoffset,
|
||||
GLint zoffset, GLsizei width,
|
||||
GLsizei height, GLsizei depth,
|
||||
GLenum format,
|
||||
GLenum type, const GLvoid *pixels))
|
||||
COGL_EXT_END ()
|
||||
|
||||
/* Available in GL 1.3, the multitexture extension or GLES. These are
|
||||
required */
|
||||
COGL_EXT_BEGIN (multitexture, 1, 3,
|
||||
COGL_EXT_IN_GLES |
|
||||
COGL_EXT_IN_GLES2,
|
||||
"ARB\0",
|
||||
"multitexture\0")
|
||||
COGL_EXT_FUNCTION (void, glActiveTexture,
|
||||
(GLenum texture))
|
||||
COGL_EXT_FUNCTION (void, glClientActiveTexture,
|
||||
(GLenum texture))
|
||||
COGL_EXT_END ()
|
||||
|
||||
/* Optional, declared in 1.4 or GLES 1.2 */
|
||||
COGL_EXT_BEGIN (blend_func_separate, 1, 4,
|
||||
COGL_EXT_IN_GLES2,
|
||||
"EXT\0",
|
||||
"blend_func_separate\0")
|
||||
COGL_EXT_FUNCTION (void, glBlendFuncSeparate,
|
||||
(GLenum srcRGB,
|
||||
GLenum dstRGB,
|
||||
GLenum srcAlpha,
|
||||
GLenum dstAlpha))
|
||||
COGL_EXT_END ()
|
||||
|
||||
/* Optional, declared in 2.0 */
|
||||
COGL_EXT_BEGIN (blend_equation_separate, 2, 0,
|
||||
COGL_EXT_IN_GLES2,
|
||||
"EXT\0",
|
||||
"blend_equation_separate\0")
|
||||
COGL_EXT_FUNCTION (void, glBlendEquationSeparate,
|
||||
(GLenum modeRGB,
|
||||
GLenum modeAlpha))
|
||||
COGL_EXT_END ()
|
||||
|
||||
COGL_EXT_BEGIN (EGL_image, 255, 255,
|
||||
0, /* not in either GLES */
|
||||
"OES\0",
|
||||
"EGL_image\0")
|
||||
COGL_EXT_FUNCTION (void, glEGLImageTargetTexture2D,
|
||||
(GLenum target,
|
||||
GLeglImageOES image))
|
||||
COGL_EXT_FUNCTION (void, glEGLImageTargetRenderbufferStorage,
|
||||
(GLenum target,
|
||||
GLeglImageOES image))
|
||||
COGL_EXT_END ()
|
@ -36,8 +36,9 @@ gboolean
|
||||
_cogl_feature_check (const CoglWinsysVtable *winsys,
|
||||
const char *driver_prefix,
|
||||
const CoglFeatureData *data,
|
||||
unsigned int gl_major,
|
||||
unsigned int gl_minor,
|
||||
int gl_major,
|
||||
int gl_minor,
|
||||
CoglExtGlesAvailability gles_version,
|
||||
const char *extensions_string,
|
||||
void *function_table)
|
||||
|
||||
@ -48,7 +49,8 @@ _cogl_feature_check (const CoglWinsysVtable *winsys,
|
||||
/* First check whether the functions should be directly provided by
|
||||
GL */
|
||||
if (COGL_CHECK_GL_VERSION (gl_major, gl_minor,
|
||||
data->min_gl_major, data->min_gl_minor))
|
||||
data->min_gl_major, data->min_gl_minor) ||
|
||||
(gles_version & data->gles_availability))
|
||||
suffix = "";
|
||||
else
|
||||
{
|
||||
@ -86,16 +88,16 @@ _cogl_feature_check (const CoglWinsysVtable *winsys,
|
||||
namespace, namespace_len);
|
||||
g_string_append_c (full_extension_name, '_');
|
||||
g_string_append (full_extension_name, extension);
|
||||
if (!_cogl_check_extension (full_extension_name->str,
|
||||
extensions_string))
|
||||
if (_cogl_check_extension (full_extension_name->str,
|
||||
extensions_string))
|
||||
break;
|
||||
}
|
||||
|
||||
g_string_free (full_extension_name, TRUE);
|
||||
|
||||
/* If we found all of the extensions with this namespace
|
||||
then use it as the suffix */
|
||||
if (*extension == '\0')
|
||||
/* If we found an extension with this namespace then use it
|
||||
as the suffix */
|
||||
if (*extension)
|
||||
{
|
||||
suffix = namespace_suffix;
|
||||
break;
|
||||
@ -139,3 +141,54 @@ error:
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Define a set of arrays containing the functions required from GL
|
||||
for each feature */
|
||||
#define COGL_EXT_BEGIN(name, \
|
||||
min_gl_major, min_gl_minor, \
|
||||
gles_availability, \
|
||||
namespaces, extension_names) \
|
||||
static const CoglFeatureFunction cogl_ext_ ## name ## _funcs[] = {
|
||||
#define COGL_EXT_FUNCTION(ret, name, args) \
|
||||
{ G_STRINGIFY (name), G_STRUCT_OFFSET (CoglContext, name) },
|
||||
#define COGL_EXT_END() \
|
||||
{ NULL, 0 }, \
|
||||
};
|
||||
#include "cogl-ext-functions.h"
|
||||
|
||||
/* Define an array of features */
|
||||
#undef COGL_EXT_BEGIN
|
||||
#define COGL_EXT_BEGIN(name, \
|
||||
min_gl_major, min_gl_minor, \
|
||||
gles_availability, \
|
||||
namespaces, extension_names) \
|
||||
{ min_gl_major, min_gl_minor, gles_availability, namespaces, \
|
||||
extension_names, 0, 0, 0, \
|
||||
cogl_ext_ ## name ## _funcs },
|
||||
#undef COGL_EXT_FUNCTION
|
||||
#define COGL_EXT_FUNCTION(ret, name, args)
|
||||
#undef COGL_EXT_END
|
||||
#define COGL_EXT_END()
|
||||
|
||||
static const CoglFeatureData
|
||||
cogl_feature_ext_functions_data[] =
|
||||
{
|
||||
#include "cogl-ext-functions.h"
|
||||
};
|
||||
|
||||
void
|
||||
_cogl_feature_check_ext_functions (CoglContext *context,
|
||||
int gl_major,
|
||||
int gl_minor,
|
||||
const char *gl_extensions,
|
||||
CoglExtGlesAvailability gles_version)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (cogl_feature_ext_functions_data); i++)
|
||||
_cogl_feature_check (_cogl_context_get_winsys (context),
|
||||
"GL", cogl_feature_ext_functions_data + i,
|
||||
gl_major, gl_minor, gles_version,
|
||||
gl_extensions,
|
||||
context);
|
||||
}
|
||||
|
@ -33,6 +33,12 @@
|
||||
((driver_major) > (target_major) || \
|
||||
((driver_major) == (target_major) && (driver_minor) >= (target_minor)))
|
||||
|
||||
typedef enum
|
||||
{
|
||||
COGL_EXT_IN_GLES = (1 << 0),
|
||||
COGL_EXT_IN_GLES2 = (1 << 1)
|
||||
} CoglExtGlesAvailability;
|
||||
|
||||
typedef struct _CoglFeatureFunction CoglFeatureFunction;
|
||||
|
||||
struct _CoglFeatureFunction
|
||||
@ -50,11 +56,14 @@ struct _CoglFeatureData
|
||||
/* A minimum GL version which the functions should be defined in
|
||||
without needing an extension. Set to 255,255 if it's only
|
||||
provided in an extension */
|
||||
guint8 min_gl_major, min_gl_minor;
|
||||
int min_gl_major, min_gl_minor;
|
||||
/* Flags specifying which versions of GLES the feature is available
|
||||
in core in */
|
||||
CoglExtGlesAvailability gles_availability;
|
||||
/* \0 separated list of namespaces to try. Eg "EXT\0ARB\0" */
|
||||
const char *namespaces;
|
||||
/* \0 separated list of required extension names without the GL_EXT
|
||||
or GL_ARB prefix. All of the extensions must be available for the
|
||||
or GL_ARB prefix. Any of the extensions must be available for the
|
||||
feature to be considered available. If the suffix for an
|
||||
extension is different from the namespace, you can specify it
|
||||
with a ':' after the namespace */
|
||||
@ -75,9 +84,17 @@ gboolean
|
||||
_cogl_feature_check (const CoglWinsysVtable *winsys,
|
||||
const char *driver_prefix,
|
||||
const CoglFeatureData *data,
|
||||
unsigned int gl_major,
|
||||
unsigned int gl_minor,
|
||||
int gl_major,
|
||||
int gl_minor,
|
||||
CoglExtGlesAvailability gles_version,
|
||||
const char *extensions_string,
|
||||
void *function_table);
|
||||
|
||||
void
|
||||
_cogl_feature_check_ext_functions (CoglContext *context,
|
||||
int gl_major,
|
||||
int gl_minor,
|
||||
const char *gl_extensions,
|
||||
CoglExtGlesAvailability gles_version);
|
||||
|
||||
#endif /* __COGL_FEATURE_PRIVATE_H */
|
||||
|
@ -42,22 +42,22 @@
|
||||
|
||||
#ifndef HAVE_COGL_GLES2
|
||||
|
||||
#define glGenRenderbuffers ctx->drv.pf_glGenRenderbuffers
|
||||
#define glDeleteRenderbuffers ctx->drv.pf_glDeleteRenderbuffers
|
||||
#define glBindRenderbuffer ctx->drv.pf_glBindRenderbuffer
|
||||
#define glRenderbufferStorage ctx->drv.pf_glRenderbufferStorage
|
||||
#define glGenFramebuffers ctx->drv.pf_glGenFramebuffers
|
||||
#define glBindFramebuffer ctx->drv.pf_glBindFramebuffer
|
||||
#define glFramebufferTexture2D ctx->drv.pf_glFramebufferTexture2D
|
||||
#define glFramebufferRenderbuffer ctx->drv.pf_glFramebufferRenderbuffer
|
||||
#define glCheckFramebufferStatus ctx->drv.pf_glCheckFramebufferStatus
|
||||
#define glDeleteFramebuffers ctx->drv.pf_glDeleteFramebuffers
|
||||
#define glGenRenderbuffers ctx->glGenRenderbuffers
|
||||
#define glDeleteRenderbuffers ctx->glDeleteRenderbuffers
|
||||
#define glBindRenderbuffer ctx->glBindRenderbuffer
|
||||
#define glRenderbufferStorage ctx->glRenderbufferStorage
|
||||
#define glGenFramebuffers ctx->glGenFramebuffers
|
||||
#define glBindFramebuffer ctx->glBindFramebuffer
|
||||
#define glFramebufferTexture2D ctx->glFramebufferTexture2D
|
||||
#define glFramebufferRenderbuffer ctx->glFramebufferRenderbuffer
|
||||
#define glCheckFramebufferStatus ctx->glCheckFramebufferStatus
|
||||
#define glDeleteFramebuffers ctx->glDeleteFramebuffers
|
||||
#define glGetFramebufferAttachmentParameteriv \
|
||||
ctx->drv.pf_glGetFramebufferAttachmentParameteriv
|
||||
ctx->glGetFramebufferAttachmentParameteriv
|
||||
|
||||
#endif
|
||||
|
||||
#define glBlitFramebuffer ctx->drv.pf_glBlitFramebuffer
|
||||
#define glBlitFramebuffer ctx->glBlitFramebuffer
|
||||
|
||||
#ifndef GL_FRAMEBUFFER
|
||||
#define GL_FRAMEBUFFER 0x8D40
|
||||
|
@ -55,12 +55,12 @@
|
||||
*/
|
||||
|
||||
#ifdef HAVE_COGL_GL
|
||||
#define glProgramString ctx->drv.pf_glProgramString
|
||||
#define glBindProgram ctx->drv.pf_glBindProgram
|
||||
#define glDeletePrograms ctx->drv.pf_glDeletePrograms
|
||||
#define glGenPrograms ctx->drv.pf_glGenPrograms
|
||||
#define glProgramLocalParameter4fv ctx->drv.pf_glProgramLocalParameter4fv
|
||||
#define glUseProgram ctx->drv.pf_glUseProgram
|
||||
#define glProgramString ctx->glProgramString
|
||||
#define glBindProgram ctx->glBindProgram
|
||||
#define glDeletePrograms ctx->glDeletePrograms
|
||||
#define glGenPrograms ctx->glGenPrograms
|
||||
#define glProgramLocalParameter4fv ctx->glProgramLocalParameter4fv
|
||||
#define glUseProgram ctx->glUseProgram
|
||||
#endif
|
||||
|
||||
/* This might not be defined on GLES */
|
||||
|
@ -47,12 +47,12 @@
|
||||
|
||||
#ifndef HAVE_COGL_GLES2
|
||||
|
||||
#define glCreateShader ctx->drv.pf_glCreateShader
|
||||
#define glGetShaderiv ctx->drv.pf_glGetShaderiv
|
||||
#define glGetShaderInfoLog ctx->drv.pf_glGetShaderInfoLog
|
||||
#define glCompileShader ctx->drv.pf_glCompileShader
|
||||
#define glShaderSource ctx->drv.pf_glShaderSource
|
||||
#define glDeleteShader ctx->drv.pf_glDeleteShader
|
||||
#define glCreateShader ctx->glCreateShader
|
||||
#define glGetShaderiv ctx->glGetShaderiv
|
||||
#define glGetShaderInfoLog ctx->glGetShaderInfoLog
|
||||
#define glCompileShader ctx->glCompileShader
|
||||
#define glShaderSource ctx->glShaderSource
|
||||
#define glDeleteShader ctx->glDeleteShader
|
||||
|
||||
#endif /* HAVE_COGL_GLES2 */
|
||||
|
||||
|
@ -50,19 +50,17 @@
|
||||
*/
|
||||
|
||||
#ifdef HAVE_COGL_GL
|
||||
#define glActiveTexture ctx->drv.pf_glActiveTexture
|
||||
#define glClientActiveTexture ctx->drv.pf_glClientActiveTexture
|
||||
#define glBlendFuncSeparate ctx->drv.pf_glBlendFuncSeparate
|
||||
#define glBlendEquation ctx->drv.pf_glBlendEquation
|
||||
#define glBlendColor ctx->drv.pf_glBlendColor
|
||||
#define glBlendEquationSeparate ctx->drv.pf_glBlendEquationSeparate
|
||||
#define glActiveTexture ctx->glActiveTexture
|
||||
#define glClientActiveTexture ctx->glClientActiveTexture
|
||||
#define glBlendEquation ctx->glBlendEquation
|
||||
#define glBlendColor ctx->glBlendColor
|
||||
|
||||
#define glProgramString ctx->drv.pf_glProgramString
|
||||
#define glBindProgram ctx->drv.pf_glBindProgram
|
||||
#define glDeletePrograms ctx->drv.pf_glDeletePrograms
|
||||
#define glGenPrograms ctx->drv.pf_glGenPrograms
|
||||
#define glProgramLocalParameter4fv ctx->drv.pf_glProgramLocalParameter4fv
|
||||
#define glUseProgram ctx->drv.pf_glUseProgram
|
||||
#define glProgramString ctx->glProgramString
|
||||
#define glBindProgram ctx->glBindProgram
|
||||
#define glDeletePrograms ctx->glDeletePrograms
|
||||
#define glGenPrograms ctx->glGenPrograms
|
||||
#define glProgramLocalParameter4fv ctx->glProgramLocalParameter4fv
|
||||
#define glUseProgram ctx->glUseProgram
|
||||
#endif
|
||||
|
||||
/* These aren't defined in the GLES headers */
|
||||
@ -519,9 +517,9 @@ _cogl_pipeline_flush_color_blend_alpha_depth_state (
|
||||
#elif defined (HAVE_COGL_GL)
|
||||
gboolean have_blend_equation_seperate = FALSE;
|
||||
gboolean have_blend_func_separate = FALSE;
|
||||
if (ctx->drv.pf_glBlendEquationSeparate) /* Only GL 2.0 + */
|
||||
if (ctx->glBlendEquationSeparate) /* Only GL 2.0 + */
|
||||
have_blend_equation_seperate = TRUE;
|
||||
if (ctx->drv.pf_glBlendFuncSeparate) /* Only GL 1.4 + */
|
||||
if (ctx->glBlendFuncSeparate) /* Only GL 1.4 + */
|
||||
have_blend_func_separate = TRUE;
|
||||
#endif
|
||||
|
||||
@ -546,8 +544,8 @@ _cogl_pipeline_flush_color_blend_alpha_depth_state (
|
||||
|
||||
if (have_blend_equation_seperate &&
|
||||
blend_state->blend_equation_rgb != blend_state->blend_equation_alpha)
|
||||
GE (glBlendEquationSeparate (blend_state->blend_equation_rgb,
|
||||
blend_state->blend_equation_alpha));
|
||||
GE (ctx->glBlendEquationSeparate (blend_state->blend_equation_rgb,
|
||||
blend_state->blend_equation_alpha));
|
||||
else
|
||||
GE (glBlendEquation (blend_state->blend_equation_rgb));
|
||||
|
||||
@ -555,10 +553,10 @@ _cogl_pipeline_flush_color_blend_alpha_depth_state (
|
||||
(blend_state->blend_src_factor_rgb != blend_state->blend_src_factor_alpha ||
|
||||
(blend_state->blend_src_factor_rgb !=
|
||||
blend_state->blend_src_factor_alpha)))
|
||||
GE (glBlendFuncSeparate (blend_state->blend_src_factor_rgb,
|
||||
blend_state->blend_dst_factor_rgb,
|
||||
blend_state->blend_src_factor_alpha,
|
||||
blend_state->blend_dst_factor_alpha));
|
||||
GE (ctx->glBlendFuncSeparate (blend_state->blend_src_factor_rgb,
|
||||
blend_state->blend_dst_factor_rgb,
|
||||
blend_state->blend_src_factor_alpha,
|
||||
blend_state->blend_dst_factor_alpha));
|
||||
else
|
||||
#endif
|
||||
GE (glBlendFunc (blend_state->blend_src_factor_rgb,
|
||||
|
@ -44,17 +44,17 @@
|
||||
|
||||
#ifndef HAVE_COGL_GLES2
|
||||
|
||||
#define glCreateProgram ctx->drv.pf_glCreateProgram
|
||||
#define glAttachShader ctx->drv.pf_glAttachShader
|
||||
#define glUseProgram ctx->drv.pf_glUseProgram
|
||||
#define glLinkProgram ctx->drv.pf_glLinkProgram
|
||||
#define glDeleteProgram ctx->drv.pf_glDeleteProgram
|
||||
#define glGetProgramInfoLog ctx->drv.pf_glGetProgramInfoLog
|
||||
#define glGetProgramiv ctx->drv.pf_glGetProgramiv
|
||||
#define glGetUniformLocation ctx->drv.pf_glGetUniformLocation
|
||||
#define glUniform1i ctx->drv.pf_glUniform1i
|
||||
#define glUniform1f ctx->drv.pf_glUniform1f
|
||||
#define glUniform4fv ctx->drv.pf_glUniform4fv
|
||||
#define glCreateProgram ctx->glCreateProgram
|
||||
#define glAttachShader ctx->glAttachShader
|
||||
#define glUseProgram ctx->glUseProgram
|
||||
#define glLinkProgram ctx->glLinkProgram
|
||||
#define glDeleteProgram ctx->glDeleteProgram
|
||||
#define glGetProgramInfoLog ctx->glGetProgramInfoLog
|
||||
#define glGetProgramiv ctx->glGetProgramiv
|
||||
#define glGetUniformLocation ctx->glGetUniformLocation
|
||||
#define glUniform1i ctx->glUniform1i
|
||||
#define glUniform1f ctx->glUniform1f
|
||||
#define glUniform4fv ctx->glUniform4fv
|
||||
|
||||
#else
|
||||
|
||||
|
@ -43,12 +43,12 @@
|
||||
|
||||
#ifndef HAVE_COGL_GLES2
|
||||
|
||||
#define glCreateShader ctx->drv.pf_glCreateShader
|
||||
#define glGetShaderiv ctx->drv.pf_glGetShaderiv
|
||||
#define glGetShaderInfoLog ctx->drv.pf_glGetShaderInfoLog
|
||||
#define glCompileShader ctx->drv.pf_glCompileShader
|
||||
#define glShaderSource ctx->drv.pf_glShaderSource
|
||||
#define glDeleteShader ctx->drv.pf_glDeleteShader
|
||||
#define glCreateShader ctx->glCreateShader
|
||||
#define glGetShaderiv ctx->glGetShaderiv
|
||||
#define glGetShaderInfoLog ctx->glGetShaderInfoLog
|
||||
#define glCompileShader ctx->glCompileShader
|
||||
#define glShaderSource ctx->glShaderSource
|
||||
#define glDeleteShader ctx->glDeleteShader
|
||||
|
||||
#endif /* HAVE_COGL_GLES2 */
|
||||
|
||||
|
@ -50,27 +50,27 @@ COGL_OBJECT_DEFINE_DEPRECATED_REF_COUNTING (program);
|
||||
|
||||
#ifndef HAVE_COGL_GLES2
|
||||
|
||||
#define glGetUniformLocation ctx->drv.pf_glGetUniformLocation
|
||||
#define glUniform1f ctx->drv.pf_glUniform1f
|
||||
#define glUniform2f ctx->drv.pf_glUniform2f
|
||||
#define glUniform3f ctx->drv.pf_glUniform3f
|
||||
#define glUniform4f ctx->drv.pf_glUniform4f
|
||||
#define glUniform1fv ctx->drv.pf_glUniform1fv
|
||||
#define glUniform2fv ctx->drv.pf_glUniform2fv
|
||||
#define glUniform3fv ctx->drv.pf_glUniform3fv
|
||||
#define glUniform4fv ctx->drv.pf_glUniform4fv
|
||||
#define glUniform1i ctx->drv.pf_glUniform1i
|
||||
#define glUniform2i ctx->drv.pf_glUniform2i
|
||||
#define glUniform3i ctx->drv.pf_glUniform3i
|
||||
#define glUniform4i ctx->drv.pf_glUniform4i
|
||||
#define glUniform1iv ctx->drv.pf_glUniform1iv
|
||||
#define glUniform2iv ctx->drv.pf_glUniform2iv
|
||||
#define glUniform3iv ctx->drv.pf_glUniform3iv
|
||||
#define glUniform4iv ctx->drv.pf_glUniform4iv
|
||||
#define glUniformMatrix2fv ctx->drv.pf_glUniformMatrix2fv
|
||||
#define glUniformMatrix3fv ctx->drv.pf_glUniformMatrix3fv
|
||||
#define glUniformMatrix4fv ctx->drv.pf_glUniformMatrix4fv
|
||||
#define glProgramLocalParameter4fv ctx->drv.pf_glProgramLocalParameter4fv
|
||||
#define glGetUniformLocation ctx->glGetUniformLocation
|
||||
#define glUniform1f ctx->glUniform1f
|
||||
#define glUniform2f ctx->glUniform2f
|
||||
#define glUniform3f ctx->glUniform3f
|
||||
#define glUniform4f ctx->glUniform4f
|
||||
#define glUniform1fv ctx->glUniform1fv
|
||||
#define glUniform2fv ctx->glUniform2fv
|
||||
#define glUniform3fv ctx->glUniform3fv
|
||||
#define glUniform4fv ctx->glUniform4fv
|
||||
#define glUniform1i ctx->glUniform1i
|
||||
#define glUniform2i ctx->glUniform2i
|
||||
#define glUniform3i ctx->glUniform3i
|
||||
#define glUniform4i ctx->glUniform4i
|
||||
#define glUniform1iv ctx->glUniform1iv
|
||||
#define glUniform2iv ctx->glUniform2iv
|
||||
#define glUniform3iv ctx->glUniform3iv
|
||||
#define glUniform4iv ctx->glUniform4iv
|
||||
#define glUniformMatrix2fv ctx->glUniformMatrix2fv
|
||||
#define glUniformMatrix3fv ctx->glUniformMatrix3fv
|
||||
#define glUniformMatrix4fv ctx->glUniformMatrix4fv
|
||||
#define glProgramLocalParameter4fv ctx->glProgramLocalParameter4fv
|
||||
|
||||
#endif /* HAVE_COGL_GLES2 */
|
||||
|
||||
|
@ -37,16 +37,16 @@
|
||||
#include <string.h>
|
||||
|
||||
#ifdef HAVE_COGL_GL
|
||||
#define glCreateShader ctx->drv.pf_glCreateShader
|
||||
#define glGetShaderiv ctx->drv.pf_glGetShaderiv
|
||||
#define glGetShaderInfoLog ctx->drv.pf_glGetShaderInfoLog
|
||||
#define glCompileShader ctx->drv.pf_glCompileShader
|
||||
#define glShaderSource ctx->drv.pf_glShaderSource
|
||||
#define glDeleteShader ctx->drv.pf_glDeleteShader
|
||||
#define glProgramString ctx->drv.pf_glProgramString
|
||||
#define glBindProgram ctx->drv.pf_glBindProgram
|
||||
#define glDeletePrograms ctx->drv.pf_glDeletePrograms
|
||||
#define glGenPrograms ctx->drv.pf_glGenPrograms
|
||||
#define glCreateShader ctx->glCreateShader
|
||||
#define glGetShaderiv ctx->glGetShaderiv
|
||||
#define glGetShaderInfoLog ctx->glGetShaderInfoLog
|
||||
#define glCompileShader ctx->glCompileShader
|
||||
#define glShaderSource ctx->glShaderSource
|
||||
#define glDeleteShader ctx->glDeleteShader
|
||||
#define glProgramString ctx->glProgramString
|
||||
#define glBindProgram ctx->glBindProgram
|
||||
#define glDeletePrograms ctx->glDeletePrograms
|
||||
#define glGenPrograms ctx->glGenPrograms
|
||||
#define GET_CONTEXT _COGL_GET_CONTEXT
|
||||
#else
|
||||
#define GET_CONTEXT(CTXVAR,RETVAL) G_STMT_START { } G_STMT_END
|
||||
|
@ -531,7 +531,7 @@ _cogl_egl_texture_2d_new_from_image (CoglContext *ctx,
|
||||
|
||||
while ((gl_error = glGetError ()) != GL_NO_ERROR)
|
||||
;
|
||||
ctx->drv.pf_glEGLImageTargetTexture2D (GL_TEXTURE_2D, image);
|
||||
ctx->glEGLImageTargetTexture2D (GL_TEXTURE_2D, image);
|
||||
if (glGetError () != GL_NO_ERROR)
|
||||
{
|
||||
g_set_error (error,
|
||||
|
@ -49,8 +49,8 @@
|
||||
#define GL_TEXTURE_WRAP_R 0x8072
|
||||
#endif
|
||||
|
||||
#define glTexImage3D ctx->drv.pf_glTexImage3D
|
||||
#define glTexSubImage3D ctx->drv.pf_glTexSubImage3D
|
||||
#define glTexImage3D ctx->glTexImage3D
|
||||
#define glTexSubImage3D ctx->glTexSubImage3D
|
||||
|
||||
static void _cogl_texture_3d_free (CoglTexture3D *tex_3d);
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* An object oriented GL/GLES Abstraction/Utility Layer
|
||||
*
|
||||
* Copyright (C) 2007,2008,2009 Intel Corporation.
|
||||
* Copyright (C) 2007,2008,2009,2011 Intel Corporation.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@ -26,28 +26,10 @@
|
||||
|
||||
#include "cogl.h"
|
||||
|
||||
#ifndef APIENTRY
|
||||
#define APIENTRY
|
||||
#endif
|
||||
|
||||
#define COGL_FEATURE_BEGIN(a, b, c, d, e, f, g)
|
||||
|
||||
#define COGL_FEATURE_FUNCTION(ret, name, args) \
|
||||
ret (APIENTRY * pf_ ## name) args;
|
||||
|
||||
#define COGL_FEATURE_END()
|
||||
|
||||
typedef struct _CoglContextDriver
|
||||
{
|
||||
/* This defines a list of function pointers */
|
||||
#include "cogl-feature-functions-gl.h"
|
||||
|
||||
GLint gl_max_program_temoraries_arb;
|
||||
} CoglContextDriver;
|
||||
|
||||
#undef COGL_FEATURE_BEGIN
|
||||
#undef COGL_FEATURE_FUNCTION
|
||||
#undef COGL_FEATURE_END
|
||||
|
||||
#endif /* __COGL_CONTEXT_DRIVER_H */
|
||||
|
||||
|
@ -1,435 +0,0 @@
|
||||
/*
|
||||
* Cogl
|
||||
*
|
||||
* An object oriented GL/GLES Abstraction/Utility Layer
|
||||
*
|
||||
* Copyright (C) 2009 Intel Corporation.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/* This is included multiple times with different definitions for
|
||||
these macros */
|
||||
|
||||
COGL_FEATURE_BEGIN (offscreen, 255, 255,
|
||||
/* for some reason the ARB version of this
|
||||
extension doesn't have an ARB suffix for the
|
||||
functions */
|
||||
"ARB:\0EXT\0",
|
||||
"framebuffer_object\0",
|
||||
COGL_FEATURE_OFFSCREEN,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (void, glGenRenderbuffers,
|
||||
(GLsizei n,
|
||||
GLuint *renderbuffers))
|
||||
COGL_FEATURE_FUNCTION (void, glDeleteRenderbuffers,
|
||||
(GLsizei n,
|
||||
const GLuint *renderbuffers))
|
||||
COGL_FEATURE_FUNCTION (void, glBindRenderbuffer,
|
||||
(GLenum target,
|
||||
GLuint renderbuffer))
|
||||
COGL_FEATURE_FUNCTION (void, glRenderbufferStorage,
|
||||
(GLenum target,
|
||||
GLenum internalformat,
|
||||
GLsizei width,
|
||||
GLsizei height))
|
||||
COGL_FEATURE_FUNCTION (void, glGenFramebuffers,
|
||||
(GLsizei n,
|
||||
GLuint *framebuffers))
|
||||
COGL_FEATURE_FUNCTION (void, glBindFramebuffer,
|
||||
(GLenum target,
|
||||
GLuint framebuffer))
|
||||
COGL_FEATURE_FUNCTION (void, glFramebufferTexture2D,
|
||||
(GLenum target,
|
||||
GLenum attachment,
|
||||
GLenum textarget,
|
||||
GLuint texture,
|
||||
GLint level))
|
||||
COGL_FEATURE_FUNCTION (void, glFramebufferRenderbuffer,
|
||||
(GLenum target,
|
||||
GLenum attachment,
|
||||
GLenum renderbuffertarget,
|
||||
GLuint renderbuffer))
|
||||
COGL_FEATURE_FUNCTION (GLenum, glCheckFramebufferStatus,
|
||||
(GLenum target))
|
||||
COGL_FEATURE_FUNCTION (void, glDeleteFramebuffers,
|
||||
(GLsizei n,
|
||||
const GLuint *framebuffers))
|
||||
COGL_FEATURE_FUNCTION (void, glGenerateMipmap,
|
||||
(GLenum target))
|
||||
COGL_FEATURE_FUNCTION (void, glGetFramebufferAttachmentParameteriv,
|
||||
(GLenum target,
|
||||
GLenum attachment,
|
||||
GLenum pname,
|
||||
GLint *params))
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
COGL_FEATURE_BEGIN (offscreen_blit, 255, 255,
|
||||
"EXT\0",
|
||||
"framebuffer_blit\0",
|
||||
COGL_FEATURE_OFFSCREEN_BLIT,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (void, glBlitFramebuffer,
|
||||
(GLint srcX0,
|
||||
GLint srcY0,
|
||||
GLint srcX1,
|
||||
GLint srcY1,
|
||||
GLint dstX0,
|
||||
GLint dstY0,
|
||||
GLint dstX1,
|
||||
GLint dstY1,
|
||||
GLbitfield mask,
|
||||
GLenum filter))
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
COGL_FEATURE_BEGIN (offscreen_multisample, 255, 255,
|
||||
"EXT\0",
|
||||
"framebuffer_multisample\0",
|
||||
COGL_FEATURE_OFFSCREEN_MULTISAMPLE,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (void, glRenderbufferStorageMultisample,
|
||||
(GLenum target,
|
||||
GLsizei samples,
|
||||
GLenum internalformat,
|
||||
GLsizei width,
|
||||
GLsizei height))
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
COGL_FEATURE_BEGIN (read_pixels_async, 2, 1,
|
||||
"EXT\0",
|
||||
"pixel_buffer_object\0",
|
||||
COGL_FEATURE_PBOS,
|
||||
0)
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
/* ARB_fragment_program */
|
||||
COGL_FEATURE_BEGIN (arbfp, 255, 255,
|
||||
"ARB\0",
|
||||
"fragment_program\0",
|
||||
COGL_FEATURE_SHADERS_ARBFP,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (void, glGenPrograms,
|
||||
(GLsizei n,
|
||||
GLuint *programs))
|
||||
COGL_FEATURE_FUNCTION (void, glDeletePrograms,
|
||||
(GLsizei n,
|
||||
GLuint *programs))
|
||||
COGL_FEATURE_FUNCTION (void, glBindProgram,
|
||||
(GLenum target,
|
||||
GLuint program))
|
||||
COGL_FEATURE_FUNCTION (void, glProgramString,
|
||||
(GLenum target,
|
||||
GLenum format,
|
||||
GLsizei len,
|
||||
const void *program))
|
||||
COGL_FEATURE_FUNCTION (void, glProgramLocalParameter4fv,
|
||||
(GLenum target,
|
||||
GLuint index,
|
||||
GLfloat *params))
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
/* The function names in OpenGL 2.0 are different so we can't easily
|
||||
just check for GL 2.0 */
|
||||
COGL_FEATURE_BEGIN (shaders_glsl, 2, 0,
|
||||
"\0",
|
||||
"\0",
|
||||
COGL_FEATURE_SHADERS_GLSL,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (GLuint, glCreateProgram,
|
||||
(void))
|
||||
COGL_FEATURE_FUNCTION (GLuint, glCreateShader,
|
||||
(GLenum shaderType))
|
||||
COGL_FEATURE_FUNCTION (void, glShaderSource,
|
||||
(GLuint shader,
|
||||
GLsizei count,
|
||||
const GLchar **string,
|
||||
const GLint *length))
|
||||
COGL_FEATURE_FUNCTION (void, glCompileShader,
|
||||
(GLuint shader))
|
||||
COGL_FEATURE_FUNCTION (void, glDeleteShader,
|
||||
(GLuint shader))
|
||||
COGL_FEATURE_FUNCTION (void, glAttachShader,
|
||||
(GLuint program,
|
||||
GLuint shader))
|
||||
COGL_FEATURE_FUNCTION (void, glLinkProgram,
|
||||
(GLuint program))
|
||||
COGL_FEATURE_FUNCTION (void, glUseProgram,
|
||||
(GLuint program))
|
||||
COGL_FEATURE_FUNCTION (GLint, glGetUniformLocation,
|
||||
(GLuint program,
|
||||
const GLchar *name))
|
||||
COGL_FEATURE_FUNCTION (void, glDeleteProgram,
|
||||
(GLuint program))
|
||||
COGL_FEATURE_FUNCTION (void, glGetShaderInfoLog,
|
||||
(GLuint shader,
|
||||
GLsizei maxLength,
|
||||
GLsizei *length,
|
||||
GLchar *infoLog))
|
||||
COGL_FEATURE_FUNCTION (void, glGetShaderiv,
|
||||
(GLuint shader,
|
||||
GLenum pname,
|
||||
GLint *params))
|
||||
|
||||
COGL_FEATURE_FUNCTION (void, glVertexAttribPointer,
|
||||
(GLuint index,
|
||||
GLint size,
|
||||
GLenum type,
|
||||
GLboolean normalized,
|
||||
GLsizei stride,
|
||||
const GLvoid *pointer))
|
||||
COGL_FEATURE_FUNCTION (void, glEnableVertexAttribArray,
|
||||
(GLuint index))
|
||||
COGL_FEATURE_FUNCTION (void, glDisableVertexAttribArray,
|
||||
(GLuint index))
|
||||
|
||||
COGL_FEATURE_FUNCTION (void, glUniform1f,
|
||||
(GLint location,
|
||||
GLfloat v0))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform2f,
|
||||
(GLint location,
|
||||
GLfloat v0,
|
||||
GLfloat v1))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform3f,
|
||||
(GLint location,
|
||||
GLfloat v0,
|
||||
GLfloat v1,
|
||||
GLfloat v2))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform4f,
|
||||
(GLint location,
|
||||
GLfloat v0,
|
||||
GLfloat v1,
|
||||
GLfloat v2,
|
||||
GLfloat v3))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform1fv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLfloat * value))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform2fv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLfloat * value))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform3fv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLfloat * value))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform4fv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLfloat * value))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform1i,
|
||||
(GLint location,
|
||||
GLint v0))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform2i,
|
||||
(GLint location,
|
||||
GLint v0,
|
||||
GLint v1))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform3i,
|
||||
(GLint location,
|
||||
GLint v0,
|
||||
GLint v1,
|
||||
GLint v2))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform4i,
|
||||
(GLint location,
|
||||
GLint v0,
|
||||
GLint v1,
|
||||
GLint v2,
|
||||
GLint v3))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform1iv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLint * value))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform2iv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLint * value))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform3iv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLint * value))
|
||||
COGL_FEATURE_FUNCTION (void, glUniform4iv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
const GLint * value))
|
||||
COGL_FEATURE_FUNCTION (void, glUniformMatrix2fv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
GLboolean transpose,
|
||||
const GLfloat *value))
|
||||
COGL_FEATURE_FUNCTION (void, glUniformMatrix3fv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
GLboolean transpose,
|
||||
const GLfloat *value))
|
||||
COGL_FEATURE_FUNCTION (void, glUniformMatrix4fv,
|
||||
(GLint location,
|
||||
GLsizei count,
|
||||
GLboolean transpose,
|
||||
const GLfloat *value))
|
||||
|
||||
COGL_FEATURE_FUNCTION (void, glGetProgramiv,
|
||||
(GLuint program,
|
||||
GLenum pname,
|
||||
GLint *params))
|
||||
|
||||
COGL_FEATURE_FUNCTION (void, glGetProgramInfoLog,
|
||||
(GLuint program,
|
||||
GLsizei bufSize,
|
||||
GLsizei *length,
|
||||
GLchar *infoLog))
|
||||
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
COGL_FEATURE_BEGIN (vbos, 1, 5,
|
||||
"ARB\0",
|
||||
"vertex_buffer_object\0",
|
||||
COGL_FEATURE_VBOS |
|
||||
COGL_FEATURE_MAP_BUFFER_FOR_READ |
|
||||
COGL_FEATURE_MAP_BUFFER_FOR_WRITE,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (void, glGenBuffers,
|
||||
(GLuint n,
|
||||
GLuint *buffers))
|
||||
COGL_FEATURE_FUNCTION (void, glBindBuffer,
|
||||
(GLenum target,
|
||||
GLuint buffer))
|
||||
COGL_FEATURE_FUNCTION (void, glBufferData,
|
||||
(GLenum target,
|
||||
GLsizeiptr size,
|
||||
const GLvoid *data,
|
||||
GLenum usage))
|
||||
COGL_FEATURE_FUNCTION (void, glBufferSubData,
|
||||
(GLenum target,
|
||||
GLintptr offset,
|
||||
GLsizeiptr size,
|
||||
const GLvoid *data))
|
||||
COGL_FEATURE_FUNCTION (void *, glMapBuffer,
|
||||
(GLenum target,
|
||||
GLenum access))
|
||||
COGL_FEATURE_FUNCTION (GLboolean, glUnmapBuffer,
|
||||
(GLenum target))
|
||||
COGL_FEATURE_FUNCTION (void, glDeleteBuffers,
|
||||
(GLsizei n,
|
||||
const GLuint *buffers))
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
COGL_FEATURE_BEGIN (texture_rectangle, 255, 255,
|
||||
"ARB\0",
|
||||
"texture_rectangle\0",
|
||||
COGL_FEATURE_TEXTURE_RECTANGLE,
|
||||
0)
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
/* Cogl requires OpenGL 1.2 so we assume these functions are always
|
||||
available and don't bother setting any feature flags. We still have
|
||||
to fetch the function pointers though because under Windows you can
|
||||
not call any function defined after GL 1.1 directly */
|
||||
COGL_FEATURE_BEGIN (in_1_2, 1, 2,
|
||||
"\0",
|
||||
"\0",
|
||||
0,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (void, glDrawRangeElements,
|
||||
(GLenum mode,
|
||||
GLuint start,
|
||||
GLuint end,
|
||||
GLsizei count,
|
||||
GLenum type,
|
||||
const GLvoid *indices))
|
||||
COGL_FEATURE_FUNCTION (void, glBlendEquation,
|
||||
(GLenum mode))
|
||||
COGL_FEATURE_FUNCTION (void, glBlendColor,
|
||||
(GLclampf red,
|
||||
GLclampf green,
|
||||
GLclampf blue,
|
||||
GLclampf alpha))
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
COGL_FEATURE_BEGIN (texture_3d, 1, 2,
|
||||
"\0",
|
||||
"\0",
|
||||
COGL_FEATURE_TEXTURE_3D,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (void, glTexImage3D,
|
||||
(GLenum target, GLint level,
|
||||
GLint internalFormat,
|
||||
GLsizei width, GLsizei height,
|
||||
GLsizei depth, GLint border,
|
||||
GLenum format, GLenum type,
|
||||
const GLvoid *pixels))
|
||||
COGL_FEATURE_FUNCTION (void, glTexSubImage3D,
|
||||
(GLenum target, GLint level,
|
||||
GLint xoffset, GLint yoffset,
|
||||
GLint zoffset, GLsizei width,
|
||||
GLsizei height, GLsizei depth,
|
||||
GLenum format,
|
||||
GLenum type, const GLvoid *pixels))
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
/* Available in GL 1.3 or the multitexture extension. These are
|
||||
required */
|
||||
COGL_FEATURE_BEGIN (multitexture, 1, 3,
|
||||
"ARB\0",
|
||||
"multitexture\0",
|
||||
0,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (void, glActiveTexture,
|
||||
(GLenum texture))
|
||||
COGL_FEATURE_FUNCTION (void, glClientActiveTexture,
|
||||
(GLenum texture))
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
/* Optional, declared in 1.4 */
|
||||
COGL_FEATURE_BEGIN (blend_func_separate, 1, 4,
|
||||
"EXT\0",
|
||||
"blend_func_separate\0",
|
||||
0,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (void, glBlendFuncSeparate,
|
||||
(GLenum srcRGB,
|
||||
GLenum dstRGB,
|
||||
GLenum srcAlpha,
|
||||
GLenum dstAlpha))
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
/* Optional, declared in 2.0 */
|
||||
COGL_FEATURE_BEGIN (blend_equation_separate, 2, 0,
|
||||
"EXT\0",
|
||||
"blend_equation_separate\0",
|
||||
0,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (void, glBlendEquationSeparate,
|
||||
(GLenum modeRGB,
|
||||
GLenum modeAlpha))
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
COGL_FEATURE_BEGIN (point_sprites, 2, 0,
|
||||
"ARB\0",
|
||||
"point_sprite\0",
|
||||
COGL_FEATURE_POINT_SPRITE,
|
||||
0)
|
||||
COGL_FEATURE_END ()
|
||||
COGL_FEATURE_BEGIN (EGL_image, 255, 255,
|
||||
"OES\0",
|
||||
"EGL_image\0",
|
||||
0,
|
||||
COGL_PRIVATE_FEATURE_TEXTURE_2D_FROM_EGL_IMAGE)
|
||||
COGL_FEATURE_FUNCTION (void, glEGLImageTargetTexture2D,
|
||||
(GLenum target,
|
||||
GLeglImageOES image))
|
||||
COGL_FEATURE_FUNCTION (void, glEGLImageTargetRenderbufferStorage,
|
||||
(GLenum target,
|
||||
GLeglImageOES image))
|
||||
COGL_FEATURE_END ()
|
@ -117,37 +117,6 @@ _cogl_gl_check_version (GError **error)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Define a set of arrays containing the functions required from GL
|
||||
for each feature */
|
||||
#define COGL_FEATURE_BEGIN(name, min_gl_major, min_gl_minor, \
|
||||
namespaces, extension_names, \
|
||||
feature_flags, feature_flags_private) \
|
||||
static const CoglFeatureFunction cogl_feature_ ## name ## _funcs[] = {
|
||||
#define COGL_FEATURE_FUNCTION(ret, name, args) \
|
||||
{ G_STRINGIFY (name), G_STRUCT_OFFSET (CoglContext, drv.pf_ ## name) },
|
||||
#define COGL_FEATURE_END() \
|
||||
{ NULL, 0 }, \
|
||||
};
|
||||
#include "cogl-feature-functions-gl.h"
|
||||
|
||||
/* Define an array of features */
|
||||
#undef COGL_FEATURE_BEGIN
|
||||
#define COGL_FEATURE_BEGIN(name, min_gl_major, min_gl_minor, \
|
||||
namespaces, extension_names, \
|
||||
feature_flags, feature_flags_private) \
|
||||
{ min_gl_major, min_gl_minor, namespaces, \
|
||||
extension_names, feature_flags, feature_flags_private, 0, \
|
||||
cogl_feature_ ## name ## _funcs },
|
||||
#undef COGL_FEATURE_FUNCTION
|
||||
#define COGL_FEATURE_FUNCTION(ret, name, args)
|
||||
#undef COGL_FEATURE_END
|
||||
#define COGL_FEATURE_END()
|
||||
|
||||
static const CoglFeatureData cogl_feature_data[] =
|
||||
{
|
||||
#include "cogl-feature-functions-gl.h"
|
||||
};
|
||||
|
||||
/* Query the GL extensions and lookup the corresponding function
|
||||
* pointers. Theoretically the list of extensions can change for
|
||||
* different GL contexts so it is the winsys backend's responsiblity
|
||||
@ -161,7 +130,6 @@ _cogl_gl_update_features (CoglContext *context)
|
||||
int max_clip_planes = 0;
|
||||
int num_stencil_bits = 0;
|
||||
int gl_major = 0, gl_minor = 0;
|
||||
int i;
|
||||
|
||||
COGL_NOTE (WINSYS,
|
||||
"Checking features\n"
|
||||
@ -182,6 +150,12 @@ _cogl_gl_update_features (CoglContext *context)
|
||||
|
||||
gl_extensions = (const char *)glGetString (GL_EXTENSIONS);
|
||||
|
||||
_cogl_feature_check_ext_functions (context,
|
||||
gl_major,
|
||||
gl_minor,
|
||||
gl_extensions,
|
||||
0 /* gles_version */);
|
||||
|
||||
if (COGL_CHECK_GL_VERSION (gl_major, gl_minor, 2, 0) ||
|
||||
_cogl_check_extension ("GL_ARB_texture_non_power_of_two", gl_extensions))
|
||||
{
|
||||
@ -207,16 +181,38 @@ _cogl_gl_update_features (CoglContext *context)
|
||||
if (max_clip_planes >= 4)
|
||||
flags |= COGL_FEATURE_FOUR_CLIP_PLANES;
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (cogl_feature_data); i++)
|
||||
if (_cogl_feature_check (_cogl_context_get_winsys (context),
|
||||
"GL", cogl_feature_data + i,
|
||||
gl_major, gl_minor,
|
||||
gl_extensions,
|
||||
context))
|
||||
{
|
||||
private_flags |= cogl_feature_data[i].feature_flags_private;
|
||||
flags |= cogl_feature_data[i].feature_flags;
|
||||
}
|
||||
if (context->glGenRenderbuffers)
|
||||
flags |= COGL_FEATURE_OFFSCREEN;
|
||||
|
||||
if (context->glBlitFramebuffer)
|
||||
flags |= COGL_FEATURE_OFFSCREEN_BLIT;
|
||||
|
||||
if (context->glRenderbufferStorageMultisample)
|
||||
flags |= COGL_FEATURE_OFFSCREEN_MULTISAMPLE;
|
||||
|
||||
if (COGL_CHECK_GL_VERSION (gl_major, gl_minor, 2, 1) ||
|
||||
_cogl_check_extension ("GL_EXT_pixel_buffer_object", gl_extensions))
|
||||
flags |= COGL_FEATURE_PBOS;
|
||||
|
||||
if (context->glGenPrograms)
|
||||
flags |= COGL_FEATURE_SHADERS_ARBFP;
|
||||
|
||||
if (context->glCreateProgram)
|
||||
flags |= COGL_FEATURE_SHADERS_GLSL;
|
||||
|
||||
if (context->glGenBuffers)
|
||||
flags |= (COGL_FEATURE_VBOS |
|
||||
COGL_FEATURE_MAP_BUFFER_FOR_READ |
|
||||
COGL_FEATURE_MAP_BUFFER_FOR_WRITE);
|
||||
|
||||
if (_cogl_check_extension ("GL_ARB_texture_rectangle", gl_extensions))
|
||||
flags |= COGL_FEATURE_TEXTURE_RECTANGLE;
|
||||
|
||||
if (context->glTexImage3D)
|
||||
flags |= COGL_FEATURE_TEXTURE_3D;
|
||||
|
||||
if (context->glEGLImageTargetTexture2D)
|
||||
private_flags |= COGL_PRIVATE_FEATURE_TEXTURE_2D_FROM_EGL_IMAGE;
|
||||
|
||||
/* Cache features */
|
||||
context->private_feature_flags |= private_flags;
|
||||
|
@ -46,8 +46,8 @@
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#define glGenerateMipmap ctx->drv.pf_glGenerateMipmap
|
||||
#define glTexImage3D ctx->drv.pf_glTexImage3D
|
||||
#define glGenerateMipmap ctx->glGenerateMipmap
|
||||
#define glTexImage3D ctx->glTexImage3D
|
||||
|
||||
void
|
||||
_cogl_texture_driver_gen (GLenum gl_target,
|
||||
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* An object oriented GL/GLES Abstraction/Utility Layer
|
||||
*
|
||||
* Copyright (C) 2007,2008,2009 Intel Corporation.
|
||||
* Copyright (C) 2007,2008,2009,2011 Intel Corporation.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@ -26,27 +26,9 @@
|
||||
|
||||
#include "cogl.h"
|
||||
|
||||
#ifndef APIENTRY
|
||||
#define APIENTRY
|
||||
#endif
|
||||
|
||||
#define COGL_FEATURE_BEGIN(a, b, c, d, e, f, g)
|
||||
|
||||
#define COGL_FEATURE_FUNCTION(ret, name, args) \
|
||||
ret (APIENTRY * pf_ ## name) args;
|
||||
|
||||
#define COGL_FEATURE_END()
|
||||
|
||||
typedef struct _CoglContextDriver
|
||||
{
|
||||
/* This defines a list of function pointers */
|
||||
#include "cogl-feature-functions-gles.h"
|
||||
|
||||
} CoglContextDriver;
|
||||
|
||||
#undef COGL_FEATURE_BEGIN
|
||||
#undef COGL_FEATURE_FUNCTION
|
||||
#undef COGL_FEATURE_END
|
||||
|
||||
#endif /* __COGL_CONTEXT_DRIVER_H */
|
||||
|
||||
|
@ -1,153 +0,0 @@
|
||||
/*
|
||||
* Cogl
|
||||
*
|
||||
* An object oriented GL/GLES Abstraction/Utility Layer
|
||||
*
|
||||
* Copyright (C) 2009 Intel Corporation.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/* This is included multiple times with different definitions for
|
||||
these macros */
|
||||
|
||||
COGL_FEATURE_BEGIN (offscreen, 255, 255,
|
||||
"OES\0",
|
||||
"framebuffer_object\0",
|
||||
COGL_FEATURE_OFFSCREEN,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (void, glGenRenderbuffers,
|
||||
(GLsizei n,
|
||||
GLuint *renderbuffers))
|
||||
COGL_FEATURE_FUNCTION (void, glDeleteRenderbuffers,
|
||||
(GLsizei n,
|
||||
const GLuint *renderbuffers))
|
||||
COGL_FEATURE_FUNCTION (void, glBindRenderbuffer,
|
||||
(GLenum target,
|
||||
GLuint renderbuffer))
|
||||
COGL_FEATURE_FUNCTION (void, glRenderbufferStorage,
|
||||
(GLenum target,
|
||||
GLenum internalformat,
|
||||
GLsizei width,
|
||||
GLsizei height))
|
||||
COGL_FEATURE_FUNCTION (void, glGenFramebuffers,
|
||||
(GLsizei n,
|
||||
GLuint *framebuffers))
|
||||
COGL_FEATURE_FUNCTION (void, glBindFramebuffer,
|
||||
(GLenum target,
|
||||
GLuint framebuffer))
|
||||
COGL_FEATURE_FUNCTION (void, glFramebufferTexture2D,
|
||||
(GLenum target,
|
||||
GLenum attachment,
|
||||
GLenum textarget,
|
||||
GLuint texture,
|
||||
GLint level))
|
||||
COGL_FEATURE_FUNCTION (void, glFramebufferRenderbuffer,
|
||||
(GLenum target,
|
||||
GLenum attachment,
|
||||
GLenum renderbuffertarget,
|
||||
GLuint renderbuffer))
|
||||
COGL_FEATURE_FUNCTION (GLenum, glCheckFramebufferStatus,
|
||||
(GLenum target))
|
||||
COGL_FEATURE_FUNCTION (void, glDeleteFramebuffers,
|
||||
(GLsizei n,
|
||||
const GLuint *framebuffers))
|
||||
COGL_FEATURE_FUNCTION (void, glGenerateMipmap,
|
||||
(GLenum target))
|
||||
COGL_FEATURE_FUNCTION (void, glGetFramebufferAttachmentParameteriv,
|
||||
(GLenum target,
|
||||
GLenum attachment,
|
||||
GLenum pname,
|
||||
GLint *params))
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
COGL_FEATURE_BEGIN (offscreen_blit, 255, 255,
|
||||
"ANGLE\0",
|
||||
"framebuffer_blit\0",
|
||||
COGL_FEATURE_OFFSCREEN_BLIT,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (void, glBlitFramebuffer,
|
||||
(GLint srcX0,
|
||||
GLint srcY0,
|
||||
GLint srcX1,
|
||||
GLint srcY1,
|
||||
GLint dstX0,
|
||||
GLint dstY0,
|
||||
GLint dstX1,
|
||||
GLint dstY1,
|
||||
GLbitfield mask,
|
||||
GLenum filter))
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
COGL_FEATURE_BEGIN (element_index_uint, 255, 255,
|
||||
"OES\0",
|
||||
"element_index_uint\0",
|
||||
COGL_FEATURE_UNSIGNED_INT_INDICES,
|
||||
0)
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
COGL_FEATURE_BEGIN (texture_npot, 255, 255,
|
||||
"OES\0IMG\0",
|
||||
"texture_npot\0",
|
||||
COGL_FEATURE_TEXTURE_NPOT |
|
||||
COGL_FEATURE_TEXTURE_NPOT_BASIC |
|
||||
COGL_FEATURE_TEXTURE_NPOT_MIPMAP |
|
||||
COGL_FEATURE_TEXTURE_NPOT_REPEAT,
|
||||
0)
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
COGL_FEATURE_BEGIN (texture_3d, 1, 2,
|
||||
"OES\0",
|
||||
"texture_3D\0",
|
||||
COGL_FEATURE_TEXTURE_3D,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (void, glTexImage3D,
|
||||
(GLenum target, GLint level,
|
||||
GLint internalFormat,
|
||||
GLsizei width, GLsizei height,
|
||||
GLsizei depth, GLint border,
|
||||
GLenum format, GLenum type,
|
||||
const GLvoid *pixels))
|
||||
COGL_FEATURE_FUNCTION (void, glTexSubImage3D,
|
||||
(GLenum target, GLint level,
|
||||
GLint xoffset, GLint yoffset, GLint zoffset,
|
||||
GLsizei width, GLsizei height, GLsizei depth,
|
||||
GLenum format, GLenum type, const GLvoid* pixels))
|
||||
COGL_FEATURE_END ()
|
||||
|
||||
COGL_FEATURE_BEGIN (map_buffer, 255, 255,
|
||||
"OES\0",
|
||||
"mapbuffer\0",
|
||||
COGL_FEATURE_MAP_BUFFER_FOR_WRITE,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (void *, glMapBuffer,
|
||||
(GLenum target,
|
||||
GLenum access))
|
||||
COGL_FEATURE_FUNCTION (GLboolean, glUnmapBuffer,
|
||||
(GLenum target))
|
||||
COGL_FEATURE_END ()
|
||||
COGL_FEATURE_BEGIN (EGL_image, 255, 255,
|
||||
"OES\0",
|
||||
"EGL_image\0",
|
||||
0,
|
||||
COGL_PRIVATE_FEATURE_TEXTURE_2D_FROM_EGL_IMAGE)
|
||||
COGL_FEATURE_FUNCTION (void, glEGLImageTargetTexture2D,
|
||||
(GLenum target,
|
||||
GLeglImageOES image))
|
||||
COGL_FEATURE_FUNCTION (void, glEGLImageTargetRenderbufferStorage,
|
||||
(GLenum target,
|
||||
GLeglImageOES image))
|
||||
COGL_FEATURE_END ()
|
@ -39,37 +39,6 @@ _cogl_gl_check_version (GError **error)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Define a set of arrays containing the functions required from GL
|
||||
for each feature */
|
||||
#define COGL_FEATURE_BEGIN(name, min_gl_major, min_gl_minor, \
|
||||
namespaces, extension_names, \
|
||||
feature_flags, feature_flags_private) \
|
||||
static const CoglFeatureFunction cogl_feature_ ## name ## _funcs[] = {
|
||||
#define COGL_FEATURE_FUNCTION(ret, name, args) \
|
||||
{ G_STRINGIFY (name), G_STRUCT_OFFSET (CoglContext, drv.pf_ ## name) },
|
||||
#define COGL_FEATURE_END() \
|
||||
{ NULL, 0 }, \
|
||||
};
|
||||
#include "cogl-feature-functions-gles.h"
|
||||
|
||||
/* Define an array of features */
|
||||
#undef COGL_FEATURE_BEGIN
|
||||
#define COGL_FEATURE_BEGIN(name, min_gl_major, min_gl_minor, \
|
||||
namespaces, extension_names, \
|
||||
feature_flags, feature_flags_private) \
|
||||
{ min_gl_major, min_gl_minor, namespaces, \
|
||||
extension_names, feature_flags, feature_flags_private, 0, \
|
||||
cogl_feature_ ## name ## _funcs },
|
||||
#undef COGL_FEATURE_FUNCTION
|
||||
#define COGL_FEATURE_FUNCTION(ret, name, args)
|
||||
#undef COGL_FEATURE_END
|
||||
#define COGL_FEATURE_END()
|
||||
|
||||
static const CoglFeatureData cogl_feature_data[] =
|
||||
{
|
||||
#include "cogl-feature-functions-gles.h"
|
||||
};
|
||||
|
||||
/* Query the GL extensions and lookup the corresponding function
|
||||
* pointers. Theoretically the list of extensions can change for
|
||||
* different GL contexts so it is the winsys backend's responsiblity
|
||||
@ -84,7 +53,6 @@ _cogl_gl_update_features (CoglContext *context)
|
||||
int max_clip_planes = 0;
|
||||
#endif
|
||||
int num_stencil_bits = 0;
|
||||
int i;
|
||||
|
||||
COGL_NOTE (WINSYS,
|
||||
"Checking features\n"
|
||||
@ -99,6 +67,16 @@ _cogl_gl_update_features (CoglContext *context)
|
||||
|
||||
gl_extensions = (const char*) glGetString (GL_EXTENSIONS);
|
||||
|
||||
_cogl_feature_check_ext_functions (context,
|
||||
-1 /* GL major version */,
|
||||
-1 /* GL minor version */,
|
||||
gl_extensions,
|
||||
#ifdef HAVE_COGL_GLES2
|
||||
COGL_EXT_IN_GLES2
|
||||
#else
|
||||
COGL_EXT_IN_GLES
|
||||
#endif
|
||||
);
|
||||
|
||||
GE( glGetIntegerv (GL_STENCIL_BITS, &num_stencil_bits) );
|
||||
/* We need at least three stencil bits to combine clips */
|
||||
@ -124,16 +102,32 @@ _cogl_gl_update_features (CoglContext *context)
|
||||
/* Both GLES 1.1 and GLES 2.0 support point sprites in core */
|
||||
flags |= COGL_FEATURE_POINT_SPRITE;
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (cogl_feature_data); i++)
|
||||
if (_cogl_feature_check (_cogl_context_get_winsys (context),
|
||||
"GL", cogl_feature_data + i,
|
||||
0, 0,
|
||||
gl_extensions,
|
||||
context))
|
||||
{
|
||||
private_flags |= cogl_feature_data[i].feature_flags_private;
|
||||
flags |= cogl_feature_data[i].feature_flags;
|
||||
}
|
||||
if (context->glGenRenderbuffers)
|
||||
flags |= COGL_FEATURE_OFFSCREEN;
|
||||
|
||||
if (context->glBlitFramebuffer)
|
||||
flags |= COGL_FEATURE_OFFSCREEN_BLIT;
|
||||
|
||||
if (_cogl_check_extension ("GL_OES_element_index_uint", gl_extensions))
|
||||
flags |= COGL_FEATURE_UNSIGNED_INT_INDICES;
|
||||
|
||||
if (_cogl_check_extension ("GL_OES_texture_npot", gl_extensions) ||
|
||||
_cogl_check_extension ("GL_IMG_texture_npot", gl_extensions))
|
||||
flags |= (COGL_FEATURE_TEXTURE_NPOT |
|
||||
COGL_FEATURE_TEXTURE_NPOT_BASIC |
|
||||
COGL_FEATURE_TEXTURE_NPOT_MIPMAP |
|
||||
COGL_FEATURE_TEXTURE_NPOT_REPEAT);
|
||||
|
||||
if (context->glTexImage3D)
|
||||
flags |= COGL_FEATURE_TEXTURE_3D;
|
||||
|
||||
if (context->glMapBuffer)
|
||||
/* The GL_OES_mapbuffer extension doesn't support mapping for
|
||||
read */
|
||||
flags |= COGL_FEATURE_MAP_BUFFER_FOR_WRITE;
|
||||
|
||||
if (context->glEGLImageTargetTexture2D)
|
||||
flags |= COGL_PRIVATE_FEATURE_TEXTURE_2D_FROM_EGL_IMAGE;
|
||||
|
||||
/* Cache features */
|
||||
context->private_feature_flags |= private_flags;
|
||||
|
@ -46,8 +46,8 @@
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#define glTexImage3D ctx->drv.pf_glTexImage3D
|
||||
#define glTexSubImage3D ctx->drv.pf_glTexSubImage3D
|
||||
#define glTexImage3D ctx->glTexImage3D
|
||||
#define glTexSubImage3D ctx->glTexSubImage3D
|
||||
|
||||
#ifndef GL_TEXTURE_3D
|
||||
#define GL_TEXTURE_3D 0x806F
|
||||
|
@ -197,7 +197,7 @@ typedef struct _CoglTexturePixmapEGL
|
||||
#undef COGL_WINSYS_FEATURE_BEGIN
|
||||
#define COGL_WINSYS_FEATURE_BEGIN(name, namespaces, extension_names, \
|
||||
egl_private_flags) \
|
||||
{ 255, 255, namespaces, extension_names, \
|
||||
{ 255, 255, 0, namespaces, extension_names, \
|
||||
0, egl_private_flags, \
|
||||
0, \
|
||||
cogl_egl_feature_ ## name ## _funcs },
|
||||
@ -353,7 +353,7 @@ check_egl_extensions (CoglRenderer *renderer)
|
||||
egl_renderer->private_features = 0;
|
||||
for (i = 0; i < G_N_ELEMENTS (winsys_feature_data); i++)
|
||||
if (_cogl_feature_check (winsys,
|
||||
"EGL", winsys_feature_data + i, 0, 0,
|
||||
"EGL", winsys_feature_data + i, 0, 0, 0,
|
||||
egl_extensions,
|
||||
egl_renderer))
|
||||
{
|
||||
|
@ -123,7 +123,7 @@ typedef struct _CoglTexturePixmapGLX
|
||||
#define COGL_WINSYS_FEATURE_BEGIN(name, namespaces, extension_names, \
|
||||
feature_flags, feature_flags_private, \
|
||||
winsys_feature) \
|
||||
{ 255, 255, namespaces, extension_names, \
|
||||
{ 255, 255, 0, namespaces, extension_names, \
|
||||
feature_flags, feature_flags_private, \
|
||||
winsys_feature, \
|
||||
cogl_glx_feature_ ## name ## _funcs },
|
||||
@ -346,7 +346,7 @@ update_winsys_features (CoglContext *context)
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (winsys_feature_data); i++)
|
||||
if (_cogl_feature_check (_cogl_context_get_winsys (context),
|
||||
"GLX", winsys_feature_data + i, 0, 0,
|
||||
"GLX", winsys_feature_data + i, 0, 0, 0,
|
||||
glx_extensions,
|
||||
glx_renderer))
|
||||
{
|
||||
@ -384,7 +384,7 @@ update_winsys_features (CoglContext *context)
|
||||
}
|
||||
#endif
|
||||
|
||||
if (glx_renderer->pf_glXCopySubBuffer || context->drv.pf_glBlitFramebuffer)
|
||||
if (glx_renderer->pf_glXCopySubBuffer || context->glBlitFramebuffer)
|
||||
COGL_FLAGS_SET (context->winsys_features,
|
||||
COGL_WINSYS_FEATURE_SWAP_REGION, TRUE);
|
||||
|
||||
@ -1143,7 +1143,7 @@ _cogl_winsys_onscreen_swap_region (CoglOnscreen *onscreen,
|
||||
rect[0], rect[1], rect[2], rect[3]);
|
||||
}
|
||||
}
|
||||
else if (context->drv.pf_glBlitFramebuffer)
|
||||
else if (context->glBlitFramebuffer)
|
||||
{
|
||||
int i;
|
||||
/* XXX: checkout how this state interacts with the code to use
|
||||
@ -1154,9 +1154,9 @@ _cogl_winsys_onscreen_swap_region (CoglOnscreen *onscreen,
|
||||
int *rect = &rectangles[4 * i];
|
||||
int x2 = rect[0] + rect[2];
|
||||
int y2 = rect[1] + rect[3];
|
||||
context->drv.pf_glBlitFramebuffer (rect[0], rect[1], x2, y2,
|
||||
rect[0], rect[1], x2, y2,
|
||||
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
context->glBlitFramebuffer (rect[0], rect[1], x2, y2,
|
||||
rect[0], rect[1], x2, y2,
|
||||
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
}
|
||||
glDrawBuffer (GL_BACK);
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ typedef struct _CoglOnscreenWgl
|
||||
#define COGL_WINSYS_FEATURE_BEGIN(name, namespaces, extension_names, \
|
||||
feature_flags, feature_flags_private, \
|
||||
winsys_feature) \
|
||||
{ 255, 255, namespaces, extension_names, \
|
||||
{ 255, 255, 0, namespaces, extension_names, \
|
||||
feature_flags, feature_flags_private, \
|
||||
winsys_feature, \
|
||||
cogl_wgl_feature_ ## name ## _funcs },
|
||||
@ -567,7 +567,7 @@ update_winsys_features (CoglContext *context)
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (winsys_feature_data); i++)
|
||||
if (_cogl_feature_check (_cogl_context_get_winsys (context),
|
||||
"WGL", winsys_feature_data + i, 0, 0,
|
||||
"WGL", winsys_feature_data + i, 0, 0, 0,
|
||||
wgl_extensions,
|
||||
wgl_renderer))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user