mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Move vertex arrays from globals to heap.
This commit is contained in:
parent
d21647bbb9
commit
9dce8b09a4
2 changed files with 22 additions and 11 deletions
|
@ -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?
|
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)
|
TransformDrawEngine::TransformDrawEngine(ShaderManager *shaderManager)
|
||||||
: numVerts(0),
|
: numVerts(0),
|
||||||
shaderManager_(shaderManager) {
|
shaderManager_(shaderManager) {
|
||||||
|
decoded = new u8[65536 * 48];
|
||||||
|
decIndex = new u16[65536];
|
||||||
|
transformed = new TransformedVertex[65536];
|
||||||
|
transformedExpanded = new TransformedVertex[65536 * 3];
|
||||||
|
|
||||||
indexGen.Setup(decIndex);
|
indexGen.Setup(decIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
TransformDrawEngine::~TransformDrawEngine() {
|
TransformDrawEngine::~TransformDrawEngine() {
|
||||||
|
delete [] decoded;
|
||||||
|
delete [] decIndex;
|
||||||
|
delete [] transformed;
|
||||||
|
delete [] transformedExpanded;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Just to get something on the screen, we'll just not subdivide correctly.
|
// 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
|
// 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.
|
// 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:");
|
DEBUG_LOG(G3D, "View matrix:");
|
||||||
|
@ -322,8 +325,7 @@ void SoftwareTransformAndDraw(int prim, LinkedShader *program, int vertexCount,
|
||||||
Lighter lighter;
|
Lighter lighter;
|
||||||
|
|
||||||
VertexReader reader(decoded, decVtxFormat);
|
VertexReader reader(decoded, decVtxFormat);
|
||||||
for (int index = 0; index < maxIndex; index++)
|
for (int index = 0; index < maxIndex; index++) {
|
||||||
{
|
|
||||||
reader.Goto(index);
|
reader.Goto(index);
|
||||||
|
|
||||||
float v[3] = {0, 0, 0};
|
float v[3] = {0, 0, 0};
|
||||||
|
@ -707,7 +709,7 @@ void TransformDrawEngine::Flush() {
|
||||||
glDrawElements(glprim[prim], indexGen.VertexCount(), GL_UNSIGNED_SHORT, (GLvoid *)decIndex);
|
glDrawElements(glprim[prim], indexGen.VertexCount(), GL_UNSIGNED_SHORT, (GLvoid *)decIndex);
|
||||||
DesetupDecFmtForDraw(program, dec.GetDecVtxFmt());
|
DesetupDecFmtForDraw(program, dec.GetDecVtxFmt());
|
||||||
} else {
|
} 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());
|
indexGen.MaxIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "IndexGenerator.h"
|
#include "IndexGenerator.h"
|
||||||
|
#include "VertexDecoder.h"
|
||||||
|
|
||||||
class LinkedShader;
|
class LinkedShader;
|
||||||
class ShaderManager;
|
class ShaderManager;
|
||||||
|
@ -33,11 +34,19 @@ public:
|
||||||
void Flush();
|
void Flush();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void SoftwareTransformAndDraw(int prim, u8 *decoded, LinkedShader *program, int vertexCount, void *inds, int indexType, const DecVtxFormat &decVtxFormat, int maxIndex);
|
||||||
|
|
||||||
// Vertex collector state
|
// Vertex collector state
|
||||||
IndexGenerator indexGen;
|
IndexGenerator indexGen;
|
||||||
int numVerts;
|
int numVerts;
|
||||||
|
|
||||||
// Vertex collector buffers
|
// Vertex collector buffers
|
||||||
|
VertexDecoder dec;
|
||||||
|
u8 *decoded;
|
||||||
|
u16 *decIndex;
|
||||||
|
|
||||||
|
TransformedVertex *transformed;
|
||||||
|
TransformedVertex *transformedExpanded;
|
||||||
|
|
||||||
// Other
|
// Other
|
||||||
ShaderManager *shaderManager_;
|
ShaderManager *shaderManager_;
|
||||||
|
|
Loading…
Add table
Reference in a new issue