Double buffering immediate context draw mempools.

This commit is contained in:
Rinnegatamante
2020-10-27 15:29:03 +01:00
parent 7e74ebce23
commit 5460e416bc
+22 -16
View File
@@ -22,16 +22,17 @@ extern "C"{
#define PLUGIN_ID 0 #define PLUGIN_ID 0
uint16_t *gIndicesIm2DPtr; uint16_t *gIndicesIm2DPtr[2];
uint16_t *gIndicesIm3DPtr; uint16_t *gIndicesIm3DPtr[2];
float *gVertexBufferIm2DPtr; float *gVertexBufferIm2DPtr[2];
float *gVertexBufferIm3DPtr; float *gVertexBufferIm3DPtr[2];
uint16_t *gConstIndices; uint16_t *gConstIndices;
float *gVertexBufferIm2D; float *gVertexBufferIm2D;
float *gVertexBufferIm3D; float *gVertexBufferIm3D;
uint16_t *gIndicesIm2D; uint16_t *gIndicesIm2D;
uint16_t *gIndicesIm3D; uint16_t *gIndicesIm3D;
uint8_t ImIdx = 0;
namespace rw { namespace rw {
namespace gl3 { namespace gl3 {
@@ -1103,10 +1104,11 @@ beginUpdate(Camera *cam)
setFrameBuffer(cam); setFrameBuffer(cam);
vglStartRendering(); vglStartRendering();
gVertexBufferIm2D = gVertexBufferIm2DPtr; ImIdx = (ImIdx + 1) % 2;
gVertexBufferIm3D = gVertexBufferIm3DPtr; gVertexBufferIm2D = gVertexBufferIm2DPtr[ImIdx];
gIndicesIm2D = gIndicesIm2DPtr; gVertexBufferIm3D = gVertexBufferIm3DPtr[ImIdx];
gIndicesIm3D = gIndicesIm3DPtr; gIndicesIm2D = gIndicesIm2DPtr[ImIdx];
gIndicesIm3D = gIndicesIm3DPtr[ImIdx];
int w, h; int w, h;
if(cam->frameBuffer->type == Raster::CAMERA){ if(cam->frameBuffer->type == Raster::CAMERA){
@@ -1351,17 +1353,21 @@ openGLFW(EngineOpenParams *openparams)
glGlobals.winHeight = openparams->height; glGlobals.winHeight = openparams->height;
glGlobals.winTitle = openparams->windowtitle; glGlobals.winTitle = openparams->windowtitle;
gVertexBufferIm2DPtr = (float*)malloc(0x500000); gVertexBufferIm2DPtr[0] = (float*)malloc(0x500000);
gVertexBufferIm3DPtr = (float*)malloc(0x1800000); gVertexBufferIm2DPtr[1] = (float*)malloc(0x500000);
gIndicesIm2DPtr = (uint16_t*)malloc(0x600000); gVertexBufferIm3DPtr[0] = (float*)malloc(0x1800000);
gIndicesIm3DPtr = (uint16_t*)malloc(0x1800000); gVertexBufferIm3DPtr[1] = (float*)malloc(0x1800000);
gIndicesIm2DPtr[0] = (uint16_t*)malloc(0x600000);
gIndicesIm2DPtr[1] = (uint16_t*)malloc(0x600000);
gIndicesIm3DPtr[0] = (uint16_t*)malloc(0x1800000);
gIndicesIm3DPtr[1] = (uint16_t*)malloc(0x1800000);
gConstIndices = (uint16_t*)malloc(sizeof(uint16_t) * 0xFFFF); gConstIndices = (uint16_t*)malloc(sizeof(uint16_t) * 0xFFFF);
gVertexBufferIm2D = gVertexBufferIm2DPtr; gVertexBufferIm2D = gVertexBufferIm2DPtr[0];
gVertexBufferIm3D = gVertexBufferIm3DPtr; gVertexBufferIm3D = gVertexBufferIm3DPtr[0];
gIndicesIm2D = gIndicesIm2DPtr; gIndicesIm2D = gIndicesIm2DPtr[0];
gIndicesIm3D = gIndicesIm3DPtr; gIndicesIm3D = gIndicesIm3DPtr[0];
for (uint16_t i = 0; i < 0xFFFF; i++) { for (uint16_t i = 0; i < 0xFFFF; i++) {
gConstIndices[i] = i; gConstIndices[i] = i;