diff --git a/KREngine/kraken/KRMesh.cpp b/KREngine/kraken/KRMesh.cpp index 5082a07..7e0e88c 100644 --- a/KREngine/kraken/KRMesh.cpp +++ b/KREngine/kraken/KRMesh.cpp @@ -110,6 +110,8 @@ KRMesh::~KRMesh() { } void KRMesh::releaseData() { + m_hasTransparency = false; + m_submeshes.clear(); if(m_pIndexBaseData) { m_pIndexBaseData->unlock(); delete m_pIndexBaseData; @@ -397,7 +399,7 @@ void KRMesh::renderSubmesh(int iSubmesh, KRNode::RenderPass renderPass, const st void KRMesh::LoadData(const KRMesh::mesh_info &mi, bool calculate_normals, bool calculate_tangents) { - clearBuffers(); + releaseData(); // TODO, FINDME - These values should be passed as a parameter and set by GUI flags bool use_short_vertexes = false; @@ -645,10 +647,6 @@ KRVector3 KRMesh::getMaxPoint() const { return m_maxPoint; } -void KRMesh::clearBuffers() { - m_submeshes.clear(); -} - int KRMesh::getLODCoverage() const { return m_lodCoverage; } diff --git a/KREngine/kraken/KRMesh.h b/KREngine/kraken/KRMesh.h index 602a5a6..eecacc2 100644 --- a/KREngine/kraken/KRMesh.h +++ b/KREngine/kraken/KRMesh.h @@ -250,9 +250,6 @@ private: int m_vertex_size; void updateAttributeOffsets(); - - void clearBuffers(); - void setName(const std::string name); diff --git a/KREngine/kraken/KRMeshStreamer.h b/KREngine/kraken/KRMeshStreamer.h index a0c36e9..beb3666 100644 --- a/KREngine/kraken/KRMeshStreamer.h +++ b/KREngine/kraken/KRMeshStreamer.h @@ -45,11 +45,14 @@ public: KRMeshStreamer(KRContext &context); ~KRMeshStreamer(); + void startStreamer(); + private: KRContext &m_context; std::thread m_thread; std::atomic m_stop; + std::atomic m_running; void run(); }; diff --git a/KREngine/kraken/KRMeshStreamer.mm b/KREngine/kraken/KRMeshStreamer.mm index 3067fe3..1fd6560 100644 --- a/KREngine/kraken/KRMeshStreamer.mm +++ b/KREngine/kraken/KRMeshStreamer.mm @@ -28,29 +28,40 @@ NSOpenGLContext *gMeshStreamerContext = nil; KRMeshStreamer::KRMeshStreamer(KRContext &context) : m_context(context) { - -#if TARGET_OS_IPHONE - gMeshStreamerContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 sharegroup: [EAGLContext currentContext].sharegroup]; -#elif TARGET_OS_MAC - NSOpenGLPixelFormatAttribute pixelFormatAttributes[] = - { - NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core, - 0 - }; - NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes] autorelease]; - gMeshStreamerContext = [[[NSOpenGLContext alloc] initWithFormat: pixelFormat shareContext: [NSOpenGLContext currentContext] ] autorelease]; -#else - #error Unsupported Platform -#endif - + m_running = false; m_stop = false; - m_thread = std::thread(&KRMeshStreamer::run, this); +} + +void KRMeshStreamer::startStreamer() +{ + if(!m_running) { + m_running = true; + +#if TARGET_OS_IPHONE + gMeshStreamerContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 sharegroup: [EAGLContext currentContext].sharegroup]; +#elif TARGET_OS_MAC + NSOpenGLPixelFormatAttribute pixelFormatAttributes[] = + { + NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core, + 0 + }; + NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes] autorelease]; + gMeshStreamerContext = [[[NSOpenGLContext alloc] initWithFormat: pixelFormat shareContext: [NSOpenGLContext currentContext] ] autorelease]; +#else + #error Unsupported Platform +#endif + + m_thread = std::thread(&KRMeshStreamer::run, this); + } } KRMeshStreamer::~KRMeshStreamer() { - m_stop = true; - m_thread.join(); + if(m_running) { + m_stop = true; + m_thread.join(); + m_running = false; + } [gMeshStreamerContext release]; } diff --git a/KREngine/kraken/KRTextureStreamer.h b/KREngine/kraken/KRTextureStreamer.h index 22dbdb0..39f3705 100644 --- a/KREngine/kraken/KRTextureStreamer.h +++ b/KREngine/kraken/KRTextureStreamer.h @@ -55,7 +55,6 @@ private: std::atomic m_running; void run(); - }; #endif /* defined(KRTEXTURESTREAMER_H) */ diff --git a/KREngine/kraken/KRTextureStreamer.mm b/KREngine/kraken/KRTextureStreamer.mm index 46043cc..5185c22 100644 --- a/KREngine/kraken/KRTextureStreamer.mm +++ b/KREngine/kraken/KRTextureStreamer.mm @@ -27,7 +27,6 @@ NSOpenGLContext *gTextureStreamerContext = nil; #error Unsupported Platform #endif - KRTextureStreamer::KRTextureStreamer(KRContext &context) : m_context(context) { m_running = false; @@ -65,8 +64,11 @@ void KRTextureStreamer::startStreamer() KRTextureStreamer::~KRTextureStreamer() { - m_stop = true; - m_thread.join(); + if(m_running) { + m_stop = true; + m_thread.join(); + m_running = false; + } [gTextureStreamerContext release]; } @@ -92,6 +94,4 @@ void KRTextureStreamer::run() } std::this_thread::sleep_for( sleep_duration ); } - - m_running = false; }