#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
const char *path;
path = getenv ("FIPS_LIBGL");
+ if (! path)
+ path = getenv ("GLAZE_LIBGL");
if (path) {
gl_handle = dlopen (path, RTLD_LAZY);
RESTORE_METRICS_OP ();
}
+#if HAVE_GLFIXED
void
glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
{
RESTORE_METRICS_OP ();
}
+#endif
/* METRICS_OP_BUFFER_DATA */
void
RESTORE_METRICS_OP ();
}
+#if HAVE_GLFIXED
void
glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig,
GLfixed xmove, GLfixed ymove, const GLubyte *bitmap)
RESTORE_METRICS_OP ();
}
+#endif
/* METRICS_OP_BLIT_FRAMEBUFFER */
void
RESTORE_METRICS_OP ();
}
+#if GL_GLEXT_VERSION < 20131212
void
glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat,
GLenum format, GLenum type, GLsizeiptr offset,
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 */
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);
}
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)
{
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);
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)
{
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)
{