Browse Source

GL: add an ArrayView setTransformFeedbackOutputs() overload.

Interesting, I thought I have done this years ago already. Or that was
the multi-draw() maybe?
pull/539/head
Vladimír Vondruš 4 years ago
parent
commit
ffb82088b9
  1. 3
      doc/changelog.dox
  2. 6
      src/Magnum/GL/AbstractShaderProgram.cpp
  3. 4
      src/Magnum/GL/AbstractShaderProgram.h

3
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.

6
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<const std::string> outputs, const TransformFeedbackBufferMode bufferMode) {
(this->*Context::current().state().shaderProgram.transformFeedbackVaryingsImplementation)(outputs, bufferMode);
}
void AbstractShaderProgram::setTransformFeedbackOutputs(const std::initializer_list<std::string> 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<const std::string> outputs, const TransformFeedbackBufferMode bufferMode) {

4
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<std::string> outputs, TransformFeedbackBufferMode bufferMode);
void setTransformFeedbackOutputs(Containers::ArrayView<const std::string> outputs, TransformFeedbackBufferMode bufferMode);
void setTransformFeedbackOutputs(std::initializer_list<std::string> outputs, TransformFeedbackBufferMode bufferMode); /**< @overload */
#endif
/**

Loading…
Cancel
Save