+static const char *print_parameter(int pname, int param)
+{
+ char *buffer;
+
+ // XXX Need to move the param names to flavor
+ switch(pname)
+ {
+ case GL_TEXTURE_MIN_FILTER:
+ case GL_TEXTURE_MAG_FILTER:
+ case GL_TEXTURE_WRAP_S:
+ case GL_TEXTURE_WRAP_T:
+ return describe_enum(param, "");
+ }
+
+ buffer = tmpalloc(11);
+ snprintf(buffer, 11, "%i", param);
+ return buffer;
+}
+
+static const char *print_internal_format(int fmt)
+{
+ char *buffer;
+
+ if(fmt>4)
+ return describe_enum(fmt, "PixelFormat");
+
+ buffer = tmpalloc(2);
+ snprintf(buffer, 2, "%i", fmt);
+ return buffer;
+}
+
+static const char *print_data(const void *data, unsigned size)
+{
+ if(!data)
+ return "NULL";
+ else if((unsigned long)data<0x100000)
+ {
+ char *buffer = tmpalloc(20);
+ snprintf(buffer, 20, "%p", data);
+ return buffer;
+ }
+ else if(!size)
+ return "/* data */";
+ else
+ {
+ char *buffer = tmpalloc(50);
+ snprintf(buffer, 50, "/* data: %d bytes */", size);
+ return buffer;
+ }
+}
+
+#include "gensrc/glprint.funcs"
+
+static void print_gldError(void *user_data, GLenum code)
+{
+ GlPrintData *gpd = (GlPrintData *)user_data;
+ snprintf(gpd->buffer, gpd->bufsize, "ERROR: %s", describe_enum(code, "ErrorCode"));
+}
+
+static void print_unhandled(void *user_data, unsigned short func UNUSED)
+{
+ GlPrintData *gpd = (GlPrintData *)user_data;
+ gpd->buffer[0] = 0;
+}