opengl translator: fixed normalized vertex attribs

That fixes the alpha and GUI components artifacts in Cordy.
The translator has ignored the 'normalized' argument of
glVertexAttribPointer function in GLESv2.
We now use the supplied value when applying the vertex attributes
to the backend OpenGL so that non-float color vertex attributes
are now normalized.

Change-Id: Idffda33225748276144ed70d2dcf4da17219d1d2
This commit is contained in:
Guy Zadickario
2011-07-04 22:30:58 +03:00
parent ee85667135
commit 3db2bcf7e5
6 changed files with 12 additions and 10 deletions

View File

@@ -63,7 +63,7 @@ GLEScmContext::~GLEScmContext(){
//setting client side arr //setting client side arr
void GLEScmContext::setupArr(const GLvoid* arr,GLenum arrayType,GLenum dataType,GLint size,GLsizei stride,int index){ void GLEScmContext::setupArr(const GLvoid* arr,GLenum arrayType,GLenum dataType,GLint size,GLsizei stride,GLboolean normalized, int index){
if( arr == NULL) return; if( arr == NULL) return;
switch(arrayType) { switch(arrayType) {
case GL_VERTEX_ARRAY: case GL_VERTEX_ARRAY:
@@ -92,10 +92,10 @@ void GLEScmContext::setupArrayPointerHelper(GLESConversionArrays& cArrs,GLint fi
if(needConvert(cArrs,first,count,type,indices,direct,p,array_id)){ if(needConvert(cArrs,first,count,type,indices,direct,p,array_id)){
//conversion has occured //conversion has occured
ArrayData currentArr = cArrs.getCurrentArray(); ArrayData currentArr = cArrs.getCurrentArray();
setupArr(currentArr.data,array_id,currentArr.type,size,currentArr.stride,cArrs.getCurrentIndex()); setupArr(currentArr.data,array_id,currentArr.type,size,currentArr.stride,GL_FALSE, cArrs.getCurrentIndex());
++cArrs; ++cArrs;
} else { } else {
setupArr(p->getData(),array_id,dataType,size,p->getStride()); setupArr(p->getData(),array_id,dataType,size,p->getStride(), GL_FALSE);
} }
} }

View File

@@ -55,7 +55,7 @@ protected:
bool needConvert(GLESConversionArrays& fArrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices,bool direct,GLESpointer* p,GLenum array_id); bool needConvert(GLESConversionArrays& fArrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices,bool direct,GLESpointer* p,GLenum array_id);
private: private:
void setupArrayPointerHelper(GLESConversionArrays& fArrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices,bool direct,GLenum array_id,GLESpointer* p); void setupArrayPointerHelper(GLESConversionArrays& fArrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices,bool direct,GLenum array_id,GLESpointer* p);
void setupArr(const GLvoid* arr,GLenum arrayType,GLenum dataType,GLint size,GLsizei stride,int pointsIndex = -1); void setupArr(const GLvoid* arr,GLenum arrayType,GLenum dataType,GLint size,GLsizei stride,GLboolean normalized, int pointsIndex = -1);
void drawPoints(PointSizeIndices* points); void drawPoints(PointSizeIndices* points);
void drawPointsData(GLESConversionArrays& arrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices_in,bool isElemsDraw); void drawPointsData(GLESConversionArrays& arrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices_in,bool isElemsDraw);
void initExtensionString(); void initExtensionString();

View File

@@ -46,18 +46,19 @@ void GLESv2Context::setupArraysPointers(GLESConversionArrays& cArrs,GLint first,
if(needConvert(cArrs,first,count,type,indices,direct,p,array_id)){ if(needConvert(cArrs,first,count,type,indices,direct,p,array_id)){
//conversion has occured //conversion has occured
ArrayData currentArr = cArrs.getCurrentArray(); ArrayData currentArr = cArrs.getCurrentArray();
setupArr(currentArr.data,array_id,currentArr.type,size,currentArr.stride); setupArr(currentArr.data,array_id,currentArr.type,size,currentArr.stride, p->getNormalized());
++cArrs; ++cArrs;
} else { } else {
setupArr(p->getData(),array_id,p->getType(),size,p->getStride()); setupArr(p->getData(),array_id,p->getType(),
size,p->getStride(), p->getNormalized());
} }
} }
} }
//setting client side arr //setting client side arr
void GLESv2Context::setupArr(const GLvoid* arr,GLenum arrayType,GLenum dataType,GLint size,GLsizei stride,int index){ void GLESv2Context::setupArr(const GLvoid* arr,GLenum arrayType,GLenum dataType,GLint size,GLsizei stride,GLboolean normalized, int index){
if(arr == NULL) return; if(arr == NULL) return;
s_glDispatch.glVertexAttribPointer(arrayType,size,dataType,GL_FALSE,stride,arr); s_glDispatch.glVertexAttribPointer(arrayType,size,dataType,normalized,stride,arr);
} }
bool GLESv2Context::needConvert(GLESConversionArrays& cArrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices,bool direct,GLESpointer* p,GLenum array_id) { bool GLESv2Context::needConvert(GLESConversionArrays& cArrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices,bool direct,GLESpointer* p,GLenum array_id) {

View File

@@ -33,7 +33,7 @@ public:
protected: protected:
bool needConvert(GLESConversionArrays& fArrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices,bool direct,GLESpointer* p,GLenum array_id); bool needConvert(GLESConversionArrays& fArrs,GLint first,GLsizei count,GLenum type,const GLvoid* indices,bool direct,GLESpointer* p,GLenum array_id);
private: private:
void setupArr(const GLvoid* arr,GLenum arrayType,GLenum dataType,GLint size,GLsizei stride,int pointsIndex = -1); void setupArr(const GLvoid* arr,GLenum arrayType,GLenum dataType,GLint size,GLsizei stride,GLboolean normalized, int pointsIndex = -1);
void initExtensionString(); void initExtensionString();
}; };

View File

@@ -159,7 +159,7 @@ protected:
private: private:
virtual void setupArr(const GLvoid* arr,GLenum arrayType,GLenum dataType,GLint size,GLsizei stride,int pointsIndex = -1) = 0 ; virtual void setupArr(const GLvoid* arr,GLenum arrayType,GLenum dataType,GLint size,GLsizei stride, GLboolean normalized, int pointsIndex = -1) = 0 ;
GLuint getBuffer(GLenum target); GLuint getBuffer(GLenum target);
ShareGroupPtr m_shareGroup; ShareGroupPtr m_shareGroup;

View File

@@ -30,6 +30,7 @@ public:
const GLvoid* getArrayData() const; const GLvoid* getArrayData() const;
GLvoid* getBufferData() const; GLvoid* getBufferData() const;
GLuint getBufferName() const; GLuint getBufferName() const;
GLboolean getNormalized() const { return m_normalize ? GL_TRUE : GL_FALSE; }
const GLvoid* getData() const; const GLvoid* getData() const;
unsigned int getBufferOffset() const; unsigned int getBufferOffset() const;
void redirectPointerData(); void redirectPointerData();