mirror of
https://github.com/libretro/ppsspp.git
synced 2025-02-27 03:55:42 +00:00
Move vertex arrays from globals to heap.
This commit is contained in:
parent
d21647bbb9
commit
9dce8b09a4
@ -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());
|
||||
}
|
||||
|
||||
|
@ -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_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user