Asynchronous streaming and memory management improvements in progress.
--HG-- branch : async_streaming
This commit is contained in:
@@ -55,32 +55,30 @@ KRTextureCube::~KRTextureCube()
|
||||
|
||||
bool KRTextureCube::createGLTexture(int lod_max_dim)
|
||||
{
|
||||
assert(m_iNewHandle == m_iHandle); // Only allow one resize per frame
|
||||
|
||||
bool success = true;
|
||||
GLuint prev_handle = 0;
|
||||
int prev_lod_max_dim = 0;
|
||||
long prev_mem_size = 0;
|
||||
#if GL_APPLE_copy_texture_levels && GL_EXT_texture_storage
|
||||
|
||||
if(m_iHandle != 0) {
|
||||
prev_handle = m_iHandle;
|
||||
prev_mem_size = getMemSize();
|
||||
m_iHandle = 0;
|
||||
m_textureMemUsed = 0;
|
||||
prev_lod_max_dim = m_current_lod_max_dim;
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
releaseHandle();
|
||||
#endif
|
||||
|
||||
m_current_lod_max_dim = 0;
|
||||
GLDEBUG(glGenTextures(1, &m_iHandle));
|
||||
if(m_iHandle == 0) {
|
||||
|
||||
|
||||
|
||||
m_iNewHandle = 0;
|
||||
GLDEBUG(glGenTextures(1, &m_iNewHandle));
|
||||
if(m_iNewHandle == 0) {
|
||||
m_iNewHandle = m_iHandle;
|
||||
success = false;
|
||||
} else {
|
||||
|
||||
GLDEBUG(glBindTexture(GL_TEXTURE_CUBE_MAP, m_iHandle));
|
||||
m_current_lod_max_dim = 0;
|
||||
GLDEBUG(glBindTexture(GL_TEXTURE_CUBE_MAP, m_iNewHandle));
|
||||
|
||||
bool bMipMaps = false;
|
||||
|
||||
@@ -89,7 +87,7 @@ bool KRTextureCube::createGLTexture(int lod_max_dim)
|
||||
KRTexture2D *faceTexture = (KRTexture2D *)getContext().getTextureManager()->getTexture(faceName);
|
||||
if(faceTexture) {
|
||||
if(faceTexture->hasMipmaps()) bMipMaps = true;
|
||||
faceTexture->uploadTexture(TARGETS[i], lod_max_dim, m_current_lod_max_dim, m_textureMemUsed, prev_lod_max_dim, prev_handle);
|
||||
faceTexture->uploadTexture(TARGETS[i], lod_max_dim, m_current_lod_max_dim, m_newTextureMemUsed, prev_lod_max_dim);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,11 +99,7 @@ bool KRTextureCube::createGLTexture(int lod_max_dim)
|
||||
GLDEBUG(glGenerateMipmap(GL_TEXTURE_CUBE_MAP));
|
||||
}
|
||||
}
|
||||
|
||||
if(prev_handle != 0) {
|
||||
getContext().getTextureManager()->memoryChanged(-prev_mem_size);
|
||||
GLDEBUG(glDeleteTextures(1, &prev_handle));
|
||||
}
|
||||
|
||||
|
||||
return success;
|
||||
}
|
||||
@@ -141,6 +135,7 @@ void KRTextureCube::resetPoolExpiry()
|
||||
|
||||
void KRTextureCube::bind(GLuint texture_unit)
|
||||
{
|
||||
KRTexture::bind(texture_unit);
|
||||
GLuint handle = getHandle();
|
||||
GLDEBUG(glBindTexture(GL_TEXTURE_CUBE_MAP, handle));
|
||||
if(handle) {
|
||||
|
||||
Reference in New Issue
Block a user