tge/engine/dgl/stripCache.cc
2017-04-17 06:17:10 -06:00

58 lines
1.6 KiB
C++
Executable File

//-----------------------------------------------------------------------------
// 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;
}