add gles2 extensions
implement extensions for gles2 add missing entry point for gles1 EGLImage extension Change-Id: I7cf0118fdf69f3fb2a7023cf97134efd6aabbf59
This commit is contained in:
@@ -95,13 +95,14 @@ static __translatorMustCastToProperFunctionPointerType getProcAddress(const char
|
|||||||
else
|
else
|
||||||
s_glesExtensions->clear();
|
s_glesExtensions->clear();
|
||||||
(*s_glesExtensions)["glEGLImageTargetTexture2DOES"] = (__translatorMustCastToProperFunctionPointerType)glEGLImageTargetTexture2DOES;
|
(*s_glesExtensions)["glEGLImageTargetTexture2DOES"] = (__translatorMustCastToProperFunctionPointerType)glEGLImageTargetTexture2DOES;
|
||||||
|
(*s_glesExtensions)["glEGLImageTargetRenderbufferStorageOES"]=(__translatorMustCastToProperFunctionPointerType)glEGLImageTargetRenderbufferStorageOES;
|
||||||
(*s_glesExtensions)["glBlendEquationSeparateOES"] = (__translatorMustCastToProperFunctionPointerType)glBlendEquationSeparateOES;
|
(*s_glesExtensions)["glBlendEquationSeparateOES"] = (__translatorMustCastToProperFunctionPointerType)glBlendEquationSeparateOES;
|
||||||
(*s_glesExtensions)["glBlendFuncSeparateOES"] = (__translatorMustCastToProperFunctionPointerType)glBlendFuncSeparateOES;
|
(*s_glesExtensions)["glBlendFuncSeparateOES"] = (__translatorMustCastToProperFunctionPointerType)glBlendFuncSeparateOES;
|
||||||
(*s_glesExtensions)["glBlendEquationOES"] = (__translatorMustCastToProperFunctionPointerType)glBlendEquationOES;
|
(*s_glesExtensions)["glBlendEquationOES"] = (__translatorMustCastToProperFunctionPointerType)glBlendEquationOES;
|
||||||
|
|
||||||
if (ctx->getCaps()->GL_ARB_MATRIX_PALETTE && ctx->getCaps()->GL_ARB_VERTEX_BLEND) {
|
if (ctx->getCaps()->GL_ARB_MATRIX_PALETTE && ctx->getCaps()->GL_ARB_VERTEX_BLEND) {
|
||||||
(*s_glesExtensions)["glCurrentPaletteMatrixOES"] = (__translatorMustCastToProperFunctionPointerType)glCurrentPaletteMatrixOES;
|
(*s_glesExtensions)["glCurrentPaletteMatrixOES"] = (__translatorMustCastToProperFunctionPointerType)glCurrentPaletteMatrixOES;
|
||||||
(*s_glesExtensions)["glLoadPaletteFromModelViewMatrixOES"] = (__translatorMustCastToProperFunctionPointerType)glLoadPaletteFromModelViewMatrixOES;
|
(*s_glesExtensions)["glLoadPaletteFromModelViewMatrixOES"]=(__translatorMustCastToProperFunctionPointerType)glLoadPaletteFromModelViewMatrixOES;
|
||||||
(*s_glesExtensions)["glMatrixIndexPointerOES"] = (__translatorMustCastToProperFunctionPointerType)glMatrixIndexPointerOES;
|
(*s_glesExtensions)["glMatrixIndexPointerOES"] = (__translatorMustCastToProperFunctionPointerType)glMatrixIndexPointerOES;
|
||||||
(*s_glesExtensions)["glWeightPointerOES"] = (__translatorMustCastToProperFunctionPointerType)glWeightPointerOES;
|
(*s_glesExtensions)["glWeightPointerOES"] = (__translatorMustCastToProperFunctionPointerType)glWeightPointerOES;
|
||||||
}
|
}
|
||||||
@@ -1452,6 +1453,13 @@ GL_API void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOE
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GL_API void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
|
||||||
|
{
|
||||||
|
GET_CTX()
|
||||||
|
//not supported by EGL
|
||||||
|
SET_ERROR_IF(false,GL_INVALID_OPERATION);
|
||||||
|
}
|
||||||
|
|
||||||
/* GL_OES_blend_subtract*/
|
/* GL_OES_blend_subtract*/
|
||||||
GL_API void GL_APIENTRY glBlendEquationOES(GLenum mode) {
|
GL_API void GL_APIENTRY glBlendEquationOES(GLenum mode) {
|
||||||
GET_CTX()
|
GET_CTX()
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ void GLESv2Context::init() {
|
|||||||
if(!m_initialized) {
|
if(!m_initialized) {
|
||||||
s_glDispatch.dispatchFuncs(GLES_2_0);
|
s_glDispatch.dispatchFuncs(GLES_2_0);
|
||||||
initCapsLocked(s_glDispatch.glGetString(GL_EXTENSIONS));
|
initCapsLocked(s_glDispatch.glGetString(GL_EXTENSIONS));
|
||||||
|
initExtensionString();
|
||||||
|
|
||||||
for(int i=0; i < s_glSupport.maxVertexAttribs;i++){
|
for(int i=0; i < s_glSupport.maxVertexAttribs;i++){
|
||||||
m_map[i] = new GLESpointer();
|
m_map[i] = new GLESpointer();
|
||||||
@@ -48,3 +49,14 @@ void GLESv2Context::convertArrs(GLESFloatArrays& fArrs,GLint first,GLsizei count
|
|||||||
void GLESv2Context::sendArr(GLvoid* arr,GLenum arrayType,GLint size,GLsizei stride,int index) {
|
void GLESv2Context::sendArr(GLvoid* arr,GLenum arrayType,GLint size,GLsizei stride,int index) {
|
||||||
s_glDispatch.glVertexAttribPointer(arrayType,size,GL_FLOAT,GL_FALSE,stride,arr);
|
s_glDispatch.glVertexAttribPointer(arrayType,size,GL_FLOAT,GL_FALSE,stride,arr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLESv2Context::initExtensionString() {
|
||||||
|
*s_glExtensions = "GL_OES_EGL_image GL_OES_depth24 GL_OES_depth32 GL_OES_element_index_uint "
|
||||||
|
"GL_OES_standard_derivatives GL_OES_texture_float GL_OES_texture_float_linear ";
|
||||||
|
if (s_glSupport.GL_ARB_HALF_FLOAT_PIXEL || s_glSupport.GL_NV_HALF_FLOAT)
|
||||||
|
*s_glExtensions+="GL_OES_texture_half_float GL_OES_texture_half_float_linear ";
|
||||||
|
if (s_glSupport.GL_NV_PACKED_DEPTH_STENCIL)
|
||||||
|
*s_glExtensions+="GL_OES_packed_depth_stencil ";
|
||||||
|
if (s_glSupport.GL_ARB_HALF_FLOAT_VERTEX)
|
||||||
|
*s_glExtensions+="GL_OES_vertex_half_float ";
|
||||||
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ public:
|
|||||||
void convertArrs(GLESFloatArrays& fArrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices,bool direct);
|
void convertArrs(GLESFloatArrays& fArrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices,bool direct);
|
||||||
private:
|
private:
|
||||||
void sendArr(GLvoid* arr,GLenum arrayType,GLint size,GLsizei stride,int pointsIndex = -1);
|
void sendArr(GLvoid* arr,GLenum arrayType,GLint size,GLsizei stride,int pointsIndex = -1);
|
||||||
|
void initExtensionString();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#define GL_APICALL __declspec(dllexport)
|
#define GL_APICALL __declspec(dllexport)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define GL_GLEXT_PROTOTYPES
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <GLES2/gl2.h>
|
#include <GLES2/gl2.h>
|
||||||
#include <GLES2/gl2ext.h>
|
#include <GLES2/gl2ext.h>
|
||||||
@@ -38,6 +39,12 @@ static __translatorMustCastToProperFunctionPointerType getProcAddress(const char
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/************************************** GLES EXTENSIONS *********************************************************/
|
||||||
|
//extentions descriptor
|
||||||
|
typedef std::map<std::string, __translatorMustCastToProperFunctionPointerType> ProcTableMap;
|
||||||
|
ProcTableMap *s_glesExtensions = NULL;
|
||||||
|
/****************************************************************************************************************/
|
||||||
|
|
||||||
static EGLiface* s_eglIface = NULL;
|
static EGLiface* s_eglIface = NULL;
|
||||||
static GLESiface s_glesIface = {
|
static GLESiface s_glesIface = {
|
||||||
createGLESContext:createGLESContext,
|
createGLESContext:createGLESContext,
|
||||||
@@ -71,7 +78,25 @@ static void setShareGroup(GLEScontext* ctx,ShareGroupPtr grp) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static __translatorMustCastToProperFunctionPointerType getProcAddress(const char* procName) {
|
static __translatorMustCastToProperFunctionPointerType getProcAddress(const char* procName) {
|
||||||
return NULL;
|
GET_CTX_RET(NULL)
|
||||||
|
ctx->getGlobalLock();
|
||||||
|
static bool proc_table_initialized = false;
|
||||||
|
if (!proc_table_initialized) {
|
||||||
|
proc_table_initialized = true;
|
||||||
|
if (!s_glesExtensions)
|
||||||
|
s_glesExtensions = new ProcTableMap();
|
||||||
|
else
|
||||||
|
s_glesExtensions->clear();
|
||||||
|
(*s_glesExtensions)["glEGLImageTargetTexture2DOES"] = (__translatorMustCastToProperFunctionPointerType)glEGLImageTargetTexture2DOES;
|
||||||
|
(*s_glesExtensions)["glEGLImageTargetRenderbufferStorageOES"]=(__translatorMustCastToProperFunctionPointerType)glEGLImageTargetRenderbufferStorageOES;
|
||||||
|
}
|
||||||
|
__translatorMustCastToProperFunctionPointerType ret=NULL;
|
||||||
|
ProcTableMap::iterator val = s_glesExtensions->find(procName);
|
||||||
|
if (val!=s_glesExtensions->end())
|
||||||
|
ret = val->second;
|
||||||
|
ctx->releaseGlobalLock();
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
GL_APICALL GLESiface* __translator_getIfaces(EGLiface* eglIface){
|
GL_APICALL GLESiface* __translator_getIfaces(EGLiface* eglIface){
|
||||||
@@ -808,7 +833,7 @@ GL_APICALL void GL_APIENTRY glGetVertexAttribiv(GLuint index, GLenum pname, GLi
|
|||||||
GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer){
|
GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer){
|
||||||
GET_CTX();
|
GET_CTX();
|
||||||
SET_ERROR_IF(pname != GL_VERTEX_ATTRIB_ARRAY_POINTER,GL_INVALID_ENUM);
|
SET_ERROR_IF(pname != GL_VERTEX_ATTRIB_ARRAY_POINTER,GL_INVALID_ENUM);
|
||||||
|
|
||||||
const GLESpointer* p = ctx->getPointer(pname);
|
const GLESpointer* p = ctx->getPointer(pname);
|
||||||
if(p) {
|
if(p) {
|
||||||
*pointer = const_cast<void *>( p->getBufferData());
|
*pointer = const_cast<void *>( p->getBufferData());
|
||||||
@@ -1011,6 +1036,8 @@ GL_APICALL void GL_APIENTRY glTexImage2D(GLenum target, GLint level, GLint inte
|
|||||||
texData->internalFormat = internalformat;
|
texData->internalFormat = internalformat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (type==GL_HALF_FLOAT_OES)
|
||||||
|
type = GL_HALF_FLOAT_NV;
|
||||||
ctx->dispatcher().glTexImage2D(target,level,internalformat,width,height,border,format,type,pixels);
|
ctx->dispatcher().glTexImage2D(target,level,internalformat,width,height,border,format,type,pixels);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1042,6 +1069,8 @@ GL_APICALL void GL_APIENTRY glTexSubImage2D(GLenum target, GLint level, GLint x
|
|||||||
GLESv2Validate::pixelFrmt(ctx,format)&&
|
GLESv2Validate::pixelFrmt(ctx,format)&&
|
||||||
GLESv2Validate::pixelType(ctx,type)),GL_INVALID_ENUM);
|
GLESv2Validate::pixelType(ctx,type)),GL_INVALID_ENUM);
|
||||||
SET_ERROR_IF(!GLESv2Validate::pixelOp(format,type),GL_INVALID_OPERATION);
|
SET_ERROR_IF(!GLESv2Validate::pixelOp(format,type),GL_INVALID_OPERATION);
|
||||||
|
if (type==GL_HALF_FLOAT_OES)
|
||||||
|
type = GL_HALF_FLOAT_NV;
|
||||||
|
|
||||||
ctx->dispatcher().glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels);
|
ctx->dispatcher().glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels);
|
||||||
|
|
||||||
@@ -1194,6 +1223,8 @@ GL_APICALL void GL_APIENTRY glVertexAttrib4fv(GLuint indx, const GLfloat* value
|
|||||||
|
|
||||||
GL_APICALL void GL_APIENTRY glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr){
|
GL_APICALL void GL_APIENTRY glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr){
|
||||||
GET_CTX();
|
GET_CTX();
|
||||||
|
if (type==GL_HALF_FLOAT_OES)
|
||||||
|
type = GL_HALF_FLOAT;
|
||||||
const GLvoid* data = ctx->setPointer(indx,size,type,stride,ptr);
|
const GLvoid* data = ctx->setPointer(indx,size,type,stride,ptr);
|
||||||
if(type != GL_FIXED) ctx->dispatcher().glVertexAttribPointer(indx,size,type,normalized,stride,ptr);
|
if(type != GL_FIXED) ctx->dispatcher().glVertexAttribPointer(indx,size,type,normalized,stride,ptr);
|
||||||
}
|
}
|
||||||
@@ -1202,3 +1233,37 @@ GL_APICALL void GL_APIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei
|
|||||||
GET_CTX();
|
GET_CTX();
|
||||||
ctx->dispatcher().glViewport(x,y,width,height);
|
ctx->dispatcher().glViewport(x,y,width,height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
|
||||||
|
{
|
||||||
|
GET_CTX();
|
||||||
|
SET_ERROR_IF(!GLESv2Validate::textureTargetLimited(target),GL_INVALID_ENUM);
|
||||||
|
EglImage *img = s_eglIface->eglAttachEGLImage((unsigned int)image);
|
||||||
|
if (img) {
|
||||||
|
// Create the texture object in the underlying EGL implementation,
|
||||||
|
// flag to the OpenGL layer to skip the image creation and map the
|
||||||
|
// current binded texture object to the existing global object.
|
||||||
|
if (thrd->shareGroup.Ptr()) {
|
||||||
|
unsigned int tex = ctx->getBindedTexture();
|
||||||
|
unsigned int oldGlobal = thrd->shareGroup->getGlobalName(TEXTURE, tex);
|
||||||
|
// Delete old texture object
|
||||||
|
if (oldGlobal) {
|
||||||
|
ctx->dispatcher().glDeleteTextures(1, &oldGlobal);
|
||||||
|
}
|
||||||
|
// replace mapping and bind the new global object
|
||||||
|
thrd->shareGroup->replaceGlobalName(TEXTURE, tex,img->globalTexName);
|
||||||
|
ctx->dispatcher().glBindTexture(GL_TEXTURE_2D, img->globalTexName);
|
||||||
|
TextureData *texData = getTextureData();
|
||||||
|
SET_ERROR_IF(texData==NULL,GL_INVALID_OPERATION);
|
||||||
|
texData->sourceEGLImage = (unsigned int)image;
|
||||||
|
texData->eglImageDetach = s_eglIface->eglDetachEGLImage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
|
||||||
|
{
|
||||||
|
GET_CTX()
|
||||||
|
//not supported by EGL
|
||||||
|
SET_ERROR_IF(false,GL_INVALID_OPERATION);
|
||||||
|
}
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ bool GLESv2Validate::hintTargetMode(GLenum target,GLenum mode){
|
|||||||
break;
|
break;
|
||||||
default: return false;
|
default: return false;
|
||||||
}
|
}
|
||||||
return target == GL_GENERATE_MIPMAP_HINT;
|
return target == GL_GENERATE_MIPMAP_HINT || target == GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GLESv2Validate::capability(GLenum cap){
|
bool GLESv2Validate::capability(GLenum cap){
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <GLES2/gl2.h>
|
#include <GLES2/gl2.h>
|
||||||
|
#include <GLES2/gl2ext.h>
|
||||||
#include <GLcommon/GLESvalidate.h>
|
#include <GLcommon/GLESvalidate.h>
|
||||||
|
|
||||||
struct GLESv2Validate:public GLESvalidate{
|
struct GLESv2Validate:public GLESvalidate{
|
||||||
|
|||||||
@@ -397,6 +397,15 @@ void GLEScontext::initCapsLocked(const GLubyte * extensionString)
|
|||||||
if (strstr(cstring,"GL_OES_read_format ")!=NULL)
|
if (strstr(cstring,"GL_OES_read_format ")!=NULL)
|
||||||
s_glSupport.GL_OES_READ_FORMAT = true;
|
s_glSupport.GL_OES_READ_FORMAT = true;
|
||||||
|
|
||||||
|
if (strstr(cstring,"GL_ARB_half_float_pixel ")!=NULL)
|
||||||
|
s_glSupport.GL_ARB_HALF_FLOAT_PIXEL = true;
|
||||||
|
|
||||||
|
if (strstr(cstring,"GL_NV_half_float ")!=NULL)
|
||||||
|
s_glSupport.GL_NV_HALF_FLOAT = true;
|
||||||
|
|
||||||
|
if (strstr(cstring,"GL_ARB_half_float_vertex ")!=NULL)
|
||||||
|
s_glSupport.GL_ARB_HALF_FLOAT_VERTEX = true;
|
||||||
|
|
||||||
//init extension string
|
//init extension string
|
||||||
s_glExtensions = new std::string("");
|
s_glExtensions = new std::string("");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
#include<GLcommon/GLESvalidate.h>
|
#include<GLcommon/GLESvalidate.h>
|
||||||
#include<GLES/gl.h>
|
#include<GLES/gl.h>
|
||||||
#include<GLES/glext.h>
|
#include<GLES/glext.h>
|
||||||
|
#include<GLES2/gl2.h>
|
||||||
|
#include<GLES2/gl2ext.h>
|
||||||
|
|
||||||
|
|
||||||
bool GLESvalidate::textureEnum(GLenum e,unsigned int maxTex) {
|
bool GLESvalidate::textureEnum(GLenum e,unsigned int maxTex) {
|
||||||
@@ -8,15 +10,21 @@ bool GLESvalidate::textureEnum(GLenum e,unsigned int maxTex) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool GLESvalidate::pixelType(GLEScontext * ctx, GLenum type) {
|
bool GLESvalidate::pixelType(GLEScontext * ctx, GLenum type) {
|
||||||
if (ctx && ctx->getCaps()->GL_NV_PACKED_DEPTH_STENCIL) {
|
if ((ctx && ctx->getCaps()->GL_NV_PACKED_DEPTH_STENCIL) &&
|
||||||
if (type == GL_UNSIGNED_INT_24_8_OES)
|
(type == GL_UNSIGNED_INT_24_8_OES) )
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
|
if (ctx &&
|
||||||
|
(ctx->getCaps()->GL_ARB_HALF_FLOAT_PIXEL || ctx->getCaps()->GL_NV_HALF_FLOAT) &&
|
||||||
|
(type == GL_HALF_FLOAT_OES))
|
||||||
|
return true;
|
||||||
|
|
||||||
switch(type) {
|
switch(type) {
|
||||||
case GL_UNSIGNED_BYTE:
|
case GL_UNSIGNED_BYTE:
|
||||||
case GL_UNSIGNED_SHORT_5_6_5:
|
case GL_UNSIGNED_SHORT_5_6_5:
|
||||||
case GL_UNSIGNED_SHORT_4_4_4_4:
|
case GL_UNSIGNED_SHORT_4_4_4_4:
|
||||||
case GL_UNSIGNED_SHORT_5_5_5_1:
|
case GL_UNSIGNED_SHORT_5_5_5_1:
|
||||||
|
case GL_FLOAT:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -26,7 +26,9 @@ struct GLSupport {
|
|||||||
GLSupport():maxLights(0),maxVertexAttribs(0),maxClipPlane(0),maxTexUnits(0),maxTexSize(0) , \
|
GLSupport():maxLights(0),maxVertexAttribs(0),maxClipPlane(0),maxTexUnits(0),maxTexSize(0) , \
|
||||||
GL_EXT_TEXTURE_FORMAT_BGRA8888(false), GL_EXT_FRAMEBUFFER_OBJECT(false), \
|
GL_EXT_TEXTURE_FORMAT_BGRA8888(false), GL_EXT_FRAMEBUFFER_OBJECT(false), \
|
||||||
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_VERTEX(false) {} ;
|
||||||
int maxLights;
|
int maxLights;
|
||||||
int maxVertexAttribs;
|
int maxVertexAttribs;
|
||||||
int maxClipPlane;
|
int maxClipPlane;
|
||||||
@@ -38,6 +40,10 @@ struct GLSupport {
|
|||||||
bool GL_ARB_MATRIX_PALETTE;
|
bool GL_ARB_MATRIX_PALETTE;
|
||||||
bool GL_NV_PACKED_DEPTH_STENCIL;
|
bool GL_NV_PACKED_DEPTH_STENCIL;
|
||||||
bool GL_OES_READ_FORMAT;
|
bool GL_OES_READ_FORMAT;
|
||||||
|
bool GL_ARB_HALF_FLOAT_PIXEL;
|
||||||
|
bool GL_NV_HALF_FLOAT;
|
||||||
|
bool GL_ARB_HALF_FLOAT_VERTEX;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GLESFloatArrays
|
struct GLESFloatArrays
|
||||||
|
|||||||
@@ -23,3 +23,5 @@ typedef double GLdouble; /* double precision float */
|
|||||||
#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002
|
#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002
|
||||||
#define GL_TRANSFORM_BIT 0x00001000
|
#define GL_TRANSFORM_BIT 0x00001000
|
||||||
#define GL_INT 0x1404
|
#define GL_INT 0x1404
|
||||||
|
#define GL_HALF_FLOAT_NV 0x140B
|
||||||
|
#define GL_HALF_FLOAT 0x140B
|
||||||
|
|||||||
@@ -169,6 +169,7 @@ size_t glUtilsParamSize(GLenum param)
|
|||||||
case GL_TEXTURE_2D:
|
case GL_TEXTURE_2D:
|
||||||
case GL_TEXTURE_BINDING_2D:
|
case GL_TEXTURE_BINDING_2D:
|
||||||
case GL_TEXTURE_BINDING_CUBE_MAP:
|
case GL_TEXTURE_BINDING_CUBE_MAP:
|
||||||
|
case GL_TEXTURE_BINDING_EXTERNAL_OES:
|
||||||
case GL_TEXTURE_COORD_ARRAY:
|
case GL_TEXTURE_COORD_ARRAY:
|
||||||
case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
|
case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
|
||||||
case GL_TEXTURE_COORD_ARRAY_SIZE:
|
case GL_TEXTURE_COORD_ARRAY_SIZE:
|
||||||
@@ -244,6 +245,8 @@ size_t glUtilsParamSize(GLenum param)
|
|||||||
case GL_MAX_FRAGMENT_UNIFORM_VECTORS:
|
case GL_MAX_FRAGMENT_UNIFORM_VECTORS:
|
||||||
case GL_MAX_RENDERBUFFER_SIZE:
|
case GL_MAX_RENDERBUFFER_SIZE:
|
||||||
case GL_MAX_TEXTURE_IMAGE_UNITS:
|
case GL_MAX_TEXTURE_IMAGE_UNITS:
|
||||||
|
case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:
|
||||||
|
case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
|
||||||
s = 1;
|
s = 1;
|
||||||
break;
|
break;
|
||||||
case GL_ALIASED_LINE_WIDTH_RANGE:
|
case GL_ALIASED_LINE_WIDTH_RANGE:
|
||||||
|
|||||||
Reference in New Issue
Block a user