[Fix] (Diligent/Buffer): Recreate buffer object when the size changes.

This commit is contained in:
BZLZHH
2025-06-15 10:32:38 +08:00
parent 8fcf58a732
commit 0c2449dc5e
2 changed files with 17 additions and 7 deletions
@@ -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();
@@ -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) {