diff --git a/doc/changelog.dox b/doc/changelog.dox index 4bf4a10c5..de86b7052 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -323,6 +323,9 @@ See also: prior to every draw, however with the new multidraw workflows that's no longer the case and the inability to chain draw calls proved to be annoying. +- Added an @ref GL::AbstractShaderProgram::setTransformFeedbackOutputs() + overload taking a @relativeref{Corrade,Containers::ArrayView} instead of + a @ref std::initializer_list - The @ref GL::Context class got significantly optimized in terms of compile time, header size and runtime as well, significantly reducing the amount of allocations done at startup. diff --git a/src/Magnum/GL/AbstractShaderProgram.cpp b/src/Magnum/GL/AbstractShaderProgram.cpp index 6bcae7b9f..35d382d13 100644 --- a/src/Magnum/GL/AbstractShaderProgram.cpp +++ b/src/Magnum/GL/AbstractShaderProgram.cpp @@ -548,8 +548,12 @@ void AbstractShaderProgram::bindFragmentDataLocationIndexedInternal(const Unsign #endif #ifndef MAGNUM_TARGET_GLES2 +void AbstractShaderProgram::setTransformFeedbackOutputs(const Containers::ArrayView outputs, const TransformFeedbackBufferMode bufferMode) { + (this->*Context::current().state().shaderProgram.transformFeedbackVaryingsImplementation)(outputs, bufferMode); +} + void AbstractShaderProgram::setTransformFeedbackOutputs(const std::initializer_list outputs, const TransformFeedbackBufferMode bufferMode) { - (this->*Context::current().state().shaderProgram.transformFeedbackVaryingsImplementation)({outputs.begin(), outputs.size()}, bufferMode); + setTransformFeedbackOutputs(Containers::arrayView(outputs), bufferMode); } void AbstractShaderProgram::transformFeedbackVaryingsImplementationDefault(const Containers::ArrayView outputs, const TransformFeedbackBufferMode bufferMode) { diff --git a/src/Magnum/GL/AbstractShaderProgram.h b/src/Magnum/GL/AbstractShaderProgram.h index 33eea14ca..c452ee43f 100644 --- a/src/Magnum/GL/AbstractShaderProgram.h +++ b/src/Magnum/GL/AbstractShaderProgram.h @@ -1414,6 +1414,7 @@ class MAGNUM_GL_EXPORT AbstractShaderProgram: public AbstractObject { * @brief Specify shader outputs to be recorded in transform feedback * @param outputs Names of output variables * @param bufferMode Buffer mode + * @m_since_latest * * Binds given output variables from vertex, geometry or tessellation * shader to transform feedback buffer binding points. If @@ -1440,7 +1441,8 @@ class MAGNUM_GL_EXPORT AbstractShaderProgram: public AbstractObject { * @requires_gl Special output names `gl_NextBuffer` and * `gl_SkipComponents#` are not available in OpenGL ES or WebGL. */ - void setTransformFeedbackOutputs(std::initializer_list outputs, TransformFeedbackBufferMode bufferMode); + void setTransformFeedbackOutputs(Containers::ArrayView outputs, TransformFeedbackBufferMode bufferMode); + void setTransformFeedbackOutputs(std::initializer_list outputs, TransformFeedbackBufferMode bufferMode); /**< @overload */ #endif /**