summaryrefslogtreecommitdiff
path: root/indra/llrender/llvertexbuffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llrender/llvertexbuffer.cpp')
-rw-r--r--indra/llrender/llvertexbuffer.cpp145
1 files changed, 67 insertions, 78 deletions
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index 040dde7317..1bd7a57cd9 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -354,7 +354,6 @@ public:
{ //allocate a new buffer
LL_PROFILE_GPU_ZONE("vbo alloc");
-
data = (U8*) ll_aligned_malloc_16(size);
if (type == GL_ARRAY_BUFFER)
@@ -382,7 +381,6 @@ public:
}
mAllocated -= size;
-
if (name)
{
delete_buffers(1, &name);
@@ -1396,12 +1394,12 @@ void LLVertexBuffer::flush_vbo(GLenum target, U32 start, U32 end, void* data, U8
else
{
//LL_WARNS() << "flush_vbo mode 0" << LL_ENDL;
- // on OS X, flush_vbo doesn't actually write to the GL buffer, so be sure to call
- // _mapBuffer to tag the buffer for flushing to GL
- _mapBuffer();
- LL_PROFILE_ZONE_NAMED_CATEGORY_VERTEX("vb memcpy");
- // copy into mapped buffer
- memcpy(dst+start, data, end-start+1);
+ // on OS X, flush_vbo doesn't actually write to the GL buffer, so be sure to call
+ // _mapBuffer to tag the buffer for flushing to GL
+ _mapBuffer();
+ LL_PROFILE_ZONE_NAMED_CATEGORY_VERTEX("vb memcpy");
+ // copy into mapped buffer
+ memcpy(dst+start, data, end-start+1);
}
}
else
@@ -1706,7 +1704,9 @@ void LLVertexBuffer::setBuffer()
U32 data_mask = LLGLSLShader::sCurBoundShaderPtr->mAttributeMask;
// this Vertex Buffer must provide all necessary attributes for currently bound shader
- llassert_msg((data_mask & mTypeMask) == data_mask, "Attribute mask mismatch! mTypeMask should be a superset of data_mask. data_mask: 0x" << std::hex << data_mask << " mTypeMask: 0x" << mTypeMask << " Missing: 0x" << (data_mask & ~mTypeMask) << std::dec);
+ llassert_msg((data_mask & mTypeMask) == data_mask,
+ "Attribute mask mismatch! mTypeMask should be a superset of data_mask. data_mask: 0x"
+ << std::hex << data_mask << " mTypeMask: 0x" << mTypeMask << " Missing: 0x" << (data_mask & ~mTypeMask) << std::dec);
if (sGLRenderBuffer != mGLBuffer)
{
@@ -1742,80 +1742,70 @@ void LLVertexBuffer::setupVertexBuffer()
LOG_GLERROR("LLVertexBuffer::setupVertexBuffer()");
U8* base = nullptr;
- AttributeType loc;
- void* ptr = nullptr;
-
U32 data_mask = LLGLSLShader::sCurBoundShaderPtr->mAttributeMask;
- if (data_mask & MAP_VERTEX)
- {
- loc = TYPE_VERTEX;
- ptr = (void*)(base + mOffsets[TYPE_VERTEX]);
- glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_VERTEX], ptr);
-
- LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_VERTEX");
- }
-
if (data_mask & MAP_NORMAL)
{
- loc = TYPE_NORMAL;
- ptr = (void*)(base + mOffsets[TYPE_NORMAL]);
+ AttributeType loc = TYPE_NORMAL;
+ void* ptr = (void*)(base + mOffsets[TYPE_NORMAL]);
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_NORMAL], ptr);
LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_NORMAL");
}
-
- if (data_mask & MAP_TEXCOORD0)
+ if (data_mask & MAP_TEXCOORD3)
{
- loc = TYPE_TEXCOORD0;
- //glEnableVertexAttribArray(loc);
- ptr = (void*)(base + mOffsets[TYPE_TEXCOORD0]);
- glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD0], ptr);
+ AttributeType loc = TYPE_TEXCOORD3;
+ void* ptr = (void*)(base + mOffsets[TYPE_TEXCOORD3]);
+ glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD3], ptr);
- LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXCOORD0");
+ LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXCOORD3");
}
+ if (data_mask & MAP_TEXCOORD2)
+ {
+ AttributeType loc = TYPE_TEXCOORD2;
+ void* ptr = (void*)(base + mOffsets[TYPE_TEXCOORD2]);
+ glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD2], ptr);
+ LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXCOORD2");
+ }
if (data_mask & MAP_TEXCOORD1)
{
- loc = TYPE_TEXCOORD1;
- ptr = (void*)(base + mOffsets[TYPE_TEXCOORD1]);
+ AttributeType loc = TYPE_TEXCOORD1;
+ void* ptr = (void*)(base + mOffsets[TYPE_TEXCOORD1]);
glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD1], ptr);
LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXCOORD1");
}
-
- if (data_mask & MAP_TEXCOORD2)
+ if (data_mask & MAP_TANGENT)
{
- loc = TYPE_TEXCOORD2;
- ptr = (void*)(base + mOffsets[TYPE_TEXCOORD2]);
- glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD2], ptr);
+ AttributeType loc = TYPE_TANGENT;
+ void* ptr = (void*)(base + mOffsets[TYPE_TANGENT]);
+ glVertexAttribPointer(loc, 4, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TANGENT], ptr);
- LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXCOORD2");
+ LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TANGENT");
}
-
- if (data_mask & MAP_TEXCOORD3)
+ if (data_mask & MAP_TEXCOORD0)
{
- loc = TYPE_TEXCOORD3;
- ptr = (void*)(base + mOffsets[TYPE_TEXCOORD3]);
- glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD3], ptr);
+ AttributeType loc = TYPE_TEXCOORD0;
+ //glEnableVertexAttribArray(loc);
+ void* ptr = (void*)(base + mOffsets[TYPE_TEXCOORD0]);
+ glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD0], ptr);
- LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXCOORD3");
+ LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXCOORD0");
}
-
if (data_mask & MAP_COLOR)
{
- loc = TYPE_COLOR;
+ AttributeType loc = TYPE_COLOR;
//bind emissive instead of color pointer if emissive is present
- ptr = (data_mask & MAP_EMISSIVE) ? (void*)(base + mOffsets[TYPE_EMISSIVE]) : (void*)(base + mOffsets[TYPE_COLOR]);
+ void* ptr = (data_mask & MAP_EMISSIVE) ? (void*)(base + mOffsets[TYPE_EMISSIVE]) : (void*)(base + mOffsets[TYPE_COLOR]);
glVertexAttribPointer(loc, 4, GL_UNSIGNED_BYTE, GL_TRUE, LLVertexBuffer::sTypeSize[TYPE_COLOR], ptr);
LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_COLOR");
}
-
if (data_mask & MAP_EMISSIVE)
{
- loc = TYPE_EMISSIVE;
- ptr = (void*)(base + mOffsets[TYPE_EMISSIVE]);
+ AttributeType loc = TYPE_EMISSIVE;
+ void* ptr = (void*)(base + mOffsets[TYPE_EMISSIVE]);
glVertexAttribPointer(loc, 4, GL_UNSIGNED_BYTE, GL_TRUE, LLVertexBuffer::sTypeSize[TYPE_EMISSIVE], ptr);
LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_EMISSIVE");
@@ -1828,60 +1818,55 @@ void LLVertexBuffer::setupVertexBuffer()
LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_COLOR");
}
}
-
- if (data_mask & MAP_TANGENT)
- {
- loc = TYPE_TANGENT;
- ptr = (void*)(base + mOffsets[TYPE_TANGENT]);
- glVertexAttribPointer(loc, 4, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TANGENT], ptr);
-
- LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TANGENT");
- }
-
if (data_mask & MAP_WEIGHT)
{
- loc = TYPE_WEIGHT;
- ptr = (void*)(base + mOffsets[TYPE_WEIGHT]);
+ AttributeType loc = TYPE_WEIGHT;
+ void* ptr = (void*)(base + mOffsets[TYPE_WEIGHT]);
glVertexAttribPointer(loc, 1, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_WEIGHT], ptr);
LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_WEIGHT");
}
-
if (data_mask & MAP_WEIGHT4)
{
- loc = TYPE_WEIGHT4;
- ptr = (void*)(base + mOffsets[TYPE_WEIGHT4]);
+ AttributeType loc = TYPE_WEIGHT4;
+ void* ptr = (void*)(base + mOffsets[TYPE_WEIGHT4]);
glVertexAttribPointer(loc, 4, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_WEIGHT4], ptr);
LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_WEIGHT4");
}
+ if (data_mask & MAP_JOINT)
+ {
+ AttributeType loc = TYPE_JOINT;
+ void* ptr = (void*)(base + mOffsets[TYPE_JOINT]);
+ glVertexAttribIPointer(loc, 4, GL_UNSIGNED_SHORT, LLVertexBuffer::sTypeSize[TYPE_JOINT], ptr);
+ LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_JOINT");
+ }
if (data_mask & MAP_CLOTHWEIGHT)
{
- loc = TYPE_CLOTHWEIGHT;
- ptr = (void*)(base + mOffsets[TYPE_CLOTHWEIGHT]);
+ AttributeType loc = TYPE_CLOTHWEIGHT;
+ void* ptr = (void*)(base + mOffsets[TYPE_CLOTHWEIGHT]);
glVertexAttribPointer(loc, 4, GL_FLOAT, GL_TRUE, LLVertexBuffer::sTypeSize[TYPE_CLOTHWEIGHT], ptr);
LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_CLOTHWEIGHT");
}
- if (data_mask & MAP_JOINT)
- {
- loc = TYPE_JOINT;
- ptr = (void*)(base + mOffsets[TYPE_JOINT]);
- glVertexAttribIPointer(loc, 4, GL_UNSIGNED_SHORT, LLVertexBuffer::sTypeSize[TYPE_JOINT], ptr);
-
- LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_JOINT");
- }
-
if (data_mask & MAP_TEXTURE_INDEX)
{
- loc = TYPE_TEXTURE_INDEX;
- ptr = (void*)(base + mOffsets[TYPE_VERTEX] + 12);
+ AttributeType loc = TYPE_TEXTURE_INDEX;
+ void* ptr = (void*)(base + mOffsets[TYPE_VERTEX] + 12);
glVertexAttribIPointer(loc, 1, GL_UNSIGNED_INT, LLVertexBuffer::sTypeSize[TYPE_VERTEX], ptr);
LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_TEXTURE_INDEX");
}
+ if (data_mask & MAP_VERTEX)
+ {
+ AttributeType loc = TYPE_VERTEX;
+ void* ptr = (void*)(base + mOffsets[TYPE_VERTEX]);
+ glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_VERTEX], ptr);
+
+ LOG_GLERROR("LLVertexBuffer::setupVertexBuffer TYPE_VERTEX");
+ }
}
void LLVertexBuffer::setPositionData(const LLVector4a* data)
@@ -1995,3 +1980,7 @@ void LLVertexBuffer::setIndexData(const U32* data, U32 offset, U32 count)
}
flush_vbo(GL_ELEMENT_ARRAY_BUFFER, offset * sizeof(U32), (offset + count) * sizeof(U32) - 1, (U8*)data, mMappedIndexData);
}
+
+
+
+