Attempt at work around OS X VBO slowness
This commit is contained in:
@@ -3895,6 +3895,19 @@ struct CompareBatchBreakerModified
|
|||||||
|
|
||||||
void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::vector<LLFace*>& faces, BOOL distance_sort, BOOL batch_textures)
|
void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::vector<LLFace*>& faces, BOOL distance_sort, BOOL batch_textures)
|
||||||
{
|
{
|
||||||
|
U32 buffer_usage = group->mBufferUsage;
|
||||||
|
|
||||||
|
#if LL_DARWIN
|
||||||
|
// HACK from Leslie:
|
||||||
|
// Disable VBO usage for alpha on Mac OS X because it kills the framerate
|
||||||
|
// due to implicit calls to glTexSubImage that are beyond our control.
|
||||||
|
// (this works because the only calls here that sort by distance are alpha)
|
||||||
|
if (distance_sort)
|
||||||
|
{
|
||||||
|
buffer_usage = 0x0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//calculate maximum number of vertices to store in a single buffer
|
//calculate maximum number of vertices to store in a single buffer
|
||||||
static const LLCachedControl<S32> render_max_vbo_size("RenderMaxVBOSize", 512);
|
static const LLCachedControl<S32> render_max_vbo_size("RenderMaxVBOSize", 512);
|
||||||
U32 max_vertices = (render_max_vbo_size*1024)/LLVertexBuffer::calcVertexSize(group->mSpatialPartition->mVertexDataMask);
|
U32 max_vertices = (render_max_vbo_size*1024)/LLVertexBuffer::calcVertexSize(group->mSpatialPartition->mVertexDataMask);
|
||||||
@@ -4074,17 +4087,15 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
|
|||||||
|
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{ //create new buffer if needed
|
{ //create new buffer if needed
|
||||||
buffer = createVertexBuffer(mask,
|
buffer = createVertexBuffer(mask, buffer_usage);
|
||||||
group->mBufferUsage);
|
|
||||||
buffer->allocateBuffer(geom_count, index_count, TRUE);
|
buffer->allocateBuffer(geom_count, index_count, TRUE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ //resize pre-existing buffer
|
{ //resize pre-existing buffer
|
||||||
if (LLVertexBuffer::sEnableVBOs && buffer->getUsage() != group->mBufferUsage ||
|
if (LLVertexBuffer::sEnableVBOs && buffer->getUsage() != buffer_usage ||
|
||||||
buffer->getTypeMask() != mask)
|
buffer->getTypeMask() != mask)
|
||||||
{
|
{
|
||||||
buffer = createVertexBuffer(mask,
|
buffer = createVertexBuffer(mask, buffer_usage);
|
||||||
group->mBufferUsage);
|
|
||||||
buffer->allocateBuffer(geom_count, index_count, TRUE);
|
buffer->allocateBuffer(geom_count, index_count, TRUE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user