| /************************************************************************** |
| * |
| * Copyright 2015 VMware, Inc. |
| * All Rights Reserved. |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a |
| * copy of this software and associated documentation files (the |
| * "Software"), to deal in the Software without restriction, including |
| * without limitation the rights to use, copy, modify, merge, publish, |
| * distribute, sub license, and/or sell copies of the Software, and to |
| * permit persons to whom the Software is furnished to do so, subject to |
| * the following conditions: |
| * |
| * The above copyright notice and this permission notice (including the |
| * next paragraph) shall be included in all copies or substantial portions |
| * of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. |
| * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR |
| * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
| * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| * |
| **************************************************************************/ |
| |
| /** |
| * No-op GL API functions. |
| * |
| * Some OpenGL apps (like Viewperf12) call wglGetProcAddress() to get |
| * a pointer to an extension function, get a NULL pointer, but don't bother |
| * to check for NULL before jumping through the pointer. This causes a |
| * crash. |
| * |
| * As a work-around we provide some no-op functions here to avoid those |
| * crashes. |
| */ |
| |
| #include <GL/gl.h> |
| #include "stw_nopfuncs.h" |
| #include "util/u_debug.h" |
| |
| |
| static void |
| warning(const char *name) |
| { |
| /* use name+4 to skip "nop_" prefix */ |
| _debug_printf("Application calling unsupported %s function\n", name+4); |
| } |
| |
| static void APIENTRY |
| nop_glBindMultiTextureEXT(GLenum texunit, GLenum target, GLuint texture) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glColor3hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glColor3hvNV(const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glColor4hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glColor4hvNV(const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glDisableClientStateIndexedEXT(GLenum array, GLuint index) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glEnableClientStateIndexedEXT(GLenum array, GLuint index) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glFogCoordhNV(GLhalfNV fog) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glFogCoordhvNV(const GLhalfNV *fog) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glGetNamedBufferParameterivEXT(GLuint buffer, GLenum pname, GLint *params) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glGetNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsizeiptr size, void *data) |
| { |
| warning(__func__); |
| } |
| |
| static void *APIENTRY |
| nop_glMapNamedBufferEXT(GLuint buffer, GLenum access) |
| { |
| warning(__func__); |
| return NULL; |
| } |
| |
| static void APIENTRY |
| nop_glMatrixLoadfEXT(GLenum mode, const GLfloat *m) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMatrixLoadIdentityEXT(GLenum mode) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMultiTexCoord1hNV(GLenum target, GLhalfNV s) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMultiTexCoord1hvNV(GLenum target, const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMultiTexCoord2hNV(GLenum target, GLhalfNV s, GLhalfNV t) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMultiTexCoord2hvNV(GLenum target, const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMultiTexCoord3hNV(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMultiTexCoord3hvNV(GLenum target, const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMultiTexCoord4hNV(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMultiTexCoord4hvNV(GLenum target, const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMultiTexCoordPointerEXT(GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMultiTexEnvfEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat param) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMultiTexEnvfvEXT(GLenum texunit, GLenum target, GLenum pname, const GLfloat *params) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMultiTexEnviEXT(GLenum texunit, GLenum target, GLenum pname, GLint param) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMultiTexGenfvEXT(GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glMultiTexGeniEXT(GLenum texunit, GLenum coord, GLenum pname, GLint param) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glNamedBufferDataEXT(GLuint buffer, GLsizeiptr size, const void *data, GLenum usage) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glNamedProgramLocalParameter4fvEXT(GLuint program, GLenum target, GLuint index, const GLfloat *params) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glNamedProgramLocalParameters4fvEXT(GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glNormal3hNV(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glNormal3hvNV(const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glPatchParameterfv(GLenum pname, const GLfloat *values) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glPatchParameteri(GLenum pname, GLint value) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glSecondaryColor3hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glSecondaryColor3hvNV(const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glTexCoord1hNV(GLhalfNV s) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glTexCoord1hvNV(const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glTexCoord2hNV(GLhalfNV s, GLhalfNV t) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glTexCoord2hvNV(const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glTexCoord3hNV(GLhalfNV s, GLhalfNV t, GLhalfNV r) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glTexCoord3hvNV(const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glTexCoord4hNV(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glTexCoord4hvNV(const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glTextureParameterfEXT(GLuint texture, GLenum target, GLenum pname, GLfloat param) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glTextureParameterfvEXT(GLuint texture, GLenum target, GLenum pname, const GLfloat *params) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glTextureParameteriEXT(GLuint texture, GLenum target, GLenum pname, GLint param) |
| { |
| warning(__func__); |
| } |
| |
| static GLboolean APIENTRY |
| nop_glUnmapNamedBufferEXT(GLuint buffer) |
| { |
| warning(__func__); |
| return GL_FALSE; |
| } |
| |
| static void APIENTRY |
| nop_glVertex2hNV(GLhalfNV x, GLhalfNV y) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glVertex2hvNV(const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glVertex3hNV(GLhalfNV x, GLhalfNV y, GLhalfNV z) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glVertex3hvNV(const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glVertex4hNV(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w) |
| { |
| warning(__func__); |
| } |
| |
| static void APIENTRY |
| nop_glVertex4hvNV(const GLhalfNV *v) |
| { |
| warning(__func__); |
| } |
| |
| |
| PROC |
| stw_get_nop_function(const char *name) |
| { |
| struct { |
| const char *name; |
| PROC p; |
| } table[] = { |
| { "glBindMultiTextureEXT", (PROC) nop_glBindMultiTextureEXT }, |
| { "glColor3hNV", (PROC) nop_glColor3hNV }, |
| { "glColor3hvNV", (PROC) nop_glColor3hvNV }, |
| { "glColor4hNV", (PROC) nop_glColor4hNV }, |
| { "glColor4hvNV", (PROC) nop_glColor4hvNV }, |
| { "glDisableClientStateIndexedEXT", (PROC) nop_glDisableClientStateIndexedEXT }, |
| { "glEnableClientStateIndexedEXT", (PROC) nop_glEnableClientStateIndexedEXT }, |
| { "glFogCoordhNV", (PROC) nop_glFogCoordhNV }, |
| { "glFogCoordhvNV", (PROC) nop_glFogCoordhvNV }, |
| { "glGetNamedBufferParameterivEXT", (PROC) nop_glGetNamedBufferParameterivEXT }, |
| { "glGetNamedBufferSubDataEXT", (PROC) nop_glGetNamedBufferSubDataEXT }, |
| { "glMapNamedBufferEXT", (PROC) nop_glMapNamedBufferEXT }, |
| { "glMatrixLoadfEXT", (PROC) nop_glMatrixLoadfEXT }, |
| { "glMatrixLoadIdentityEXT", (PROC) nop_glMatrixLoadIdentityEXT }, |
| { "glMultiTexCoord1hNV", (PROC) nop_glMultiTexCoord1hNV }, |
| { "glMultiTexCoord1hvNV", (PROC) nop_glMultiTexCoord1hvNV }, |
| { "glMultiTexCoord2hNV", (PROC) nop_glMultiTexCoord2hNV }, |
| { "glMultiTexCoord2hvNV", (PROC) nop_glMultiTexCoord2hvNV }, |
| { "glMultiTexCoord3hNV", (PROC) nop_glMultiTexCoord3hNV }, |
| { "glMultiTexCoord3hvNV", (PROC) nop_glMultiTexCoord3hvNV }, |
| { "glMultiTexCoord4hNV", (PROC) nop_glMultiTexCoord4hNV }, |
| { "glMultiTexCoord4hvNV", (PROC) nop_glMultiTexCoord4hvNV }, |
| { "glMultiTexCoordPointerEXT", (PROC) nop_glMultiTexCoordPointerEXT }, |
| { "glMultiTexEnvfEXT", (PROC) nop_glMultiTexEnvfEXT }, |
| { "glMultiTexEnvfvEXT", (PROC) nop_glMultiTexEnvfvEXT }, |
| { "glMultiTexEnviEXT", (PROC) nop_glMultiTexEnviEXT }, |
| { "glMultiTexGenfvEXT", (PROC) nop_glMultiTexGenfvEXT }, |
| { "glMultiTexGeniEXT", (PROC) nop_glMultiTexGeniEXT }, |
| { "glNamedBufferDataEXT", (PROC) nop_glNamedBufferDataEXT }, |
| { "glNamedBufferSubDataEXT", (PROC) nop_glNamedBufferSubDataEXT }, |
| { "glNamedProgramLocalParameter4fvEXT", (PROC) nop_glNamedProgramLocalParameter4fvEXT }, |
| { "glNamedProgramLocalParameters4fvEXT", (PROC) nop_glNamedProgramLocalParameters4fvEXT }, |
| { "glNormal3hNV", (PROC) nop_glNormal3hNV }, |
| { "glNormal3hvNV", (PROC) nop_glNormal3hvNV }, |
| { "glPatchParameterfv", (PROC) nop_glPatchParameterfv }, |
| { "glPatchParameteri", (PROC) nop_glPatchParameteri }, |
| { "glSecondaryColor3hNV", (PROC) nop_glSecondaryColor3hNV }, |
| { "glSecondaryColor3hvNV", (PROC) nop_glSecondaryColor3hvNV }, |
| { "glTexCoord1hNV", (PROC) nop_glTexCoord1hNV }, |
| { "glTexCoord1hvNV", (PROC) nop_glTexCoord1hvNV }, |
| { "glTexCoord2hNV", (PROC) nop_glTexCoord2hNV }, |
| { "glTexCoord2hvNV", (PROC) nop_glTexCoord2hvNV }, |
| { "glTexCoord3hNV", (PROC) nop_glTexCoord3hNV }, |
| { "glTexCoord3hvNV", (PROC) nop_glTexCoord3hvNV }, |
| { "glTexCoord4hNV", (PROC) nop_glTexCoord4hNV }, |
| { "glTexCoord4hvNV", (PROC) nop_glTexCoord4hvNV }, |
| { "glTextureParameterfEXT", (PROC) nop_glTextureParameterfEXT }, |
| { "glTextureParameterfvEXT", (PROC) nop_glTextureParameterfvEXT }, |
| { "glTextureParameteriEXT", (PROC) nop_glTextureParameteriEXT }, |
| { "glUnmapNamedBufferEXT", (PROC) nop_glUnmapNamedBufferEXT }, |
| { "glVertex2hNV", (PROC) nop_glVertex2hNV }, |
| { "glVertex2hvNV", (PROC) nop_glVertex2hvNV }, |
| { "glVertex3hNV", (PROC) nop_glVertex3hNV }, |
| { "glVertex3hvNV", (PROC) nop_glVertex3hvNV }, |
| { "glVertex4hNV", (PROC) nop_glVertex4hNV }, |
| { "glVertex4hvNV", (PROC) nop_glVertex4hvNV }, |
| { NULL, NULL } |
| }; |
| |
| int i; |
| |
| for (i = 0; table[i].name; i++) { |
| if (strcmp(table[i].name, name) == 0) |
| return table[i].p; |
| } |
| return NULL; |
| } |