arudradey's picture
download
raw
10.8 kB
/*
* Copyright 2014 The Emscripten Authors. All rights reserved.
* Emscripten is available under two separate licenses, the MIT license and the
* University of Illinois/NCSA Open Source License. Both these licenses can be
* found in the LICENSE file.
*/
#if GL_ENABLE_GET_PROC_ADDRESS
// GL proc address retrieval
#include <string.h>
#include <stdlib.h>
#include <emscripten.h>
#include <emscripten/html5_webgl.h>
#define GL_GLEXT_PROTOTYPES
#include <GL/gl.h>
#include <GL/glext.h>
#ifdef LEGACY_GL_EMULATION
#include <webgl/webgl1_ext.h>
#include "webgl_internal_funcs.h"
#define RETURN_GL_EMU_FN(functionName) if (!strcmp(name, #functionName)) return emscripten_##functionName;
void* emscripten_legacy_gl_emulation_GetProcAddress(const char *name) {
// main list, autogenerated from the earlier part of the file using
/*
for line in open('a').readlines():
if "emscripten" not in line: continue
line = line.replace(' * ', ' ').replace('const ', '').replace('(', ' ')
func = line.split(' ')[3].strip().replace('(', '')
short = func.replace('EXT', '').replace('ARB', '').replace('OES', '').replace('ANGLE', '').replace('emscripten_', '')
print ' if (!strcmp(name, "%s")) return %s;' % (short, func);
*/
// The following list contains only exactly those functions that library_glemu.js currently implements.
// Others will return a null pointer.
// misc renamings
if (!strcmp(name, "glCreateProgramObject")) return emscripten_glCreateProgram;
if (!strcmp(name, "glUseProgramObject")) return emscripten_glUseProgram;
if (!strcmp(name, "glCreateShaderObject")) return emscripten_glCreateShader;
if (!strcmp(name, "glAttachObject")) return emscripten_glAttachShader;
if (!strcmp(name, "glDetachObject")) return emscripten_glDetachShader;
RETURN_GL_EMU_FN(glDeleteObject);
RETURN_GL_EMU_FN(glGetObjectParameteriv);
RETURN_GL_EMU_FN(glGetInfoLog);
RETURN_GL_EMU_FN(glBindProgram);
RETURN_GL_EMU_FN(glGetPointerv);
RETURN_GL_EMU_FN(glBegin);
RETURN_GL_EMU_FN(glEnd);
//RETURN_GL_EMU_FN(glVertex2d);
RETURN_GL_EMU_FN(glVertex2f);
RETURN_GL_EMU_FN(glVertex2i);
//RETURN_GL_EMU_FN(glVertex2s);
//RETURN_GL_EMU_FN(glVertex3d);
RETURN_GL_EMU_FN(glVertex3f);
RETURN_GL_EMU_FN(glVertex3i);
//RETURN_GL_EMU_FN(glVertex3s);
//RETURN_GL_EMU_FN(glVertex4d);
RETURN_GL_EMU_FN(glVertex4f);
RETURN_GL_EMU_FN(glVertex4i);
//RETURN_GL_EMU_FN(glVertex4s);
//RETURN_GL_EMU_FN(glVertex2dv);
RETURN_GL_EMU_FN(glVertex2fv);
//RETURN_GL_EMU_FN(glVertex2iv);
//RETURN_GL_EMU_FN(glVertex2sv);
//RETURN_GL_EMU_FN(glVertex3dv);
RETURN_GL_EMU_FN(glVertex3fv);
//RETURN_GL_EMU_FN(glVertex3iv);
//RETURN_GL_EMU_FN(glVertex3sv);
//RETURN_GL_EMU_FN(glVertex4dv);
RETURN_GL_EMU_FN(glVertex4fv);
//RETURN_GL_EMU_FN(glVertex4iv);
//RETURN_GL_EMU_FN(glVertex4sv);
//RETURN_GL_EMU_FN(glColor3b);
RETURN_GL_EMU_FN(glColor3d);
RETURN_GL_EMU_FN(glColor3f);
//RETURN_GL_EMU_FN(glColor3i);
//RETURN_GL_EMU_FN(glColor3s);
RETURN_GL_EMU_FN(glColor3ub);
RETURN_GL_EMU_FN(glColor3ui);
RETURN_GL_EMU_FN(glColor3us);
//RETURN_GL_EMU_FN(glColor4b);
RETURN_GL_EMU_FN(glColor4d);
RETURN_GL_EMU_FN(glColor4f);
//RETURN_GL_EMU_FN(glColor4i);
//RETURN_GL_EMU_FN(glColor4s);
RETURN_GL_EMU_FN(glColor4ub);
RETURN_GL_EMU_FN(glColor4ui);
RETURN_GL_EMU_FN(glColor4us);
//RETURN_GL_EMU_FN(glColor3bv);
//RETURN_GL_EMU_FN(glColor3dv);
RETURN_GL_EMU_FN(glColor3fv);
//RETURN_GL_EMU_FN(glColor3iv);
//RETURN_GL_EMU_FN(glColor3sv);
RETURN_GL_EMU_FN(glColor3ubv);
RETURN_GL_EMU_FN(glColor3uiv);
RETURN_GL_EMU_FN(glColor3usv);
//RETURN_GL_EMU_FN(glColor4bv);
//RETURN_GL_EMU_FN(glColor4dv);
RETURN_GL_EMU_FN(glColor4fv);
//RETURN_GL_EMU_FN(glColor4iv);
//RETURN_GL_EMU_FN(glColor4sv);
RETURN_GL_EMU_FN(glColor4ubv);
//RETURN_GL_EMU_FN(glColor4uiv);
//RETURN_GL_EMU_FN(glColor4usv);
//RETURN_GL_EMU_FN(glFogCoordf);
//RETURN_GL_EMU_FN(glFogCoordfv);
//RETURN_GL_EMU_FN(glFogCoordd);
//RETURN_GL_EMU_FN(glFogCoorddv);
//RETURN_GL_EMU_FN(glFogCoordPointer);
RETURN_GL_EMU_FN(glPolygonMode);
RETURN_GL_EMU_FN(glAlphaFunc);
//RETURN_GL_EMU_FN(glNormal3b);
//RETURN_GL_EMU_FN(glNormal3d);
RETURN_GL_EMU_FN(glNormal3f);
//RETURN_GL_EMU_FN(glNormal3i);
//RETURN_GL_EMU_FN(glNormal3s);
//RETURN_GL_EMU_FN(glNormal3bv);
//RETURN_GL_EMU_FN(glNormal3dv);
//RETURN_GL_EMU_FN(glNormal3fv);
//RETURN_GL_EMU_FN(glNormal3iv);
//RETURN_GL_EMU_FN(glNormal3sv);
RETURN_GL_EMU_FN(glDrawRangeElements);
RETURN_GL_EMU_FN(glEnableClientState);
RETURN_GL_EMU_FN(glDisableClientState);
RETURN_GL_EMU_FN(glVertexPointer);
RETURN_GL_EMU_FN(glNormalPointer);
RETURN_GL_EMU_FN(glColorPointer);
RETURN_GL_EMU_FN(glTexCoordPointer);
RETURN_GL_EMU_FN(glClientActiveTexture);
RETURN_GL_EMU_FN(glMatrixMode);
RETURN_GL_EMU_FN(glPushMatrix);
RETURN_GL_EMU_FN(glPopMatrix);
RETURN_GL_EMU_FN(glLoadIdentity);
RETURN_GL_EMU_FN(glLoadMatrixd);
RETURN_GL_EMU_FN(glLoadMatrixf);
RETURN_GL_EMU_FN(glLoadTransposeMatrixf);
RETURN_GL_EMU_FN(glLoadTransposeMatrixd);
RETURN_GL_EMU_FN(glMultTransposeMatrixf);
RETURN_GL_EMU_FN(glMultTransposeMatrixd);
RETURN_GL_EMU_FN(glMultMatrixd);
RETURN_GL_EMU_FN(glMultMatrixf);
RETURN_GL_EMU_FN(glOrtho);
RETURN_GL_EMU_FN(glFrustum);
RETURN_GL_EMU_FN(glRotated);
RETURN_GL_EMU_FN(glRotatef);
RETURN_GL_EMU_FN(glScaled);
RETURN_GL_EMU_FN(glScalef);
RETURN_GL_EMU_FN(glTranslated);
RETURN_GL_EMU_FN(glTranslatef);
RETURN_GL_EMU_FN(glClipPlane);
RETURN_GL_EMU_FN(glDrawBuffer);
RETURN_GL_EMU_FN(glReadBuffer);
//RETURN_GL_EMU_FN(glLightf);
//RETURN_GL_EMU_FN(glLighti);
RETURN_GL_EMU_FN(glLightfv);
//RETURN_GL_EMU_FN(glLightiv);
RETURN_GL_EMU_FN(glLightModelf);
//RETURN_GL_EMU_FN(glLightModeli);
RETURN_GL_EMU_FN(glLightModelfv);
//RETURN_GL_EMU_FN(glLightModeliv);
//RETURN_GL_EMU_FN(glMaterialf);
//RETURN_GL_EMU_FN(glMateriali);
RETURN_GL_EMU_FN(glMaterialfv);
//RETURN_GL_EMU_FN(glMaterialiv);
//RETURN_GL_EMU_FN(glTexGend);
//RETURN_GL_EMU_FN(glTexGenf);
RETURN_GL_EMU_FN(glTexGeni);
//RETURN_GL_EMU_FN(glTexGendv);
RETURN_GL_EMU_FN(glTexGenfv);
//RETURN_GL_EMU_FN(glTexGeniv);
RETURN_GL_EMU_FN(glGetTexEnvfv);
RETURN_GL_EMU_FN(glGetTexEnviv);
RETURN_GL_EMU_FN(glTexImage1D);
//RETURN_GL_EMU_FN(glTexCoord1d);
//RETURN_GL_EMU_FN(glTexCoord1f);
//RETURN_GL_EMU_FN(glTexCoord1i);
//RETURN_GL_EMU_FN(glTexCoord1s);
//RETURN_GL_EMU_FN(glTexCoord2d);
RETURN_GL_EMU_FN(glTexCoord2f);
RETURN_GL_EMU_FN(glTexCoord2i);
//RETURN_GL_EMU_FN(glTexCoord2s);
//RETURN_GL_EMU_FN(glTexCoord3d);
RETURN_GL_EMU_FN(glTexCoord3f);
//RETURN_GL_EMU_FN(glTexCoord3i);
//RETURN_GL_EMU_FN(glTexCoord3s);
//RETURN_GL_EMU_FN(glTexCoord4d);
RETURN_GL_EMU_FN(glTexCoord4f);
//RETURN_GL_EMU_FN(glTexCoord4i);
//RETURN_GL_EMU_FN(glTexCoord4s);
//RETURN_GL_EMU_FN(glTexCoord1dv);
//RETURN_GL_EMU_FN(glTexCoord1fv);
//RETURN_GL_EMU_FN(glTexCoord1iv);
//RETURN_GL_EMU_FN(glTexCoord1sv);
//RETURN_GL_EMU_FN(glTexCoord2dv);
RETURN_GL_EMU_FN(glTexCoord2fv);
//RETURN_GL_EMU_FN(glTexCoord2iv);
//RETURN_GL_EMU_FN(glTexCoord2sv);
//RETURN_GL_EMU_FN(glTexCoord3dv);
//RETURN_GL_EMU_FN(glTexCoord3fv);
//RETURN_GL_EMU_FN(glTexCoord3iv);
//RETURN_GL_EMU_FN(glTexCoord3sv);
//RETURN_GL_EMU_FN(glTexCoord4dv);
//RETURN_GL_EMU_FN(glTexCoord4fv);
//RETURN_GL_EMU_FN(glTexCoord4iv);
//RETURN_GL_EMU_FN(glTexCoord4sv);
//RETURN_GL_EMU_FN(glGetTexLevelParameterfv);
RETURN_GL_EMU_FN(glGetTexLevelParameteriv);
RETURN_GL_EMU_FN(glShadeModel);
// GL emulation library "sloppy" lookup:
// WebGL 1 extensions are offered without their EXT suffixes.
if (!strcmp(name, "glBindVertexArray")) return emscripten_glBindVertexArrayOES;
if (!strcmp(name, "glDeleteVertexArrays")) return emscripten_glDeleteVertexArraysOES;
if (!strcmp(name, "glGenVertexArrays")) return emscripten_glGenVertexArraysOES;
if (!strcmp(name, "glIsVertexArray")) return emscripten_glIsVertexArrayOES;
if (!strcmp(name, "glDrawBuffers")) return emscripten_glDrawBuffersWEBGL;
if (!strcmp(name, "glDrawArraysInstanced")) return emscripten_glDrawArraysInstancedANGLE;
if (!strcmp(name, "glDrawElementsInstanced")) return emscripten_glDrawElementsInstancedANGLE;
if (!strcmp(name, "glVertexAttribDivisor")) return emscripten_glVertexAttribDivisorANGLE;
if (!strcmp(name, "glGenQueries")) return emscripten_glGenQueriesEXT;
if (!strcmp(name, "glDeleteQueries")) return emscripten_glDeleteQueriesEXT;
if (!strcmp(name, "glIsQuery")) return emscripten_glIsQueryEXT;
if (!strcmp(name, "glBeginQuery")) return emscripten_glBeginQueryEXT;
if (!strcmp(name, "glEndQuery")) return emscripten_glEndQueryEXT;
if (!strcmp(name, "glQueryCounter")) return emscripten_glQueryCounterEXT;
if (!strcmp(name, "glGetQueryiv")) return emscripten_glGetQueryivEXT;
if (!strcmp(name, "glGetQueryObjectiv")) return emscripten_glGetQueryObjectivEXT;
if (!strcmp(name, "glGetQueryObjectuiv")) return emscripten_glGetQueryObjectuivEXT;
if (!strcmp(name, "glGetQueryObjecti64v")) return emscripten_glGetQueryObjecti64vEXT;
if (!strcmp(name, "glGetQueryObjectui64v")) return emscripten_glGetQueryObjectui64vEXT;
return 0;
}
#endif
void *_webgl1_match_ext_proc_address_without_suffix(const char *name);
void *_webgl2_match_ext_proc_address_without_suffix(const char *name);
// "Sloppy" desktop OpenGL/mobile GLES emulating
// behavior: different functionality is available under
// different vendor suffixes. In emscripten_GetProcAddress()
// function, all these suffixes will be ignored when performing
// the function pointer lookup.
void* emscripten_GetProcAddress(const char *name_) {
char *name = malloc(strlen(name_)+1);
strcpy(name, name_);
// remove EXT|ARB|OES|ANGLE suffixes
char *end = strstr(name, "EXT");
if (end) *end = 0;
end = strstr(name, "ARB");
if (end) *end = 0;
end = strstr(name, "OES");
if (end) *end = 0;
end = strstr(name, "ANGLE");
if (end) *end = 0;
end = strstr(name, "WEBGL");
if (end) *end = 0;
void *ptr = emscripten_webgl1_get_proc_address(name);
if (!ptr) ptr = _webgl1_match_ext_proc_address_without_suffix(name);
#if LEGACY_GL_EMULATION
if (!ptr) ptr = emscripten_legacy_gl_emulation_GetProcAddress(name);
#endif
#if MAX_WEBGL_VERSION >= 2
if (!ptr) ptr = emscripten_webgl2_get_proc_address(name);
if (!ptr) ptr = _webgl2_match_ext_proc_address_without_suffix(name);
#endif
free(name);
return ptr;
}
extern void *emscripten_webgl_get_proc_address(const char *name)
{
void *ptr = emscripten_webgl1_get_proc_address(name);
#if MAX_WEBGL_VERSION >= 2
if (!ptr) ptr = emscripten_webgl2_get_proc_address(name);
#endif
return ptr;
}
#endif

Xet Storage Details

Size:
10.8 kB
·
Xet hash:
f4255a79085a91fefd71061d0595c8c89ec69d5e095ae856234de2ce4287f93c

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.