mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-11 21:58:31 +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.Name = name.c_str();
|
||||||
BuffDesc.Usage = Diligent::USAGE_DEFAULT;
|
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;
|
Diligent::BufferData BuffData;
|
||||||
// Initial data must not be null for immutable buffers
|
// Initial data must not be null for immutable buffers
|
||||||
BuffData.pData = BuffDesc.Usage != Diligent::USAGE_IMMUTABLE ? nullptr : bufferObj.data.data();
|
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];
|
auto& bufferObj = MG_State_T::bufferState->buffers_[buffer];
|
||||||
|
|
||||||
Diligent::IBuffer *&pBuffer = MG_Diligent::g_BufferMap[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;
|
Diligent::BufferDesc BuffDesc;
|
||||||
std::string bufferName = "Dynamic VBO " + std::to_string(buffer);
|
std::string bufferName = "Dynamic VBO " + std::to_string(buffer);
|
||||||
BuffDesc.Name = bufferName.c_str();
|
BuffDesc.Name = bufferName.c_str();
|
||||||
@@ -488,7 +493,12 @@ namespace MG_GL::GL {
|
|||||||
auto& bufferObj = MG_State_T::bufferState->buffers_[buffer];
|
auto& bufferObj = MG_State_T::bufferState->buffers_[buffer];
|
||||||
|
|
||||||
Diligent::IBuffer*& pBuffer = MG_Diligent::g_BufferMap[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;
|
Diligent::BufferDesc BuffDesc;
|
||||||
std::string bufferName = "Dynamic IBO " + std::to_string(buffer);
|
std::string bufferName = "Dynamic IBO " + std::to_string(buffer);
|
||||||
BuffDesc.Name = bufferName.c_str();
|
BuffDesc.Name = bufferName.c_str();
|
||||||
@@ -497,10 +507,6 @@ namespace MG_GL::GL {
|
|||||||
BuffDesc.BindFlags = Diligent::BIND_INDEX_BUFFER;
|
BuffDesc.BindFlags = Diligent::BIND_INDEX_BUFFER;
|
||||||
BuffDesc.CPUAccessFlags = Diligent::CPU_ACCESS_WRITE;
|
BuffDesc.CPUAccessFlags = Diligent::CPU_ACCESS_WRITE;
|
||||||
|
|
||||||
if (pBuffer) {
|
|
||||||
pBuffer->Release();
|
|
||||||
}
|
|
||||||
|
|
||||||
MG_Diligent::g_pDevice->CreateBuffer(BuffDesc, nullptr, &pBuffer);
|
MG_Diligent::g_pDevice->CreateBuffer(BuffDesc, nullptr, &pBuffer);
|
||||||
|
|
||||||
if (!pBuffer) {
|
if (!pBuffer) {
|
||||||
|
|||||||
Reference in New Issue
Block a user