Asynchronous streaming and memory management improvements in progress.
Stability improved. --HG-- branch : async_streaming
This commit is contained in:
@@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
#include "KREngine-common.h"
|
#include "KREngine-common.h"
|
||||||
|
|
||||||
#define KRENGINE_MIN_MMAP 327680000
|
#define KRENGINE_MIN_MMAP 32768
|
||||||
|
|
||||||
class KRDataBlock {
|
class KRDataBlock {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ KRTexture::KRTexture(KRContext &context, std::string name) : KRResource(context,
|
|||||||
m_newTextureMemUsed = 0;
|
m_newTextureMemUsed = 0;
|
||||||
m_last_frame_used = 0;
|
m_last_frame_used = 0;
|
||||||
m_last_frame_bound = 0;
|
m_last_frame_bound = 0;
|
||||||
|
m_handle_lock.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
KRTexture::~KRTexture()
|
KRTexture::~KRTexture()
|
||||||
@@ -30,6 +31,8 @@ KRTexture::~KRTexture()
|
|||||||
void KRTexture::releaseHandles() {
|
void KRTexture::releaseHandles() {
|
||||||
long mem_size = getMemSize();
|
long mem_size = getMemSize();
|
||||||
|
|
||||||
|
while(m_handle_lock.test_and_set()); // Spin lock
|
||||||
|
|
||||||
if(m_iNewHandle != 0) {
|
if(m_iNewHandle != 0) {
|
||||||
GLDEBUG(glDeleteTextures(1, &m_iNewHandle));
|
GLDEBUG(glDeleteTextures(1, &m_iNewHandle));
|
||||||
m_iNewHandle = 0;
|
m_iNewHandle = 0;
|
||||||
@@ -40,6 +43,9 @@ void KRTexture::releaseHandles() {
|
|||||||
m_iHandle = 0;
|
m_iHandle = 0;
|
||||||
m_textureMemUsed = 0;
|
m_textureMemUsed = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_handle_lock.clear();
|
||||||
|
|
||||||
getContext().getTextureManager()->memoryChanged(-mem_size);
|
getContext().getTextureManager()->memoryChanged(-mem_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,7 +60,7 @@ long KRTexture::getReferencedMemSize() {
|
|||||||
|
|
||||||
void KRTexture::resize(int max_dim)
|
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(m_iHandle == m_iNewHandle) {
|
||||||
if(max_dim == 0) {
|
if(max_dim == 0) {
|
||||||
@@ -134,8 +140,7 @@ bool KRTexture::canStreamOut() const {
|
|||||||
|
|
||||||
void KRTexture::_swapHandles()
|
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 != m_iNewHandle) {
|
||||||
if(m_iHandle != 0) {
|
if(m_iHandle != 0) {
|
||||||
GLDEBUG(glDeleteTextures(1, &m_iHandle));
|
GLDEBUG(glDeleteTextures(1, &m_iHandle));
|
||||||
|
|||||||
Reference in New Issue
Block a user