diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 3d09d032eb310998cb1a60e8dfe923bd21b37810..5f5f7878528bc3b9d232b29c1a0c47cd45404cec 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -718,6 +718,10 @@ void LLPipeline::cleanup() mInitialized = false; + mForwardVB = nullptr; + + mAuxScreenRectVB = NULL; + mDeferredVB = NULL; mCubeVB = NULL; @@ -7494,6 +7498,8 @@ void LLPipeline::doResetVertexBuffers(bool forced) LL_RECORD_BLOCK_TIME(FTM_RESET_VB); mResetVertexBuffers = false; + mForwardVB = nullptr; + mAuxScreenRectVB = NULL; mDeferredVB = NULL; @@ -8413,32 +8419,33 @@ void LLPipeline::renderFinalize() } // [/RLVa:KB] - U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_TEXCOORD1; - LLPointer<LLVertexBuffer> buff = new LLVertexBuffer(mask, 0); - buff->allocateBuffer(3, 0, TRUE); + const U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_TEXCOORD1; + if(mForwardVB.isNull()) + { + mForwardVB = new LLVertexBuffer(mask, 0); + mForwardVB->allocateBuffer(3, 0, TRUE); - LLStrider<LLVector3> v; - LLStrider<LLVector2> uv1; - LLStrider<LLVector2> uv2; + LLStrider<LLVector3> v; + LLStrider<LLVector2> uv1; + + mForwardVB->getVertexStrider(v); + mForwardVB->getTexCoord0Strider(uv1); - buff->getVertexStrider(v); - buff->getTexCoord0Strider(uv1); - buff->getTexCoord1Strider(uv2); + uv1[0] = LLVector2(0, 0); + uv1[1] = LLVector2(0, 2); + uv1[2] = LLVector2(2, 0); - uv1[0] = LLVector2(0, 0); - uv1[1] = LLVector2(0, 2); - uv1[2] = LLVector2(2, 0); + v[0] = LLVector3(-1, -1, 0); + v[1] = LLVector3(-1, 3, 0); + v[2] = LLVector3(3, -1, 0); + } + LLStrider<LLVector2> uv2; + mForwardVB->getTexCoord1Strider(uv2); uv2[0] = LLVector2(0, 0); uv2[1] = LLVector2(0, tc2.mV[1] * 2.f); uv2[2] = LLVector2(tc2.mV[0] * 2.f, 0); - - v[0] = LLVector3(-1, -1, 0); - v[1] = LLVector3(-1, 3, 0); - v[2] = LLVector3(3, -1, 0); - - buff->flush(); - + LLGLDisable blend(GL_BLEND); if (LLGLSLShader::sNoFixedFunction) @@ -8462,8 +8469,8 @@ void LLPipeline::renderFinalize() LLGLEnable multisample(RenderFSAASamples > 0 ? GL_MULTISAMPLE : 0); - buff->setBuffer(mask); - buff->drawArrays(LLRender::TRIANGLE_STRIP, 0, 3); + mForwardVB->setBuffer(mask); + mForwardVB->drawArrays(LLRender::TRIANGLE_STRIP, 0, 3); if (LLGLSLShader::sNoFixedFunction) { diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index b5a4de0924469b37b9d0867b8641ffaa73b0f9df..22fa0c4812041ad9377c18e17a46403a9c0091a3 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -631,6 +631,9 @@ class LLPipeline LLCullResult mReflectedObjects; LLCullResult mRefractedObjects; + // buffer for forward + LLPointer<LLVertexBuffer> mForwardVB; + //utility buffer for rendering post effects, gets abused by renderDeferredLighting LLPointer<LLVertexBuffer> mDeferredVB; LLPointer<LLVertexBuffer> mAuxScreenRectVB;