From 149b2d88dd75bddf1cb3e9927c4e8fcc84e263e1 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Wed, 1 Nov 2017 19:36:13 +0200 Subject: MAINT-7228 Vertex buffer allocation failure handling --- indra/newview/lldrawpoolavatar.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'indra/newview/lldrawpoolavatar.cpp') diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index b221221f16..bb5c86f705 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -1485,15 +1485,34 @@ void LLDrawPoolAvatar::getRiggedGeometry( { buffer = new LLVertexBuffer(data_mask, GL_STREAM_DRAW_ARB); } - buffer->allocateBuffer(vol_face.mNumVertices, vol_face.mNumIndices, true); + + if (!buffer->allocateBuffer(vol_face.mNumVertices, vol_face.mNumIndices, true)) + { + LL_WARNS("LLDrawPoolAvatar") << "Failed to allocate Vertex Buffer to " + << vol_face.mNumVertices << " vertices and " + << vol_face.mNumIndices << " indices" << LL_ENDL; + // allocate dummy triangle + buffer->allocateBuffer(1, 3, true); + memset((U8*)buffer->getMappedData(), 0, buffer->getSize()); + memset((U8*)buffer->getIndicesPointer(), 0, buffer->getIndicesSize()); + } } else { //resize existing buffer - buffer->resizeBuffer(vol_face.mNumVertices, vol_face.mNumIndices); + if(!buffer->resizeBuffer(vol_face.mNumVertices, vol_face.mNumIndices)) + { + LL_WARNS("LLDrawPoolAvatar") << "Failed to resize Vertex Buffer to " + << vol_face.mNumVertices << " vertices and " + << vol_face.mNumIndices << " indices" << LL_ENDL; + // allocate dummy triangle + buffer->resizeBuffer(1, 3); + memset((U8*)buffer->getMappedData(), 0, buffer->getSize()); + memset((U8*)buffer->getIndicesPointer(), 0, buffer->getIndicesSize()); + } } - face->setSize(vol_face.mNumVertices, vol_face.mNumIndices); + face->setSize(buffer->getNumVerts(), buffer->getNumIndices()); face->setVertexBuffer(buffer); U16 offset = 0; -- cgit v1.2.3 From 6502e8bf33e6775d160ec90c666bb507bd9bb242 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 14 Nov 2017 18:55:36 +0200 Subject: MAINT-7228 Vertex buffer allocation failure handling --- indra/newview/lldrawpoolavatar.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'indra/newview/lldrawpoolavatar.cpp') diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index bb5c86f705..e38c7ee080 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -1613,6 +1613,14 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer( } } + if (buffer.isNull() || + buffer->getNumVerts() != vol_face.mNumVertices || + buffer->getNumIndices() != vol_face.mNumIndices) + { + // Allocation failed + return; + } + if (sShaderLevel <= 0 && face->mLastSkinTime < avatar->getLastSkinTime()) { //perform software vertex skinning for this face -- cgit v1.2.3 From 02e418a5cdb109ea626ad7677ff223e464cc220a Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 14 Nov 2017 19:50:17 +0200 Subject: MAINT-7228 Dummy triangle should use map instead of offset (in case of VBO) --- indra/newview/lldrawpoolavatar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indra/newview/lldrawpoolavatar.cpp') diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index e38c7ee080..8128790eb6 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -1494,7 +1494,7 @@ void LLDrawPoolAvatar::getRiggedGeometry( // allocate dummy triangle buffer->allocateBuffer(1, 3, true); memset((U8*)buffer->getMappedData(), 0, buffer->getSize()); - memset((U8*)buffer->getIndicesPointer(), 0, buffer->getIndicesSize()); + memset((U8*)buffer->getMappedIndices(), 0, buffer->getIndicesSize()); } } else @@ -1508,7 +1508,7 @@ void LLDrawPoolAvatar::getRiggedGeometry( // allocate dummy triangle buffer->resizeBuffer(1, 3); memset((U8*)buffer->getMappedData(), 0, buffer->getSize()); - memset((U8*)buffer->getIndicesPointer(), 0, buffer->getIndicesSize()); + memset((U8*)buffer->getMappedIndices(), 0, buffer->getIndicesSize()); } } -- cgit v1.2.3