From 081ae32d3508ae95d0c777c927b7a13559590f97 Mon Sep 17 00:00:00 2001 From: Shyotl Date: Wed, 25 Jul 2012 23:08:37 -0500 Subject: [PATCH 1/2] Disable diagnostic fmodex stream allocation overrides. (will break on ogg streams. badly.) --- indra/llaudio/llaudioengine_fmodex.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/llaudio/llaudioengine_fmodex.cpp b/indra/llaudio/llaudioengine_fmodex.cpp index 3f90f9cb2..7a8e862e2 100644 --- a/indra/llaudio/llaudioengine_fmodex.cpp +++ b/indra/llaudio/llaudioengine_fmodex.cpp @@ -132,9 +132,9 @@ bool LLAudioEngine_FMODEX::init(const S32 num_channels, void* userdata) LL_DEBUGS("AppInit") << "LLAudioEngine_FMODEX::init() initializing FMOD" << LL_ENDL; - result = FMOD::Memory_Initialize(NULL, 0, &decode_alloc, &decode_realloc, &decode_dealloc, FMOD_MEMORY_STREAM_DECODE | FMOD_MEMORY_STREAM_FILE); - if(Check_FMOD_Error(result, "FMOD::Memory_Initialize")) - return false; + //result = FMOD::Memory_Initialize(NULL, 0, &decode_alloc, &decode_realloc, &decode_dealloc, FMOD_MEMORY_STREAM_DECODE | FMOD_MEMORY_STREAM_FILE); + //if(Check_FMOD_Error(result, "FMOD::Memory_Initialize")) + // return false; result = FMOD::System_Create(&mSystem); if(Check_FMOD_Error(result, "FMOD::System_Create")) From 07a2c5a81de71bd2a2731c37df7c8047823e226f Mon Sep 17 00:00:00 2001 From: Shyotl Date: Tue, 24 Jul 2012 11:27:23 -0500 Subject: [PATCH 2/2] Use glFramebufferTexture2D to detach textures from FBOs before said textures are 'deleted'(set to NULL via zeroing dimensions). May avoid odd LLImageGL::deleteTextures crash on some apple systems. --- indra/llrender/llrendertarget.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index 589c0dc0d..93aaf0510 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -308,6 +308,8 @@ void LLRenderTarget::release() } else { + //Release before delete. + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, LLTexUnit::getInternalType(mUsage), 0, 0); LLImageGL::deleteTextures(mUsage, 0, 0, 1, &mDepth, true); stop_glerror(); } @@ -339,6 +341,9 @@ void LLRenderTarget::release() if (mTex.size() > 0) { + //Release before delete. + for (U32 i = 0; i < mTex.size(); ++i) + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0+i, LLTexUnit::getInternalType(mUsage), 0, 0); sBytesAllocated -= mResX*mResY*4*mTex.size(); LLImageGL::deleteTextures(mUsage, mInternalFormat[0], 0, mTex.size(), &mTex[0], true); mTex.clear(); @@ -490,10 +495,21 @@ void LLRenderTarget::flush(bool fetch_depth) } stop_glerror(); + //Following case never currently evalutes true, but it's still good to have. if (mTex.size() > 1) - { + { for (U32 i = 1; i < mTex.size(); ++i) { + glDrawBuffer(GL_COLOR_ATTACHMENT0 + i); + glReadBuffer(GL_COLOR_ATTACHMENT0 + i); + stop_glerror(); + glBlitFramebuffer(0, 0, mResX, mResY, 0, 0, mResX, mResY, GL_COLOR_BUFFER_BIT, GL_NEAREST); + stop_glerror(); + } + + /*for (U32 i = 1; i < mTex.size(); ++i) + { + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, LLTexUnit::getInternalType(mUsage), mTex[i], 0); stop_glerror(); @@ -510,7 +526,7 @@ void LLRenderTarget::flush(bool fetch_depth) stop_glerror(); glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0+i, GL_RENDERBUFFER, mSampleBuffer->mTex[i]); stop_glerror(); - } + }*/ } glBindFramebuffer(GL_FRAMEBUFFER, 0); }