3 This file is part of gldbg
4 Copyright © 2009 Mikko Rasa, Mikkosoft Productions
5 Distributed under the GPL
12 #include "arraysize.h"
17 typedef struct sGlPrintData
24 static void init_print(GlDecoder *);
25 static void glprint_free(void *);
26 static void print_gldError(void *, GLenum);
27 static void print_unhandled(void *, unsigned short);
29 GlDecoder *glprint_new(char *buffer, unsigned bufsize)
34 gpd = (GlPrintData *)malloc(sizeof(GlPrintData));
36 gpd->bufsize = bufsize;
42 gpd->buffer = (char *)malloc(gpd->bufsize);
45 dec = gldecoder_new(gpd, glprint_free);
48 dec->gldError = print_gldError;
49 dec->unhandled = print_unhandled;
54 char *glprint_get_buffer(GlDecoder *dec)
56 return ((GlPrintData *)dec->user_data)->buffer;
59 static void glprint_free(void *data)
61 GlPrintData *gpd = (GlPrintData *)data;
70 static const char *print_array(const char *fmt, const void *data, unsigned elem_size, unsigned count)
82 for(cptr=fmt; (type<2 && *cptr); ++cptr)
86 else if(type==1 && isalpha(*cptr))
94 buffer = tmpalloc(buf_size);
97 for(i=0; i<count; ++i)
99 long long element = 0;
107 memcpy(&element, (const char *)data+i*elem_size, elem_size);
108 if(type>='e' && type<='g' && elem_size==sizeof(float))
109 *(double *)&element = *(float *)&element;
110 len = snprintf(ptr, buf_size, fmt, element);
120 static const char *print_data(const void *data, unsigned size)
128 char *buffer = tmpalloc(50);
129 snprintf(buffer, 50, "/* data: %d bytes */", size);
134 #include "gensrc/glprint.funcs"
136 static void print_gldError(void *user_data, GLenum code)
138 GlPrintData *gpd = (GlPrintData *)user_data;
139 snprintf(gpd->buffer, gpd->bufsize, "ERROR: %s", describe_enum(code, "ErrorCode"));
142 static void print_unhandled(void *user_data, unsigned short func)
144 GlPrintData *gpd = (GlPrintData *)user_data;