388 lines
22 KiB
JavaScript
388 lines
22 KiB
JavaScript
/*
|
|
* Copyright (c) 2024 lax1dude. All Rights Reserved.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
*/
|
|
|
|
const VAO_IMPL_NONE = -1;
|
|
const VAO_IMPL_CORE = 0;
|
|
const VAO_IMPL_OES = 1;
|
|
|
|
const INSTANCE_IMPL_NONE = -1;
|
|
const INSTANCE_IMPL_CORE = 0;
|
|
const INSTANCE_IMPL_ANGLE = 1;
|
|
|
|
const CAP_A_BIT_EXT_GPU_SHADER5 = 1;
|
|
const CAP_A_BIT_OES_GPU_SHADER5 = 2;
|
|
const CAP_A_BIT_FBO_RENDER_MIPMAP = 4;
|
|
const CAP_A_BIT_TEXTURE_LOD_CAPABLE = 8;
|
|
const CAP_A_BIT_NPOT_CAPABLE = 16;
|
|
const CAP_A_BIT_HDR_FBO16F = 32;
|
|
const CAP_A_BIT_HDR_FBO32F = 64;
|
|
const CAP_A_BIT_ANISOTROPIC = 128;
|
|
|
|
const CAP_B_BIT_HDR_LINEAR16F = 1;
|
|
const CAP_B_BIT_HDR_LINEAR32F = 2;
|
|
|
|
const platfOpenGLName = "platformOpenGL";
|
|
|
|
/**
|
|
* @param {WebGL2RenderingContext} ctx
|
|
* @param {number} glesVersIn
|
|
* @param {boolean} allowExts
|
|
* @param {Object} glImports
|
|
*/
|
|
function setCurrentGLContext(ctx, glesVersIn, allowExts, glImports) {
|
|
const wglExtVAO = (allowExts && glesVersIn === 200) ? ctx.getExtension("OES_vertex_array_object") : null;
|
|
const wglExtInstancing = (allowExts && glesVersIn === 200) ? ctx.getExtension("ANGLE_instanced_arrays") : null;
|
|
const hasANGLEInstancedArrays = allowExts && glesVersIn === 200 && wglExtInstancing !== null;
|
|
const hasEXTColorBufferFloat = allowExts && (glesVersIn === 310 || glesVersIn === 300) && ctx.getExtension("EXT_color_buffer_float") !== null;
|
|
const hasEXTColorBufferHalfFloat = allowExts && !hasEXTColorBufferFloat && (glesVersIn === 310 || glesVersIn === 300 || glesVersIn === 200)
|
|
&& ctx.getExtension("EXT_color_buffer_half_float") !== null;
|
|
const hasEXTShaderTextureLOD = allowExts && glesVersIn === 200 && ctx.getExtension("EXT_shader_texture_lod") !== null;
|
|
const hasOESFBORenderMipmap = allowExts && glesVersIn === 200 && ctx.getExtension("OES_fbo_render_mipmap") !== null;
|
|
const hasOESVertexArrayObject = allowExts && glesVersIn === 200 && wglExtVAO !== null;
|
|
const hasOESTextureFloat = allowExts && glesVersIn === 200 && ctx.getExtension("OES_texture_float") !== null;
|
|
const hasOESTextureFloatLinear = allowExts && glesVersIn >= 300 && ctx.getExtension("OES_texture_float_linear") !== null;
|
|
const hasOESTextureHalfFloat = allowExts && glesVersIn === 200 && ctx.getExtension("OES_texture_half_float") !== null;
|
|
const hasOESTextureHalfFloatLinear = allowExts && glesVersIn === 200 && ctx.getExtension("OES_texture_half_float_linear") !== null;
|
|
const hasEXTTextureFilterAnisotropic = allowExts && ctx.getExtension("EXT_texture_filter_anisotropic") !== null;
|
|
const hasWEBGLDebugRendererInfo = ctx.getExtension("WEBGL_debug_renderer_info") !== null;
|
|
const hasFBO16FSupport = glesVersIn >= 320 || ((glesVersIn >= 300 || hasOESTextureFloat) && (hasEXTColorBufferFloat || hasEXTColorBufferHalfFloat));
|
|
const hasFBO32FSupport = glesVersIn >= 320 || ((glesVersIn >= 300 || hasOESTextureHalfFloat) && hasEXTColorBufferFloat);
|
|
const hasLinearHDR16FSupport = glesVersIn >= 300 || hasOESTextureHalfFloatLinear;
|
|
const hasLinearHDR32FSupport = glesVersIn >= 300 && hasOESTextureFloatLinear;
|
|
const vertexArrayImpl = glesVersIn >= 300 ? VAO_IMPL_CORE : ((glesVersIn === 200 && hasOESVertexArrayObject) ? VAO_IMPL_OES : VAO_IMPL_NONE);
|
|
const instancingImpl = glesVersIn >= 300 ? INSTANCE_IMPL_CORE : ((glesVersIn === 200 && hasANGLEInstancedArrays) ? INSTANCE_IMPL_ANGLE : INSTANCE_IMPL_NONE);
|
|
|
|
const capBits = [ glesVersIn, vertexArrayImpl, instancingImpl, 0, 0 ];
|
|
if(glesVersIn >= 300 || hasOESFBORenderMipmap) capBits[3] |= CAP_A_BIT_FBO_RENDER_MIPMAP;
|
|
if(glesVersIn >= 300 || hasEXTShaderTextureLOD) capBits[3] |= CAP_A_BIT_TEXTURE_LOD_CAPABLE;
|
|
if(glesVersIn >= 300) capBits[3] |= CAP_A_BIT_NPOT_CAPABLE;
|
|
if(hasFBO16FSupport) capBits[3] |= CAP_A_BIT_HDR_FBO16F;
|
|
if(hasFBO32FSupport) capBits[3] |= CAP_A_BIT_HDR_FBO32F;
|
|
if(hasEXTTextureFilterAnisotropic) capBits[3] |= CAP_A_BIT_ANISOTROPIC;
|
|
if(hasLinearHDR16FSupport) capBits[4] |= CAP_B_BIT_HDR_LINEAR16F;
|
|
if(hasLinearHDR32FSupport) capBits[4] |= CAP_B_BIT_HDR_LINEAR32F;
|
|
|
|
/**
|
|
* @param {number} idx
|
|
* @return {number}
|
|
*/
|
|
glImports["getCapBits"] = function(idx) {
|
|
return capBits[idx];
|
|
};
|
|
|
|
glImports["glEnable"] = ctx.enable.bind(ctx);
|
|
glImports["glDisable"] = ctx.disable.bind(ctx);
|
|
glImports["glClearColor"] = ctx.clearColor.bind(ctx);
|
|
glImports["glClearDepth"] = ctx.clearDepth.bind(ctx);
|
|
glImports["glClear"] = ctx.clear.bind(ctx);
|
|
glImports["glDepthFunc"] = ctx.depthFunc.bind(ctx);
|
|
glImports["glDepthMask"] = ctx.depthMask.bind(ctx);
|
|
glImports["glCullFace"] = ctx.cullFace.bind(ctx);
|
|
glImports["glViewport"] = ctx.viewport.bind(ctx);
|
|
glImports["glBlendFunc"] = ctx.blendFunc.bind(ctx);
|
|
glImports["glBlendFuncSeparate"] = ctx.blendFuncSeparate.bind(ctx);
|
|
glImports["glBlendEquation"] = ctx.blendEquation.bind(ctx);
|
|
glImports["glBlendColor"] = ctx.blendColor.bind(ctx);
|
|
glImports["glColorMask"] = ctx.colorMask.bind(ctx);
|
|
glImports["glDrawBuffers"] = glesVersIn >= 300 ? ctx.drawBuffers.bind(ctx) : unsupportedFunc(platfOpenGLName, "glDrawBuffers");
|
|
glImports["glReadBuffer"] = glesVersIn >= 300 ? ctx.readBuffer.bind(ctx) : unsupportedFunc(platfOpenGLName, "glReadBuffer");
|
|
glImports["glReadPixels"] = ctx.readPixels.bind(ctx);
|
|
glImports["glPolygonOffset"] = ctx.polygonOffset.bind(ctx);
|
|
glImports["glLineWidth"] = ctx.lineWidth.bind(ctx);
|
|
glImports["glGenBuffers"] = ctx.createBuffer.bind(ctx);
|
|
glImports["glGenTextures"] = ctx.createTexture.bind(ctx);
|
|
glImports["glCreateProgram"] = ctx.createProgram.bind(ctx);
|
|
glImports["glCreateShader"] = ctx.createShader.bind(ctx);
|
|
glImports["glCreateFramebuffer"] = ctx.createFramebuffer.bind(ctx);
|
|
glImports["glCreateRenderbuffer"] = ctx.createRenderbuffer.bind(ctx);
|
|
glImports["glGenQueries"] = glesVersIn >= 300 ? ctx.createQuery.bind(ctx) : unsupportedFunc(platfOpenGLName, "glGenQueries");
|
|
glImports["glDeleteBuffers"] = ctx.deleteBuffer.bind(ctx);
|
|
glImports["glDeleteTextures"] = ctx.deleteTexture.bind(ctx);
|
|
glImports["glDeleteProgram"] = ctx.deleteProgram.bind(ctx);
|
|
glImports["glDeleteShader"] = ctx.deleteShader.bind(ctx);
|
|
glImports["glDeleteFramebuffer"] = ctx.deleteFramebuffer.bind(ctx);
|
|
glImports["glDeleteRenderbuffer"] = ctx.deleteRenderbuffer.bind(ctx);
|
|
glImports["glDeleteQueries"] = glesVersIn >= 300 ? ctx.deleteQuery.bind(ctx) : unsupportedFunc(platfOpenGLName, "glDeleteQueries");
|
|
glImports["glBindBuffer"] = ctx.bindBuffer.bind(ctx);
|
|
glImports["glBufferData"] = ctx.bufferData.bind(ctx);
|
|
glImports["glBufferSubData"] = ctx.bufferSubData.bind(ctx);
|
|
glImports["glEnableVertexAttribArray"] = ctx.enableVertexAttribArray.bind(ctx);
|
|
glImports["glDisableVertexAttribArray"] = ctx.disableVertexAttribArray.bind(ctx);
|
|
glImports["glVertexAttribPointer"] = ctx.vertexAttribPointer.bind(ctx);
|
|
glImports["glActiveTexture"] = ctx.activeTexture.bind(ctx);
|
|
glImports["glBindTexture"] = ctx.bindTexture.bind(ctx);
|
|
glImports["glTexParameterf"] = ctx.texParameterf.bind(ctx);
|
|
glImports["glTexParameteri"] = ctx.texParameteri.bind(ctx);
|
|
glImports["glTexImage3D"] = glesVersIn >= 300 ? ctx.texImage3D.bind(ctx) : unsupportedFunc(platfOpenGLName, "glTexImage3D");
|
|
glImports["glTexImage2D"] = ctx.texImage2D.bind(ctx);
|
|
glImports["glTexSubImage2D"] = ctx.texSubImage2D.bind(ctx);
|
|
glImports["glCopyTexSubImage2D"] = ctx.copyTexSubImage2D.bind(ctx);
|
|
glImports["glTexStorage2D"] = glesVersIn >= 300 ? ctx.texStorage2D.bind(ctx) : unsupportedFunc(platfOpenGLName, "glTexStorage2D");
|
|
glImports["glPixelStorei"] = ctx.pixelStorei.bind(ctx);
|
|
glImports["glGenerateMipmap"] = ctx.generateMipmap.bind(ctx);
|
|
glImports["glShaderSource"] = ctx.shaderSource.bind(ctx);
|
|
glImports["glCompileShader"] = ctx.compileShader.bind(ctx);
|
|
glImports["glGetShaderi"] = ctx.getShaderParameter.bind(ctx);
|
|
glImports["glGetShaderInfoLog"] = ctx.getShaderInfoLog.bind(ctx);
|
|
glImports["glUseProgram"] = ctx.useProgram.bind(ctx);
|
|
glImports["glAttachShader"] = ctx.attachShader.bind(ctx);
|
|
glImports["glDetachShader"] = ctx.detachShader.bind(ctx);
|
|
glImports["glLinkProgram"] = ctx.linkProgram.bind(ctx);
|
|
glImports["glGetProgrami"] = ctx.getProgramParameter.bind(ctx);
|
|
glImports["glGetProgramInfoLog"] = ctx.getProgramInfoLog.bind(ctx);
|
|
glImports["glDrawArrays"] = ctx.drawArrays.bind(ctx);
|
|
glImports["glDrawElements"] = ctx.drawElements.bind(ctx);
|
|
glImports["glBindAttribLocation"] = ctx.bindAttribLocation.bind(ctx);
|
|
glImports["glGetAttribLocation"] = ctx.getAttribLocation.bind(ctx);
|
|
glImports["glGetUniformLocation"] = ctx.getUniformLocation.bind(ctx);
|
|
glImports["glGetUniformBlockIndex"] = glesVersIn >= 300 ? ctx.getUniformBlockIndex.bind(ctx) : unsupportedFunc(platfOpenGLName, "glGetUniformBlockIndex");
|
|
glImports["glBindBufferRange"] = glesVersIn >= 300 ? ctx.bindBufferRange.bind(ctx) : unsupportedFunc(platfOpenGLName, "glBindBufferRange");
|
|
glImports["glUniformBlockBinding"] = glesVersIn >= 300 ? ctx.uniformBlockBinding.bind(ctx) : unsupportedFunc(platfOpenGLName, "glUniformBlockBinding");
|
|
glImports["glUniform1f"] = ctx.uniform1f.bind(ctx);
|
|
glImports["glUniform2f"] = ctx.uniform2f.bind(ctx);
|
|
glImports["glUniform3f"] = ctx.uniform3f.bind(ctx);
|
|
glImports["glUniform4f"] = ctx.uniform4f.bind(ctx);
|
|
glImports["glUniform1i"] = ctx.uniform1i.bind(ctx);
|
|
glImports["glUniform2i"] = ctx.uniform2i.bind(ctx);
|
|
glImports["glUniform3i"] = ctx.uniform3i.bind(ctx);
|
|
glImports["glUniform4i"] = ctx.uniform4i.bind(ctx);
|
|
glImports["glUniformMatrix2fv"] = ctx.uniformMatrix2fv.bind(ctx);
|
|
glImports["glUniformMatrix3fv"] = ctx.uniformMatrix3fv.bind(ctx);
|
|
glImports["glUniformMatrix4fv"] = ctx.uniformMatrix4fv.bind(ctx);
|
|
glImports["glUniformMatrix3x2fv"] = glesVersIn >= 300 ? ctx.uniformMatrix3x2fv.bind(ctx) : unsupportedFunc(platfOpenGLName, "glUniformMatrix3x2fv");
|
|
glImports["glUniformMatrix4x2fv"] = glesVersIn >= 300 ? ctx.uniformMatrix4x2fv.bind(ctx) : unsupportedFunc(platfOpenGLName, "glUniformMatrix4x2fv");
|
|
glImports["glUniformMatrix4x3fv"] = glesVersIn >= 300 ? ctx.uniformMatrix4x3fv.bind(ctx) : unsupportedFunc(platfOpenGLName, "glUniformMatrix4x3fv");
|
|
glImports["glBindFramebuffer"] = ctx.bindFramebuffer.bind(ctx);
|
|
glImports["glCheckFramebufferStatus"] = ctx.checkFramebufferStatus.bind(ctx);
|
|
glImports["glBlitFramebuffer"] = glesVersIn >= 300 ? ctx.blitFramebuffer.bind(ctx) : unsupportedFunc(platfOpenGLName, "glBlitFramebuffer");
|
|
glImports["glRenderbufferStorage"] = ctx.renderbufferStorage.bind(ctx);
|
|
glImports["glFramebufferTexture2D"] = ctx.framebufferTexture2D.bind(ctx);
|
|
glImports["glFramebufferTextureLayer"] = glesVersIn >= 300 ? ctx.framebufferTextureLayer.bind(ctx) : unsupportedFunc(platfOpenGLName, "glFramebufferTextureLayer");
|
|
glImports["glBindRenderbuffer"] = ctx.bindRenderbuffer.bind(ctx);
|
|
glImports["glFramebufferRenderbuffer"] = ctx.framebufferRenderbuffer.bind(ctx);
|
|
glImports["glGetError"] = ctx.getError.bind(ctx);
|
|
glImports["getAllExtensions"] = ctx.getSupportedExtensions.bind(ctx);
|
|
glImports["isContextLost"] = ctx.isContextLost.bind(ctx);
|
|
|
|
const exts = [];
|
|
if(hasANGLEInstancedArrays) exts.push("ANGLE_instanced_arrays");
|
|
if(hasEXTColorBufferFloat) exts.push("EXT_color_buffer_float");
|
|
if(hasEXTColorBufferHalfFloat) exts.push("EXT_color_buffer_half_float");
|
|
if(hasEXTShaderTextureLOD) exts.push("EXT_shader_texture_lod");
|
|
if(hasOESFBORenderMipmap) exts.push("OES_fbo_render_mipmap");
|
|
if(hasOESVertexArrayObject) exts.push("OES_vertex_array_object");
|
|
if(hasOESTextureFloat) exts.push("OES_texture_float");
|
|
if(hasOESTextureFloatLinear) exts.push("OES_texture_float_linear");
|
|
if(hasOESTextureHalfFloat) exts.push("OES_texture_half_float");
|
|
if(hasOESTextureHalfFloatLinear) exts.push("OES_texture_half_float_linear");
|
|
if(hasEXTTextureFilterAnisotropic) exts.push("EXT_texture_filter_anisotropic");
|
|
if(hasWEBGLDebugRendererInfo) exts.push("WEBGL_debug_renderer_info");
|
|
|
|
/**
|
|
* @return {Array}
|
|
*/
|
|
glImports["dumpActiveExtensions"] = function() {
|
|
return exts;
|
|
};
|
|
|
|
/**
|
|
* @param {number} p
|
|
* @return {number}
|
|
*/
|
|
glImports["glGetInteger"] = function(p) {
|
|
const ret = /** @type {*} */ (ctx.getParameter(p));
|
|
return (typeof ret === "number") ? (/** @type {number} */ (ret)) : 0;
|
|
};
|
|
|
|
/**
|
|
* @param {number} p
|
|
* @return {string|null}
|
|
*/
|
|
glImports["glGetString"] = function(p) {
|
|
var s;
|
|
if(hasWEBGLDebugRendererInfo) {
|
|
switch(p) {
|
|
case 0x1f00: // VENDOR
|
|
s = ctx.getParameter(0x9245); // UNMASKED_VENDOR_WEBGL
|
|
if(s == null) {
|
|
s = ctx.getParameter(0x1f00); // VENDOR
|
|
}
|
|
break;
|
|
case 0x1f01: // RENDERER
|
|
s = ctx.getParameter(0x9246); // UNMASKED_RENDERER_WEBGL
|
|
if(s == null) {
|
|
s = ctx.getParameter(0x1f01); // RENDERER
|
|
}
|
|
break;
|
|
default:
|
|
s = ctx.getParameter(p);
|
|
break;
|
|
}
|
|
}else {
|
|
s = ctx.getParameter(p);
|
|
}
|
|
if(typeof s === "string") {
|
|
return s;
|
|
}else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
switch(vertexArrayImpl) {
|
|
case VAO_IMPL_CORE:
|
|
glImports["glGenVertexArrays"] = ctx.createVertexArray.bind(ctx);
|
|
glImports["glDeleteVertexArrays"] = ctx.deleteVertexArray.bind(ctx);
|
|
glImports["glBindVertexArray"] = ctx.bindVertexArray.bind(ctx);
|
|
break;
|
|
case VAO_IMPL_OES:
|
|
glImports["glGenVertexArrays"] = wglExtVAO.createVertexArrayOES.bind(wglExtVAO);
|
|
glImports["glDeleteVertexArrays"] = wglExtVAO.deleteVertexArrayOES.bind(wglExtVAO);
|
|
glImports["glBindVertexArray"] = wglExtVAO.bindVertexArrayOES.bind(wglExtVAO);
|
|
break;
|
|
case VAO_IMPL_NONE:
|
|
default:
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGenVertexArrays");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDeleteVertexArrays");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBindVertexArray");
|
|
break;
|
|
}
|
|
|
|
switch(instancingImpl) {
|
|
case INSTANCE_IMPL_CORE:
|
|
glImports["glVertexAttribDivisor"] = ctx.vertexAttribDivisor.bind(ctx);
|
|
glImports["glDrawArraysInstanced"] = ctx.drawArraysInstanced.bind(ctx);
|
|
glImports["glDrawElementsInstanced"] = ctx.drawElementsInstanced.bind(ctx);
|
|
break;
|
|
case INSTANCE_IMPL_ANGLE:
|
|
glImports["glVertexAttribDivisor"] = wglExtInstancing.vertexAttribDivisorANGLE.bind(wglExtInstancing);
|
|
glImports["glDrawArraysInstanced"] = wglExtInstancing.drawArraysInstancedANGLE.bind(wglExtInstancing);
|
|
glImports["glDrawElementsInstanced"] = wglExtInstancing.drawElementsInstancedANGLE.bind(wglExtInstancing);
|
|
break;
|
|
case INSTANCE_IMPL_NONE:
|
|
default:
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glVertexAttribDivisor");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDrawArraysInstanced");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDrawElementsInstanced");
|
|
break;
|
|
}
|
|
}
|
|
|
|
function setNoGLContext(glImports) {
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "getCapBits");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glEnable");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDisable");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glClearColor");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glClearDepth");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glClear");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDepthFunc");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDepthMask");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glCullFace");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glViewport");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBlendFunc");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBlendFuncSeparate");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBlendEquation");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBlendColor");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glColorMask");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDrawBuffers");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glReadBuffer");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glReadPixels");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glPolygonOffset");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glLineWidth");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGenBuffers");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGenTextures");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glCreateProgram");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glCreateShader");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glCreateFramebuffer");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glCreateRenderbuffer");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGenQueries");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDeleteBuffers");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDeleteTextures");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDeleteProgram");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDeleteShader");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDeleteFramebuffer");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDeleteRenderbuffer");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDeleteQueries");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBindBuffer");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBufferData");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBufferSubData");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glEnableVertexAttribArray");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDisableVertexAttribArray");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glVertexAttribPointer");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glActiveTexture");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBindTexture");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glTexParameterf");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glTexParameteri");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glTexImage3D");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glTexImage2D");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glTexSubImage2D");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glCopyTexSubImage2D");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glTexStorage2D");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glPixelStorei");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGenerateMipmap");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glShaderSource");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glCompileShader");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGetShaderi");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGetShaderInfoLog");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUseProgram");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glAttachShader");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDetachShader");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glLinkProgram");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGetProgrami");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGetProgramInfoLog");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDrawArrays");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDrawElements");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBindAttribLocation");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGetAttribLocation");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGetUniformLocation");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGetUniformBlockIndex");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBindBufferRange");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniformBlockBinding");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniform1f");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniform2f");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniform3f");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniform4f");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniform1i");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniform2i");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniform3i");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniform4i");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniformMatrix2fv");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniformMatrix3fv");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniformMatrix4fv");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniformMatrix3x2fv");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniformMatrix4x2fv");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glUniformMatrix4x3fv")
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBindFramebuffer");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glCheckFramebufferStatus");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBlitFramebuffer");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glRenderbufferStorage");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glFramebufferTexture2D");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glFramebufferTextureLayer");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBindRenderbuffer");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glFramebufferRenderbuffer");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGetInteger");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGetError");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "getAllExtensions");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "dumpActiveExtensions");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGetString");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glGenVertexArrays");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDeleteVertexArrays");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glBindVertexArray");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glVertexAttribDivisor");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDrawArraysInstanced");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "glDrawElementsInstanced");
|
|
setUnsupportedFunc(glImports, platfOpenGLName, "isContextLost");
|
|
}
|