]> git.tdb.fi Git - gldbg.git/blob - source/glprint.c
Check for and report OpenGL errors after each function call
[gldbg.git] / source / glprint.c
1 /* $Id$
2
3 This file is part of gldbg
4 Copyright © 2009  Mikko Rasa, Mikkosoft Productions
5 Distributed under the GPL
6 */
7
8 #include <stdlib.h>
9 #include <stdio.h>
10 #include "enums.h"
11 #include "glprint.h"
12
13 typedef struct sGlPrintData
14 {
15         char *buffer;
16         unsigned bufsize;
17 } GlPrintData;
18
19 static void init_print(GlDecoder *);
20 static void glprint_data_free(void *);
21 static void print_gldError(void *, GLenum);
22
23 GlDecoder *glprint_new(char *buffer, unsigned bufsize)
24 {
25         GlDecoder *dec;
26         GlPrintData *gpd;
27
28         gpd = (GlPrintData *)malloc(sizeof(GlPrintData));
29         gpd->buffer = buffer;
30         gpd->bufsize = bufsize;
31         if(!gpd->buffer)
32         {
33                 if(!gpd->bufsize)
34                         gpd->bufsize = 1024;
35                 gpd->buffer = (char *)malloc(gpd->bufsize);
36                 dec = gldecoder_new(gpd, glprint_data_free);
37         }
38         else
39                 dec = gldecoder_new(gpd, free);
40
41         init_print(dec);
42         dec->gldError = print_gldError;
43 }
44
45 char *glprint_get_buffer(GlDecoder *dec)
46 {
47         return ((GlPrintData *)dec->user_data)->buffer;
48 }
49
50 static void glprint_data_free(void *data)
51 {
52         GlPrintData *gpd = (GlPrintData *)data;
53         free(gpd->buffer);
54         free(gpd);
55 }
56
57 static void print_gldError(void *user_data, GLenum code)
58 {
59         GlPrintData *gpd = (GlPrintData *)user_data;
60         snprintf(gpd->buffer, gpd->bufsize, "ERROR: %s", describe_enum(code, "ErrorCode"));
61 }
62
63 #include "glprint.funcs"