X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=glwrap.c;h=76d9ef9bd360fdfa85ecd6e0c14641a3dc380a0e;hb=dfb96c9b64def8674a38dda2bc2276d4e2cdd58e;hp=94966f5142487e402bb646c0d576c0e027c5bb63;hpb=7980e4108be1dff9b074aa91b97c8d787df41d83;p=fips diff --git a/glwrap.c b/glwrap.c index 94966f5..76d9ef9 100644 --- a/glwrap.c +++ b/glwrap.c @@ -45,23 +45,45 @@ #include "glwrap.h" -#include "metrics.h" +#include "context.h" + +/* The first appearance of the GLfixed datatype in Mesa was with + * glext.h of version 20130624. So we'll assume that any older glext.h + * cannot have any function accepting a GLfixed parameter. */ +#if GL_GLEXT_VERSION >= 20130624 +#define HAVE_GLFIXED 1 +#endif + +/* As of glext.h version 20131008 some types changed. + * + * I have no idea why some internalFormats changed from GLenum to + * GLint while others changed from GLint to GLenum. + * + * But, in order to compile with either version, we track these. + */ +#if GL_GLEXT_VERSION >= 20131008 +#define GLint_or_enum GLenum +#define GLenum_or_int GLint +#else +#define GLint_or_enum GLint +#define GLenum_or_int GLenum +#endif static void *gl_handle; /* Switch metrics operation persistently, (until next SWITCH) */ #define SWITCH_METRICS_OP(op) \ - metrics_counter_stop (); \ - metrics_set_current_op (op); \ - metrics_counter_start (); + context_counter_stop (); \ + context_set_current_op (op); \ + context_counter_start (); /* Switch metrics operation temporarily, see RESTORE_METRICS_OP */ #define SAVE_THEN_SWITCH_METRICS_OP(op) \ - metrics_op_t save = metrics_get_current_op (); \ + metrics_op_t save = context_get_current_op (); \ SWITCH_METRICS_OP (op); /* Switch back to metrics operation saved by SAVE_THEN_SWITCH_METRICS_OP */ -#define RESTORE_METRICS_OP(op) \ +#define RESTORE_METRICS_OP() \ SWITCH_METRICS_OP (save); void @@ -97,6 +119,8 @@ glwrap_lookup (char *name) const char *path; path = getenv ("FIPS_LIBGL"); + if (! path) + path = getenv ("GLAZE_LIBGL"); if (path) { gl_handle = dlopen (path, RTLD_LAZY); @@ -113,7 +137,7 @@ glwrap_lookup (char *name) ret = dlwrap_real_dlsym (gl_handle, name); if (ret == NULL) { - fprintf (stderr, "Error: glwrap_lookup failed to dlsym %s\n", + fprintf (stderr, "fips: Error: glwrap_lookup failed to dlsym %s\n", name); exit (1); } @@ -160,6 +184,7 @@ glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) RESTORE_METRICS_OP (); } +#if HAVE_GLFIXED void glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) { @@ -169,6 +194,7 @@ glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) RESTORE_METRICS_OP (); } +#endif /* METRICS_OP_BUFFER_DATA */ void @@ -401,6 +427,7 @@ glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, RESTORE_METRICS_OP (); } +#if HAVE_GLFIXED void glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap) @@ -412,6 +439,7 @@ glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, RESTORE_METRICS_OP (); } +#endif /* METRICS_OP_BLIT_FRAMEBUFFER */ void @@ -530,6 +558,7 @@ glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, RESTORE_METRICS_OP (); } +#if GL_GLEXT_VERSION < 20131212 void glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, GLsizeiptr offset, @@ -542,6 +571,21 @@ glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, RESTORE_METRICS_OP (); } +#else +void +glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, + GLsizeiptr offset, GLsizeiptr size, + GLenum format, GLenum type, + const void *data) +{ + SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR_BUFFER_DATA); + + GLWRAP_DEFER (glClearNamedBufferSubDataEXT, buffer, internalformat, + offset, size, format, type, data); + + RESTORE_METRICS_OP (); +} +#endif /* METRICS_OP_CLEAR_TEX_IMAGE */ @@ -970,7 +1014,8 @@ glTexImage2D (GLenum target, GLint level, GLint internalFormat, void glTexImage2DMultisample (GLenum target, GLsizei samples, - GLint internalformat, GLsizei width, GLsizei height, + GLint_or_enum internalformat, + GLsizei width, GLsizei height, GLboolean fixedsamplelocations) { SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE); @@ -1023,7 +1068,8 @@ glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, } void -glTexImage3DMultisample (GLenum target, GLsizei samples, GLint internalformat, +glTexImage3DMultisample (GLenum target, GLsizei samples, + GLint_or_enum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) { @@ -1494,7 +1540,8 @@ glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, void glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, - GLenum internalformat, GLsizei width, GLint border, + GLenum_or_int internalformat, + GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels) { SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE); @@ -1507,7 +1554,8 @@ glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, void glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, - GLenum internalformat, GLsizei width, GLsizei height, + GLenum_or_int internalformat, + GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) { @@ -1522,7 +1570,8 @@ glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, void glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, - GLenum internalformat, GLsizei width, GLsizei height, + GLenum_or_int internalformat, + GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels) {