From 9dce8b09a4ac410c78aceef7cd38e1dec65f9b7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 25 Dec 2012 13:56:30 +0100 Subject: [PATCH] Move vertex arrays from globals to heap. --- GPU/GLES/TransformPipeline.cpp | 24 +++++++++++++----------- GPU/GLES/TransformPipeline.h | 9 +++++++++ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/GPU/GLES/TransformPipeline.cpp b/GPU/GLES/TransformPipeline.cpp index 7605e4a417..4fd4f42905 100644 --- a/GPU/GLES/TransformPipeline.cpp +++ b/GPU/GLES/TransformPipeline.cpp @@ -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()); } diff --git a/GPU/GLES/TransformPipeline.h b/GPU/GLES/TransformPipeline.h index acc0dd307f..e353fd0d66 100644 --- a/GPU/GLES/TransformPipeline.h +++ b/GPU/GLES/TransformPipeline.h @@ -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_;