From 6992f313a9ee19cc01910c0210404c9195d1a9ed Mon Sep 17 00:00:00 2001 From: Shinovon Date: Tue, 12 May 2026 08:00:13 +0500 Subject: [PATCH] Something with streaming --- src/core/Streaming.cpp | 47 ++++++++++++---------------- src/rw/TexRead.cpp | 6 ++++ src/skel/symbian/symbian.cpp | 8 +++++ vendor/librw/src/gl/gl3raster.cpp | 2 +- vendor/librw/src/gles1/gl1raster.cpp | 4 +-- 5 files changed, 37 insertions(+), 30 deletions(-) diff --git a/src/core/Streaming.cpp b/src/core/Streaming.cpp index 594a054..5624b64 100644 --- a/src/core/Streaming.cpp +++ b/src/core/Streaming.cpp @@ -85,8 +85,6 @@ int32 islandLODcomSub; int32 islandLODsubInd; int32 islandLODsubCom; -#define STREAMING_MEM_SIZE (10 * 1024 * 1024) - bool CStreamingInfo::GetCdPosnAndSize(uint32 &posn, uint32 &size) { @@ -221,19 +219,13 @@ CStreaming::Init2(void) #ifdef GTA_PC #define MB (1024*1024) #ifdef __SYMBIAN32__ - extern bool moreVram; - if (moreVram) { - extern size_t _dwMemAvailPhys; - ms_memoryAvailable = (_dwMemAvailPhys - 10*MB)/2; - if(ms_memoryAvailable < 10*MB) - ms_memoryAvailable = 10*MB; - } else - ms_memoryAvailable = STREAMING_MEM_SIZE; + extern size_t streamingMemSize; + ms_memoryAvailable = streamingMemSize; #else - extern size_t _dwMemAvailPhys; - ms_memoryAvailable = (_dwMemAvailPhys - 10 * MB) / 2; - if (ms_memoryAvailable < 10 * MB) - ms_memoryAvailable = 10 * MB; + extern size_t _dwMemAvailPhys; + ms_memoryAvailable = (_dwMemAvailPhys - 10 * MB) / 2; + if (ms_memoryAvailable < 10 * MB) + ms_memoryAvailable = 10 * MB; #endif desiredNumVehiclesLoaded = 12; if(desiredNumVehiclesLoaded > MAXVEHICLESLOADED) @@ -647,7 +639,9 @@ CStreaming::ConvertBufferToObject(int8 *buf, int32 streamId) if(ms_aInfoForModel[streamId].m_loadState != STREAMSTATE_STARTED){ ms_aInfoForModel[streamId].m_loadState = STREAMSTATE_LOADED; #ifndef USE_CUSTOM_ALLOCATOR - ms_memoryUsed += ms_aInfoForModel[streamId].GetCdSize() * CDSTREAM_SECTOR_SIZE; + if(streamId < STREAM_OFFSET_TXD) { + ms_memoryUsed += ms_aInfoForModel[streamId].GetCdSize() * CDSTREAM_SECTOR_SIZE; + } #endif } @@ -713,7 +707,9 @@ CStreaming::FinishLoadingLargeFile(int8 *buf, int32 streamId) ms_aInfoForModel[streamId].m_loadState = STREAMSTATE_LOADED; // only done if success on PS2 #ifndef USE_CUSTOM_ALLOCATOR - ms_memoryUsed += ms_aInfoForModel[streamId].GetCdSize() * CDSTREAM_SECTOR_SIZE; + if(streamId < STREAM_OFFSET_TXD) { + ms_memoryUsed += ms_aInfoForModel[streamId].GetCdSize() * CDSTREAM_SECTOR_SIZE; + } #endif if(!success){ @@ -959,7 +955,9 @@ CStreaming::RemoveModel(int32 id) #ifdef USE_CUSTOM_ALLOCATOR UpdateMemoryUsed(); #else - ms_memoryUsed -= ms_aInfoForModel[id].GetCdSize()*CDSTREAM_SECTOR_SIZE; + if (id < STREAM_OFFSET_TXD) { + ms_memoryUsed -= ms_aInfoForModel[id].GetCdSize()*CDSTREAM_SECTOR_SIZE; + } #endif } @@ -2701,17 +2699,12 @@ CStreaming::MakeSpaceFor(int32 size) #define MB (1024 * 1024) if(ms_memoryAvailable == 0) { #ifdef __SYMBIAN32__ - extern bool moreVram; - if (moreVram) { - extern size_t _dwMemAvailPhys; - ms_memoryAvailable = (_dwMemAvailPhys - 10 * MB) / 2; - if(ms_memoryAvailable < 10 * MB) ms_memoryAvailable = 10 * MB; - } else - ms_memoryAvailable = STREAMING_MEM_SIZE; + extern size_t streamingMemSize; + ms_memoryAvailable = streamingMemSize; #else - extern size_t _dwMemAvailPhys; - ms_memoryAvailable = (_dwMemAvailPhys - 10 * MB) / 2; - if (ms_memoryAvailable < 10 * MB) ms_memoryAvailable = 10 * MB; + extern size_t _dwMemAvailPhys; + ms_memoryAvailable = (_dwMemAvailPhys - 10 * MB) / 2; + if (ms_memoryAvailable < 10 * MB) ms_memoryAvailable = 10 * MB; #endif } #undef MB diff --git a/src/rw/TexRead.cpp b/src/rw/TexRead.cpp index 2c7ccbf..87e2d64 100644 --- a/src/rw/TexRead.cpp +++ b/src/rw/TexRead.cpp @@ -532,6 +532,8 @@ CreateTxdImageForVideoCard() // only works for textures that are not yet loaded // so let's hope that is the case for all rw::gl3::needToReadBackTextures = true; +#elif defined RW_GLES1 + rw::gl1::needToReadBackTextures = true; #endif #ifdef DISABLE_VSYNC_ON_TEXTURE_CONVERSION @@ -582,6 +584,8 @@ CreateTxdImageForVideoCard() CStreaming::RemoveTxd(i); #ifdef RW_GL3 rw::gl3::needToReadBackTextures = false; +#elif defined RW_GLES1 + rw::gl1::needToReadBackTextures = false; #endif return false; } @@ -617,6 +621,8 @@ CreateTxdImageForVideoCard() #ifdef RW_GL3 rw::gl3::needToReadBackTextures = false; +#elif defined RW_GLES1 + rw::gl1::needToReadBackTextures = false; #endif if (!pDir->WriteDirFile("models\\txd.dir")) { diff --git a/src/skel/symbian/symbian.cpp b/src/skel/symbian/symbian.cpp index 3c9588e..fdb5ea5 100644 --- a/src/skel/symbian/symbian.cpp +++ b/src/skel/symbian/symbian.cpp @@ -49,6 +49,7 @@ psGlobalType psGlobal; uint32 gGameState = 0; long _dwOperatingSystemVersion = 0; uint32 _dwMemAvailPhys = 0; +size_t streamingMemSize; static EGLDisplay eglDisplay; static EGLContext eglContext; @@ -526,6 +527,13 @@ public: VersionInfo::TPlatformVersion platformVersion; VersionInfo::GetVersion(platformVersion); moreVram = platformVersion.iMajorVersion == 5 && platformVersion.iMinorVersion >= 4; + if (moreVram) { + streamingMemSize = 12 * 1024 * 1024; + } else { + streamingMemSize = 10 * 1024 * 1024; + } +#else + streamingMemSize = 8 * 1024 * 1024; #endif TSize size = Size(); diff --git a/vendor/librw/src/gl/gl3raster.cpp b/vendor/librw/src/gl/gl3raster.cpp index 95cc034..71545b1 100644 --- a/vendor/librw/src/gl/gl3raster.cpp +++ b/vendor/librw/src/gl/gl3raster.cpp @@ -630,7 +630,7 @@ rasterUnlock(Raster *raster, int32 level) #endif ) { // convert to 16-bit - uint16_t* pixels16 = (uint16_t*)malloc(raster->width * raster->height * sizeof(uint16_t)); + uint16_t* pixels16 = (uint16_t*)rwMalloc(raster->width * raster->height * sizeof(uint16_t)); uint8_t* pixels8 = (uint8_t*)raster->pixels; for (int i = 0; i < raster->width * raster->height; i++) { diff --git a/vendor/librw/src/gles1/gl1raster.cpp b/vendor/librw/src/gles1/gl1raster.cpp index bca261a..e258225 100644 --- a/vendor/librw/src/gles1/gl1raster.cpp +++ b/vendor/librw/src/gles1/gl1raster.cpp @@ -456,7 +456,7 @@ void rasterUnlock(Raster *raster, int32 level){ // flip vertical (igual que antes) { int stride = raster->width * natras->bpp; - uint8_t *tmp = (uint8_t*)malloc(stride); + uint8_t *tmp = (uint8_t*)rwMalloc(stride); for(int y = 0; y < raster->height / 2; y++){ uint8_t *a = (uint8_t*)raster->pixels + y * stride; uint8_t *b = (uint8_t*)raster->pixels + (raster->height - 1 - y) * stride; @@ -470,7 +470,7 @@ void rasterUnlock(Raster *raster, int32 level){ if(!natras->isCompressed){ if(natras->format == GL_RGBA && natras->type == GL_UNSIGNED_BYTE){ // convertir RGBA8888 → RGBA4444 - uint16_t *pixels16 = (uint16_t*)malloc(raster->width * raster->height * 2); + uint16_t *pixels16 = (uint16_t*)rwMalloc(raster->width * raster->height * 2); uint8_t *pixels8 = (uint8_t*)raster->pixels; for(int i = 0; i < raster->width * raster->height; i++){ uint8_t r = pixels8[i*4+0];