Using a separate mempool for Immediate 3D.

This commit is contained in:
Rinnegatamante
2020-10-19 22:15:51 +02:00
parent 0685473569
commit e16a46bdd9
8 changed files with 40 additions and 22 deletions
+26 -10
View File
@@ -20,11 +20,17 @@
extern uint16_t *gIndices;
extern float *gVertexBuffer;
extern uint16_t *gIndicesPtr;
uint16_t *gIndicesIm2DPtr;
uint16_t *gIndicesIm3DPtr;
extern float *gVertexBufferPtr;
float *gVertexBufferIm2DPtr;
float *gVertexBufferIm3DPtr;
uint16_t *gConstIndices;
float *gVertexBufferIm2D;
float *gVertexBufferIm3D;
uint16_t *gIndicesIm2D;
uint16_t *gIndicesIm3D;
namespace rw {
namespace gl3 {
@@ -1156,10 +1162,12 @@ showRaster(Raster *raster, uint32 flags)
vglWaitVblankStart(GL_FALSE);
vglStopRendering();
vglStartRendering();
gVertexBuffer = gVertexBufferPtr;
gVertexBufferIm2D = gVertexBufferPtr + 0xC00000;
gIndices = gIndicesPtr;
gIndicesIm2D = gIndicesPtr + 0x300000;
gVertexBuffer = gVertexBufferPtr;
gVertexBufferIm2D = gVertexBufferIm2DPtr;
gVertexBufferIm3D = gVertexBufferIm3DPtr;
gIndices = gIndicesPtr;
gIndicesIm2D = gIndicesIm2DPtr;
gIndicesIm3D = gIndicesIm3DPtr;
#endif
//log2file("showRaster called");
@@ -1409,13 +1417,21 @@ initOpenGL(void)
resetRenderState();
gVertexBufferPtr = (float*)malloc(0x1800000);
gIndicesPtr = (uint16_t*)malloc(0x600000);
gVertexBufferPtr = (float*)malloc(0x1800000);
gVertexBufferIm2DPtr = (float*)malloc(0x500000);
gVertexBufferIm3DPtr = (float*)malloc(0x500000);
gIndicesPtr = (uint16_t*)malloc(0x600000);
gIndicesIm2DPtr = (uint16_t*)malloc(0x600000);
gIndicesIm3DPtr = (uint16_t*)malloc(0x600000);
gConstIndices = (uint16_t*)malloc(sizeof(uint16_t) * 512);
gVertexBuffer = gVertexBufferPtr;
gVertexBufferIm2D = gVertexBufferPtr + 0xC00000;
gIndices = gIndicesPtr;
gIndicesIm2D = gIndicesPtr + 0x300000;
gVertexBuffer = gVertexBufferPtr;
gVertexBufferIm2D = gVertexBufferIm2DPtr;
gVertexBufferIm3D = gVertexBufferIm3DPtr;
gIndices = gIndicesPtr;
gIndicesIm2D = gIndicesIm2DPtr;
gIndicesIm3D = gIndicesIm3DPtr;
for (uint16_t i = 0; i < 512; i++) {
gConstIndices[i] = i;
+8 -6
View File
@@ -18,6 +18,8 @@
extern float *gVertexBuffer;
extern float *gVertexBufferIm2D;
extern uint16_t *gIndicesIm2D;
extern float *gVertexBufferIm3D;
extern uint16_t *gIndicesIm3D;
extern uint16_t *gIndices;
extern uint16_t *gConstIndices;
@@ -215,9 +217,9 @@ im3DTransform(void *vertices, int32 numVertices, Matrix *world, uint32 flags)
if((flags & im3d::VERTEXUV) == 0)
SetRenderStatePtr(TEXTURERASTER, nil);
memcpy_neon(gVertexBufferIm2D, vertices, numVertices*sizeof(Im3DVertex));
vglVertexAttribPointerMapped(0, gVertexBufferIm2D);
gVertexBufferIm2D += numVertices*(sizeof(Im3DVertex)/sizeof(float));
memcpy_neon(gVertexBufferIm3D, vertices, numVertices*sizeof(Im3DVertex));
vglVertexAttribPointerMapped(0, gVertexBufferIm3D);
gVertexBufferIm3D += numVertices*(sizeof(Im3DVertex)/sizeof(float));
#ifndef RW_GL_USE_VAOS
//setAttribPointers(im3dattribDesc, 3);
@@ -236,9 +238,9 @@ im3DRenderPrimitive(PrimitiveType primType)
void
im3DRenderIndexedPrimitive(PrimitiveType primType, void *indices, int32 numIndices)
{
memcpy_neon(gIndicesIm2D, indices, numIndices * 2);
vglIndexPointerMapped(gIndicesIm2D);
gIndicesIm2D += numIndices;
memcpy_neon(gIndicesIm3D, indices, numIndices * 2);
vglIndexPointerMapped(gIndicesIm3D);
gIndicesIm3D += numIndices;
flushCache();
vglDrawObjects(primTypeMap[primType], numIndices, GL_FALSE);
+1 -1
View File
@@ -19,7 +19,7 @@ void main(
float4 out gl_Position : POSITION
) {
float4 Vertex = mul(float4(in_pos, 1.0), u_world);
gl_Position = mul(Vertex, u_view * u_proj);
gl_Position = mul(mul(Vertex, u_view), u_proj);
float3 Normal = mul(in_normal, float3x3(u_world));
v_tex0 = in_tex0;
+1 -1
View File
@@ -20,7 +20,7 @@ const char *default_vert_src =
" float4 out gl_Position : POSITION\n"
") {\n"
" float4 Vertex = mul(float4(in_pos, 1.0), u_world);\n"
" gl_Position = mul(Vertex, u_view * u_proj);\n"
" gl_Position = mul(mul(Vertex, u_view), u_proj);\n"
" float3 Normal = mul(in_normal, float3x3(u_world));\n"
" v_tex0 = in_tex0;\n"
+1 -1
View File
@@ -21,7 +21,7 @@ void main(
float4 out gl_Position : POSITION
) {
float4 Vertex = mul(float4(in_pos, 1.0), u_world);
gl_Position = mul(Vertex, u_view * u_proj);
gl_Position = mul(mul(Vertex, u_view), u_proj);
float3 Normal = mul(in_normal, float3x3(u_world));
v_tex0 = in_tex0;
+1 -1
View File
@@ -22,7 +22,7 @@ const char *matfx_env_vert_src =
" float4 out gl_Position : POSITION\n"
") {\n"
" float4 Vertex = mul(float4(in_pos, 1.0), u_world);\n"
" gl_Position = mul(Vertex, u_view * u_proj);\n"
" gl_Position = mul(mul(Vertex, u_view), u_proj);\n"
" float3 Normal = mul(in_normal, float3x3(u_world));\n"
" v_tex0 = in_tex0;\n"
+1 -1
View File
@@ -30,7 +30,7 @@ void main(
}
float4 Vertex = mul(float4(SkinVertex, 1.0), u_world);
gl_Position = mul(Vertex, u_view * u_proj);
gl_Position = mul(mul(Vertex, u_view), u_proj);
float3 Normal = mul(SkinNormal, float3x3(u_world));
v_tex0 = in_tex0;
+1 -1
View File
@@ -31,7 +31,7 @@ const char *skin_vert_src =
" }\n"
" \n"
" float4 Vertex = mul(float4(SkinVertex, 1.0), u_world);\n"
" gl_Position = mul(Vertex, u_view * u_proj);\n"
" gl_Position = mul(mul(Vertex, u_view), u_proj);\n"
" float3 Normal = mul(SkinNormal, float3x3(u_world));\n"
" v_tex0 = in_tex0;\n"