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 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 longer the case and the inability to chain draw calls proved to be
annoying. 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 - The @ref GL::Context class got significantly optimized in terms of compile
time, header size and runtime as well, significantly reducing the amount of time, header size and runtime as well, significantly reducing the amount of
allocations done at startup. allocations done at startup.

6
src/Magnum/GL/AbstractShaderProgram.cpp

@ -548,8 +548,12 @@ void AbstractShaderProgram::bindFragmentDataLocationIndexedInternal(const Unsign
#endif #endif
#ifndef MAGNUM_TARGET_GLES2 #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) { 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) { 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 * @brief Specify shader outputs to be recorded in transform feedback
* @param outputs Names of output variables * @param outputs Names of output variables
* @param bufferMode Buffer mode * @param bufferMode Buffer mode
* @m_since_latest
* *
* Binds given output variables from vertex, geometry or tessellation * Binds given output variables from vertex, geometry or tessellation
* shader to transform feedback buffer binding points. If * 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 * @requires_gl Special output names `gl_NextBuffer` and
* `gl_SkipComponents#` are not available in OpenGL ES or WebGL. * `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 #endif
/** /**

Loading…
Cancel
Save