292f9317 |
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 | |