summaryrefslogtreecommitdiff
path: root/indra/llrender
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2011-08-27 00:38:53 -0500
committerDave Parks <davep@lindenlab.com>2011-08-27 00:38:53 -0500
commit7821ff23baafff4e7712a126c17c3947e7b4989e (patch)
tree06702d7c7787c5003c1d50953dd08b07a899210d /indra/llrender
parentbf0d36bf889bb913fbc2a53c5a1b9818acb11ee6 (diff)
SH-2242 Physics shape display works again, added asserts to flush out areas where state being consumed by a shader does not match state being provided by vertex buffers.
Diffstat (limited to 'indra/llrender')
-rw-r--r--indra/llrender/llrender.cpp54
-rw-r--r--indra/llrender/llvertexbuffer.cpp50
2 files changed, 63 insertions, 41 deletions
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index 03a45c35dc..ea398c61de 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -1583,15 +1583,11 @@ void LLRender::color3fv(const GLfloat* c)
void LLRender::diffuseColor3f(F32 r, F32 g, F32 b)
{
LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr;
- S32 loc = -1;
- if (shader)
- {
- loc = shader->getUniformLocation("color");
- }
+ llassert(!LLGLSLShader::sNoFixedFunction || shader != NULL);
- if (loc >= 0)
+ if (shader)
{
- shader->uniform4f(loc, r,g,b,1.f);
+ shader->uniform4f("color", r,g,b,1.f);
}
else
{
@@ -1602,15 +1598,11 @@ void LLRender::diffuseColor3f(F32 r, F32 g, F32 b)
void LLRender::diffuseColor3fv(const F32* c)
{
LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr;
- S32 loc = -1;
- if (shader)
- {
- loc = shader->getUniformLocation("color");
- }
+ llassert(!LLGLSLShader::sNoFixedFunction || shader != NULL);
- if (loc >= 0)
+ if (shader)
{
- shader->uniform4f(loc, c[0], c[1], c[2], 1.f);
+ shader->uniform4f("color", c[0], c[1], c[2], 1.f);
}
else
{
@@ -1621,35 +1613,26 @@ void LLRender::diffuseColor3fv(const F32* c)
void LLRender::diffuseColor4f(F32 r, F32 g, F32 b, F32 a)
{
LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr;
- S32 loc = -1;
- if (shader)
- {
- loc = shader->getUniformLocation("color");
- }
+ llassert(!LLGLSLShader::sNoFixedFunction || shader != NULL);
- if (loc >= 0)
+ if (shader)
{
- shader->uniform4f(loc, r,g,b,a);
+ shader->uniform4f("color", r,g,b,a);
}
else
{
glColor4f(r,g,b,a);
}
-
}
void LLRender::diffuseColor4fv(const F32* c)
{
LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr;
- S32 loc = -1;
- if (shader)
- {
- loc = shader->getUniformLocation("color");
- }
+ llassert(!LLGLSLShader::sNoFixedFunction || shader != NULL);
- if (loc >= 0)
+ if (shader)
{
- shader->uniform4fv(loc, 1, c);
+ shader->uniform4fv("color", 1, c);
}
else
{
@@ -1660,15 +1643,11 @@ void LLRender::diffuseColor4fv(const F32* c)
void LLRender::diffuseColor4ubv(const U8* c)
{
LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr;
- S32 loc = -1;
- if (shader)
- {
- loc = shader->getUniformLocation("color");
- }
+ llassert(!LLGLSLShader::sNoFixedFunction || shader != NULL);
- if (loc >= 0)
+ if (shader)
{
- shader->uniform4f(loc, c[0]/255.f, c[1]/255.f, c[2]/255.f, c[3]/255.f);
+ shader->uniform4f("color", c[0]/255.f, c[1]/255.f, c[2]/255.f, c[3]/255.f);
}
else
{
@@ -1676,9 +1655,6 @@ void LLRender::diffuseColor4ubv(const U8* c)
}
}
-
-
-
void LLRender::debugTexUnits(void)
{
LL_INFOS("TextureUnit") << "Active TexUnit: " << mCurrTextureUnitIndex << LL_ENDL;
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index 5d19168842..86352215ff 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -364,8 +364,26 @@ void LLVertexBuffer::drawArrays(U32 mode, const std::vector<LLVector3>& pos, con
setupClientArrays(MAP_VERTEX | MAP_NORMAL);
- glVertexPointer(3, GL_FLOAT, 0, pos[0].mV);
- glNormalPointer(GL_FLOAT, 0, norm[0].mV);
+ LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr;
+
+ if (shader)
+ {
+ S32 loc = shader->getAttribLocation(LLVertexBuffer::TYPE_VERTEX);
+ if (loc > -1)
+ {
+ glVertexAttribPointerARB(loc, 3, GL_FLOAT, GL_FALSE, 0, pos[0].mV);
+ }
+ loc = shader->getAttribLocation(LLVertexBuffer::TYPE_NORMAL);
+ if (loc > -1)
+ {
+ glVertexAttribPointerARB(loc, 3, GL_FLOAT, GL_FALSE, 0, norm[0].mV);
+ }
+ }
+ else
+ {
+ glVertexPointer(3, GL_FLOAT, 0, pos[0].mV);
+ glNormalPointer(GL_FLOAT, 0, norm[0].mV);
+ }
glDrawArrays(sGLMode[mode], 0, count);
}
@@ -1730,6 +1748,34 @@ void LLVertexBuffer::setBuffer(U32 data_mask, S32 type)
//set up pointers if the data mask is different ...
BOOL setup = (sLastMask != data_mask);
+ if (gDebugGL && data_mask != 0)
+ {
+ LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr;
+ if (shader)
+ {
+ U32 required_mask = 0;
+ for (U32 i = 0; i < LLVertexBuffer::TYPE_MAX; ++i)
+ {
+ if (shader->getAttribLocation(i) > -1)
+ {
+ U32 required = 1 << i;
+ if ((data_mask & required) == 0)
+ {
+ llwarns << "Missing attribute: " << i << llendl;
+ }
+
+ required_mask |= required;
+
+ }
+ }
+
+ if ((data_mask & required_mask) != required_mask)
+ {
+ llerrs << "Shader consumption mismatches data provision." << llendl;
+ }
+ }
+ }
+
if (useVBOs())
{
if (mGLBuffer && (mGLBuffer != sGLRenderBuffer || !sVBOActive))