mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-09 20:58:31 +09:00
[Fix] (MG_Backend/DirectGLES): Correctly sync attrib.Divisor when attrib.Buffer changes.
This commit is contained in:
@@ -280,6 +280,10 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
MG_Util::ConvertDataTypeToGLEnum(attrib.Type),
|
||||
attrib.Stride, (const void*)attrib.Offset);
|
||||
}
|
||||
|
||||
if (needsSyncFormat) {
|
||||
MG_External::GLES::glVertexAttribDivisor(attribIndex, attrib.Divisor);
|
||||
}
|
||||
continue; // No need to set format again
|
||||
}
|
||||
|
||||
@@ -919,21 +923,24 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
}
|
||||
#if MOBILEGL_LOG_ACTIVE_LEVEL <= MOBILEGL_LOG_LEVEL_DEBUG
|
||||
else {
|
||||
MGLOG_D("%s: Skipped SyncAttachmentObject(target=%s, frontendObj=(%dx%dx%d, %s), backendAtt=%s), version = %u", __func__,
|
||||
MG_Util::ConvertGLEnumToString(glFBOTarget).c_str(),
|
||||
attachmentObject.GetSize().x(), attachmentObject.GetSize().y(), attachmentObject.GetSize().z(),
|
||||
MGLOG_D("%s: Skipped SyncAttachmentObject(target=%s, frontendObj=(%dx%dx%d, %s), backendAtt=%s), "
|
||||
"version = %u",
|
||||
__func__, MG_Util::ConvertGLEnumToString(glFBOTarget).c_str(),
|
||||
attachmentObject.GetSize().x(), attachmentObject.GetSize().y(),
|
||||
attachmentObject.GetSize().z(),
|
||||
MG_Util::ConvertFramebufferAttachmentTypeToString(frontendType).c_str(),
|
||||
MG_Util::ConvertGLEnumToString(glBackendAttachment).c_str(),
|
||||
m_syncedFrontendAttachmentVersions[i]
|
||||
);
|
||||
m_syncedFrontendAttachmentVersions[i]);
|
||||
GLint objectType = GL_NONE;
|
||||
MG_External::GLES::glGetFramebufferAttachmentParameteriv(glFBOTarget, glBackendAttachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &objectType);
|
||||
MOBILEGL_ASSERT(
|
||||
(objectType == GL_NONE) ||
|
||||
(attachmentObject.IsTexture() && objectType == GL_TEXTURE) || (attachmentObject.IsRenderbuffer() && objectType == GL_RENDERBUFFER),
|
||||
"Attachment type not match!");
|
||||
MG_External::GLES::glGetFramebufferAttachmentParameteriv(
|
||||
glFBOTarget, glBackendAttachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &objectType);
|
||||
MOBILEGL_ASSERT((objectType == GL_NONE) ||
|
||||
(attachmentObject.IsTexture() && objectType == GL_TEXTURE) ||
|
||||
(attachmentObject.IsRenderbuffer() && objectType == GL_RENDERBUFFER),
|
||||
"Attachment type not match!");
|
||||
GLint objectName = 0;
|
||||
MG_External::GLES::glGetFramebufferAttachmentParameteriv(glFBOTarget, glBackendAttachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &objectName);
|
||||
MG_External::GLES::glGetFramebufferAttachmentParameteriv(
|
||||
glFBOTarget, glBackendAttachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &objectName);
|
||||
// Verify that the backend object's name and parameters match the frontend attachment state
|
||||
if (attachmentObject.IsTexture()) {
|
||||
const auto& textureObject = attachmentObject.GetTexture();
|
||||
@@ -942,7 +949,8 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
"No backend texture found while framebuffer reports texture attachment.");
|
||||
GLuint backendTexId = backendTextureIt->second->GetBackendTextureId();
|
||||
MOBILEGL_ASSERT(static_cast<GLint>(backendTexId) == objectName,
|
||||
"Attachment texture name mismatch between GLES (%d) and backend texture object (%d), frontend texture object ID=%d.",
|
||||
"Attachment texture name mismatch between GLES (%d) and backend texture object "
|
||||
"(%d), frontend texture object ID=%d.",
|
||||
objectName, backendTexId, textureObject->GetExternalIndex());
|
||||
|
||||
GLint texLevel = 0;
|
||||
@@ -953,8 +961,9 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
} else if (attachmentObject.IsRenderbuffer()) {
|
||||
const auto& renderbufferObject = attachmentObject.GetRenderbuffer();
|
||||
auto backendRboIt = RenderbufferImpl::g_backendRenderbufferObjects.find(renderbufferObject);
|
||||
MOBILEGL_ASSERT(backendRboIt != RenderbufferImpl::g_backendRenderbufferObjects.end(),
|
||||
"No backend renderbuffer found while framebuffer reports renderbuffer attachment.");
|
||||
MOBILEGL_ASSERT(
|
||||
backendRboIt != RenderbufferImpl::g_backendRenderbufferObjects.end(),
|
||||
"No backend renderbuffer found while framebuffer reports renderbuffer attachment.");
|
||||
GLuint backendRboId = backendRboIt->second->GetBackendRenderbufferId();
|
||||
MOBILEGL_ASSERT(static_cast<GLint>(backendRboId) == objectName,
|
||||
"Attachment renderbuffer name mismatch between GLES and state object.");
|
||||
|
||||
Reference in New Issue
Block a user