Move vertex arrays from globals to heap.

This commit is contained in:
Henrik Rydgård 2012-12-25 13:56:30 +01:00
parent d21647bbb9
commit 9dce8b09a4
2 changed files with 22 additions and 11 deletions

View File

@ -41,20 +41,22 @@ const GLuint glprim[8] = {
GL_TRIANGLES, // With OpenGL ES we have to expand sprites into triangles, tripling the data instead of doubling. sigh. OpenGL ES, Y U NO SUPPORT GL_QUADS?
};
u8 decoded[65536 * 32];
VertexDecoder dec;
uint16_t decIndex[65536];
TransformedVertex transformed[65536];
TransformedVertex transformedExpanded[65536];
TransformDrawEngine::TransformDrawEngine(ShaderManager *shaderManager)
: numVerts(0),
shaderManager_(shaderManager) {
decoded = new u8[65536 * 48];
decIndex = new u16[65536];
transformed = new TransformedVertex[65536];
transformedExpanded = new TransformedVertex[65536 * 3];
indexGen.Setup(decIndex);
}
TransformDrawEngine::~TransformDrawEngine() {
delete [] decoded;
delete [] decIndex;
delete [] transformed;
delete [] transformedExpanded;
}
// Just to get something on the screen, we'll just not subdivide correctly.
@ -295,7 +297,8 @@ static void DesetupDecFmtForDraw(LinkedShader *program, const DecVtxFormat &decF
// Actually again, single quads could be drawn more efficiently using GL_TRIANGLE_STRIP, no need to duplicate verts as for
// GL_TRIANGLES. Still need to sw transform to compute the extra two corners though.
void SoftwareTransformAndDraw(int prim, LinkedShader *program, int vertexCount, void *inds, int indexType, const DecVtxFormat &decVtxFormat, int maxIndex)
void TransformDrawEngine::SoftwareTransformAndDraw(
int prim, u8 *decoded, LinkedShader *program, int vertexCount, void *inds, int indexType, const DecVtxFormat &decVtxFormat, int maxIndex)
{
/*
DEBUG_LOG(G3D, "View matrix:");
@ -322,8 +325,7 @@ void SoftwareTransformAndDraw(int prim, LinkedShader *program, int vertexCount,
Lighter lighter;
VertexReader reader(decoded, decVtxFormat);
for (int index = 0; index < maxIndex; index++)
{
for (int index = 0; index < maxIndex; index++) {
reader.Goto(index);
float v[3] = {0, 0, 0};
@ -707,7 +709,7 @@ void TransformDrawEngine::Flush() {
glDrawElements(glprim[prim], indexGen.VertexCount(), GL_UNSIGNED_SHORT, (GLvoid *)decIndex);
DesetupDecFmtForDraw(program, dec.GetDecVtxFmt());
} else {
SoftwareTransformAndDraw(prim, program, indexGen.VertexCount(), (void *)decIndex, GE_VTYPE_IDX_16BIT, dec.GetDecVtxFmt(),
SoftwareTransformAndDraw(prim, decoded, program, indexGen.VertexCount(), (void *)decIndex, GE_VTYPE_IDX_16BIT, dec.GetDecVtxFmt(),
indexGen.MaxIndex());
}

View File

@ -18,6 +18,7 @@
#pragma once
#include "IndexGenerator.h"
#include "VertexDecoder.h"
class LinkedShader;
class ShaderManager;
@ -33,11 +34,19 @@ public:
void Flush();
private:
void SoftwareTransformAndDraw(int prim, u8 *decoded, LinkedShader *program, int vertexCount, void *inds, int indexType, const DecVtxFormat &decVtxFormat, int maxIndex);
// Vertex collector state
IndexGenerator indexGen;
int numVerts;
// Vertex collector buffers
VertexDecoder dec;
u8 *decoded;
u16 *decIndex;
TransformedVertex *transformed;
TransformedVertex *transformedExpanded;
// Other
ShaderManager *shaderManager_;