am 98030a4f: Merge "2.0 translator: support ARB_ES2_compatibility stuff"
* commit '98030a4f20ec3ec7dbeda20d8cb7e27b0c433ca6': 2.0 translator: support ARB_ES2_compatibility stuff
This commit is contained in:
@@ -639,8 +639,32 @@ GL_APICALL int GL_APIENTRY glGetAttribLocation(GLuint program, const GLchar* nam
|
||||
|
||||
GL_APICALL void GL_APIENTRY glGetBooleanv(GLenum pname, GLboolean* params){
|
||||
GET_CTX();
|
||||
if (!ctx->glGetBooleanv(pname,params)) {
|
||||
ctx->dispatcher().glGetBooleanv(pname,params);
|
||||
|
||||
if (ctx->glGetBooleanv(pname,params))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch(pname)
|
||||
{
|
||||
case GL_SHADER_COMPILER:
|
||||
case GL_SHADER_BINARY_FORMATS:
|
||||
case GL_NUM_SHADER_BINARY_FORMATS:
|
||||
case GL_MAX_VERTEX_UNIFORM_VECTORS:
|
||||
case GL_MAX_VARYING_VECTORS:
|
||||
case GL_MAX_FRAGMENT_UNIFORM_VECTORS:
|
||||
if(ctx->getCaps()->GL_ARB_ES2_COMPATIBILITY)
|
||||
ctx->dispatcher().glGetBooleanv(pname,params);
|
||||
else
|
||||
{
|
||||
GLint iparam;
|
||||
glGetIntegerv(pname,&iparam);
|
||||
*params = (iparam != 0);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
ctx->dispatcher().glGetBooleanv(pname,params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -672,10 +696,13 @@ GL_APICALL GLenum GL_APIENTRY glGetError(void){
|
||||
|
||||
GL_APICALL void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat* params){
|
||||
GET_CTX();
|
||||
|
||||
if (ctx->glGetFloatv(pname,params)) {
|
||||
return;
|
||||
}
|
||||
|
||||
GLint i;
|
||||
|
||||
switch (pname) {
|
||||
case GL_CURRENT_PROGRAM:
|
||||
case GL_FRAMEBUFFER_BINDING:
|
||||
@@ -698,6 +725,21 @@ GL_APICALL void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat* params){
|
||||
}
|
||||
break;
|
||||
|
||||
case GL_SHADER_COMPILER:
|
||||
case GL_SHADER_BINARY_FORMATS:
|
||||
case GL_NUM_SHADER_BINARY_FORMATS:
|
||||
case GL_MAX_VERTEX_UNIFORM_VECTORS:
|
||||
case GL_MAX_VARYING_VECTORS:
|
||||
case GL_MAX_FRAGMENT_UNIFORM_VECTORS:
|
||||
if(ctx->getCaps()->GL_ARB_ES2_COMPATIBILITY)
|
||||
ctx->dispatcher().glGetFloatv(pname,params);
|
||||
else
|
||||
{
|
||||
glGetIntegerv(pname,&i);
|
||||
*params = (GLfloat)i;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
ctx->dispatcher().glGetFloatv(pname,params);
|
||||
}
|
||||
@@ -711,6 +753,7 @@ GL_APICALL void GL_APIENTRY glGetIntegerv(GLenum pname, GLint* params){
|
||||
return;
|
||||
}
|
||||
|
||||
bool es2 = ctx->getCaps()->GL_ARB_ES2_COMPATIBILITY;
|
||||
GLint i;
|
||||
|
||||
switch (pname) {
|
||||
@@ -732,12 +775,54 @@ GL_APICALL void GL_APIENTRY glGetIntegerv(GLenum pname, GLint* params){
|
||||
*params = thrd->shareGroup->getLocalName(RENDERBUFFER,i);
|
||||
}
|
||||
break;
|
||||
|
||||
case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
|
||||
*params = getCompressedFormats(NULL);
|
||||
break;
|
||||
case GL_COMPRESSED_TEXTURE_FORMATS:
|
||||
getCompressedFormats(params);
|
||||
break;
|
||||
|
||||
case GL_SHADER_COMPILER:
|
||||
if(es2)
|
||||
ctx->dispatcher().glGetIntegerv(pname,params);
|
||||
else
|
||||
*params = 1;
|
||||
break;
|
||||
|
||||
case GL_SHADER_BINARY_FORMATS:
|
||||
if(es2)
|
||||
ctx->dispatcher().glGetIntegerv(pname,params);
|
||||
break;
|
||||
|
||||
case GL_NUM_SHADER_BINARY_FORMATS:
|
||||
if(es2)
|
||||
ctx->dispatcher().glGetIntegerv(pname,params);
|
||||
else
|
||||
*params = 0;
|
||||
break;
|
||||
|
||||
case GL_MAX_VERTEX_UNIFORM_VECTORS:
|
||||
if(es2)
|
||||
ctx->dispatcher().glGetIntegerv(pname,params);
|
||||
else
|
||||
*params = 128;
|
||||
break;
|
||||
|
||||
case GL_MAX_VARYING_VECTORS:
|
||||
if(es2)
|
||||
ctx->dispatcher().glGetIntegerv(pname,params);
|
||||
else
|
||||
*params = 8;
|
||||
break;
|
||||
|
||||
case GL_MAX_FRAGMENT_UNIFORM_VECTORS:
|
||||
if(es2)
|
||||
ctx->dispatcher().glGetIntegerv(pname,params);
|
||||
else
|
||||
*params = 16;
|
||||
break;
|
||||
|
||||
default:
|
||||
ctx->dispatcher().glGetIntegerv(pname,params);
|
||||
}
|
||||
@@ -793,12 +878,30 @@ GL_APICALL void GL_APIENTRY glGetShaderInfoLog(GLuint shader, GLsizei bufsize,
|
||||
GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision){
|
||||
GET_CTX_V2();
|
||||
SET_ERROR_IF(!(GLESv2Validate::shaderType(shadertype) && GLESv2Validate::precisionType(precisiontype)),GL_INVALID_ENUM);
|
||||
if(ctx->glslVersion() < Version(1,30,10)){ //version 1.30.10 is the first version of GLSL Language containing precision qualifiers
|
||||
range[0] = range[1] = 0;
|
||||
precision = 0;
|
||||
} else {
|
||||
|
||||
if(ctx->dispatcher().glGetShaderPrecisionFormat != NULL)
|
||||
{
|
||||
ctx->dispatcher().glGetShaderPrecisionFormat(shadertype,precisiontype,range,precision);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(precisiontype)
|
||||
{
|
||||
case GL_LOW_INT:
|
||||
case GL_MEDIUM_INT:
|
||||
case GL_HIGH_INT:
|
||||
range[0] = range[1] = 16;
|
||||
*precision = 0;
|
||||
break;
|
||||
|
||||
case GL_LOW_FLOAT:
|
||||
case GL_MEDIUM_FLOAT:
|
||||
case GL_HIGH_FLOAT:
|
||||
range[0] = range[1] = 127;
|
||||
*precision = 24;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GL_APICALL void GL_APIENTRY glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source){
|
||||
@@ -1064,7 +1167,11 @@ GL_APICALL void GL_APIENTRY glReadPixels(GLint x, GLint y, GLsizei width, GLsiz
|
||||
|
||||
GL_APICALL void GL_APIENTRY glReleaseShaderCompiler(void){
|
||||
GET_CTX();
|
||||
ctx->dispatcher().glReleaseShaderCompiler();
|
||||
|
||||
if(ctx->dispatcher().glReleaseShaderCompiler != NULL)
|
||||
{
|
||||
ctx->dispatcher().glReleaseShaderCompiler();
|
||||
}
|
||||
}
|
||||
|
||||
GL_APICALL void GL_APIENTRY glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height){
|
||||
@@ -1084,6 +1191,9 @@ GL_APICALL void GL_APIENTRY glScissor(GLint x, GLint y, GLsizei width, GLsizei
|
||||
|
||||
GL_APICALL void GL_APIENTRY glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length){
|
||||
GET_CTX();
|
||||
|
||||
SET_ERROR_IF( (ctx->dispatcher().glShaderBinary == NULL), GL_INVALID_OPERATION);
|
||||
|
||||
if(thrd->shareGroup.Ptr()){
|
||||
for(int i=0; i < n ; i++){
|
||||
const GLuint globalShaderName = thrd->shareGroup->getGlobalName(SHADER,shaders[i]);
|
||||
|
||||
@@ -521,13 +521,13 @@ void GLDispatch::dispatchFuncs(GLESVersion version){
|
||||
LOAD_GL_FUNC(glGetProgramInfoLog);
|
||||
LOAD_GL_FUNC(glGetShaderiv);
|
||||
LOAD_GL_FUNC(glGetShaderInfoLog);
|
||||
LOAD_GL_FUNC(glGetShaderPrecisionFormat);
|
||||
LOAD_GLEXT_FUNC(glGetShaderPrecisionFormat);
|
||||
LOAD_GL_FUNC(glGetShaderSource);
|
||||
LOAD_GL_FUNC(glGetUniformfv);
|
||||
LOAD_GL_FUNC(glGetUniformiv);
|
||||
LOAD_GL_FUNC(glGetUniformLocation);
|
||||
LOAD_GL_FUNC(glReleaseShaderCompiler);
|
||||
LOAD_GL_FUNC(glShaderBinary);
|
||||
LOAD_GLEXT_FUNC(glReleaseShaderCompiler);
|
||||
LOAD_GLEXT_FUNC(glShaderBinary);
|
||||
LOAD_GL_FUNC(glShaderSource);
|
||||
LOAD_GL_FUNC(glStencilMaskSeparate);
|
||||
}
|
||||
|
||||
@@ -511,6 +511,9 @@ void GLEScontext::initCapsLocked(const GLubyte * extensionString)
|
||||
if (strstr(cstring,"GL_SGIS_generate_mipmap ")!=NULL)
|
||||
s_glSupport.GL_SGIS_GENERATE_MIPMAP = true;
|
||||
|
||||
if (strstr(cstring,"GL_ARB_ES2_compatibility ")!=NULL)
|
||||
s_glSupport.GL_ARB_ES2_COMPATIBILITY = true;
|
||||
|
||||
}
|
||||
|
||||
bool GLEScontext::isTextureUnitEnabled(GLenum unit) {
|
||||
|
||||
@@ -41,7 +41,8 @@ struct GLSupport {
|
||||
GL_ARB_VERTEX_BLEND(false), GL_ARB_MATRIX_PALETTE(false), \
|
||||
GL_NV_PACKED_DEPTH_STENCIL(false) , GL_OES_READ_FORMAT(false), \
|
||||
GL_ARB_HALF_FLOAT_PIXEL(false), GL_NV_HALF_FLOAT(false), \
|
||||
GL_ARB_HALF_FLOAT_VERTEX(false),GL_SGIS_GENERATE_MIPMAP(false) {} ;
|
||||
GL_ARB_HALF_FLOAT_VERTEX(false),GL_SGIS_GENERATE_MIPMAP(false),
|
||||
GL_ARB_ES2_COMPATIBILITY(false) {} ;
|
||||
int maxLights;
|
||||
int maxVertexAttribs;
|
||||
int maxClipPlane;
|
||||
@@ -59,6 +60,7 @@ struct GLSupport {
|
||||
bool GL_NV_HALF_FLOAT;
|
||||
bool GL_ARB_HALF_FLOAT_VERTEX;
|
||||
bool GL_SGIS_GENERATE_MIPMAP;
|
||||
bool GL_ARB_ES2_COMPATIBILITY;
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user