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