diff --git a/MG/MG_GL/Implementations/GL/Buffer/GL_Buffer.cpp b/MG/MG_GL/Implementations/GL/Buffer/GL_Buffer.cpp index cceb1f35..4171aa6e 100644 --- a/MG/MG_GL/Implementations/GL/Buffer/GL_Buffer.cpp +++ b/MG/MG_GL/Implementations/GL/Buffer/GL_Buffer.cpp @@ -223,7 +223,11 @@ namespace MG_GL::GL { BuffDesc.Name = name.c_str(); BuffDesc.Usage = Diligent::USAGE_DEFAULT; - if (pBuffer == nullptr) { + if (!pBuffer || (pBuffer && pBuffer->GetDesc().Size != bufferObj.data.size())) { + if (pBuffer) { + pBuffer->Release(); + pBuffer = nullptr; + } Diligent::BufferData BuffData; // Initial data must not be null for immutable buffers BuffData.pData = BuffDesc.Usage != Diligent::USAGE_IMMUTABLE ? nullptr : bufferObj.data.data(); diff --git a/MG/MG_GL/Implementations/GL/Drawing/GL_Drawing.cpp b/MG/MG_GL/Implementations/GL/Drawing/GL_Drawing.cpp index 23593eae..bb76a122 100644 --- a/MG/MG_GL/Implementations/GL/Drawing/GL_Drawing.cpp +++ b/MG/MG_GL/Implementations/GL/Drawing/GL_Drawing.cpp @@ -465,7 +465,12 @@ namespace MG_GL::GL { auto& bufferObj = MG_State_T::bufferState->buffers_[buffer]; Diligent::IBuffer *&pBuffer = MG_Diligent::g_BufferMap[buffer]; - if (bufferObj.isDynamic && !pBuffer) { + if (bufferObj.isDynamic && (!pBuffer || (pBuffer && pBuffer->GetDesc().Size != bufferObj.data.size()))) { + if (pBuffer) { + pBuffer->Release(); + pBuffer = nullptr; + } + Diligent::BufferDesc BuffDesc; std::string bufferName = "Dynamic VBO " + std::to_string(buffer); BuffDesc.Name = bufferName.c_str(); @@ -488,7 +493,12 @@ namespace MG_GL::GL { auto& bufferObj = MG_State_T::bufferState->buffers_[buffer]; Diligent::IBuffer*& pBuffer = MG_Diligent::g_BufferMap[buffer]; - if (bufferObj.isDynamic && !pBuffer) { + if (bufferObj.isDynamic && (!pBuffer || (pBuffer && pBuffer->GetDesc().Size != bufferObj.data.size()))) { + if (pBuffer) { + pBuffer->Release(); + pBuffer = nullptr; + } + Diligent::BufferDesc BuffDesc; std::string bufferName = "Dynamic IBO " + std::to_string(buffer); BuffDesc.Name = bufferName.c_str(); @@ -497,10 +507,6 @@ namespace MG_GL::GL { BuffDesc.BindFlags = Diligent::BIND_INDEX_BUFFER; BuffDesc.CPUAccessFlags = Diligent::CPU_ACCESS_WRITE; - if (pBuffer) { - pBuffer->Release(); - } - MG_Diligent::g_pDevice->CreateBuffer(BuffDesc, nullptr, &pBuffer); if (!pBuffer) {