Browse Source

GL: expose Renderer::Feature::SampleAlphaToCoverage and related APIs.

I need alpha to coverage for rendering line caps with MSAA, took it as
an opportunity to expose the other related features as well. Fun how I
survived 12+ years without needing those.
pull/601/head
Vladimír Vondruš 3 years ago
parent
commit
1850210de4
  1. 4
      doc/changelog.dox
  2. 2
      doc/opengl-mapping.dox
  3. 4
      src/Magnum/GL/Renderer.cpp
  4. 41
      src/Magnum/GL/Renderer.h

4
doc/changelog.dox

@ -149,6 +149,10 @@ See also:
- Exposed @gl_extension{ARB,buffer_storage} as
@ref GL::Buffer::setStorage() together with additions to
@ref GL::Buffer::MapFlag
- Exposed missing @ref GL::Renderer::Feature::SampleAlphaToCoverage,
@relativeref{GL::Renderer,Feature::SampleAlphaToOne},
@relativeref{GL::Renderer,Feature::SampleCoverage} and
@ref GL::Renderer::setSampleCoverage() GL 1.3 APIs
- A new @cpp "nv-egl-crashy-query-device-attrib" @ce workaround for a crash
happening during EGL initialization in recent NVidia drivers. See
@ref opengl-workarounds and [mosra/magnum#491](https://github.com/mosra/magnum/pull/491)

2
doc/opengl-mapping.dox

@ -352,7 +352,7 @@ OpenGL function | Matching API
OpenGL function | Matching API
--------------------------------------- | ------------
@fn_gl{SampleCoverage} | |
@fn_gl{SampleCoverage} | @ref GL::Renderer::setSampleCoverage()
@fn_gl{SampleMaski} | |
@fn_gl{SamplerParameter} | |
@fn_gl{Scissor} | @ref GL::Renderer::setScissor()

4
src/Magnum/GL/Renderer.cpp

@ -147,6 +147,10 @@ void Renderer::setPointSize(const Float size) {
}
#endif
void Renderer::setSampleCoverage(const Float value, const bool invert) {
glSampleCoverage(value, invert);
}
#if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL)
void Renderer::setMinSampleShading(const Float value) {
Context::current().state().renderer.minSampleShadingImplementation(value);

41
src/Magnum/GL/Renderer.h

@ -450,6 +450,38 @@ class MAGNUM_GL_EXPORT Renderer {
RasterizerDiscard = GL_RASTERIZER_DISCARD,
#endif
/**
* Transforms a fragment's alpha value into a coverage value to
* determine its contribution to the final pixel value in a
* multisampled framebuffer.
* @m_since_latest
* @see @ref Feature::SampleAlphaToOne,
* @ref Feature::SampleCoverage, @ref setSampleCoverage()
*/
SampleAlphaToCoverage = GL_SAMPLE_ALPHA_TO_COVERAGE,
#ifndef MAGNUM_TARGET_GLES
/**
* Replaces each sample alpha value by the maximum representable
* alpha value.
* @m_since_latest
* @see @ref Feature::SampleAlphaToCoverage,
* @ref Feature::SampleCoverage, @ref setSampleCoverage()
* @requires_gl Sample alpha to one is not available in OpenGL ES
* and WebGL.
*/
SampleAlphaToOne = GL_SAMPLE_ALPHA_TO_ONE,
#endif
/**
* Combines the fragment coverage with the coverage value set in
* @ref setSampleCoverage().
* @m_since_latest
* @see @ref Feature::SampleAlphaToCoverage,
* @ref Feature::SampleAlphaToOne
*/
SampleCoverage = GL_SAMPLE_COVERAGE,
#if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL)
/**
* Sample shading.
@ -863,6 +895,15 @@ class MAGNUM_GL_EXPORT Renderer {
static void setPointSize(Float size);
#endif
/**
* @brief Set sample coverage parameters
* @m_since_latest
*
* Initial value is @cpp 1.0f @ce and @cpp false @ce.
* @see @ref Feature::SampleCoverage, @fn_gl_keyword{SampleCoverage}
*/
static void setSampleCoverage(Float value, bool invert);
#if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL)
/**
* @brief Set min sample shading value

Loading…
Cancel
Save