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;