diff --git a/KREngine/kraken/KRContext.cpp b/KREngine/kraken/KRContext.cpp index 31a81d0..b804aef 100644 --- a/KREngine/kraken/KRContext.cpp +++ b/KREngine/kraken/KRContext.cpp @@ -11,12 +11,9 @@ #include "KRContext.h" #include "KRCamera.h" -int KRContext::KRENGINE_MAX_VBO_HANDLES; -int KRContext::KRENGINE_MAX_VBO_MEM; int KRContext::KRENGINE_MAX_SHADER_HANDLES; -int KRContext::KRENGINE_MAX_TEXTURE_HANDLES; -int KRContext::KRENGINE_MAX_TEXTURE_MEM; -int KRContext::KRENGINE_TARGET_TEXTURE_MEM_MAX; +int KRContext::KRENGINE_GPU_MEM_MAX; +int KRContext::KRENGINE_GPU_MEM_TARGET; int KRContext::KRENGINE_MAX_TEXTURE_DIM; int KRContext::KRENGINE_MIN_TEXTURE_DIM; int KRContext::KRENGINE_PRESTREAM_DISTANCE; @@ -334,8 +331,8 @@ void KRContext::getMemoryStats(long &free_memory) void KRContext::doStreaming() { if(m_streamingEnabled) { - long memoryRemaining = KRENGINE_TARGET_TEXTURE_MEM_MAX/* + KRENGINE_MAX_VBO_MEM*/; - long memoryRemainingThisFrame = KRENGINE_MAX_TEXTURE_MEM/* + KRENGINE_MAX_VBO_MEM */ - m_pTextureManager->getMemUsed() - m_pMeshManager->getMemUsed(); + long memoryRemaining = KRENGINE_GPU_MEM_TARGET; + long memoryRemainingThisFrame = KRENGINE_GPU_MEM_MAX - m_pTextureManager->getMemUsed() - m_pMeshManager->getMemUsed(); m_pMeshManager->doStreaming(memoryRemaining, memoryRemainingThisFrame); m_pTextureManager->doStreaming(memoryRemaining, memoryRemainingThisFrame); } diff --git a/KREngine/kraken/KRContext.h b/KREngine/kraken/KRContext.h index a4e7041..902b8f4 100644 --- a/KREngine/kraken/KRContext.h +++ b/KREngine/kraken/KRContext.h @@ -24,12 +24,9 @@ class KRContext { public: - static int KRENGINE_MAX_VBO_HANDLES; - static int KRENGINE_MAX_VBO_MEM; static int KRENGINE_MAX_SHADER_HANDLES; - static int KRENGINE_MAX_TEXTURE_HANDLES; - static int KRENGINE_MAX_TEXTURE_MEM; - static int KRENGINE_TARGET_TEXTURE_MEM_MAX; + static int KRENGINE_GPU_MEM_MAX; + static int KRENGINE_GPU_MEM_TARGET; static int KRENGINE_MAX_TEXTURE_DIM; static int KRENGINE_MIN_TEXTURE_DIM; static int KRENGINE_PRESTREAM_DISTANCE; diff --git a/KREngine/kraken/KREngine.mm b/KREngine/kraken/KREngine.mm index f8c2540..43a7bd6 100644 --- a/KREngine/kraken/KREngine.mm +++ b/KREngine/kraken/KREngine.mm @@ -89,17 +89,14 @@ void kraken::set_debug_text(const std::string &print_text) } - KRContext::KRENGINE_MAX_VBO_HANDLES = 10000; KRContext::KRENGINE_MAX_SHADER_HANDLES = 4000; - KRContext::KRENGINE_MAX_TEXTURE_HANDLES = 10000; KRContext::KRENGINE_MAX_TEXTURE_DIM = 2048; KRContext::KRENGINE_MIN_TEXTURE_DIM = 64; KRContext::KRENGINE_PRESTREAM_DISTANCE = 1000.0f; - KRContext::KRENGINE_MAX_VBO_MEM = total_ram * 2 / 4; - KRContext::KRENGINE_MAX_TEXTURE_MEM = total_ram * 1 / 8; - KRContext::KRENGINE_TARGET_TEXTURE_MEM_MAX = KRContext::KRENGINE_MAX_TEXTURE_MEM * 3 / 4; + KRContext::KRENGINE_GPU_MEM_MAX = total_ram * 1 / 8; + KRContext::KRENGINE_GPU_MEM_TARGET = KRContext::KRENGINE_GPU_MEM_MAX * 3 / 4; @@ -107,32 +104,23 @@ void kraken::set_debug_text(const std::string &print_text) BOOL isIpad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad; BOOL isRetina = [[UIScreen mainScreen] scale] >= 2.0; if(isIpad && isRetina) { - KRContext::KRENGINE_MAX_VBO_HANDLES = 10000; - KRContext::KRENGINE_MAX_VBO_MEM = 128000000 * 2; KRContext::KRENGINE_MAX_SHADER_HANDLES = 100; - KRContext::KRENGINE_MAX_TEXTURE_HANDLES = 10000; - KRContext::KRENGINE_MAX_TEXTURE_MEM = 64000000 * 2; - KRContext::KRENGINE_TARGET_TEXTURE_MEM_MAX = 48000000 * 2; + KRContext::KRENGINE_GPU_MEM_MAX = 64000000 * 2; + KRContext::KRENGINE_GPU_MEM_TARGET = 48000000 * 2; KRContext::KRENGINE_MAX_TEXTURE_DIM = 2048; KRContext::KRENGINE_MIN_TEXTURE_DIM = 64; } else { - KRContext::KRENGINE_MAX_VBO_HANDLES = 10000; - KRContext::KRENGINE_MAX_VBO_MEM = 128000000; KRContext::KRENGINE_MAX_SHADER_HANDLES = 100; - KRContext::KRENGINE_MAX_TEXTURE_HANDLES = 10000; - KRContext::KRENGINE_MAX_TEXTURE_MEM = 64000000; - KRContext::KRENGINE_TARGET_TEXTURE_MEM_MAX = 48000000; + KRContext::KRENGINE_GPU_MEM_MAX = 64000000; + KRContext::KRENGINE_GPU_MEM_TARGET = 48000000; KRContext::KRENGINE_MAX_TEXTURE_DIM = 2048; KRContext::KRENGINE_MIN_TEXTURE_DIM = 64; } */ #else - KRContext::KRENGINE_MAX_VBO_HANDLES = 10000; - KRContext::KRENGINE_MAX_VBO_MEM = 256000000; KRContext::KRENGINE_MAX_SHADER_HANDLES = 4000; - KRContext::KRENGINE_MAX_TEXTURE_HANDLES = 10000; - KRContext::KRENGINE_MAX_TEXTURE_MEM = 256000000; - KRContext::KRENGINE_TARGET_TEXTURE_MEM_MAX = 192000000; + KRContext::KRENGINE_GPU_MEM_MAX = 256000000; + KRContext::KRENGINE_GPU_MEM_TARGET = 192000000; KRContext::KRENGINE_MAX_TEXTURE_DIM = 8192; KRContext::KRENGINE_MIN_TEXTURE_DIM = 64; KRContext::KRENGINE_PRESTREAM_DISTANCE = 1000.0f; diff --git a/KREngine/kraken/KRMeshManager.cpp b/KREngine/kraken/KRMeshManager.cpp index 0928cf9..4843a75 100644 --- a/KREngine/kraken/KRMeshManager.cpp +++ b/KREngine/kraken/KRMeshManager.cpp @@ -206,7 +206,7 @@ void KRMeshManager::startFrame(float deltaTime) if(m_streamerComplete) { assert(m_activeVBOs_streamer_copy.size() == 0); // The streamer should have emptied this if it really did complete - const long KRENGINE_VBO_EXPIRY_FRAMES = 3; + const long KRENGINE_VBO_EXPIRY_FRAMES = 1; std::set expiredVBOs; for(auto itr=m_vbosActive.begin(); itr != m_vbosActive.end(); itr++) { @@ -581,17 +581,22 @@ void KRMeshManager::KRVBOData::load() #endif GLDEBUG(glBindBuffer(GL_ARRAY_BUFFER, m_vbo_handle)); -#if GL_OES_mapbuffer - GLDEBUG(glBufferData(GL_ARRAY_BUFFER, m_data->getSize(), NULL, m_static_vbo ? GL_STATIC_DRAW : GL_DYNAMIC_DRAW)); - GLDEBUG(void *map_ptr = glMapBufferOES(GL_ARRAY_BUFFER, GL_WRITE_ONLY_OES)); - m_data->copy(map_ptr); - GLDEBUG(glUnmapBufferOES(GL_ARRAY_BUFFER)); -#else - m_data->lock(); - GLDEBUG(glBufferData(GL_ARRAY_BUFFER, m_data->getSize(), m_data->getStart(), m_static_vbo ? GL_STATIC_DRAW : GL_DYNAMIC_DRAW)); - m_data->unlock(); + bool use_mapbuffer = true; +#if GL_OES_mapbuffer + if(use_mapbuffer) { + GLDEBUG(glBufferData(GL_ARRAY_BUFFER, m_data->getSize(), NULL, m_static_vbo ? GL_STATIC_DRAW : GL_DYNAMIC_DRAW)); + GLDEBUG(void *map_ptr = glMapBufferOES(GL_ARRAY_BUFFER, GL_WRITE_ONLY_OES)); + m_data->copy(map_ptr); + GLDEBUG(glUnmapBufferOES(GL_ARRAY_BUFFER)); + } + else #endif + { + m_data->lock(); + GLDEBUG(glBufferData(GL_ARRAY_BUFFER, m_data->getSize(), m_data->getStart(), m_static_vbo ? GL_STATIC_DRAW : GL_DYNAMIC_DRAW)); + m_data->unlock(); + } configureAttribs(m_vertex_attrib_flags); @@ -601,16 +606,19 @@ void KRMeshManager::KRVBOData::load() GLDEBUG(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_vbo_handle_indexes)); #if GL_OES_mapbuffer - - GLDEBUG(glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_index_data->getSize(), NULL, m_static_vbo ? GL_STATIC_DRAW : GL_DYNAMIC_DRAW)); - GLDEBUG(void *map_ptr = glMapBufferOES(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY_OES)); - m_index_data->copy(map_ptr); - GLDEBUG(glUnmapBufferOES(GL_ELEMENT_ARRAY_BUFFER)); -#else - m_index_data->lock(); - GLDEBUG(glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_index_data->getSize(), m_index_data->getStart(), m_static_vbo ? GL_STATIC_DRAW : GL_DYNAMIC_DRAW)); - m_index_data->unlock(); + if(use_mapbuffer) { + GLDEBUG(glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_index_data->getSize(), NULL, m_static_vbo ? GL_STATIC_DRAW : GL_DYNAMIC_DRAW)); + GLDEBUG(void *map_ptr = glMapBufferOES(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY_OES)); + m_index_data->copy(map_ptr); + GLDEBUG(glUnmapBufferOES(GL_ELEMENT_ARRAY_BUFFER)); + } + else #endif + { + m_index_data->lock(); + GLDEBUG(glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_index_data->getSize(), m_index_data->getStart(), m_static_vbo ? GL_STATIC_DRAW : GL_DYNAMIC_DRAW)); + m_index_data->unlock(); + } } m_is_vbo_loaded = true; diff --git a/KREngine/kraken/KRTextureManager.cpp b/KREngine/kraken/KRTextureManager.cpp index c31f7e1..93ac00f 100644 --- a/KREngine/kraken/KRTextureManager.cpp +++ b/KREngine/kraken/KRTextureManager.cpp @@ -425,7 +425,7 @@ void KRTextureManager::addMemoryTransferredThisFrame(long memoryTransferred) void KRTextureManager::memoryChanged(long memoryDelta) { m_textureMemUsed += memoryDelta; - //fprintf(stderr, "Texture Memory: %ld / %i\n", (long)m_textureMemUsed, KRContext::KRENGINE_MAX_TEXTURE_MEM); + //fprintf(stderr, "Texture Memory: %ld / %i\n", (long)m_textureMemUsed, KRContext::KRENGINE_GPU_MEM_MAX); } unordered_map &KRTextureManager::getTextures()