* commit 'cd3a69d183434b3b0dfcef99ecc1a741d28a2cea': Translator 1.1 conformance: fix ARRAY related gets
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
#include "GLEScmContext.h"
|
||||
#include "GLEScmUtils.h"
|
||||
#include <GLcommon/GLutils.h>
|
||||
#include <GLcommon/GLconversion_macros.h>
|
||||
#include <string.h>
|
||||
#include <GLES/gl.h>
|
||||
#include <GLES/glext.h>
|
||||
@@ -285,3 +286,114 @@ void GLEScmContext::initExtensionString() {
|
||||
int GLEScmContext::getMaxTexUnits() {
|
||||
return getCaps()->maxTexUnits;
|
||||
}
|
||||
|
||||
bool GLEScmContext::glGetBooleanv(GLenum pname, GLboolean *params)
|
||||
{
|
||||
GLint iParam;
|
||||
|
||||
if(glGetIntegerv(pname, &iParam))
|
||||
{
|
||||
*params = (iParam != 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GLEScmContext::glGetFixedv(GLenum pname, GLfixed *params)
|
||||
{
|
||||
GLint iParam;
|
||||
|
||||
if(glGetIntegerv(pname, &iParam))
|
||||
{
|
||||
*params = I2X(iParam);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GLEScmContext::glGetFloatv(GLenum pname, GLfloat *params)
|
||||
{
|
||||
GLint iParam;
|
||||
|
||||
if(glGetIntegerv(pname, &iParam))
|
||||
{
|
||||
*params = (GLfloat)iParam;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GLEScmContext::glGetIntegerv(GLenum pname, GLint *params)
|
||||
{
|
||||
if(GLEScontext::glGetIntegerv(pname, params))
|
||||
return true;
|
||||
|
||||
const GLESpointer* ptr = NULL;
|
||||
|
||||
switch(pname){
|
||||
case GL_VERTEX_ARRAY_BUFFER_BINDING:
|
||||
case GL_VERTEX_ARRAY_SIZE:
|
||||
case GL_VERTEX_ARRAY_STRIDE:
|
||||
case GL_VERTEX_ARRAY_TYPE:
|
||||
ptr = getPointer(GL_VERTEX_ARRAY_POINTER);
|
||||
break;
|
||||
|
||||
case GL_NORMAL_ARRAY_BUFFER_BINDING:
|
||||
case GL_NORMAL_ARRAY_STRIDE:
|
||||
case GL_NORMAL_ARRAY_TYPE:
|
||||
ptr = getPointer(GL_NORMAL_ARRAY_POINTER);
|
||||
break;
|
||||
|
||||
case GL_COLOR_ARRAY_BUFFER_BINDING:
|
||||
case GL_COLOR_ARRAY_SIZE:
|
||||
case GL_COLOR_ARRAY_STRIDE:
|
||||
case GL_COLOR_ARRAY_TYPE:
|
||||
ptr = getPointer(GL_COLOR_ARRAY_POINTER);
|
||||
break;
|
||||
|
||||
case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
|
||||
case GL_TEXTURE_COORD_ARRAY_SIZE:
|
||||
case GL_TEXTURE_COORD_ARRAY_STRIDE:
|
||||
case GL_TEXTURE_COORD_ARRAY_TYPE:
|
||||
ptr = getPointer(GL_TEXTURE_COORD_ARRAY_POINTER);
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
switch(pname)
|
||||
{
|
||||
case GL_VERTEX_ARRAY_BUFFER_BINDING:
|
||||
case GL_NORMAL_ARRAY_BUFFER_BINDING:
|
||||
case GL_COLOR_ARRAY_BUFFER_BINDING:
|
||||
case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
|
||||
*params = ptr ? ptr->getBufferName() : 0;
|
||||
break;
|
||||
|
||||
case GL_VERTEX_ARRAY_STRIDE:
|
||||
case GL_NORMAL_ARRAY_STRIDE:
|
||||
case GL_COLOR_ARRAY_STRIDE:
|
||||
case GL_TEXTURE_COORD_ARRAY_STRIDE:
|
||||
*params = ptr ? ptr->getStride() : 0;
|
||||
break;
|
||||
|
||||
case GL_VERTEX_ARRAY_SIZE:
|
||||
case GL_COLOR_ARRAY_SIZE:
|
||||
case GL_TEXTURE_COORD_ARRAY_SIZE:
|
||||
*params = ptr ? ptr->getSize() : 0;
|
||||
break;
|
||||
|
||||
case GL_VERTEX_ARRAY_TYPE:
|
||||
case GL_NORMAL_ARRAY_TYPE:
|
||||
case GL_COLOR_ARRAY_TYPE:
|
||||
case GL_TEXTURE_COORD_ARRAY_TYPE:
|
||||
*params = ptr ? ptr->getType() : 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -44,6 +44,11 @@ public:
|
||||
virtual const GLESpointer* getPointer(GLenum arrType);
|
||||
int getMaxTexUnits();
|
||||
|
||||
virtual bool glGetIntegerv(GLenum pname, GLint *params);
|
||||
virtual bool glGetBooleanv(GLenum pname, GLboolean *params);
|
||||
virtual bool glGetFloatv(GLenum pname, GLfloat *params);
|
||||
virtual bool glGetFixedv(GLenum pname, GLfixed *params);
|
||||
|
||||
~GLEScmContext();
|
||||
protected:
|
||||
|
||||
|
||||
@@ -662,6 +662,11 @@ GL_API void GL_APIENTRY glGenTextures( GLsizei n, GLuint *textures) {
|
||||
GL_API void GL_APIENTRY glGetBooleanv( GLenum pname, GLboolean *params) {
|
||||
GET_CTX()
|
||||
|
||||
if(ctx->glGetBooleanv(pname, params))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
GLint i;
|
||||
|
||||
switch(pname)
|
||||
@@ -734,6 +739,11 @@ GL_API void GL_APIENTRY glGetClipPlanex( GLenum pname, GLfixed eqn[4]) {
|
||||
GL_API void GL_APIENTRY glGetFixedv( GLenum pname, GLfixed *params) {
|
||||
GET_CTX()
|
||||
|
||||
if(ctx->glGetFixedv(pname, params))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
size_t nParams = glParamSize(pname);
|
||||
GLfloat fParams[16];
|
||||
GLint i;
|
||||
@@ -782,6 +792,11 @@ GL_API void GL_APIENTRY glGetFixedv( GLenum pname, GLfixed *params) {
|
||||
GL_API void GL_APIENTRY glGetFloatv( GLenum pname, GLfloat *params) {
|
||||
GET_CTX()
|
||||
|
||||
if(ctx->glGetFloatv(pname, params))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
GLint i;
|
||||
|
||||
switch(pname)
|
||||
@@ -819,6 +834,12 @@ GL_API void GL_APIENTRY glGetFloatv( GLenum pname, GLfloat *params) {
|
||||
|
||||
GL_API void GL_APIENTRY glGetIntegerv( GLenum pname, GLint *params) {
|
||||
GET_CTX()
|
||||
|
||||
if(ctx->glGetIntegerv(pname, params))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch(pname)
|
||||
{
|
||||
case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
|
||||
@@ -912,7 +933,12 @@ GL_API void GL_APIENTRY glGetPointerv( GLenum pname, void **params) {
|
||||
GET_CTX()
|
||||
const GLESpointer* p = ctx->getPointer(pname);
|
||||
if(p) {
|
||||
if(p->isVBO())
|
||||
{
|
||||
*params = (void*)(p->getBufferOffset());
|
||||
}else{
|
||||
*params = const_cast<void *>( p->getArrayData());
|
||||
}
|
||||
} else {
|
||||
ctx->setGLerror(GL_INVALID_ENUM);
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@ const GLvoid* GLEScontext::setPointer(GLenum arrType,GLint size,GLenum type,GLsi
|
||||
if(bufferName) {
|
||||
unsigned int offset = reinterpret_cast<unsigned int>(data);
|
||||
GLESbuffer* vbo = static_cast<GLESbuffer*>(m_shareGroup->getObjectData(VERTEXBUFFER,bufferName).Ptr());
|
||||
m_map[arrType]->setBuffer(size,type,stride,vbo,offset,normalize);
|
||||
m_map[arrType]->setBuffer(size,type,stride,vbo,bufferName,offset,normalize);
|
||||
return static_cast<const unsigned char*>(vbo->getData()) + offset;
|
||||
}
|
||||
m_map[arrType]->setArray(size,type,stride,data,normalize);
|
||||
@@ -514,3 +514,60 @@ bool GLEScontext::isTextureUnitEnabled(GLenum unit) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GLEScontext::glGetBooleanv(GLenum pname, GLboolean *params)
|
||||
{
|
||||
GLint iParam;
|
||||
|
||||
if(glGetIntegerv(pname, &iParam))
|
||||
{
|
||||
*params = (iParam != 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GLEScontext::glGetFixedv(GLenum pname, GLfixed *params)
|
||||
{
|
||||
GLint iParam;
|
||||
|
||||
if(glGetIntegerv(pname, &iParam))
|
||||
{
|
||||
*params = I2X(iParam);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GLEScontext::glGetFloatv(GLenum pname, GLfloat *params)
|
||||
{
|
||||
GLint iParam;
|
||||
|
||||
if(glGetIntegerv(pname, &iParam))
|
||||
{
|
||||
*params = (GLfloat)iParam;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GLEScontext::glGetIntegerv(GLenum pname, GLint *params)
|
||||
{
|
||||
switch(pname)
|
||||
{
|
||||
case GL_ARRAY_BUFFER_BINDING:
|
||||
*params = m_arrayBuffer;
|
||||
break;
|
||||
|
||||
case GL_ELEMENT_ARRAY_BUFFER_BINDING:
|
||||
*params = m_elementBuffer;
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ GLESpointer::GLESpointer():m_size(0),
|
||||
m_normalize(false),
|
||||
m_data(NULL),
|
||||
m_buffer(NULL),
|
||||
m_bufferName(0),
|
||||
m_buffOffset(0),
|
||||
m_isVBO(false){};
|
||||
|
||||
@@ -55,6 +56,10 @@ void GLESpointer::redirectPointerData(){
|
||||
m_data = getBufferData();
|
||||
}
|
||||
|
||||
GLuint GLESpointer::getBufferName() const {
|
||||
return m_bufferName;
|
||||
}
|
||||
|
||||
unsigned int GLESpointer::getBufferOffset() const {
|
||||
|
||||
return m_buffOffset;
|
||||
@@ -82,16 +87,18 @@ void GLESpointer::setArray(GLint size,GLenum type,GLsizei stride,const GLvoid* d
|
||||
m_stride = stride;
|
||||
m_data = data;
|
||||
m_buffer = NULL;
|
||||
m_bufferName = 0;
|
||||
m_normalize = normalize;
|
||||
m_isVBO = false;
|
||||
}
|
||||
|
||||
void GLESpointer::setBuffer(GLint size,GLenum type,GLsizei stride,GLESbuffer* buf,int offset,bool normalize) {
|
||||
void GLESpointer::setBuffer(GLint size,GLenum type,GLsizei stride,GLESbuffer* buf,GLuint bufferName,int offset,bool normalize) {
|
||||
m_size = size;
|
||||
m_type = type;
|
||||
m_stride = stride;
|
||||
m_data = NULL;
|
||||
m_buffer = buf;
|
||||
m_bufferName = bufferName;
|
||||
m_buffOffset = offset;
|
||||
m_normalize = normalize;
|
||||
m_isVBO = true;
|
||||
|
||||
@@ -134,6 +134,10 @@ public:
|
||||
static int getMaxTexSize(){return s_glSupport.maxTexSize;}
|
||||
static Version glslVersion(){return s_glSupport.glslVersion;}
|
||||
|
||||
virtual bool glGetIntegerv(GLenum pname, GLint *params);
|
||||
virtual bool glGetBooleanv(GLenum pname, GLboolean *params);
|
||||
virtual bool glGetFloatv(GLenum pname, GLfloat *params);
|
||||
virtual bool glGetFixedv(GLenum pname, GLfixed *params);
|
||||
|
||||
protected:
|
||||
virtual bool needConvert(GLESConversionArrays& fArrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices,bool direct,GLESpointer* p,GLenum array_id) = 0;
|
||||
|
||||
@@ -29,13 +29,14 @@ public:
|
||||
GLsizei getStride() const;
|
||||
const GLvoid* getArrayData() const;
|
||||
GLvoid* getBufferData() const;
|
||||
GLuint getBufferName() const;
|
||||
const GLvoid* getData() const;
|
||||
unsigned int getBufferOffset() const;
|
||||
void redirectPointerData();
|
||||
void getBufferConversions(const RangeList& rl,RangeList& rlOut);
|
||||
bool bufferNeedConversion(){ return !m_buffer->fullyConverted();}
|
||||
void setArray (GLint size,GLenum type,GLsizei stride,const GLvoid* data,bool normalize = false);
|
||||
void setBuffer(GLint size,GLenum type,GLsizei stride,GLESbuffer* buf,int offset,bool normalize = false);
|
||||
void setBuffer(GLint size,GLenum type,GLsizei stride,GLESbuffer* buf,GLuint bufferName,int offset,bool normalize = false);
|
||||
bool isEnable() const;
|
||||
bool isNormalize() const;
|
||||
bool isVBO() const;
|
||||
@@ -49,6 +50,7 @@ private:
|
||||
bool m_normalize;
|
||||
const GLvoid* m_data;
|
||||
GLESbuffer* m_buffer;
|
||||
GLuint m_bufferName;
|
||||
unsigned int m_buffOffset;
|
||||
bool m_isVBO;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user