Merge "2.0 translator: support ARB_ES2_compatibility stuff"
This commit is contained in:
@@ -639,7 +639,31 @@ GL_APICALL int GL_APIENTRY glGetAttribLocation(GLuint program, const GLchar* nam
|
|||||||
|
|
||||||
GL_APICALL void GL_APIENTRY glGetBooleanv(GLenum pname, GLboolean* params){
|
GL_APICALL void GL_APIENTRY glGetBooleanv(GLenum pname, GLboolean* params){
|
||||||
GET_CTX();
|
GET_CTX();
|
||||||
if (!ctx->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);
|
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){
|
GL_APICALL void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat* params){
|
||||||
GET_CTX();
|
GET_CTX();
|
||||||
|
|
||||||
if (ctx->glGetFloatv(pname,params)) {
|
if (ctx->glGetFloatv(pname,params)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GLint i;
|
GLint i;
|
||||||
|
|
||||||
switch (pname) {
|
switch (pname) {
|
||||||
case GL_CURRENT_PROGRAM:
|
case GL_CURRENT_PROGRAM:
|
||||||
case GL_FRAMEBUFFER_BINDING:
|
case GL_FRAMEBUFFER_BINDING:
|
||||||
@@ -698,6 +725,21 @@ GL_APICALL void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat* params){
|
|||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
ctx->dispatcher().glGetFloatv(pname,params);
|
ctx->dispatcher().glGetFloatv(pname,params);
|
||||||
}
|
}
|
||||||
@@ -711,6 +753,7 @@ GL_APICALL void GL_APIENTRY glGetIntegerv(GLenum pname, GLint* params){
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool es2 = ctx->getCaps()->GL_ARB_ES2_COMPATIBILITY;
|
||||||
GLint i;
|
GLint i;
|
||||||
|
|
||||||
switch (pname) {
|
switch (pname) {
|
||||||
@@ -732,12 +775,54 @@ GL_APICALL void GL_APIENTRY glGetIntegerv(GLenum pname, GLint* params){
|
|||||||
*params = thrd->shareGroup->getLocalName(RENDERBUFFER,i);
|
*params = thrd->shareGroup->getLocalName(RENDERBUFFER,i);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
|
case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
|
||||||
*params = getCompressedFormats(NULL);
|
*params = getCompressedFormats(NULL);
|
||||||
break;
|
break;
|
||||||
case GL_COMPRESSED_TEXTURE_FORMATS:
|
case GL_COMPRESSED_TEXTURE_FORMATS:
|
||||||
getCompressedFormats(params);
|
getCompressedFormats(params);
|
||||||
break;
|
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:
|
default:
|
||||||
ctx->dispatcher().glGetIntegerv(pname,params);
|
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){
|
GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision){
|
||||||
GET_CTX_V2();
|
GET_CTX_V2();
|
||||||
SET_ERROR_IF(!(GLESv2Validate::shaderType(shadertype) && GLESv2Validate::precisionType(precisiontype)),GL_INVALID_ENUM);
|
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;
|
if(ctx->dispatcher().glGetShaderPrecisionFormat != NULL)
|
||||||
precision = 0;
|
{
|
||||||
} else {
|
|
||||||
ctx->dispatcher().glGetShaderPrecisionFormat(shadertype,precisiontype,range,precision);
|
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){
|
GL_APICALL void GL_APIENTRY glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source){
|
||||||
@@ -1064,8 +1167,12 @@ GL_APICALL void GL_APIENTRY glReadPixels(GLint x, GLint y, GLsizei width, GLsiz
|
|||||||
|
|
||||||
GL_APICALL void GL_APIENTRY glReleaseShaderCompiler(void){
|
GL_APICALL void GL_APIENTRY glReleaseShaderCompiler(void){
|
||||||
GET_CTX();
|
GET_CTX();
|
||||||
|
|
||||||
|
if(ctx->dispatcher().glReleaseShaderCompiler != NULL)
|
||||||
|
{
|
||||||
ctx->dispatcher().glReleaseShaderCompiler();
|
ctx->dispatcher().glReleaseShaderCompiler();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GL_APICALL void GL_APIENTRY glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height){
|
GL_APICALL void GL_APIENTRY glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height){
|
||||||
GET_CTX();
|
GET_CTX();
|
||||||
@@ -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){
|
GL_APICALL void GL_APIENTRY glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length){
|
||||||
GET_CTX();
|
GET_CTX();
|
||||||
|
|
||||||
|
SET_ERROR_IF( (ctx->dispatcher().glShaderBinary == NULL), GL_INVALID_OPERATION);
|
||||||
|
|
||||||
if(thrd->shareGroup.Ptr()){
|
if(thrd->shareGroup.Ptr()){
|
||||||
for(int i=0; i < n ; i++){
|
for(int i=0; i < n ; i++){
|
||||||
const GLuint globalShaderName = thrd->shareGroup->getGlobalName(SHADER,shaders[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(glGetProgramInfoLog);
|
||||||
LOAD_GL_FUNC(glGetShaderiv);
|
LOAD_GL_FUNC(glGetShaderiv);
|
||||||
LOAD_GL_FUNC(glGetShaderInfoLog);
|
LOAD_GL_FUNC(glGetShaderInfoLog);
|
||||||
LOAD_GL_FUNC(glGetShaderPrecisionFormat);
|
LOAD_GLEXT_FUNC(glGetShaderPrecisionFormat);
|
||||||
LOAD_GL_FUNC(glGetShaderSource);
|
LOAD_GL_FUNC(glGetShaderSource);
|
||||||
LOAD_GL_FUNC(glGetUniformfv);
|
LOAD_GL_FUNC(glGetUniformfv);
|
||||||
LOAD_GL_FUNC(glGetUniformiv);
|
LOAD_GL_FUNC(glGetUniformiv);
|
||||||
LOAD_GL_FUNC(glGetUniformLocation);
|
LOAD_GL_FUNC(glGetUniformLocation);
|
||||||
LOAD_GL_FUNC(glReleaseShaderCompiler);
|
LOAD_GLEXT_FUNC(glReleaseShaderCompiler);
|
||||||
LOAD_GL_FUNC(glShaderBinary);
|
LOAD_GLEXT_FUNC(glShaderBinary);
|
||||||
LOAD_GL_FUNC(glShaderSource);
|
LOAD_GL_FUNC(glShaderSource);
|
||||||
LOAD_GL_FUNC(glStencilMaskSeparate);
|
LOAD_GL_FUNC(glStencilMaskSeparate);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -511,6 +511,9 @@ void GLEScontext::initCapsLocked(const GLubyte * extensionString)
|
|||||||
if (strstr(cstring,"GL_SGIS_generate_mipmap ")!=NULL)
|
if (strstr(cstring,"GL_SGIS_generate_mipmap ")!=NULL)
|
||||||
s_glSupport.GL_SGIS_GENERATE_MIPMAP = true;
|
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) {
|
bool GLEScontext::isTextureUnitEnabled(GLenum unit) {
|
||||||
|
|||||||
@@ -41,7 +41,8 @@ struct GLSupport {
|
|||||||
GL_ARB_VERTEX_BLEND(false), GL_ARB_MATRIX_PALETTE(false), \
|
GL_ARB_VERTEX_BLEND(false), GL_ARB_MATRIX_PALETTE(false), \
|
||||||
GL_NV_PACKED_DEPTH_STENCIL(false) , GL_OES_READ_FORMAT(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_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 maxLights;
|
||||||
int maxVertexAttribs;
|
int maxVertexAttribs;
|
||||||
int maxClipPlane;
|
int maxClipPlane;
|
||||||
@@ -59,6 +60,7 @@ struct GLSupport {
|
|||||||
bool GL_NV_HALF_FLOAT;
|
bool GL_NV_HALF_FLOAT;
|
||||||
bool GL_ARB_HALF_FLOAT_VERTEX;
|
bool GL_ARB_HALF_FLOAT_VERTEX;
|
||||||
bool GL_SGIS_GENERATE_MIPMAP;
|
bool GL_SGIS_GENERATE_MIPMAP;
|
||||||
|
bool GL_ARB_ES2_COMPATIBILITY;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user