| 1 | /* OGLExtensions.cpp |
| 2 | Copyright (C) 2009 Richard Goedeken |
| 3 | |
| 4 | This program is free software; you can redistribute it and/or |
| 5 | modify it under the terms of the GNU General Public License |
| 6 | as published by the Free Software Foundation; either version 2 |
| 7 | of the License, or (at your option) any later version. |
| 8 | |
| 9 | This program is distributed in the hope that it will be useful, |
| 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 12 | GNU General Public License for more details. |
| 13 | |
| 14 | You should have received a copy of the GNU General Public License |
| 15 | along with this program; if not, write to the Free Software |
| 16 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| 17 | */ |
| 18 | |
| 19 | /* This source file contains code for assigning function pointers to some OpenGL functions */ |
| 20 | /* This is only necessary because Windows does not contain development support for OpenGL versions beyond 1.1 */ |
| 21 | |
| 22 | #include <SDL_opengl.h> |
| 23 | #include "OGLExtensions.h" |
| 24 | #include "Video.h" |
| 25 | |
| 26 | static void APIENTRY EmptyFunc(void) { return; } |
| 27 | |
| 28 | bool bNvidiaExtensionsSupported = false; |
| 29 | PFUNCGLCOMBINERPARAMETERFVNVPROC pglCombinerParameterfvNV = (PFUNCGLCOMBINERPARAMETERFVNVPROC) EmptyFunc; |
| 30 | PFUNCGLFINALCOMBINERINPUTNVPROC pglFinalCombinerInputNV = (PFUNCGLFINALCOMBINERINPUTNVPROC) EmptyFunc; |
| 31 | PFUNCGLCOMBINEROUTPUTNVPROC pglCombinerOutputNV = (PFUNCGLCOMBINEROUTPUTNVPROC) EmptyFunc; |
| 32 | PFUNCGLCOMBINERINPUTNVPROC pglCombinerInputNV = (PFUNCGLCOMBINERINPUTNVPROC) EmptyFunc; |
| 33 | PFUNCGLCOMBINERPARAMETERINVPROC pglCombinerParameteriNV = (PFUNCGLCOMBINERPARAMETERINVPROC) EmptyFunc; |
| 34 | |
| 35 | PFUNCGLACTIVETEXTUREPROC pglActiveTexture = (PFUNCGLACTIVETEXTUREPROC) EmptyFunc; |
| 36 | PFUNCGLACTIVETEXTUREARBPROC pglActiveTextureARB = (PFUNCGLACTIVETEXTUREARBPROC) EmptyFunc; |
| 37 | PFUNCGLMULTITEXCOORD2FPROC pglMultiTexCoord2f = (PFUNCGLMULTITEXCOORD2FPROC) EmptyFunc; |
| 38 | PFUNCGLMULTITEXCOORD2FVPROC pglMultiTexCoord2fv = (PFUNCGLMULTITEXCOORD2FVPROC) EmptyFunc; |
| 39 | PFUNCGLDELETEPROGRAMSARBPROC pglDeleteProgramsARB = (PFUNCGLDELETEPROGRAMSARBPROC) EmptyFunc; |
| 40 | PFUNCGLPROGRAMSTRINGARBPROC pglProgramStringARB = (PFUNCGLPROGRAMSTRINGARBPROC) EmptyFunc; |
| 41 | PFUNCGLBINDPROGRAMARBPROC pglBindProgramARB = (PFUNCGLBINDPROGRAMARBPROC) EmptyFunc; |
| 42 | PFUNCGLGENPROGRAMSARBPROC pglGenProgramsARB = (PFUNCGLGENPROGRAMSARBPROC) EmptyFunc; |
| 43 | PFUNCGLPROGRAMENVPARAMETER4FVARBPROC pglProgramEnvParameter4fvARB = (PFUNCGLPROGRAMENVPARAMETER4FVARBPROC) EmptyFunc; |
| 44 | PFUNCGLFOGCOORDPOINTEREXTPROC pglFogCoordPointerEXT = (PFUNCGLFOGCOORDPOINTEREXTPROC) EmptyFunc; |
| 45 | PFUNCGLCLIENTACTIVETEXTUREARBPROC pglClientActiveTextureARB = (PFUNCGLCLIENTACTIVETEXTUREARBPROC) EmptyFunc; |
| 46 | |
| 47 | #define INIT_ENTRY_POINT(type, funcname) \ |
| 48 | p##funcname = (type) CoreVideo_GL_GetProcAddress(#funcname); \ |
| 49 | if (p##funcname == NULL) { DebugMessage(M64MSG_WARNING, \ |
| 50 | "Couldn't get address of OpenGL function: '%s'", #funcname); p##funcname = (type) EmptyFunc; } |
| 51 | |
| 52 | void OGLExtensions_Init(void) |
| 53 | { |
| 54 | /* nvidia extensions are a special case */ |
| 55 | bNvidiaExtensionsSupported = true; |
| 56 | pglCombinerParameterfvNV = (PFUNCGLCOMBINERPARAMETERFVNVPROC) CoreVideo_GL_GetProcAddress("glCombinerParameterfvNV"); |
| 57 | if (pglCombinerParameterfvNV == NULL) bNvidiaExtensionsSupported = false; |
| 58 | pglFinalCombinerInputNV = (PFUNCGLFINALCOMBINERINPUTNVPROC) CoreVideo_GL_GetProcAddress("glFinalCombinerInputNV"); |
| 59 | if (pglFinalCombinerInputNV == NULL) bNvidiaExtensionsSupported = false; |
| 60 | pglCombinerOutputNV = (PFUNCGLCOMBINEROUTPUTNVPROC) CoreVideo_GL_GetProcAddress("glCombinerOutputNV"); |
| 61 | if (pglCombinerOutputNV == NULL) bNvidiaExtensionsSupported = false; |
| 62 | pglCombinerInputNV = (PFUNCGLCOMBINERINPUTNVPROC) CoreVideo_GL_GetProcAddress("glCombinerInputNV"); |
| 63 | if (pglCombinerInputNV == NULL) bNvidiaExtensionsSupported = false; |
| 64 | pglCombinerParameteriNV = (PFUNCGLCOMBINERPARAMETERINVPROC) CoreVideo_GL_GetProcAddress("glCombinerParameteriNV"); |
| 65 | if (pglCombinerParameteriNV == NULL) bNvidiaExtensionsSupported = false; |
| 66 | |
| 67 | INIT_ENTRY_POINT(PFUNCGLACTIVETEXTUREPROC, glActiveTexture); |
| 68 | INIT_ENTRY_POINT(PFUNCGLACTIVETEXTUREARBPROC, glActiveTextureARB); |
| 69 | INIT_ENTRY_POINT(PFUNCGLMULTITEXCOORD2FPROC, glMultiTexCoord2f); |
| 70 | INIT_ENTRY_POINT(PFUNCGLMULTITEXCOORD2FVPROC, glMultiTexCoord2fv); |
| 71 | INIT_ENTRY_POINT(PFUNCGLDELETEPROGRAMSARBPROC, glDeleteProgramsARB); |
| 72 | INIT_ENTRY_POINT(PFUNCGLPROGRAMSTRINGARBPROC, glProgramStringARB); |
| 73 | INIT_ENTRY_POINT(PFUNCGLBINDPROGRAMARBPROC, glBindProgramARB); |
| 74 | INIT_ENTRY_POINT(PFUNCGLGENPROGRAMSARBPROC, glGenProgramsARB); |
| 75 | INIT_ENTRY_POINT(PFUNCGLPROGRAMENVPARAMETER4FVARBPROC, glProgramEnvParameter4fvARB); |
| 76 | INIT_ENTRY_POINT(PFUNCGLFOGCOORDPOINTEREXTPROC, glFogCoordPointerEXT); |
| 77 | INIT_ENTRY_POINT(PFUNCGLCLIENTACTIVETEXTUREARBPROC, glClientActiveTextureARB); |
| 78 | } |
| 79 | |
| 80 | |