libgoatvr
diff src/mesh.c @ 30:1a8343ea54ce
fixed on windows
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sat, 11 Apr 2015 04:01:47 +0300 |
parents | 0fea7c2b25d7 |
children |
line diff
1.1 --- a/src/mesh.c Wed Apr 08 02:32:22 2015 +0300 1.2 +++ b/src/mesh.c Sat Apr 11 04:01:47 2015 +0300 1.3 @@ -9,34 +9,10 @@ 1.4 const float *dist_factors); 1.5 static float barrel_scale(float rad, const float *k); 1.6 1.7 -/* let's avoid a glew dependency in the library just for this */ 1.8 -#ifndef GL_ARRAY_BUFFER 1.9 -#define GL_ARRAY_BUFFER 0x8892 1.10 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 1.11 -#define GL_STATIC_DRAW 0x88E4 1.12 -#endif 1.13 - 1.14 -#ifndef GL_VERSION_1_5 1.15 -static void (*glGenBuffers)(GLsizei, GLuint*); 1.16 -static void (*glDeleteBuffers)(GLsizei, GLuint*); 1.17 -static void (*glBufferData)(GLenum, unsigned int, const GLvoid*, GLenum); 1.18 -static void (*glBindBuffer)(GLenum, GLuint); 1.19 -#else 1.20 -#ifndef GL_GLEXT_PROTOTYPES 1.21 - 1.22 -#ifndef GLAPI 1.23 -#define GLAPI 1.24 -#endif 1.25 -#ifndef APIENTRY 1.26 -#define APIENTRY 1.27 -#endif 1.28 - 1.29 -GLAPI void APIENTRY glGenBuffers(GLsizei, GLuint*); 1.30 -GLAPI void APIENTRY glDeleteBuffers(GLsizei, const GLuint*); 1.31 -GLAPI void APIENTRY glBufferData(); 1.32 -GLAPI void APIENTRY glBindBuffer(GLenum, GLuint); 1.33 -#endif 1.34 -#endif 1.35 +static PFNGLGENBUFFERSARBPROC gl_gen_buffers; 1.36 +static PFNGLDELETEBUFFERSARBPROC gl_delete_buffers; 1.37 +static PFNGLBUFFERDATAARBPROC gl_buffer_data; 1.38 +static PFNGLBINDBUFFERARBPROC gl_bind_buffer; 1.39 1.40 int vrimp_mesh_init(struct mesh *m) 1.41 { 1.42 @@ -47,19 +23,17 @@ 1.43 m->num_verts = m->num_faces = 0; 1.44 m->vbo = m->ibo = 0; 1.45 1.46 -#ifndef GL_VERSION_1_5 1.47 - if(!glGenBuffers) { 1.48 - glGenBuffers = vrimp_glfunc("glGenBuffersARB"); 1.49 - glDeleteBuffers = vrimp_glfunc("glDeleteBuffersARB"); 1.50 - glBufferData = vrimp_glfunc("glBufferDataARB"); 1.51 - glBindBuffer = vrimp_glfunc("glBindBufferARB"); 1.52 + if(!gl_gen_buffers) { 1.53 + gl_gen_buffers = (PFNGLGENBUFFERSARBPROC)vrimp_glfunc("glGenBuffersARB"); 1.54 + gl_delete_buffers = (PFNGLDELETEBUFFERSARBPROC)vrimp_glfunc("glDeleteBuffersARB"); 1.55 + gl_buffer_data = (PFNGLBUFFERDATAARBPROC)vrimp_glfunc("glBufferDataARB"); 1.56 + gl_bind_buffer = (PFNGLBINDBUFFERARBPROC)vrimp_glfunc("glBindBufferARB"); 1.57 1.58 - if(!(glGenBuffers && glDeleteBuffers && glBufferData && glBindBuffer)) { 1.59 + if(!(gl_gen_buffers && gl_delete_buffers && gl_buffer_data && gl_bind_buffer)) { 1.60 fprintf(stderr, "Failed to load VBO functions\n"); 1.61 return -1; 1.62 } 1.63 } 1.64 -#endif 1.65 1.66 return 0; 1.67 } 1.68 @@ -69,8 +43,8 @@ 1.69 free(m->varr); 1.70 free(m->iarr); 1.71 1.72 - if(m->vbo) glDeleteBuffers(1, &m->vbo); 1.73 - if(m->ibo) glDeleteBuffers(1, &m->ibo); 1.74 + if(m->vbo) gl_delete_buffers(1, &m->vbo); 1.75 + if(m->ibo) gl_delete_buffers(1, &m->ibo); 1.76 } 1.77 1.78 void vrimp_mesh_draw(struct mesh *m) 1.79 @@ -78,15 +52,15 @@ 1.80 glEnableClientState(GL_VERTEX_ARRAY); 1.81 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 1.82 1.83 - glBindBuffer(GL_ARRAY_BUFFER, m->vbo); 1.84 + gl_bind_buffer(GL_ARRAY_BUFFER, m->vbo); 1.85 glVertexPointer(3, GL_FLOAT, sizeof(struct vertex), 0); 1.86 glTexCoordPointer(2, GL_FLOAT, sizeof(struct vertex), (void*)offsetof(struct vertex, tx)); 1.87 1.88 - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m->ibo); 1.89 + gl_bind_buffer(GL_ELEMENT_ARRAY_BUFFER, m->ibo); 1.90 glDrawElements(GL_TRIANGLES, m->num_faces * 3, GL_UNSIGNED_INT, 0); 1.91 1.92 - glBindBuffer(GL_ARRAY_BUFFER, 0); 1.93 - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 1.94 + gl_bind_buffer(GL_ARRAY_BUFFER, 0); 1.95 + gl_bind_buffer(GL_ELEMENT_ARRAY_BUFFER, 0); 1.96 1.97 glDisableClientState(GL_VERTEX_ARRAY); 1.98 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 1.99 @@ -157,12 +131,12 @@ 1.100 } 1.101 } 1.102 1.103 - glGenBuffers(1, &m->vbo); 1.104 - glGenBuffers(1, &m->ibo); 1.105 - glBindBuffer(GL_ARRAY_BUFFER, m->vbo); 1.106 - glBufferData(GL_ARRAY_BUFFER, num_verts * sizeof *varr, varr, GL_STATIC_DRAW); 1.107 - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m->ibo); 1.108 - glBufferData(GL_ELEMENT_ARRAY_BUFFER, num_tris * 3 * sizeof *iarr, iarr, GL_STATIC_DRAW); 1.109 + gl_gen_buffers(1, &m->vbo); 1.110 + gl_gen_buffers(1, &m->ibo); 1.111 + gl_bind_buffer(GL_ARRAY_BUFFER, m->vbo); 1.112 + gl_buffer_data(GL_ARRAY_BUFFER, num_verts * sizeof *varr, varr, GL_STATIC_DRAW); 1.113 + gl_bind_buffer(GL_ELEMENT_ARRAY_BUFFER, m->ibo); 1.114 + gl_buffer_data(GL_ELEMENT_ARRAY_BUFFER, num_tris * 3 * sizeof *iarr, iarr, GL_STATIC_DRAW); 1.115 1.116 m->prim = GL_TRIANGLES; 1.117 m->num_verts = num_verts;