Commit c66f0e36 by Nicolas Capens

Implement GL_EXT_draw_buffers.

Bug 19353282 Change-Id: I4a1782c2f1e9ae52b731ef447e97c353cc41044e Reviewed-on: https://swiftshader-review.googlesource.com/5123Tested-by: 's avatarNicolas Capens <capn@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 66747475
...@@ -49,6 +49,7 @@ struct ShBuiltInResources ...@@ -49,6 +49,7 @@ struct ShBuiltInResources
int OES_standard_derivatives; int OES_standard_derivatives;
int OES_fragment_precision_high; int OES_fragment_precision_high;
int OES_EGL_image_external; int OES_EGL_image_external;
int EXT_draw_buffers;
unsigned int MaxCallStackDepth; unsigned int MaxCallStackDepth;
}; };
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
// //
// Create strings that declare built-in definitions, add built-ins that // Create strings that declare built-in definitions, add built-ins that
// cannot be expressed in the files, and establish mappings between // cannot be expressed in the files, and establish mappings between
// built-in functions and operators. // built-in functions and operators.
// //
...@@ -105,8 +105,8 @@ void InsertBuiltInFunctions(GLenum type, const ShBuiltInResources &resources, TS ...@@ -105,8 +105,8 @@ void InsertBuiltInFunctions(GLenum type, const ShBuiltInResources &resources, TS
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpFloatBitsToInt, genIType, "floatBitsToInt", genType); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpFloatBitsToInt, genIType, "floatBitsToInt", genType);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpFloatBitsToUint, genUType, "floatBitsToUint", genType); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpFloatBitsToUint, genUType, "floatBitsToUint", genType);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpIntBitsToFloat, genType, "intBitsToFloat", genIType); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpIntBitsToFloat, genType, "intBitsToFloat", genIType);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpUintBitsToFloat, genType, "uintBitsToFloat", genUType); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpUintBitsToFloat, genType, "uintBitsToFloat", genUType);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpPackSnorm2x16, uint1, "packSnorm2x16", float2); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpPackSnorm2x16, uint1, "packSnorm2x16", float2);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpPackUnorm2x16, uint1, "packUnorm2x16", float2); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpPackUnorm2x16, uint1, "packUnorm2x16", float2);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpPackHalf2x16, uint1, "packHalf2x16", float2); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpPackHalf2x16, uint1, "packHalf2x16", float2);
...@@ -147,8 +147,8 @@ void InsertBuiltInFunctions(GLenum type, const ShBuiltInResources &resources, TS ...@@ -147,8 +147,8 @@ void InsertBuiltInFunctions(GLenum type, const ShBuiltInResources &resources, TS
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpMul, mat2x4, "matrixCompMult", mat2x4, mat2x4); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpMul, mat2x4, "matrixCompMult", mat2x4, mat2x4);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpMul, mat4x2, "matrixCompMult", mat4x2, mat4x2); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpMul, mat4x2, "matrixCompMult", mat4x2, mat4x2);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpMul, mat3x4, "matrixCompMult", mat3x4, mat3x4); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpMul, mat3x4, "matrixCompMult", mat3x4, mat3x4);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpMul, mat4x3, "matrixCompMult", mat4x3, mat4x3); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpMul, mat4x3, "matrixCompMult", mat4x3, mat4x3);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpOuterProduct, mat2, "outerProduct", float2, float2); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpOuterProduct, mat2, "outerProduct", float2, float2);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpOuterProduct, mat3, "outerProduct", float3, float3); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpOuterProduct, mat3, "outerProduct", float3, float3);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpOuterProduct, mat4, "outerProduct", float4, float4); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpOuterProduct, mat4, "outerProduct", float4, float4);
...@@ -157,8 +157,8 @@ void InsertBuiltInFunctions(GLenum type, const ShBuiltInResources &resources, TS ...@@ -157,8 +157,8 @@ void InsertBuiltInFunctions(GLenum type, const ShBuiltInResources &resources, TS
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpOuterProduct, mat2x4, "outerProduct", float4, float2); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpOuterProduct, mat2x4, "outerProduct", float4, float2);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpOuterProduct, mat4x2, "outerProduct", float2, float4); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpOuterProduct, mat4x2, "outerProduct", float2, float4);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpOuterProduct, mat3x4, "outerProduct", float4, float3); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpOuterProduct, mat3x4, "outerProduct", float4, float3);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpOuterProduct, mat4x3, "outerProduct", float3, float4); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpOuterProduct, mat4x3, "outerProduct", float3, float4);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpTranspose, mat2, "transpose", mat2); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpTranspose, mat2, "transpose", mat2);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpTranspose, mat3, "transpose", mat3); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpTranspose, mat3, "transpose", mat3);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpTranspose, mat4, "transpose", mat4); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpTranspose, mat4, "transpose", mat4);
...@@ -167,21 +167,21 @@ void InsertBuiltInFunctions(GLenum type, const ShBuiltInResources &resources, TS ...@@ -167,21 +167,21 @@ void InsertBuiltInFunctions(GLenum type, const ShBuiltInResources &resources, TS
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpTranspose, mat2x4, "transpose", mat4x2); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpTranspose, mat2x4, "transpose", mat4x2);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpTranspose, mat4x2, "transpose", mat2x4); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpTranspose, mat4x2, "transpose", mat2x4);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpTranspose, mat3x4, "transpose", mat4x3); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpTranspose, mat3x4, "transpose", mat4x3);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpTranspose, mat4x3, "transpose", mat3x4); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpTranspose, mat4x3, "transpose", mat3x4);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpDeterminant, float1, "determinant", mat2); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpDeterminant, float1, "determinant", mat2);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpDeterminant, float1, "determinant", mat3); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpDeterminant, float1, "determinant", mat3);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpDeterminant, float1, "determinant", mat4); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpDeterminant, float1, "determinant", mat4);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpInverse, mat2, "inverse", mat2); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpInverse, mat2, "inverse", mat2);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpInverse, mat3, "inverse", mat3); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpInverse, mat3, "inverse", mat3);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpInverse, mat4, "inverse", mat4); symbolTable.insertBuiltIn(ESSL3_BUILTINS, EOpInverse, mat4, "inverse", mat4);
TType *bool1 = new TType(EbtBool); TType *bool1 = new TType(EbtBool);
TType *vec = new TType(EbtVec); TType *vec = new TType(EbtVec);
TType *ivec = new TType(EbtIVec); TType *ivec = new TType(EbtIVec);
TType *uvec = new TType(EbtUVec); TType *uvec = new TType(EbtUVec);
TType *bvec = new TType(EbtBVec); TType *bvec = new TType(EbtBVec);
// //
...@@ -436,7 +436,7 @@ void IdentifyBuiltIns(GLenum shaderType, ...@@ -436,7 +436,7 @@ void IdentifyBuiltIns(GLenum shaderType,
TSymbolTable &symbolTable) TSymbolTable &symbolTable)
{ {
// //
// First, insert some special built-in variables that are not in // First, insert some special built-in variables that are not in
// the built-in header files. // the built-in header files.
// //
switch(shaderType) switch(shaderType)
...@@ -481,4 +481,6 @@ void InitExtensionBehavior(const ShBuiltInResources& resources, ...@@ -481,4 +481,6 @@ void InitExtensionBehavior(const ShBuiltInResources& resources,
extBehavior["GL_FRAGMENT_PRECISION_HIGH"] = EBhUndefined; extBehavior["GL_FRAGMENT_PRECISION_HIGH"] = EBhUndefined;
if(resources.OES_EGL_image_external) if(resources.OES_EGL_image_external)
extBehavior["GL_OES_EGL_image_external"] = EBhUndefined; extBehavior["GL_OES_EGL_image_external"] = EBhUndefined;
if(resources.EXT_draw_buffers)
extBehavior["GL_EXT_draw_buffers"] = EBhUndefined;
} }
...@@ -4253,6 +4253,7 @@ const GLubyte* Context::getExtensions(GLuint index, GLuint* numExt) const ...@@ -4253,6 +4253,7 @@ const GLubyte* Context::getExtensions(GLuint index, GLuint* numExt) const
(const GLubyte*)"GL_OES_texture_3D", (const GLubyte*)"GL_OES_texture_3D",
(const GLubyte*)"GL_EXT_blend_minmax", (const GLubyte*)"GL_EXT_blend_minmax",
(const GLubyte*)"GL_EXT_color_buffer_half_float", (const GLubyte*)"GL_EXT_color_buffer_half_float",
(const GLubyte*)"GL_EXT_draw_buffers",
(const GLubyte*)"GL_EXT_occlusion_query_boolean", (const GLubyte*)"GL_EXT_occlusion_query_boolean",
(const GLubyte*)"GL_EXT_read_format_bgra", (const GLubyte*)"GL_EXT_read_format_bgra",
#if (S3TC_SUPPORT) #if (S3TC_SUPPORT)
......
...@@ -160,7 +160,7 @@ TranslatorASM *Shader::createCompiler(GLenum shaderType) ...@@ -160,7 +160,7 @@ TranslatorASM *Shader::createCompiler(GLenum shaderType)
TranslatorASM *assembler = new TranslatorASM(this, shaderType); TranslatorASM *assembler = new TranslatorASM(this, shaderType);
ShBuiltInResources resources; ShBuiltInResources resources;
resources.MaxVertexAttribs = MAX_VERTEX_ATTRIBS; resources.MaxVertexAttribs = MAX_VERTEX_ATTRIBS;
resources.MaxVertexUniformVectors = MAX_VERTEX_UNIFORM_VECTORS; resources.MaxVertexUniformVectors = MAX_VERTEX_UNIFORM_VECTORS;
resources.MaxVaryingVectors = MAX_VARYING_VECTORS; resources.MaxVaryingVectors = MAX_VARYING_VECTORS;
...@@ -176,6 +176,7 @@ TranslatorASM *Shader::createCompiler(GLenum shaderType) ...@@ -176,6 +176,7 @@ TranslatorASM *Shader::createCompiler(GLenum shaderType)
resources.OES_standard_derivatives = 1; resources.OES_standard_derivatives = 1;
resources.OES_fragment_precision_high = 1; resources.OES_fragment_precision_high = 1;
resources.OES_EGL_image_external = 1; resources.OES_EGL_image_external = 1;
resources.EXT_draw_buffers = 1;
resources.MaxCallStackDepth = 16; resources.MaxCallStackDepth = 16;
assembler->Init(resources); assembler->Init(resources);
......
...@@ -167,21 +167,22 @@ global: ...@@ -167,21 +167,22 @@ global:
glGetQueryObjectuivEXT; glGetQueryObjectuivEXT;
glEGLImageTargetTexture2DOES; glEGLImageTargetTexture2DOES;
glEGLImageTargetRenderbufferStorageOES; glEGLImageTargetRenderbufferStorageOES;
glIsRenderbufferOES; glIsRenderbufferOES;
glBindRenderbufferOES; glBindRenderbufferOES;
glDeleteRenderbuffersOES; glDeleteRenderbuffersOES;
glGenRenderbuffersOES; glGenRenderbuffersOES;
glRenderbufferStorageOES; glRenderbufferStorageOES;
glGetRenderbufferParameterivOES; glGetRenderbufferParameterivOES;
glIsFramebufferOES; glIsFramebufferOES;
glBindFramebufferOES; glBindFramebufferOES;
glDeleteFramebuffersOES; glDeleteFramebuffersOES;
glGenFramebuffersOES; glGenFramebuffersOES;
glCheckFramebufferStatusOES; glCheckFramebufferStatusOES;
glFramebufferRenderbufferOES; glFramebufferRenderbufferOES;
glFramebufferTexture2DOES; glFramebufferTexture2DOES;
glGetFramebufferAttachmentParameterivOES; glGetFramebufferAttachmentParameterivOES;
glGenerateMipmapOES; glGenerateMipmapOES;
glDrawBuffersEXT;
# GLES 3.0 Functions # GLES 3.0 Functions
glReadBuffer; glReadBuffer;
......
...@@ -1987,6 +1987,7 @@ void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuff ...@@ -1987,6 +1987,7 @@ void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuff
switch(attachment) switch(attachment)
{ {
case GL_COLOR_ATTACHMENT0:
case GL_COLOR_ATTACHMENT1: case GL_COLOR_ATTACHMENT1:
case GL_COLOR_ATTACHMENT2: case GL_COLOR_ATTACHMENT2:
case GL_COLOR_ATTACHMENT3: case GL_COLOR_ATTACHMENT3:
...@@ -2018,12 +2019,6 @@ void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuff ...@@ -2018,12 +2019,6 @@ void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuff
case GL_COLOR_ATTACHMENT29: case GL_COLOR_ATTACHMENT29:
case GL_COLOR_ATTACHMENT30: case GL_COLOR_ATTACHMENT30:
case GL_COLOR_ATTACHMENT31: case GL_COLOR_ATTACHMENT31:
if(clientVersion < 3)
{
return error(GL_INVALID_ENUM);
}
// fall through
case GL_COLOR_ATTACHMENT0:
if((attachment - GL_COLOR_ATTACHMENT0) >= MAX_COLOR_ATTACHMENTS) if((attachment - GL_COLOR_ATTACHMENT0) >= MAX_COLOR_ATTACHMENTS)
{ {
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
...@@ -2134,10 +2129,9 @@ void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GL ...@@ -2134,10 +2129,9 @@ void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GL
return error(GL_INVALID_OPERATION); return error(GL_INVALID_OPERATION);
} }
GLint clientVersion = context->getClientVersion();
switch(attachment) switch(attachment)
{ {
case GL_COLOR_ATTACHMENT0:
case GL_COLOR_ATTACHMENT1: case GL_COLOR_ATTACHMENT1:
case GL_COLOR_ATTACHMENT2: case GL_COLOR_ATTACHMENT2:
case GL_COLOR_ATTACHMENT3: case GL_COLOR_ATTACHMENT3:
...@@ -2169,12 +2163,6 @@ void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GL ...@@ -2169,12 +2163,6 @@ void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GL
case GL_COLOR_ATTACHMENT29: case GL_COLOR_ATTACHMENT29:
case GL_COLOR_ATTACHMENT30: case GL_COLOR_ATTACHMENT30:
case GL_COLOR_ATTACHMENT31: case GL_COLOR_ATTACHMENT31:
if(clientVersion < 3)
{
return error(GL_INVALID_ENUM);
}
// fall through
case GL_COLOR_ATTACHMENT0:
if((attachment - GL_COLOR_ATTACHMENT0) >= MAX_COLOR_ATTACHMENTS) if((attachment - GL_COLOR_ATTACHMENT0) >= MAX_COLOR_ATTACHMENTS)
{ {
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
...@@ -2807,6 +2795,7 @@ void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenu ...@@ -2807,6 +2795,7 @@ void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenu
} }
else return error(GL_INVALID_ENUM); else return error(GL_INVALID_ENUM);
break; break;
case GL_COLOR_ATTACHMENT0:
case GL_COLOR_ATTACHMENT1: case GL_COLOR_ATTACHMENT1:
case GL_COLOR_ATTACHMENT2: case GL_COLOR_ATTACHMENT2:
case GL_COLOR_ATTACHMENT3: case GL_COLOR_ATTACHMENT3:
...@@ -2838,12 +2827,6 @@ void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenu ...@@ -2838,12 +2827,6 @@ void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenu
case GL_COLOR_ATTACHMENT29: case GL_COLOR_ATTACHMENT29:
case GL_COLOR_ATTACHMENT30: case GL_COLOR_ATTACHMENT30:
case GL_COLOR_ATTACHMENT31: case GL_COLOR_ATTACHMENT31:
if(clientVersion < 3)
{
return error(GL_INVALID_ENUM);
}
// fall through
case GL_COLOR_ATTACHMENT0:
if((attachment - GL_COLOR_ATTACHMENT0) >= MAX_COLOR_ATTACHMENTS) if((attachment - GL_COLOR_ATTACHMENT0) >= MAX_COLOR_ATTACHMENTS)
{ {
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
...@@ -6772,6 +6755,82 @@ void GenerateMipmapOES(GLenum target) ...@@ -6772,6 +6755,82 @@ void GenerateMipmapOES(GLenum target)
GenerateMipmap(target); GenerateMipmap(target);
} }
void DrawBuffersEXT(GLsizei n, const GLenum *bufs)
{
TRACE("(GLsizei n = %d, const GLenum *bufs = %p)", n, bufs);
if(n < 0 || n > MAX_DRAW_BUFFERS)
{
return error(GL_INVALID_VALUE);
}
es2::Context *context = es2::getContext();
if(context)
{
GLuint drawFramebufferName = context->getDrawFramebufferName();
if((drawFramebufferName == 0) && (n != 1))
{
return error(GL_INVALID_OPERATION);
}
for(unsigned int i = 0; i < (unsigned)n; i++)
{
switch(bufs[i])
{
case GL_BACK:
if(drawFramebufferName != 0)
{
return error(GL_INVALID_OPERATION);
}
break;
case GL_NONE:
break;
case GL_COLOR_ATTACHMENT0_EXT:
case GL_COLOR_ATTACHMENT1_EXT:
case GL_COLOR_ATTACHMENT2_EXT:
case GL_COLOR_ATTACHMENT3_EXT:
case GL_COLOR_ATTACHMENT4_EXT:
case GL_COLOR_ATTACHMENT5_EXT:
case GL_COLOR_ATTACHMENT6_EXT:
case GL_COLOR_ATTACHMENT7_EXT:
case GL_COLOR_ATTACHMENT8_EXT:
case GL_COLOR_ATTACHMENT9_EXT:
case GL_COLOR_ATTACHMENT10_EXT:
case GL_COLOR_ATTACHMENT11_EXT:
case GL_COLOR_ATTACHMENT12_EXT:
case GL_COLOR_ATTACHMENT13_EXT:
case GL_COLOR_ATTACHMENT14_EXT:
case GL_COLOR_ATTACHMENT15_EXT:
{
GLuint index = (bufs[i] - GL_COLOR_ATTACHMENT0_EXT);
if(index >= MAX_COLOR_ATTACHMENTS)
{
return error(GL_INVALID_OPERATION);
}
if(index != i)
{
return error(GL_INVALID_OPERATION);
}
if(drawFramebufferName == 0)
{
return error(GL_INVALID_OPERATION);
}
}
break;
default:
return error(GL_INVALID_ENUM);
}
}
context->setFramebufferDrawBuffers(n, bufs);
}
}
} }
extern "C" __eglMustCastToProperFunctionPointerType es2GetProcAddress(const char *procname) extern "C" __eglMustCastToProperFunctionPointerType es2GetProcAddress(const char *procname)
...@@ -6831,6 +6890,7 @@ extern "C" __eglMustCastToProperFunctionPointerType es2GetProcAddress(const char ...@@ -6831,6 +6890,7 @@ extern "C" __eglMustCastToProperFunctionPointerType es2GetProcAddress(const char
EXTENSION(glFramebufferTexture2DOES), EXTENSION(glFramebufferTexture2DOES),
EXTENSION(glGetFramebufferAttachmentParameterivOES), EXTENSION(glGetFramebufferAttachmentParameterivOES),
EXTENSION(glGenerateMipmapOES), EXTENSION(glGenerateMipmapOES),
EXTENSION(glDrawBuffersEXT),
#undef EXTENSION #undef EXTENSION
}; };
......
...@@ -182,6 +182,7 @@ EXPORTS ...@@ -182,6 +182,7 @@ EXPORTS
glFramebufferTexture2DOES glFramebufferTexture2DOES
glGetFramebufferAttachmentParameterivOES glGetFramebufferAttachmentParameterivOES
glGenerateMipmapOES glGenerateMipmapOES
glDrawBuffersEXT
; GLES 3.0 Functions ; GLES 3.0 Functions
glReadBuffer @211 glReadBuffer @211
......
...@@ -224,6 +224,7 @@ public: ...@@ -224,6 +224,7 @@ public:
void (*glFramebufferTexture2DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); void (*glFramebufferTexture2DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
void (*glGetFramebufferAttachmentParameterivOES)(GLenum target, GLenum attachment, GLenum pname, GLint* params); void (*glGetFramebufferAttachmentParameterivOES)(GLenum target, GLenum attachment, GLenum pname, GLint* params);
void (*glGenerateMipmapOES)(GLenum target); void (*glGenerateMipmapOES)(GLenum target);
void (*glDrawBuffersEXT)(GLsizei n, const GLenum *bufs);
egl::Context *(*es2CreateContext)(const egl::Config *config, const egl::Context *shareContext, int clientVersion); egl::Context *(*es2CreateContext)(const egl::Config *config, const egl::Context *shareContext, int clientVersion);
__eglMustCastToProperFunctionPointerType (*es2GetProcAddress)(const char *procname); __eglMustCastToProperFunctionPointerType (*es2GetProcAddress)(const char *procname);
......
...@@ -332,21 +332,22 @@ GL_APICALL void CompressedTexSubImage3DOES(GLenum target, GLint level, GLint xof ...@@ -332,21 +332,22 @@ GL_APICALL void CompressedTexSubImage3DOES(GLenum target, GLint level, GLint xof
GL_APICALL void FramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GL_APICALL void FramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
GL_APICALL void EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image); GL_APICALL void EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image);
GL_APICALL void EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image); GL_APICALL void EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
GL_APICALL GLboolean IsRenderbufferOES(GLuint renderbuffer); GL_APICALL GLboolean IsRenderbufferOES(GLuint renderbuffer);
GL_APICALL void BindRenderbufferOES(GLenum target, GLuint renderbuffer); GL_APICALL void BindRenderbufferOES(GLenum target, GLuint renderbuffer);
GL_APICALL void DeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers); GL_APICALL void DeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers);
GL_APICALL void GenRenderbuffersOES(GLsizei n, GLuint* renderbuffers); GL_APICALL void GenRenderbuffersOES(GLsizei n, GLuint* renderbuffers);
GL_APICALL void RenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void RenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
GL_APICALL void GetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params); GL_APICALL void GetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params);
GL_APICALL GLboolean IsFramebufferOES(GLuint framebuffer); GL_APICALL GLboolean IsFramebufferOES(GLuint framebuffer);
GL_APICALL void BindFramebufferOES(GLenum target, GLuint framebuffer); GL_APICALL void BindFramebufferOES(GLenum target, GLuint framebuffer);
GL_APICALL void DeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers); GL_APICALL void DeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers);
GL_APICALL void GenFramebuffersOES(GLsizei n, GLuint* framebuffers); GL_APICALL void GenFramebuffersOES(GLsizei n, GLuint* framebuffers);
GL_APICALL GLenum CheckFramebufferStatusOES(GLenum target); GL_APICALL GLenum CheckFramebufferStatusOES(GLenum target);
GL_APICALL void FramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GL_APICALL void FramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
GL_APICALL void FramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GL_APICALL void FramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
GL_APICALL void GetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params); GL_APICALL void GetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params);
GL_APICALL void GenerateMipmapOES(GLenum target); GL_APICALL void GenerateMipmapOES(GLenum target);
GL_APICALL void DrawBuffersEXT(GLsizei n, const GLenum *bufs);
} }
extern "C" extern "C"
...@@ -1318,6 +1319,11 @@ GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES(GLenum target ...@@ -1318,6 +1319,11 @@ GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES(GLenum target
return es2::EGLImageTargetRenderbufferStorageOES(target, image); return es2::EGLImageTargetRenderbufferStorageOES(target, image);
} }
GL_APICALL void GL_APIENTRY glDrawBuffersEXT(GLsizei n, const GLenum *bufs)
{
return es2::DrawBuffersEXT(n, bufs);
}
void GL_APIENTRY Register(const char *licenseKey) void GL_APIENTRY Register(const char *licenseKey)
{ {
RegisterLicenseKey(licenseKey); RegisterLicenseKey(licenseKey);
...@@ -1509,21 +1515,22 @@ LibGLESv2exports::LibGLESv2exports() ...@@ -1509,21 +1515,22 @@ LibGLESv2exports::LibGLESv2exports()
this->glFramebufferTexture3DOES = es2::FramebufferTexture3DOES; this->glFramebufferTexture3DOES = es2::FramebufferTexture3DOES;
this->glEGLImageTargetTexture2DOES = es2::EGLImageTargetTexture2DOES; this->glEGLImageTargetTexture2DOES = es2::EGLImageTargetTexture2DOES;
this->glEGLImageTargetRenderbufferStorageOES = es2::EGLImageTargetRenderbufferStorageOES; this->glEGLImageTargetRenderbufferStorageOES = es2::EGLImageTargetRenderbufferStorageOES;
this->glIsRenderbufferOES = es2::IsRenderbufferOES; this->glIsRenderbufferOES = es2::IsRenderbufferOES;
this->glBindRenderbufferOES = es2::BindRenderbufferOES; this->glBindRenderbufferOES = es2::BindRenderbufferOES;
this->glDeleteRenderbuffersOES = es2::DeleteRenderbuffersOES; this->glDeleteRenderbuffersOES = es2::DeleteRenderbuffersOES;
this->glGenRenderbuffersOES = es2::GenRenderbuffersOES; this->glGenRenderbuffersOES = es2::GenRenderbuffersOES;
this->glRenderbufferStorageOES = es2::RenderbufferStorageOES; this->glRenderbufferStorageOES = es2::RenderbufferStorageOES;
this->glGetRenderbufferParameterivOES = es2::GetRenderbufferParameterivOES; this->glGetRenderbufferParameterivOES = es2::GetRenderbufferParameterivOES;
this->glIsFramebufferOES = es2::IsFramebufferOES; this->glIsFramebufferOES = es2::IsFramebufferOES;
this->glBindFramebufferOES = es2::BindFramebufferOES; this->glBindFramebufferOES = es2::BindFramebufferOES;
this->glDeleteFramebuffersOES = es2::DeleteFramebuffersOES; this->glDeleteFramebuffersOES = es2::DeleteFramebuffersOES;
this->glGenFramebuffersOES = es2::GenFramebuffersOES; this->glGenFramebuffersOES = es2::GenFramebuffersOES;
this->glCheckFramebufferStatusOES = es2::CheckFramebufferStatusOES; this->glCheckFramebufferStatusOES = es2::CheckFramebufferStatusOES;
this->glFramebufferRenderbufferOES = es2::FramebufferRenderbufferOES; this->glFramebufferRenderbufferOES = es2::FramebufferRenderbufferOES;
this->glFramebufferTexture2DOES = es2::FramebufferTexture2DOES; this->glFramebufferTexture2DOES = es2::FramebufferTexture2DOES;
this->glGetFramebufferAttachmentParameterivOES = es2::GetFramebufferAttachmentParameterivOES; this->glGetFramebufferAttachmentParameterivOES = es2::GetFramebufferAttachmentParameterivOES;
this->glGenerateMipmapOES = es2::GenerateMipmapOES; this->glGenerateMipmapOES = es2::GenerateMipmapOES;
this->glDrawBuffersEXT = es2::DrawBuffersEXT;
this->es2CreateContext = ::es2CreateContext; this->es2CreateContext = ::es2CreateContext;
this->es2GetProcAddress = ::es2GetProcAddress; this->es2GetProcAddress = ::es2GetProcAddress;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment