Asynchronous streaming and memory management improvements in progress.

Stability improved.

--HG--
branch : async_streaming
This commit is contained in:
2013-11-16 03:22:31 -08:00
parent 8b29ffab69
commit 240d2ee278
2 changed files with 9 additions and 4 deletions

View File

@@ -34,7 +34,7 @@
#include "KREngine-common.h"
#define KRENGINE_MIN_MMAP 327680000
#define KRENGINE_MIN_MMAP 32768
class KRDataBlock {
public:

View File

@@ -20,6 +20,7 @@ KRTexture::KRTexture(KRContext &context, std::string name) : KRResource(context,
m_newTextureMemUsed = 0;
m_last_frame_used = 0;
m_last_frame_bound = 0;
m_handle_lock.clear();
}
KRTexture::~KRTexture()
@@ -30,6 +31,8 @@ KRTexture::~KRTexture()
void KRTexture::releaseHandles() {
long mem_size = getMemSize();
while(m_handle_lock.test_and_set()); // Spin lock
if(m_iNewHandle != 0) {
GLDEBUG(glDeleteTextures(1, &m_iNewHandle));
m_iNewHandle = 0;
@@ -40,6 +43,9 @@ void KRTexture::releaseHandles() {
m_iHandle = 0;
m_textureMemUsed = 0;
}
m_handle_lock.clear();
getContext().getTextureManager()->memoryChanged(-mem_size);
}
@@ -54,7 +60,7 @@ long KRTexture::getReferencedMemSize() {
void KRTexture::resize(int max_dim)
{
if(m_handle_lock.test_and_set())
if(!m_handle_lock.test_and_set())
{
if(m_iHandle == m_iNewHandle) {
if(max_dim == 0) {
@@ -134,8 +140,7 @@ bool KRTexture::canStreamOut() const {
void KRTexture::_swapHandles()
{
if(m_handle_lock.test_and_set())
{
if(!m_handle_lock.test_and_set()) {
if(m_iHandle != m_iNewHandle) {
if(m_iHandle != 0) {
GLDEBUG(glDeleteTextures(1, &m_iHandle));