summaryrefslogtreecommitdiff
path: root/source/qgl_api.c
diff options
context:
space:
mode:
authorAndrey Nazarov <skuller@skuller.net>2007-11-21 18:15:29 +0000
committerAndrey Nazarov <skuller@skuller.net>2007-11-21 18:15:29 +0000
commit13e3f5c77dfa8446c4072ef4f5746adeb4874ffa (patch)
tree7b215d0b0c6f1ecfd8b4177d4c0ac853ba7d1531 /source/qgl_api.c
parent660868e74895516f6727079a364b8faa8473ba16 (diff)
Implemented batching surface drawing using vertex buffer objects.
Changed the way lightmaps are uploaded.
Diffstat (limited to 'source/qgl_api.c')
-rw-r--r--source/qgl_api.c110
1 files changed, 72 insertions, 38 deletions
diff --git a/source/qgl_api.c b/source/qgl_api.c
index a796ca5..3eb3298 100644
--- a/source/qgl_api.c
+++ b/source/qgl_api.c
@@ -376,31 +376,50 @@ void ( APIENTRY * qglVertex4sv )(const GLshort *v);
void ( APIENTRY * qglVertexPointer )(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
void ( APIENTRY * qglViewport )(GLint x, GLint y, GLsizei width, GLsizei height);
-void ( APIENTRY * qglLockArraysEXT)( int, int);
-void ( APIENTRY * qglUnlockArraysEXT) ( void );
-
-void ( APIENTRY * qglPointParameterfEXT)( GLenum param, GLfloat value );
-void ( APIENTRY * qglPointParameterfvEXT)( GLenum param, const GLfloat *value );
-void ( APIENTRY * qglColorTableEXT)( int, int, int, int, int, const void * );
-
-void ( APIENTRY * qglActiveTextureARB) ( GLenum );
-void ( APIENTRY * qglClientActiveTextureARB) ( GLenum );
-
-void ( APIENTRY * qglProgramStringARB)( GLenum target, GLenum format, GLsizei len, const GLvoid *string );
-void ( APIENTRY * qglBindProgramARB)( GLenum target, GLuint program );
-void ( APIENTRY * qglDeleteProgramsARB)( GLsizei n, const GLuint *programs );
-void ( APIENTRY * qglGenProgramsARB)( GLsizei n, GLuint *programs );
-void ( APIENTRY * qglProgramLocalParameter4fvARB)( GLenum, GLuint, const GLfloat * );
+//
+// extensions
+//
+
+// GL_EXT_compiled_vertex_array
+PFNGLLOCKARRAYSEXTPROC qglLockArraysEXT;
+PFNGLUNLOCKARRAYSEXTPROC qglUnlockArraysEXT;
+
+// GL_ARB_multitexture
+PFNGLACTIVETEXTUREARBPROC qglActiveTextureARB;
+PFNGLCLIENTACTIVETEXTUREARBPROC qglClientActiveTextureARB;
+
+// GL_ARB_fragment_program
+PFNGLPROGRAMSTRINGARBPROC qglProgramStringARB;
+PFNGLBINDPROGRAMARBPROC qglBindProgramARB;
+PFNGLDELETEPROGRAMSARBPROC qglDeleteProgramsARB;
+PFNGLGENPROGRAMSARBPROC qglGenProgramsARB;
+PFNGLPROGRAMENVPARAMETER4FVARBPROC qglProgramEnvParameter4fvARB;
+PFNGLPROGRAMLOCALPARAMETER4FVARBPROC qglProgramLocalParameter4fvARB;
+
+// GL_ARB_vertex_buffer_object
+PFNGLBINDBUFFERPROC qglBindBufferARB;
+PFNGLDELETEBUFFERSPROC qglDeleteBuffersARB;
+PFNGLGENBUFFERSPROC qglGenBuffersARB;
+PFNGLISBUFFERPROC qglIsBufferARB;
+PFNGLBUFFERDATAPROC qglBufferDataARB;
+PFNGLBUFFERSUBDATAPROC qglBufferSubDataARB;
+PFNGLGETBUFFERSUBDATAPROC qglGetBufferSubDataARB;
+PFNGLMAPBUFFERPROC qglMapBufferARB;
+PFNGLUNMAPBUFFERPROC qglUnmapBufferARB;
+PFNGLGETBUFFERPARAMETERIVPROC qglGetBufferParameterivARB;
+PFNGLGETBUFFERPOINTERVPROC qglGetBufferPointervARB;
+
+//
+// OS-specific
+//
#ifdef _WIN32
-PROC ( WINAPI * qwglGetProcAddress )( LPCSTR );
-BOOL ( WINAPI * qwglSwapIntervalEXT )( int interval );
+PROC ( WINAPI * qglGetProcAddress )( LPCSTR );
+#else
+void *qglGetProcAddress( const char *symbol ) { return video.GetProcAddr( symbol ); }
#endif
-#ifdef __unix__
-void *qwglGetProcAddress( const char *symbol ) { return video.GetProcAddr( symbol ); }
-void (*qgl3DfxSetPaletteEXT)(GLuint *);
-#endif
+// ==========================================================
static void ( APIENTRY * dllAccum )(GLenum op, GLfloat value);
static void ( APIENTRY * dllAlphaFunc )(GLenum func, GLclampf ref);
@@ -2632,8 +2651,7 @@ static void APIENTRY logViewport(GLint x, GLint y, GLsizei width, GLsizei height
**
** Unloads the specified DLL then nulls out all the proc pointers.
*/
-void QGL_Shutdown( void )
-{
+void QGL_Shutdown( void ) {
qglAccum = NULL;
qglAlphaFunc = NULL;
qglAreTexturesResident = NULL;
@@ -2971,10 +2989,36 @@ void QGL_Shutdown( void )
qglVertexPointer = NULL;
qglViewport = NULL;
+
+ qglLockArraysEXT = NULL;
+ qglUnlockArraysEXT = NULL;
+
+ qglActiveTextureARB = NULL;
+ qglClientActiveTextureARB = NULL;
+
+ qglProgramStringARB = NULL;
+ qglBindProgramARB = NULL;
+ qglDeleteProgramsARB = NULL;
+ qglGenProgramsARB = NULL;
+ qglProgramEnvParameter4fvARB = NULL;
+ qglProgramLocalParameter4fvARB = NULL;
+
+ qglBindBufferARB = NULL;
+ qglDeleteBuffersARB = NULL;
+ qglGenBuffersARB = NULL;
+ qglIsBufferARB = NULL;
+ qglBufferDataARB = NULL;
+ qglBufferSubDataARB = NULL;
+ qglGetBufferSubDataARB = NULL;
+ qglMapBufferARB = NULL;
+ qglUnmapBufferARB = NULL;
+ qglGetBufferParameterivARB = NULL;
+ qglGetBufferPointervARB = NULL;
+
+
#ifdef _WIN32
- qwglGetProcAddress = NULL;
+ qglGetProcAddress = NULL;
#endif
-
}
#define GPA( a ) video.GetProcAddr( a )
@@ -3328,24 +3372,14 @@ void QGL_Init( void ) {
qglVertexPointer = dllVertexPointer = GPA( "glVertexPointer" );
qglViewport = dllViewport = GPA( "glViewport" );
- qglPointParameterfEXT = 0;
- qglPointParameterfvEXT = 0;
- qglColorTableEXT = 0;
-
- qglActiveTextureARB = 0;
- qglClientActiveTextureARB = 0;
-
- qglProgramStringARB = 0;
- qglBindProgramARB = 0;
- qglDeleteProgramsARB = 0;
- qglGenProgramsARB = 0;
- qglProgramLocalParameter4fvARB = 0;
#ifdef _WIN32
- qwglGetProcAddress = GPA( "wglGetProcAddress" );
+ qglGetProcAddress = GPA( "wglGetProcAddress" );
#endif
}
+#undef GPA
+
void QGL_EnableLogging( qboolean enable )
{
if ( enable )