Separate mempools for immediate draws.
This commit is contained in:
@@ -22,6 +22,9 @@ extern float *gVertexBuffer;
|
||||
extern uint16_t *gIndicesPtr;
|
||||
extern float *gVertexBufferPtr;
|
||||
|
||||
float *gVertexBufferIm2D;
|
||||
uint16_t *gIndicesIm2D;
|
||||
|
||||
namespace rw {
|
||||
namespace gl3 {
|
||||
#ifndef LIBRW_SDL2
|
||||
@@ -1382,7 +1385,9 @@ initOpenGL(void)
|
||||
gVertexBufferPtr = (float*)malloc(0x1800000);
|
||||
gIndicesPtr = (uint16_t*)malloc(0x600000);
|
||||
gVertexBuffer = gVertexBufferPtr;
|
||||
gVertexBufferIm2D = gVertexBufferPtr + 0xC00000;
|
||||
gIndices = gIndicesPtr;
|
||||
gIndicesIm2D = gIndicesPtr + 0x300000;
|
||||
|
||||
#ifdef RW_GLES2
|
||||
#include "gl2_shaders/default_vs_gl2.inc"
|
||||
|
||||
+15
-28
@@ -16,16 +16,13 @@
|
||||
#include "rwgl3shader.h"
|
||||
|
||||
extern float *gVertexBuffer;
|
||||
extern float *gVertexBufferIm2D;
|
||||
extern uint16_t *gIndicesIm2D;
|
||||
extern uint16_t *gIndices;
|
||||
|
||||
namespace rw {
|
||||
namespace gl3 {
|
||||
|
||||
uint32 im2DVbo, im2DIbo;
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
uint32 im2DVao;
|
||||
#endif
|
||||
|
||||
Shader *im2dOverrideShader;
|
||||
|
||||
static int32 u_xform;
|
||||
@@ -69,21 +66,11 @@ openIm2D(void)
|
||||
const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
|
||||
im2dShader = Shader::create(vs, fs);
|
||||
assert(im2dShader);
|
||||
|
||||
glGenBuffers(1, &im2DIbo);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, im2DIbo);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, STARTINDICES*2, nil, GL_STREAM_DRAW);
|
||||
|
||||
glGenBuffers(1, &im2DVbo);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, im2DVbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, STARTVERTICES*sizeof(Im2DVertex), nil, GL_STREAM_DRAW);
|
||||
}
|
||||
|
||||
void
|
||||
closeIm2D(void)
|
||||
{
|
||||
glDeleteBuffers(1, &im2DIbo);
|
||||
glDeleteBuffers(1, &im2DVbo);
|
||||
im2dShader->destroy();
|
||||
im2dShader = nil;
|
||||
}
|
||||
@@ -116,9 +103,9 @@ im2DRenderPrimitive(PrimitiveType primType, void *vertices, int32 numVertices)
|
||||
Camera *cam;
|
||||
cam = (Camera*)engine->currentCamera;
|
||||
|
||||
memcpy_neon(gVertexBuffer, vertices, numVertices*sizeof(Im2DVertex));
|
||||
vglVertexPointerMapped(gVertexBuffer);
|
||||
gVertexBuffer += numVertices*(sizeof(Im2DVertex)/sizeof(float));
|
||||
memcpy_neon(gVertexBufferIm2D, vertices, numVertices*sizeof(Im2DVertex));
|
||||
vglVertexPointerMapped(gVertexBufferIm2D);
|
||||
gVertexBufferIm2D += numVertices*(sizeof(Im2DVertex)/sizeof(float));
|
||||
|
||||
xform[0] = 2.0f/cam->frameBuffer->width;
|
||||
xform[1] = -2.0f/cam->frameBuffer->height;
|
||||
@@ -147,12 +134,12 @@ im2DRenderIndexedPrimitive(PrimitiveType primType,
|
||||
cam = (Camera*)engine->currentCamera;
|
||||
|
||||
memcpy_neon(gIndices, indices, numIndices * 2);
|
||||
vglIndexPointerMapped(gIndices);
|
||||
gIndices += numIndices;
|
||||
vglIndexPointerMapped(gIndicesIm2D);
|
||||
gIndicesIm2D += numIndices;
|
||||
|
||||
memcpy_neon(gVertexBuffer, vertices, numVertices*(sizeof(Im2DVertex)/sizeof(float)));
|
||||
vglVertexPointerMapped(gVertexBuffer);
|
||||
gVertexBuffer += numVertices*(sizeof(Im2DVertex)/sizeof(float));
|
||||
vglVertexPointerMapped(gVertexBufferIm2D);
|
||||
gVertexBufferIm2D += numVertices*(sizeof(Im2DVertex)/sizeof(float));
|
||||
|
||||
xform[0] = 2.0f/cam->frameBuffer->width;
|
||||
xform[1] = -2.0f/cam->frameBuffer->height;
|
||||
@@ -226,9 +213,9 @@ im3DTransform(void *vertices, int32 numVertices, Matrix *world, uint32 flags)
|
||||
if((flags & im3d::VERTEXUV) == 0)
|
||||
SetRenderStatePtr(TEXTURERASTER, nil);
|
||||
|
||||
memcpy_neon(gVertexBuffer, vertices, numVertices*(sizeof(Im3DVertex)/sizeof(float)));
|
||||
vglVertexPointerMapped(gVertexBuffer);
|
||||
gVertexBuffer += numVertices*(sizeof(Im2DVertex)/sizeof(float));
|
||||
memcpy_neon(gVertexBufferIm2D, vertices, numVertices*(sizeof(Im3DVertex)/sizeof(float)));
|
||||
vglVertexPointerMapped(gVertexBufferIm2D);
|
||||
gVertexBufferIm2D += numVertices*(sizeof(Im2DVertex)/sizeof(float));
|
||||
|
||||
#ifndef RW_GL_USE_VAOS
|
||||
setAttribPointers(im3dattribDesc, 3);
|
||||
@@ -246,9 +233,9 @@ im3DRenderPrimitive(PrimitiveType primType)
|
||||
void
|
||||
im3DRenderIndexedPrimitive(PrimitiveType primType, void *indices, int32 numIndices)
|
||||
{
|
||||
memcpy_neon(gIndices, indices, numIndices * 2);
|
||||
vglIndexPointerMapped(gIndices);
|
||||
gIndices += numIndices;
|
||||
memcpy_neon(gIndicesIm2D, indices, numIndices * 2);
|
||||
vglIndexPointerMapped(gIndicesIm2D);
|
||||
gIndicesIm2D += numIndices;
|
||||
|
||||
flushCache();
|
||||
vglDrawObjects(primTypeMap[primType], numIndices, GL_FALSE);
|
||||
|
||||
Reference in New Issue
Block a user