mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-07 19:58:32 +09:00
[Fix] (Diligent/Buffer): Recreate buffer object when the size changes.
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user