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:
@@ -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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user