3 This file is part of gldbg
4 Copyright © 2009 Mikko Rasa, Mikkosoft Productions
5 Distributed under the GPL
14 #include "functions.h"
16 static inline void *glsym(const char *sym)
18 static void *libgl=NULL;
21 libgl=dlopen("libGL.so", RTLD_NOW);
24 fprintf(stderr, "Could not open libGL: %s\n", dlerror());
29 return dlsym(libgl, sym);
34 struct iovec *iovecs=0;
35 struct iovec *cur_vec;
37 static inline void next_vec()
39 if(write_pos!=cur_vec->iov_base)
41 cur_vec->iov_len=write_pos-(char *)cur_vec->iov_base;
43 cur_vec->iov_base=write_pos;
47 static inline void write_bytes(const char *ptr, unsigned size)
54 static inline void write_char(char v)
59 static inline void write_short(short v)
61 write_bytes((char *)&v, sizeof(short));
64 static inline void write_int(int v)
66 write_bytes((char *)&v, sizeof(int));
69 static inline void write_long(long v)
71 write_bytes((char *)&v, sizeof(long));
74 static inline void write_ulong(unsigned long v)
76 write_bytes((char *)&v, sizeof(unsigned long));
79 static inline void write_longlong(long long v)
81 write_bytes((char *)&v, sizeof(long long));
84 static inline void write_float(float v)
86 write_bytes((char *)&v, sizeof(float));
89 static inline void write_double(float v)
91 write_bytes((char *)&v, sizeof(double));
94 static inline void write_pointer(const void *p)
96 write_bytes((char *)&p, sizeof(void *));
99 static inline void write_data(const void *data, unsigned size)
103 cur_vec->iov_base=(void *)data;
104 cur_vec->iov_len=size;
106 cur_vec->iov_base=write_pos;
109 static inline void write_string(const unsigned char *s)
111 write_data(s, strlen(s));
114 write_bytes(s, len);*/
117 static inline void begin_packet(int func)
120 buffer=(char *)malloc(1024);
122 iovecs=(struct iovec *)malloc(16*sizeof(struct iovec));
125 cur_vec->iov_base=write_pos;
129 static inline void send_packet()
134 const char *var=getenv("GLWRAP_FD");
136 fd=strtol(var, NULL, 0);
141 writev(fd, iovecs, cur_vec-iovecs);
144 static inline int typesize(GLenum type)
148 case GL_BYTE: return sizeof(GLbyte);
149 case GL_SHORT: return sizeof(GLshort);
150 case GL_INT: return sizeof(GLint);
151 case GL_UNSIGNED_BYTE: return sizeof(GLubyte);
152 case GL_UNSIGNED_SHORT: return sizeof(GLushort);
153 case GL_UNSIGNED_INT: return sizeof(GLuint);
154 case GL_FLOAT: return sizeof(GLfloat);
155 case GL_DOUBLE: return sizeof(GLdouble);
156 // Short and byte packed types are broken
161 static inline int formatsize(GLenum format)
165 case GL_COLOR_INDEX: return 1;
166 case GL_STENCIL_INDEX: return 1;
167 case GL_DEPTH_COMPONENT: return 1;
168 case GL_RED: return 1;
169 case GL_GREEN: return 1;
170 case GL_BLUE: return 1;
171 case GL_ALPHA: return 1;
172 case GL_RGB: return 3;
173 case GL_RGBA: return 4;
174 case GL_BGR: return 3;
175 case GL_BGRA: return 4;
176 case GL_LUMINANCE: return 1;
177 case GL_LUMINANCE_ALPHA: return 2;
182 static inline int paramsize(GLenum pname)
186 // Lighting and material
187 case GL_AMBIENT: return 4;
188 case GL_DIFFUSE: return 4;
189 case GL_AMBIENT_AND_DIFFUSE: return 4;
190 case GL_SPECULAR: return 4;
191 case GL_EMISSION: return 4;
192 case GL_SHININESS: return 1;
193 case GL_COLOR_INDEXES: return 3;
194 case GL_POSITION: return 4;
195 case GL_SPOT_DIRECTION: return 3;
196 case GL_SPOT_EXPONENT: return 1;
197 case GL_SPOT_CUTOFF: return 1;
198 case GL_CONSTANT_ATTENUATION: return 1;
199 case GL_LINEAR_ATTENUATION: return 1;
200 case GL_QUADRATIC_ATTENUATION: return 1;
201 case GL_LIGHT_MODEL_AMBIENT: return 4;
202 case GL_LIGHT_MODEL_LOCAL_VIEWER: return 1;
203 case GL_LIGHT_MODEL_TWO_SIDE: return 1;
204 case GL_LIGHT_MODEL_COLOR_CONTROL: return 1;
207 case GL_TEXTURE_WRAP_S: return 1;
208 case GL_TEXTURE_WRAP_T: return 1;
209 case GL_TEXTURE_WRAP_R: return 1;
210 case GL_TEXTURE_MIN_FILTER: return 1;
211 case GL_TEXTURE_MAG_FILTER: return 1;
212 case GL_TEXTURE_BORDER_COLOR: return 4;
213 case GL_TEXTURE_MIN_LOD: return 1;
214 case GL_TEXTURE_MAX_LOD: return 1;
215 case GL_TEXTURE_BASE_LEVEL: return 1;
216 case GL_TEXTURE_MAX_LEVEL: return 1;
217 case GL_TEXTURE_LOD_BIAS: return 1;
218 case GL_DEPTH_TEXTURE_MODE: return 1;
219 case GL_TEXTURE_COMPARE_MODE: return 1;
220 case GL_TEXTURE_COMPARE_FUNC: return 1;
221 case GL_GENERATE_MIPMAP: return 1;
226 static inline int mapsize(GLenum target)
231 #include "glwrap.funcs"