diff --git a/include/Nazara/Renderer/Config.hpp b/include/Nazara/Renderer/Config.hpp index 09331cb4a..35ab47e05 100644 --- a/include/Nazara/Renderer/Config.hpp +++ b/include/Nazara/Renderer/Config.hpp @@ -29,8 +29,8 @@ /// Chaque modification d'un paramètre du module nécessite une recompilation de celui-ci -// Le nombre maximum d'instances pouvant être géré par le Renderer -#define NAZARA_RENDERER_INSTANCE_BUFFER_SIZE 8192*64 +// La taille du buffer d'Instancing (définit le nombre maximum d'instances en un rendu) +#define NAZARA_RENDERER_INSTANCE_BUFFER_SIZE 8192*64 // 8192 matrices 4x4 flottantes // Utilise un tracker pour repérer les éventuels leaks (Ralentit l'exécution) #define NAZARA_RENDERER_MEMORYLEAKTRACKER 0 diff --git a/src/Nazara/Renderer/Renderer.cpp b/src/Nazara/Renderer/Renderer.cpp index f92c8662c..da167c68a 100644 --- a/src/Nazara/Renderer/Renderer.cpp +++ b/src/Nazara/Renderer/Renderer.cpp @@ -628,7 +628,7 @@ bool NzRenderer::Initialize() { try { - s_instanceBuffer.Reset(NzVertexDeclaration::Get(nzVertexLayout_Matrix4), NAZARA_RENDERER_INSTANCE_BUFFER_SIZE/sizeof(NzMatrix4f), nzBufferStorage_Hardware, nzBufferUsage_Dynamic); + s_instanceBuffer.Reset(nullptr, NAZARA_RENDERER_INSTANCE_BUFFER_SIZE, nzBufferStorage_Hardware, nzBufferUsage_Dynamic); } catch (const std::exception& e) { diff --git a/src/Nazara/Utility/VertexBuffer.cpp b/src/Nazara/Utility/VertexBuffer.cpp index bb7de8296..0cb7ab9c5 100644 --- a/src/Nazara/Utility/VertexBuffer.cpp +++ b/src/Nazara/Utility/VertexBuffer.cpp @@ -97,6 +97,14 @@ bool NzVertexBuffer::IsValid() const void* NzVertexBuffer::Map(nzBufferAccess access, unsigned int startVertex, unsigned int length) { + #if NAZARA_UTILITY_SAFE + if (!m_vertexDeclaration) + { + NazaraError("No vertex declaration"); + return nullptr; + } + #endif + unsigned int stride = m_vertexDeclaration->GetStride(); return MapRaw(access, startVertex*stride, length*stride); @@ -104,6 +112,14 @@ void* NzVertexBuffer::Map(nzBufferAccess access, unsigned int startVertex, unsig void* NzVertexBuffer::Map(nzBufferAccess access, unsigned int startVertex, unsigned int length) const { + #if NAZARA_UTILITY_SAFE + if (!m_vertexDeclaration) + { + NazaraError("No vertex declaration"); + return nullptr; + } + #endif + unsigned int stride = m_vertexDeclaration->GetStride(); return MapRaw(access, startVertex*stride, length*stride); @@ -112,10 +128,16 @@ void* NzVertexBuffer::Map(nzBufferAccess access, unsigned int startVertex, unsig void* NzVertexBuffer::MapRaw(nzBufferAccess access, unsigned int offset, unsigned int size) { #if NAZARA_UTILITY_SAFE + if (!m_buffer) + { + NazaraError("No buffer"); + return nullptr; + } + if (m_startOffset + offset + size > m_endOffset) { NazaraError("Exceeding virtual buffer size"); - return false; + return nullptr; } #endif @@ -144,15 +166,9 @@ void NzVertexBuffer::Reset() void NzVertexBuffer::Reset(const NzVertexDeclaration* vertexDeclaration, NzBuffer* buffer, unsigned int startOffset, unsigned int endOffset) { #if NAZARA_UTILITY_SAFE - if (!vertexDeclaration) - { - NazaraError("Vertex declaration is invalid"); - return; - } - if (!buffer || !buffer->IsValid()) { - NazaraError("Buffer is invalid"); + NazaraError("Invalid buffer"); return; } @@ -179,21 +195,13 @@ void NzVertexBuffer::Reset(const NzVertexDeclaration* vertexDeclaration, NzBuffe m_buffer = buffer; m_endOffset = endOffset; m_startOffset = startOffset; - m_vertexCount = (endOffset - startOffset) / vertexDeclaration->GetStride(); + m_vertexCount = (vertexDeclaration) ? ((endOffset - startOffset) / vertexDeclaration->GetStride()) : 0; m_vertexDeclaration = vertexDeclaration; } void NzVertexBuffer::Reset(const NzVertexDeclaration* vertexDeclaration, unsigned int length, nzBufferStorage storage, nzBufferUsage usage) { - #if NAZARA_UTILITY_SAFE - if (!vertexDeclaration) - { - NazaraError("Vertex declaration is invalid"); - return; - } - #endif - - m_endOffset = length*vertexDeclaration->GetStride(); + m_endOffset = length * ((vertexDeclaration) ? vertexDeclaration->GetStride() : 1); m_startOffset = 0; m_vertexCount = length;