Fix building GLES 2 after the material branch merge

- In cogl-material.h it directly sets the values of the
  CoglMaterialLayerCombineFunc to some GL_* constants. However these
  aren't defined in GLES 2 beacuse it has no fixed function texture
  combining. Instead the CGL_* versions are now used. cogl-defines.h
  now sets these to either the GL_* version if it is available,
  otherwise it directly uses the number.

- Under GLES 2 cogl-material.c needs to access the CoglTexture struct
  so it needs to include cogl-texture-private.h

- There are now #define's in cogl-gles2-wrapper.h to remap the GL
  function names to the wrapper names. These are disabled in
  cogl-gles2-wrapper.c by defining COGL_GLES2_WRAPPER_NO_REMAP.

- Added missing wrappers for glLoadMatrixf and glMaterialfv.

- Renamed the TexEnvf wrapper to TexEnvi because the latter is used
  instead from the material API.
This commit is contained in:
Neil Roberts 2009-01-29 13:40:37 +00:00
parent edbe9a0377
commit e88de5f5fd
7 changed files with 297 additions and 77 deletions

View File

@ -446,14 +446,14 @@ void cogl_material_remove_layer (CoglHandle material,
*/
typedef enum _CoglMaterialLayerCombineFunc
{
COGL_MATERIAL_LAYER_COMBINE_FUNC_REPLACE = GL_REPLACE,
COGL_MATERIAL_LAYER_COMBINE_FUNC_MODULATE = GL_MODULATE,
COGL_MATERIAL_LAYER_COMBINE_FUNC_ADD = GL_ADD,
COGL_MATERIAL_LAYER_COMBINE_FUNC_ADD_SIGNED = GL_ADD_SIGNED,
COGL_MATERIAL_LAYER_COMBINE_FUNC_INTERPOLATE = GL_INTERPOLATE,
COGL_MATERIAL_LAYER_COMBINE_FUNC_SUBTRACT = GL_SUBTRACT,
COGL_MATERIAL_LAYER_COMBINE_FUNC_DOT3_RGB = GL_DOT3_RGB,
COGL_MATERIAL_LAYER_COMBINE_FUNC_DOT3_RGBA = GL_DOT3_RGBA
COGL_MATERIAL_LAYER_COMBINE_FUNC_REPLACE = CGL_REPLACE,
COGL_MATERIAL_LAYER_COMBINE_FUNC_MODULATE = CGL_MODULATE,
COGL_MATERIAL_LAYER_COMBINE_FUNC_ADD = CGL_ADD,
COGL_MATERIAL_LAYER_COMBINE_FUNC_ADD_SIGNED = CGL_ADD_SIGNED,
COGL_MATERIAL_LAYER_COMBINE_FUNC_INTERPOLATE = CGL_INTERPOLATE,
COGL_MATERIAL_LAYER_COMBINE_FUNC_SUBTRACT = CGL_SUBTRACT,
COGL_MATERIAL_LAYER_COMBINE_FUNC_DOT3_RGB = CGL_DOT3_RGB,
COGL_MATERIAL_LAYER_COMBINE_FUNC_DOT3_RGBA = CGL_DOT3_RGBA
} CoglMaterialLayerCombineFunc;
/**
@ -583,9 +583,9 @@ typedef enum _CoglMaterialLayerCombineSrc
COGL_MATERIAL_LAYER_COMBINE_SRC_TEXTURE7 = GL_TEXTURE7,
/* .. who would ever need more than 8 texture layers.. :-) */
COGL_MATERIAL_LAYER_COMBINE_SRC_CONSTANT = GL_CONSTANT,
COGL_MATERIAL_LAYER_COMBINE_SRC_PRIMARY_COLOR = GL_PRIMARY_COLOR,
COGL_MATERIAL_LAYER_COMBINE_SRC_PREVIOUS = GL_PREVIOUS
COGL_MATERIAL_LAYER_COMBINE_SRC_CONSTANT = CGL_CONSTANT,
COGL_MATERIAL_LAYER_COMBINE_SRC_PRIMARY_COLOR = CGL_PRIMARY_COLOR,
COGL_MATERIAL_LAYER_COMBINE_SRC_PREVIOUS = CGL_PREVIOUS
} CoglMaterialLayerCombineSrc;
/**

View File

@ -9,6 +9,7 @@
#include "cogl-handle.h"
#include "cogl-material-private.h"
#include "cogl-texture-private.h"
#include <glib.h>
#include <string.h>
@ -18,7 +19,7 @@
*/
#ifdef HAVE_COGL_GLES2
#define glAlphaFunc cogl_wrap_glAlphaFunc
#include "../gles/cogl-gles2-wrapper.h"
#endif
static void _cogl_material_free (CoglMaterial *tex);

View File

@ -159,14 +159,7 @@
#elif defined (HAVE_COGL_GLES2)
#define glVertexPointer cogl_wrap_glVertexPointer
#define glNormalPointer cogl_wrap_glNormalPointer
#define glTexCoordPointer cogl_wrap_glTexCoordPointer
#define glColorPointer cogl_wrap_glColorPointer
#define glDrawArrays cogl_wrap_glDrawArrays
#define glEnableClientState cogl_wrap_glEnableClientState
#define glDisableClientState cogl_wrap_glDisableClientState
#include "../gles/cogl-gles2-wrapper.h"
#endif

View File

@ -668,6 +668,9 @@ typedef GLuint COGLuint;
#define CGL_COMPRESSED_SLUMINANCE_EXT GL_COMPRESSED_SLUMINANCE_EXT
#define CGL_COMPRESSED_SLUMINANCE_ALPHA_EXT GL_COMPRESSED_SLUMINANCE_ALPHA_EXT
#define CGL_DOT3_RGB GL_DOT3_RGB
#define CGL_DOT3_RGBA GL_DOT3_RGBA
/* extras */
#define CGL_TEXTURE_2D GL_TEXTURE_2D

View File

@ -263,9 +263,6 @@ G_BEGIN_DECLS
#define CGL_LIGHT_MODEL_TWO_SIDE GL_LIGHT_MODEL_TWO_SIDE
/* LightParameter */
#define CGL_AMBIENT GL_AMBIENT
#define CGL_DIFFUSE GL_DIFFUSE
#define CGL_SPECULAR GL_SPECULAR
#define CGL_POSITION GL_POSITION
#define CGL_SPOT_DIRECTION GL_SPOT_DIRECTION
#define CGL_SPOT_EXPONENT GL_SPOT_EXPONENT
@ -301,8 +298,6 @@ G_BEGIN_DECLS
#define CGL_SET GL_SET
/* MaterialParameter */
#define CGL_EMISSION GL_EMISSION
#define CGL_SHININESS GL_SHININESS
#define CGL_AMBIENT_AND_DIFFUSE GL_AMBIENT_AND_DIFFUSE
/* MatrixMode */
@ -354,9 +349,7 @@ G_BEGIN_DECLS
#define CGL_EXTENSIONS GL_EXTENSIONS
/* TextureEnvMode */
#define CGL_MODULATE GL_MODULATE
#define CGL_DECAL GL_DECAL
#define CGL_ADD GL_ADD
/* GL_BLEND */
/* GL_REPLACE */
@ -410,16 +403,7 @@ G_BEGIN_DECLS
#define CGL_BUFFER_SIZE GL_BUFFER_SIZE
#define CGL_BUFFER_USAGE GL_BUFFER_USAGE
#define CGL_BUFFER_ACCESS GL_BUFFER_ACCESS
#define CGL_SUBTRACT GL_SUBTRACT
#define CGL_COMBINE GL_COMBINE
#define CGL_COMBINE_RGB GL_COMBINE_RGB
#define CGL_COMBINE_ALPHA GL_COMBINE_ALPHA
#define CGL_RGB_SCALE GL_RGB_SCALE
#define CGL_ADD_SIGNED GL_ADD_SIGNED
#define CGL_INTERPOLATE GL_INTERPOLATE
#define CGL_CONSTANT GL_CONSTANT
#define CGL_PRIMARY_COLOR GL_PRIMARY_COLOR
#define CGL_PREVIOUS GL_PREVIOUS
#define CGL_ALPHA_SCALE GL_ALPHA_SCALE
#define CGL_POINT_SPRITE_OES GL_POINT_SPRITE_OES
#define CGL_COORD_REPLACE_OES GL_COORD_REPLACE_OES
@ -478,6 +462,189 @@ typedef GLuint COGLuint;
#define CLUTTER_COGL_HAS_GLES 1
/* These aren't always defined under GLES 2 but if they are then we
should probably use the GL_* macro instead of assuming the
number */
#ifdef GL_MODULATE
#define CGL_MODULATE GL_MODULATE
#else
#define CGL_MODULATE 0x2100
#endif
#ifdef GL_ADD
#define CGL_ADD GL_ADD
#else
#define CGL_ADD 0x0104
#endif
#ifdef GL_ADD_SIGNED
#define CGL_ADD_SIGNED GL_ADD_SIGNED
#else
#define CGL_ADD_SIGNED 0x8574
#endif
#ifdef GL_INTERPOLATE
#define CGL_INTERPOLATE GL_INTERPOLATE
#else
#define CGL_INTERPOLATE 0x8575
#endif
#ifdef GL_SUBTRACT
#define CGL_SUBTRACT GL_SUBTRACT
#else
#define CGL_SUBTRACT 0x84e7
#endif
#ifdef GL_DOT3_RGB
#define CGL_DOT3_RGB GL_DOT3_RGB
#else
#define CGL_DOT3_RGB 0x86ae
#endif
#ifdef GL_DOT3_RGBA
#define CGL_DOT3_RGBA GL_DOT3_RGBA
#else
#define CGL_DOT3_RGBA 0x86af
#endif
#ifdef GL_CONSTANT
#define CGL_CONSTANT GL_CONSTANT
#else
#define CGL_CONSTANT 0x8576
#endif
#ifdef GL_PRIMARY_COLOR
#define CGL_PRIMARY_COLOR GL_PRIMARY_COLOR
#else
#define CGL_PRIMARY_COLOR 0x8577
#endif
#ifdef GL_PREVIOUS
#define CGL_PREVIOUS GL_PREVIOUS
#else
#define CGL_PREVIOUS 0x8578
#endif
#ifdef GL_COMBINE
#define CGL_COMBINE GL_COMBINE
#else
#define CGL_COMBINE 0x8570
#endif
#ifdef GL_COMBINE_RGB
#define CGL_COMBINE_RGB GL_COMBINE_RGB
#else
#define CGL_COMBINE_RGB 0x8571
#endif
#ifdef GL_COMBINE_ALPHA
#define CGL_COMBINE_ALPHA GL_COMBINE_ALPHA
#else
#define CGL_COMBINE_ALPHA 0x8572
#endif
#ifdef GL_SRC0_RGB
#define CGL_SRC0_RGB GL_SRC0_RGB
#else
#define CGL_SRC0_RGB 0x8580
#endif
#ifdef GL_OPERAND0_RGB
#define CGL_OPERAND0_RGB GL_OPERAND0_RGB
#else
#define CGL_OPERAND0_RGB 0x8590
#endif
#ifdef GL_SRC1_RGB
#define CGL_SRC1_RGB GL_SRC1_RGB
#else
#define CGL_SRC1_RGB 0x8581
#endif
#ifdef GL_OPERAND1_RGB
#define CGL_OPERAND1_RGB GL_OPERAND1_RGB
#else
#define CGL_OPERAND1_RGB 0x8591
#endif
#ifdef GL_SRC2_RGB
#define CGL_SRC2_RGB GL_SRC2_RGB
#else
#define CGL_SRC2_RGB 0x8582
#endif
#ifdef GL_OPERAND2_RGB
#define CGL_OPERAND2_RGB GL_OPERAND2_RGB
#else
#define CGL_OPERAND2_RGB 0x8592
#endif
#ifdef GL_SRC0_ALPHA
#define CGL_SRC0_ALPHA GL_SRC0_ALPHA
#else
#define CGL_SRC0_ALPHA 0x8588
#endif
#ifdef GL_OPERAND0_ALPHA
#define CGL_OPERAND0_ALPHA GL_OPERAND0_ALPHA
#else
#define CGL_OPERAND0_ALPHA 0x8598
#endif
#ifdef GL_SRC1_ALPHA
#define CGL_SRC1_ALPHA GL_SRC1_ALPHA
#else
#define CGL_SRC1_ALPHA 0x8589
#endif
#ifdef GL_OPERAND1_ALPHA
#define CGL_OPERAND1_ALPHA GL_OPERAND1_ALPHA
#else
#define CGL_OPERAND1_ALPHA 0x8599
#endif
#ifdef GL_SRC2_ALPHA
#define CGL_SRC2_ALPHA GL_SRC2_ALPHA
#else
#define CGL_SRC2_ALPHA 0x858a
#endif
#ifdef GL_OPERAND2_ALPHA
#define CGL_OPERAND2_ALPHA GL_OPERAND2_ALPHA
#else
#define CGL_OPERAND2_ALPHA 0x859a
#endif
#ifdef GL_AMBIENT
#define CGL_AMBIENT GL_AMBIENT
#else
#define CGL_AMBIENT 0x1200
#endif
#ifdef GL_DIFFUSE
#define CGL_DIFFUSE GL_DIFFUSE
#else
#define CGL_DIFFUSE 0x1201
#endif
#ifdef GL_SPECULAR
#define CGL_SPECULAR GL_SPECULAR
#else
#define CGL_SPECULAR 0x1202
#endif
#ifdef GL_EMISSION
#define CGL_EMISSION GL_EMISSION
#else
#define CGL_EMISSION 0x1600
#endif
#ifdef GL_SHININESS
#define CGL_SHININESS GL_SHININESS
#else
#define CGL_SHININESS 0x1601
#endif
G_END_DECLS
#endif

View File

@ -31,6 +31,11 @@
#include <string.h>
#include <math.h>
/* We don't want to get the remaps from the gl* functions to the
cogl_wrap_gl* functions in this file because we need to be able to
call the base version */
#define COGL_GLES2_WRAPPER_NO_REMAP 1
#include "cogl.h"
#include "cogl-gles2-wrapper.h"
#include "cogl-fixed-vertex-shader.h"
@ -803,13 +808,21 @@ cogl_wrap_glMultMatrix (const float *m)
void
cogl_wrap_glMultMatrixf (const GLfloat *m)
{
float new_matrix[16];
int i;
cogl_wrap_glMultMatrix (m);
}
for (i = 0; i < 16; i++)
new_matrix[i] = (m[i]);
void
cogl_wrap_glLoadMatrixf (const GLfloat *m)
{
float *old_matrix;
cogl_wrap_glMultMatrix (new_matrix);
_COGL_GET_GLES2_WRAPPER (w, NO_RETVAL);
old_matrix = cogl_gles2_get_matrix_stack_top (w);
memcpy (old_matrix, m, sizeof (float) * 16);
cogl_gles2_wrapper_update_matrix (w, w->matrix_mode);
}
void
@ -1275,7 +1288,7 @@ cogl_gles2_wrapper_bind_texture (GLenum target, GLuint texture,
}
void
cogl_wrap_glTexEnvf (GLenum target, GLenum pname, GLfloat param)
cogl_wrap_glTexEnvi (GLenum target, GLenum pname, GLfloat param)
{
/* This function is only used to set the texture mode once to
GL_MODULATE. The shader is hard-coded to modulate the texture so
@ -1591,6 +1604,13 @@ cogl_wrap_glTexParameteri (GLenum target, GLenum pname, GLfloat param)
glTexParameteri (target, pname, param);
}
void
cogl_wrap_glMaterialfv (GLenum face, GLenum pname, const GLfloat *params)
{
/* FIXME: the GLES 2 backend doesn't yet support lighting so this
function can't do anything */
}
void
_cogl_gles2_clear_cache_for_program (CoglHandle user_program)
{

View File

@ -259,6 +259,36 @@ struct _CoglGles2WrapperShader
#define GL_EXP 0x8000
#define GL_EXP2 0x8001
#define GL_ADD CGL_ADD
#define GL_ADD_SIGNED CGL_ADD_SIGNED
#define GL_INTERPOLATE CGL_INTERPOLATE
#define GL_SUBTRACT CGL_SUBTRACT
#define GL_DOT3_RGB CGL_DOT3_RGB
#define GL_DOT3_RGBA CGL_DOT3_RGBA
#define GL_CONSTANT CGL_CONSTANT
#define GL_PRIMARY_COLOR CGL_PRIMARY_COLOR
#define GL_PREVIOUS CGL_PREVIOUS
#define GL_COMBINE CGL_COMBINE
#define GL_COMBINE_RGB CGL_COMBINE_RGB
#define GL_COMBINE_ALPHA CGL_COMBINE_ALPHA
#define GL_SRC0_RGB CGL_SRC0_RGB
#define GL_OPERAND0_RGB CGL_OPERAND0_RGB
#define GL_SRC1_RGB CGL_SRC1_RGB
#define GL_OPERAND1_RGB CGL_OPERAND1_RGB
#define GL_SRC2_RGB CGL_SRC2_RGB
#define GL_OPERAND2_RGB CGL_OPERAND2_RGB
#define GL_SRC0_ALPHA CGL_SRC0_ALPHA
#define GL_OPERAND0_ALPHA CGL_OPERAND0_ALPHA
#define GL_SRC1_ALPHA CGL_SRC1_ALPHA
#define GL_OPERAND1_ALPHA CGL_OPERAND1_ALPHA
#define GL_SRC2_ALPHA CGL_SRC2_ALPHA
#define GL_OPERAND2_ALPHA CGL_OPERAND2_ALPHA
#define GL_AMBIENT CGL_AMBIENT
#define GL_DIFFUSE CGL_DIFFUSE
#define GL_SPECULAR CGL_SPECULAR
#define GL_EMISSION CGL_EMISSION
#define GL_SHININESS CGL_SHININESS
#endif /* GL_MODELVIEW */
void cogl_gles2_wrapper_init (CoglGles2Wrapper *wrapper);
@ -269,6 +299,7 @@ void cogl_wrap_glPopMatrix ();
void cogl_wrap_glMatrixMode (GLenum mode);
void cogl_wrap_glLoadIdentity ();
void cogl_wrap_glMultMatrixf (const GLfloat *m);
void cogl_wrap_glLoadMatrixf (const GLfloat *m);
void cogl_wrap_glFrustumf (GLfloat left, GLfloat right,
GLfloat bottom, GLfloat top,
GLfloat z_near, GLfloat z_far);
@ -291,7 +322,7 @@ void cogl_wrap_glColorPointer (GLint size, GLenum type, GLsizei stride,
void cogl_wrap_glNormalPointer (GLenum type, GLsizei stride,
const GLvoid *pointer);
void cogl_wrap_glTexEnvf (GLenum target, GLenum pname, GLfloat param);
void cogl_wrap_glTexEnvi (GLenum target, GLenum pname, GLfloat param);
void cogl_wrap_glClientActiveTexture (GLenum texture);
void cogl_wrap_glActiveTexture (GLenum texture);
@ -319,47 +350,52 @@ void cogl_wrap_glTexParameteri (GLenum target, GLenum pname, GLfloat param);
void cogl_gles2_wrapper_bind_texture (GLenum target, GLuint texture,
GLenum internal_format);
void cogl_wrap_glMaterialfv (GLenum face, GLenum pname, const GLfloat *params);
/* This function is only available on GLES 2 */
#define cogl_wrap_glGenerateMipmap glGenerateMipmap
void _cogl_gles2_clear_cache_for_program (CoglHandle program);
/* Remap the missing GL functions to use the wrappers */
#ifndef COGL_GLES2_WRAPPER_NO_REMAP
#define glDrawArrays cogl_wrap_glDrawArrays
#define glDrawElements cogl_wrap_glDrawElements
#define glPushMatrix cogl_wrap_glPushMatrix
#define glPopMatrix cogl_wrap_glPopMatrix
#define glMatrixMode cogl_wrap_glMatrixMode
#define glLoadIdentity cogl_wrap_glLoadIdentity
#define glMultMatrixf cogl_wrap_glMultMatrixf
#define glLoadMatrixf cogl_wrap_glLoadMatrixf
#define glFrustumf cogl_wrap_glFrustumf
#define glScalef cogl_wrap_glScalef
#define glTranslatef cogl_wrap_glTranslatef
#define glRotatef cogl_wrap_glRotatef
#define glOrthof cogl_wrap_glOrthof
#define glEnable cogl_wrap_glEnable
#define glDisable cogl_wrap_glDisable
#define glTexCoordPointer cogl_wrap_glTexCoordPointer
#define glVertexPointer cogl_wrap_glVertexPointer
#define glColorPointer cogl_wrap_glColorPointer
#define glNormalPointer cogl_wrap_glNormalPointer
#define glTexEnvi cogl_wrap_glTexEnvi
#define glActiveTexture cogl_wrap_glActiveTexture
#define glClientActiveTexture cogl_wrap_glClientActiveTexture
#define glEnableClientState cogl_wrap_glEnableClientState
#define glDisableClientState cogl_wrap_glDisableClientState
#define glAlphaFunc cogl_wrap_glAlphaFunc
#define glColor4f cogl_wrap_glColor4f
#define glClipPlanef cogl_wrap_glClipPlanef
#define glGetIntegerv cogl_wrap_glGetIntegerv
#define glGetFloatv cogl_wrap_glGetFloatv
#define glFogf cogl_wrap_glFogf
#define glFogfv cogl_wrap_glFogfv
#define glTexParameteri cogl_wrap_glTexParameteri
#define glMaterialfv cogl_wrap_glMaterialfv
#endif /* COGL_GLES2_WRAPPER_NO_REMAP */
#else /* HAVE_COGL_GLES2 */
/* If we're not using GL ES 2 then just use the GL functions
directly */
#define cogl_wrap_glDrawArrays glDrawArrays
#define cogl_wrap_glDrawElements glDrawElements
#define cogl_wrap_glPushMatrix glPushMatrix
#define cogl_wrap_glPopMatrix glPopMatrix
#define cogl_wrap_glMatrixMode glMatrixMode
#define cogl_wrap_glLoadIdentity glLoadIdentity
#define cogl_wrap_glMultMatrixf glMultMatrixf
#define cogl_wrap_glFrustumf glFrustumf
#define cogl_wrap_glScalef glScalef
#define cogl_wrap_glTranslatef glTranslatef
#define cogl_wrap_glRotatef glRotatef
#define cogl_wrap_glOrthof glOrthof
#define cogl_wrap_glEnable glEnable
#define cogl_wrap_glDisable glDisable
#define cogl_wrap_glTexCoordPointer glTexCoordPointer
#define cogl_wrap_glVertexPointer glVertexPointer
#define cogl_wrap_glColorPointer glColorPointer
#define cogl_wrap_glNormalPointer glNormalPointer
#define cogl_wrap_glTexEnvf glTexEnvf
#define cogl_wrap_glActiveTexture glActiveTexture
#define cogl_wrap_glEnableClientState glEnableClientState
#define cogl_wrap_glDisableClientState glDisableClientState
#define cogl_wrap_glAlphaFunc glAlphaFunc
#define cogl_wrap_glColor4f glColor4f
#define cogl_wrap_glClipPlanef glClipPlanef
#define cogl_wrap_glGetIntegerv glGetIntegerv
#define cogl_wrap_glGetFloatv glGetFloatv
#define cogl_wrap_glFogf glFogf
#define cogl_wrap_glFogfv glFogfv
#define cogl_wrap_glTexParameteri glTexParameteri
/* The extra third parameter of the bind texture wrapper isn't needed
so we can just directly call glBindTexture */
#define cogl_gles2_wrapper_bind_texture(target, texture, internal_format) \