Browse Source

GL: can just reinterpret instead of allocating a temporary array.

The wrapped enums have the same values and size for exactly this reason,
to not have to expensively translate something.
next
Vladimír Vondruš 1 month ago
parent
commit
021da1f966
  1. 14
      src/Magnum/GL/DefaultFramebuffer.cpp
  2. 14
      src/Magnum/GL/Framebuffer.cpp

14
src/Magnum/GL/DefaultFramebuffer.cpp

@ -98,12 +98,7 @@ DefaultFramebuffer& DefaultFramebuffer::mapForRead(const ReadAttachment attachme
} }
void DefaultFramebuffer::invalidate(Containers::ArrayView<const InvalidationAttachment> attachments) { void DefaultFramebuffer::invalidate(Containers::ArrayView<const InvalidationAttachment> attachments) {
/** @todo C++14: use VLA to avoid heap allocation */ Context::current().state().framebuffer.invalidateImplementation(*this, attachments.size(), reinterpret_cast<const GLenum*>(attachments.data()));
Containers::Array<GLenum> _attachments(attachments.size());
for(std::size_t i = 0; i != attachments.size(); ++i)
_attachments[i] = GLenum(*(attachments.begin()+i));
Context::current().state().framebuffer.invalidateImplementation(*this, attachments.size(), _attachments);
} }
void DefaultFramebuffer::invalidate(std::initializer_list<InvalidationAttachment> attachments) { void DefaultFramebuffer::invalidate(std::initializer_list<InvalidationAttachment> attachments) {
@ -113,12 +108,7 @@ void DefaultFramebuffer::invalidate(std::initializer_list<InvalidationAttachment
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
void DefaultFramebuffer::invalidate(const Containers::ArrayView<const InvalidationAttachment> attachments, const Range2Di& rectangle) { void DefaultFramebuffer::invalidate(const Containers::ArrayView<const InvalidationAttachment> attachments, const Range2Di& rectangle) {
/** @todo C++14: use VLA to avoid heap allocation */ Context::current().state().framebuffer.invalidateSubImplementation(*this, attachments.size(), reinterpret_cast<const GLenum*>(attachments.data()), rectangle);
Containers::Array<GLenum> _attachments(attachments.size());
for(std::size_t i = 0; i != attachments.size(); ++i)
_attachments[i] = GLenum(*(attachments.begin()+i));
Context::current().state().framebuffer.invalidateSubImplementation(*this, attachments.size(), _attachments, rectangle);
} }
void DefaultFramebuffer::invalidate(std::initializer_list<InvalidationAttachment> attachments, const Range2Di& rectangle) { void DefaultFramebuffer::invalidate(std::initializer_list<InvalidationAttachment> attachments, const Range2Di& rectangle) {

14
src/Magnum/GL/Framebuffer.cpp

@ -223,12 +223,7 @@ Framebuffer& Framebuffer::mapForRead(const ColorAttachment attachment) {
} }
void Framebuffer::invalidate(const Containers::ArrayView<const InvalidationAttachment> attachments) { void Framebuffer::invalidate(const Containers::ArrayView<const InvalidationAttachment> attachments) {
/** @todo C++14: use VLA to avoid heap allocation */ Context::current().state().framebuffer.invalidateImplementation(*this, attachments.size(), reinterpret_cast<const GLenum*>(attachments.data()));
Containers::Array<GLenum> _attachments(attachments.size());
for(std::size_t i = 0; i != attachments.size(); ++i)
_attachments[i] = GLenum(*(attachments.begin()+i));
Context::current().state().framebuffer.invalidateImplementation(*this, attachments.size(), _attachments);
} }
void Framebuffer::invalidate(const std::initializer_list<InvalidationAttachment> attachments) { void Framebuffer::invalidate(const std::initializer_list<InvalidationAttachment> attachments) {
@ -237,12 +232,7 @@ void Framebuffer::invalidate(const std::initializer_list<InvalidationAttachment>
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
void Framebuffer::invalidate(const Containers::ArrayView<const InvalidationAttachment> attachments, const Range2Di& rectangle) { void Framebuffer::invalidate(const Containers::ArrayView<const InvalidationAttachment> attachments, const Range2Di& rectangle) {
/** @todo C++14: use VLA to avoid heap allocation */ Context::current().state().framebuffer.invalidateSubImplementation(*this, attachments.size(), reinterpret_cast<const GLenum*>(attachments.data()), rectangle);
Containers::Array<GLenum> _attachments(attachments.size());
for(std::size_t i = 0; i != attachments.size(); ++i)
_attachments[i] = GLenum(*(attachments.begin()+i));
Context::current().state().framebuffer.invalidateSubImplementation(*this, attachments.size(), _attachments, rectangle);
} }
void Framebuffer::invalidate(const std::initializer_list<InvalidationAttachment> attachments, const Range2Di& rectangle) { void Framebuffer::invalidate(const std::initializer_list<InvalidationAttachment> attachments, const Range2Di& rectangle) {

Loading…
Cancel
Save