am e5dfc068: Merge "Translator 1.1 conformance: fix ARRAY related gets"

* commit 'e5dfc068196e4bcda43a8f0a157beaaa51405a99':
  Translator 1.1 conformance: fix ARRAY related gets
This commit is contained in:
David Turner
2011-07-06 07:29:32 -07:00
committed by Android Git Automerger
7 changed files with 217 additions and 4 deletions

View File

@@ -17,6 +17,7 @@
#include "GLEScmContext.h" #include "GLEScmContext.h"
#include "GLEScmUtils.h" #include "GLEScmUtils.h"
#include <GLcommon/GLutils.h> #include <GLcommon/GLutils.h>
#include <GLcommon/GLconversion_macros.h>
#include <string.h> #include <string.h>
#include <GLES/gl.h> #include <GLES/gl.h>
#include <GLES/glext.h> #include <GLES/glext.h>
@@ -285,3 +286,114 @@ void GLEScmContext::initExtensionString() {
int GLEScmContext::getMaxTexUnits() { int GLEScmContext::getMaxTexUnits() {
return getCaps()->maxTexUnits; 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;
}

View File

@@ -44,6 +44,11 @@ public:
virtual const GLESpointer* getPointer(GLenum arrType); virtual const GLESpointer* getPointer(GLenum arrType);
int getMaxTexUnits(); 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(); ~GLEScmContext();
protected: protected:

View File

@@ -662,6 +662,11 @@ GL_API void GL_APIENTRY glGenTextures( GLsizei n, GLuint *textures) {
GL_API void GL_APIENTRY glGetBooleanv( GLenum pname, GLboolean *params) { GL_API void GL_APIENTRY glGetBooleanv( GLenum pname, GLboolean *params) {
GET_CTX() GET_CTX()
if(ctx->glGetBooleanv(pname, params))
{
return;
}
GLint i; GLint i;
switch(pname) 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) { GL_API void GL_APIENTRY glGetFixedv( GLenum pname, GLfixed *params) {
GET_CTX() GET_CTX()
if(ctx->glGetFixedv(pname, params))
{
return;
}
size_t nParams = glParamSize(pname); size_t nParams = glParamSize(pname);
GLfloat fParams[16]; GLfloat fParams[16];
GLint i; 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) { GL_API void GL_APIENTRY glGetFloatv( GLenum pname, GLfloat *params) {
GET_CTX() GET_CTX()
if(ctx->glGetFloatv(pname, params))
{
return;
}
GLint i; GLint i;
switch(pname) 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) { GL_API void GL_APIENTRY glGetIntegerv( GLenum pname, GLint *params) {
GET_CTX() GET_CTX()
if(ctx->glGetIntegerv(pname, params))
{
return;
}
switch(pname) switch(pname)
{ {
case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
@@ -912,7 +933,12 @@ GL_API void GL_APIENTRY glGetPointerv( GLenum pname, void **params) {
GET_CTX() GET_CTX()
const GLESpointer* p = ctx->getPointer(pname); const GLESpointer* p = ctx->getPointer(pname);
if(p) { if(p) {
*params = const_cast<void *>( p->getArrayData()); if(p->isVBO())
{
*params = (void*)(p->getBufferOffset());
}else{
*params = const_cast<void *>( p->getArrayData());
}
} else { } else {
ctx->setGLerror(GL_INVALID_ENUM); ctx->setGLerror(GL_INVALID_ENUM);
} }

View File

@@ -163,7 +163,7 @@ const GLvoid* GLEScontext::setPointer(GLenum arrType,GLint size,GLenum type,GLsi
if(bufferName) { if(bufferName) {
unsigned int offset = reinterpret_cast<unsigned int>(data); unsigned int offset = reinterpret_cast<unsigned int>(data);
GLESbuffer* vbo = static_cast<GLESbuffer*>(m_shareGroup->getObjectData(VERTEXBUFFER,bufferName).Ptr()); 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; return static_cast<const unsigned char*>(vbo->getData()) + offset;
} }
m_map[arrType]->setArray(size,type,stride,data,normalize); m_map[arrType]->setArray(size,type,stride,data,normalize);
@@ -514,3 +514,60 @@ bool GLEScontext::isTextureUnitEnabled(GLenum unit) {
return false; 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;
}

View File

@@ -23,6 +23,7 @@ GLESpointer::GLESpointer():m_size(0),
m_normalize(false), m_normalize(false),
m_data(NULL), m_data(NULL),
m_buffer(NULL), m_buffer(NULL),
m_bufferName(0),
m_buffOffset(0), m_buffOffset(0),
m_isVBO(false){}; m_isVBO(false){};
@@ -55,6 +56,10 @@ void GLESpointer::redirectPointerData(){
m_data = getBufferData(); m_data = getBufferData();
} }
GLuint GLESpointer::getBufferName() const {
return m_bufferName;
}
unsigned int GLESpointer::getBufferOffset() const { unsigned int GLESpointer::getBufferOffset() const {
return m_buffOffset; return m_buffOffset;
@@ -82,16 +87,18 @@ void GLESpointer::setArray(GLint size,GLenum type,GLsizei stride,const GLvoid* d
m_stride = stride; m_stride = stride;
m_data = data; m_data = data;
m_buffer = NULL; m_buffer = NULL;
m_bufferName = 0;
m_normalize = normalize; m_normalize = normalize;
m_isVBO = false; 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_size = size;
m_type = type; m_type = type;
m_stride = stride; m_stride = stride;
m_data = NULL; m_data = NULL;
m_buffer = buf; m_buffer = buf;
m_bufferName = bufferName;
m_buffOffset = offset; m_buffOffset = offset;
m_normalize = normalize; m_normalize = normalize;
m_isVBO = true; m_isVBO = true;

View File

@@ -134,6 +134,10 @@ public:
static int getMaxTexSize(){return s_glSupport.maxTexSize;} static int getMaxTexSize(){return s_glSupport.maxTexSize;}
static Version glslVersion(){return s_glSupport.glslVersion;} 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: protected:
virtual bool needConvert(GLESConversionArrays& fArrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices,bool direct,GLESpointer* p,GLenum array_id) = 0; virtual bool needConvert(GLESConversionArrays& fArrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices,bool direct,GLESpointer* p,GLenum array_id) = 0;

View File

@@ -29,13 +29,14 @@ public:
GLsizei getStride() const; GLsizei getStride() const;
const GLvoid* getArrayData() const; const GLvoid* getArrayData() const;
GLvoid* getBufferData() const; GLvoid* getBufferData() const;
GLuint getBufferName() const;
const GLvoid* getData() const; const GLvoid* getData() const;
unsigned int getBufferOffset() const; unsigned int getBufferOffset() const;
void redirectPointerData(); void redirectPointerData();
void getBufferConversions(const RangeList& rl,RangeList& rlOut); void getBufferConversions(const RangeList& rl,RangeList& rlOut);
bool bufferNeedConversion(){ return !m_buffer->fullyConverted();} bool bufferNeedConversion(){ return !m_buffer->fullyConverted();}
void setArray (GLint size,GLenum type,GLsizei stride,const GLvoid* data,bool normalize = false); 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 isEnable() const;
bool isNormalize() const; bool isNormalize() const;
bool isVBO() const; bool isVBO() const;
@@ -49,6 +50,7 @@ private:
bool m_normalize; bool m_normalize;
const GLvoid* m_data; const GLvoid* m_data;
GLESbuffer* m_buffer; GLESbuffer* m_buffer;
GLuint m_bufferName;
unsigned int m_buffOffset; unsigned int m_buffOffset;
bool m_isVBO; bool m_isVBO;
}; };