mirror of
https://github.com/brl/mutter.git
synced 2025-06-14 01:09:30 +00:00
material: Adds backend abstraction for fragment processing
As part of an effort to improve the architecture of CoglMaterial internally this overhauls how we flush layer state to OpenGL by adding a formal backend abstraction for fragment processing and further formalizing the CoglTextureUnit abstraction. There are three backends: "glsl", "arbfp" and "fixed". The fixed backend uses the OpenGL fixed function APIs to setup the fragment processing, the arbfp backend uses code generation to handle fragment processing using an ARBfp program, and the GLSL backend is currently only there as a formality to handle user programs associated with a material. (i.e. the glsl backend doesn't yet support code generation) The GLSL backend has highest precedence, then arbfp and finally the fixed. If a backend can't support some particular CoglMaterial feature then it will fallback to the next backend. This adds three new COGL_DEBUG options: * "disable-texturing" as expected should disable all texturing * "disable-arbfp" always make the arbfp backend fallback * "disable-glsl" always make the glsl backend fallback * "show-source" show code generated by the arbfp/glsl backends
This commit is contained in:
@ -119,6 +119,9 @@ COGL_FEATURE_BEGIN (arbfp, 255, 255,
|
||||
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))
|
||||
@ -127,47 +130,51 @@ COGL_FEATURE_FUNCTION (void, glProgramString,
|
||||
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, 255, 255,
|
||||
"ARB\0",
|
||||
"shader_objects\0"
|
||||
"vertex_shader\0"
|
||||
"fragment_shader\0",
|
||||
COGL_FEATURE_BEGIN (shaders_glsl, 2, 0,
|
||||
"\0",
|
||||
"\0",
|
||||
COGL_FEATURE_SHADERS_GLSL,
|
||||
0)
|
||||
COGL_FEATURE_FUNCTION (GLhandleARB, glCreateProgramObject,
|
||||
COGL_FEATURE_FUNCTION (GLuint, glCreateProgram,
|
||||
(void))
|
||||
COGL_FEATURE_FUNCTION (GLhandleARB, glCreateShaderObject,
|
||||
COGL_FEATURE_FUNCTION (GLuint, glCreateShader,
|
||||
(GLenum shaderType))
|
||||
COGL_FEATURE_FUNCTION (void, glShaderSource,
|
||||
(GLhandleARB shaderObj,
|
||||
(GLuint shader,
|
||||
GLsizei count,
|
||||
const GLcharARB* *string,
|
||||
const GLchar **string,
|
||||
const GLint *length))
|
||||
COGL_FEATURE_FUNCTION (void, glCompileShader,
|
||||
(GLhandleARB shaderObj))
|
||||
COGL_FEATURE_FUNCTION (void, glAttachObject,
|
||||
(GLhandleARB containerObj,
|
||||
GLhandleARB obj))
|
||||
(GLuint shader))
|
||||
COGL_FEATURE_FUNCTION (void, glDeleteShader,
|
||||
(GLuint shader))
|
||||
COGL_FEATURE_FUNCTION (void, glAttachShader,
|
||||
(GLuint program,
|
||||
GLuint shader))
|
||||
COGL_FEATURE_FUNCTION (void, glLinkProgram,
|
||||
(GLhandleARB programObj))
|
||||
COGL_FEATURE_FUNCTION (void, glUseProgramObject,
|
||||
(GLhandleARB programObj))
|
||||
(GLuint program))
|
||||
COGL_FEATURE_FUNCTION (void, glUseProgram,
|
||||
(GLuint program))
|
||||
COGL_FEATURE_FUNCTION (GLint, glGetUniformLocation,
|
||||
(GLhandleARB programObj,
|
||||
const GLcharARB *name))
|
||||
COGL_FEATURE_FUNCTION (void, glDeleteObject,
|
||||
(GLhandleARB obj))
|
||||
COGL_FEATURE_FUNCTION (void, glGetInfoLog,
|
||||
(GLhandleARB obj,
|
||||
(GLuint program,
|
||||
const GLchar *name))
|
||||
COGL_FEATURE_FUNCTION (void, glDeleteProgram,
|
||||
(GLuint program))
|
||||
COGL_FEATURE_FUNCTION (void, glGetShaderInfoLog,
|
||||
(GLuint shader,
|
||||
GLsizei maxLength,
|
||||
GLsizei *length,
|
||||
GLcharARB *infoLog))
|
||||
COGL_FEATURE_FUNCTION (void, glGetObjectParameteriv,
|
||||
(GLhandleARB obj,
|
||||
GLchar *infoLog))
|
||||
COGL_FEATURE_FUNCTION (void, glGetShaderiv,
|
||||
(GLuint shader,
|
||||
GLenum pname,
|
||||
GLint *params))
|
||||
|
||||
|
Reference in New Issue
Block a user