From 301498e09e4e3d827aeb8f7e96fe9d4e6cab6741 Mon Sep 17 00:00:00 2001 From: Shinovon Date: Thu, 7 May 2026 07:54:38 +0500 Subject: [PATCH] Use ram pointers instead of vbo in gl1immed --- src/skel/symbian/symbian.cpp | 1 + vendor/librw/src/gles1/gl1immed.cpp | 78 ++++++++++++----------------- 2 files changed, 32 insertions(+), 47 deletions(-) diff --git a/src/skel/symbian/symbian.cpp b/src/skel/symbian/symbian.cpp index 3cf05b7..3a3048b 100644 --- a/src/skel/symbian/symbian.cpp +++ b/src/skel/symbian/symbian.cpp @@ -334,6 +334,7 @@ static int MapScanCode(TInt aScanCode, TInt aModifiers) { case 'z': case 'Z': case '1': + case EStdKeyDevice3: return JOY_B; case 'x': case 'X': diff --git a/vendor/librw/src/gles1/gl1immed.cpp b/vendor/librw/src/gles1/gl1immed.cpp index d9f7260..b071e1b 100644 --- a/vendor/librw/src/gles1/gl1immed.cpp +++ b/vendor/librw/src/gles1/gl1immed.cpp @@ -17,8 +17,6 @@ namespace rw { namespace gles1 { -uint32 im2DVbo, im2DIbo; - static int primTypeMap[] = { GL_POINTS, // invalid GL_LINES, @@ -32,15 +30,11 @@ static int primTypeMap[] = { void openIm2D(void) { - glGenBuffers(1, &im2DIbo); - glGenBuffers(1, &im2DVbo); } void closeIm2D(void) { - glDeleteBuffers(1, &im2DIbo); - glDeleteBuffers(1, &im2DVbo); } static Im2DVertex tmpprimbuf[3]; @@ -70,15 +64,16 @@ im2DRenderPrimitive(PrimitiveType primType, void *vertices, int32 numVertices) Camera *cam; cam = (Camera*)engine->currentCamera; - glBindBuffer(GL_ARRAY_BUFFER, im2DVbo); - glBufferData(GL_ARRAY_BUFFER, numVertices*sizeof(Im2DVertex), vertices, GL_DYNAMIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER, 0); glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(3, GL_FLOAT, sizeof(Im2DVertex), (void*)0); + glVertexPointer(3, GL_FLOAT, sizeof(Im2DVertex), vertices); + glEnableClientState(GL_COLOR_ARRAY); - glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im2DVertex), (void*)OFFSET_OF(Im2DVertex, r)); + glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im2DVertex), (void*)((uint8*)vertices + OFFSET_OF(Im2DVertex, r))); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glTexCoordPointer(2, GL_FLOAT, sizeof(Im2DVertex), (void*)OFFSET_OF(Im2DVertex, u)); + glTexCoordPointer(2, GL_FLOAT, sizeof(Im2DVertex), (void*)((uint8*)vertices + OFFSET_OF(Im2DVertex, u))); glMatrixMode(GL_PROJECTION); glPushMatrix(); @@ -110,18 +105,17 @@ void im2DRenderIndexedPrimitive(PrimitiveType primType, Camera *cam; cam = (Camera*)engine->currentCamera; - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, im2DIbo); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices*2, indices, GL_DYNAMIC_DRAW); - - glBindBuffer(GL_ARRAY_BUFFER, im2DVbo); - glBufferData(GL_ARRAY_BUFFER, numVertices*sizeof(Im2DVertex), vertices, GL_DYNAMIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(3, GL_FLOAT, sizeof(Im2DVertex), (void*)0); + glVertexPointer(3, GL_FLOAT, sizeof(Im2DVertex), vertices); + glEnableClientState(GL_COLOR_ARRAY); - glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im2DVertex), (void*)OFFSET_OF(Im2DVertex, r)); + glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im2DVertex), (void*)((uint8*)vertices + OFFSET_OF(Im2DVertex, r))); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glTexCoordPointer(2, GL_FLOAT, sizeof(Im2DVertex), (void*)OFFSET_OF(Im2DVertex, u)); + glTexCoordPointer(2, GL_FLOAT, sizeof(Im2DVertex), (void*)((uint8*)vertices + OFFSET_OF(Im2DVertex, u))); glMatrixMode(GL_PROJECTION); glPushMatrix(); @@ -133,7 +127,7 @@ void im2DRenderIndexedPrimitive(PrimitiveType primType, glLoadIdentity(); flushCache(); - glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, nil); + glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, indices); glMatrixMode(GL_PROJECTION); glPopMatrix(); @@ -147,30 +141,17 @@ void im2DRenderIndexedPrimitive(PrimitiveType primType, // Im3D -static AttribDesc im3dattribDesc[3] = { - { ATTRIB_POS, GL_FLOAT, GL_FALSE, 3, - sizeof(Im3DVertex), 0 }, - { ATTRIB_COLOR, GL_UNSIGNED_BYTE, GL_TRUE, 4, - sizeof(Im3DVertex), OFFSET_OF(Im3DVertex, r) }, - { ATTRIB_TEXCOORDS0, GL_FLOAT, GL_FALSE, 2, - sizeof(Im3DVertex), OFFSET_OF(Im3DVertex, u) }, -}; -static uint32 im3DVbo, im3DIbo; -static int32 num3DVertices; // not actually needed here +static int32 num3DVertices; static void* currentIm3dVertices; void openIm3D(void) { - glGenBuffers(1, &im3DIbo); - glGenBuffers(1, &im3DVbo); } void closeIm3D(void) { - glDeleteBuffers(1, &im3DIbo); - glDeleteBuffers(1, &im3DVbo); } void @@ -186,21 +167,23 @@ im3DTransform(void *vertices, int32 numVertices, Matrix *world, uint32 flags) if((flags & im3d::VERTEXUV) == 0) SetRenderStatePtr(TEXTURERASTER, nil); - glBindBuffer(GL_ARRAY_BUFFER, im3DVbo); - glBufferData(GL_ARRAY_BUFFER, numVertices*sizeof(Im3DVertex), vertices, GL_DYNAMIC_DRAW); + currentIm3dVertices = vertices; num3DVertices = numVertices; } void im3DRenderPrimitive(PrimitiveType primType) { - glBindBuffer(GL_ARRAY_BUFFER, im3DVbo); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(3, GL_FLOAT, sizeof(Im3DVertex), (void*)0); + glVertexPointer(3, GL_FLOAT, sizeof(Im3DVertex), currentIm3dVertices); + glEnableClientState(GL_COLOR_ARRAY); - glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im3DVertex), (void*)OFFSET_OF(Im3DVertex, r)); + glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im3DVertex), (void*)((uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, r))); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glTexCoordPointer(2, GL_FLOAT, sizeof(Im3DVertex), (void*)OFFSET_OF(Im3DVertex, u)); + glTexCoordPointer(2, GL_FLOAT, sizeof(Im3DVertex), (void*)((uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, u))); flushCache(); glDrawArrays(primTypeMap[primType], 0, num3DVertices); @@ -213,19 +196,20 @@ im3DRenderPrimitive(PrimitiveType primType) void im3DRenderIndexedPrimitive(PrimitiveType primType, void *indices, int32 numIndices) { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, im3DIbo); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices*2, indices, GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - glBindBuffer(GL_ARRAY_BUFFER, im3DVbo); glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(3, GL_FLOAT, sizeof(Im3DVertex), (void*)0); + glVertexPointer(3, GL_FLOAT, sizeof(Im3DVertex), currentIm3dVertices); + glEnableClientState(GL_COLOR_ARRAY); - glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im3DVertex), (void*)OFFSET_OF(Im3DVertex, r)); + glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im3DVertex), (void*)((uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, r))); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glTexCoordPointer(2, GL_FLOAT, sizeof(Im3DVertex), (void*)OFFSET_OF(Im3DVertex, u)); + glTexCoordPointer(2, GL_FLOAT, sizeof(Im3DVertex), (void*)((uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, u))); flushCache(); - glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, nil); + glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, indices); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_COLOR_ARRAY);