mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-08 04:08:32 +09:00
[Fix] (MG_Impl): bound a colour attachment and a vertex binding range by the limit
GL_COLOR_ATTACHMENTn is a token for every n up to 31, but only the first GL_MAX_COLOR_ATTACHMENTS of them name an attachment point of a framebuffer object. The enum conversion accepted the whole token range, so attaching a renderbuffer or a texture to a colour attachment past the limit silently succeeded instead of reporting INVALID_OPERATION, and the attachment landed in a slot nothing else would ever look at. glBindVertexBuffers and glVertexArrayVertexBuffers take a range of binding points rather than one index. A range running past the last binding point is INVALID_OPERATION, which the per-binding validation could not report: it saw one index at a time and reported the INVALID_VALUE that a single out-of-range index earns. The range is checked up front now, before any binding point is touched, so a rejected call also leaves none of them changed. Takes direct_state_access.vertex_arrays_* to 18 of 19 and fixes direct_state_access.framebuffers_renderbuffer_attachment_errors on both backends.
This commit is contained in:
@@ -1143,6 +1143,7 @@ namespace MobileGL::MG_Impl::GLImpl {
|
||||
|
||||
const FramebufferAttachmentType attachmentType = MG_Util::ConvertGLEnumToFramebufferAttachmentType(attachment);
|
||||
if (!FramebufferImpl::ValidateFramebufferAttachmentType(attachmentType)) return;
|
||||
if (!FramebufferImpl::ValidateColorAttachmentInRange(attachmentType, functionName)) return;
|
||||
if (!TextureImpl::ValidateTextureName(texture, true)) return;
|
||||
|
||||
if (texture == 0) {
|
||||
@@ -1239,6 +1240,7 @@ namespace MobileGL::MG_Impl::GLImpl {
|
||||
FramebufferTarget framebufferTarget = MG_Util::ConvertGLEnumToFramebufferTarget(target);
|
||||
RenderbufferTarget rbTarget = MG_Util::ConvertGLEnumToRenderbufferTarget(renderbuffertarget);
|
||||
if (!FramebufferImpl::ValidateFramebufferAttachmentType(attachmentType)) return;
|
||||
if (!FramebufferImpl::ValidateColorAttachmentInRange(attachmentType, "FramebufferRenderbuffer_State")) return;
|
||||
if (!FramebufferImpl::ValidateFramebufferTarget(framebufferTarget)) return;
|
||||
if (!FramebufferImpl::ValidateRenderbufferTarget(rbTarget)) return;
|
||||
auto& bindingSlot = MG_State::pGLContext->GetFramebufferBindingSlot(framebufferTarget);
|
||||
@@ -1283,6 +1285,8 @@ namespace MobileGL::MG_Impl::GLImpl {
|
||||
FramebufferAttachmentType attachmentType = MG_Util::ConvertGLEnumToFramebufferAttachmentType(attachment);
|
||||
RenderbufferTarget rbTarget = MG_Util::ConvertGLEnumToRenderbufferTarget(renderbuffertarget);
|
||||
if (!FramebufferImpl::ValidateFramebufferAttachmentType(attachmentType)) return;
|
||||
if (!FramebufferImpl::ValidateColorAttachmentInRange(attachmentType, "NamedFramebufferRenderbuffer_State"))
|
||||
return;
|
||||
if (!FramebufferImpl::ValidateRenderbufferTarget(rbTarget)) return;
|
||||
|
||||
if (renderbuffer == 0) {
|
||||
|
||||
Reference in New Issue
Block a user