Initial commit
This commit is contained in:
57
Torque/SDK/engine/dgl/stripCache.cc
Normal file
57
Torque/SDK/engine/dgl/stripCache.cc
Normal file
@@ -0,0 +1,57 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Torque Game Engine
|
||||
// Copyright (C) GarageGames.com, Inc.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "dgl/stripCache.h"
|
||||
#include "platform/platformGL.h"
|
||||
|
||||
void StripCache::emitStrip(const U32 start, const U32 count, const ColorI& color)
|
||||
{
|
||||
if (count < 3) {
|
||||
AssertFatal(false, "Strip count < 3");
|
||||
return;
|
||||
}
|
||||
|
||||
if (currIndex + count >= 1024)
|
||||
flushCache();
|
||||
|
||||
// Contiguous index enforcement
|
||||
if (currIndex != 0 && start != (stripIndices[currIndex - 1]+1))
|
||||
flushCache();
|
||||
|
||||
stripStarts[currStrip] = currIndex;
|
||||
stripColors[currStrip++] = color;
|
||||
for (U32 i = start; i < start+count; i++)
|
||||
stripIndices[currIndex++] = i;
|
||||
}
|
||||
|
||||
void StripCache::flushCache()
|
||||
{
|
||||
if (currIndex == 0)
|
||||
return;
|
||||
|
||||
// We know that (for right now) the first index is the least, and the
|
||||
// last is the greatest. The commented condition in the emitStrip
|
||||
// call makes sure this range is contiguous...
|
||||
U32 first = stripIndices[0];
|
||||
U32 last = stripIndices[currIndex-1];
|
||||
|
||||
stripStarts[currStrip] = currIndex;
|
||||
|
||||
if (dglDoesSupportCompiledVertexArray())
|
||||
glLockArraysEXT(first, last - first + 1);
|
||||
|
||||
for (U32 i = 0; i < currStrip; i++) {
|
||||
glColor4ubv(stripColors[i]);
|
||||
glDrawElements(GL_TRIANGLE_STRIP, stripStarts[i+1] - stripStarts[i],
|
||||
GL_UNSIGNED_INT, &stripIndices[stripStarts[i]]);
|
||||
}
|
||||
|
||||
if (dglDoesSupportCompiledVertexArray())
|
||||
glUnlockArraysEXT();
|
||||
|
||||
currIndex = 0;
|
||||
currStrip = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user