From ebde9af6c570690ff2edfd1ce1fca857acee793e Mon Sep 17 00:00:00 2001 From: turanszkij Date: Tue, 2 May 2017 21:51:41 +0200 Subject: [PATCH] resolve performance bug in rayintersectmeshes --- WickedEngine/wiRenderer.cpp | 4 +++- WickedEngine/wiVersion.cpp | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index 69248c55f..01e0022dc 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -5236,6 +5236,7 @@ void wiRenderer::RayIntersectMeshes(const RAY& ray, const CulledList& culledObje XMVECTOR& rayOrigin = XMLoadFloat3(&ray.origin); XMVECTOR& rayDirection = XMVector3Normalize(XMLoadFloat3(&ray.direction)); + // pre allocate helper vector array: static size_t _arraySize = 10000; static XMVECTOR* _vertices = (XMVECTOR*)_mm_malloc(sizeof(XMVECTOR)*_arraySize, 16); @@ -5274,8 +5275,9 @@ void wiRenderer::RayIntersectMeshes(const RAY& ray, const CulledList& culledObje Mesh* mesh = object->mesh; if (mesh->vertices[VPROP_POS].size() >= _arraySize) { + // grow preallocated vector helper array _mm_free(_vertices); - _arraySize = mesh->vertices[VPROP_POS].size(); + _arraySize = (mesh->vertices[VPROP_POS].size() + 1) * 2; _vertices = (XMVECTOR*)_mm_malloc(sizeof(XMVECTOR)*_arraySize, 16); } diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 977d29139..5b5a64636 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -7,7 +7,7 @@ namespace wiVersion // minor features, major updates const int minor = 11; // minor bug fixes, alterations, refactors, updates - const int revision = 38; + const int revision = 39; long GetVersion()