diff --git a/src/python/magnum/gl.cpp b/src/python/magnum/gl.cpp index 8be800a..264b391 100644 --- a/src/python/magnum/gl.cpp +++ b/src/python/magnum/gl.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include "corrade/PyArrayView.h" #include "corrade/EnumOperators.h" @@ -245,6 +246,58 @@ void gl(py::module& m) { }, "Draw the mesh") /** @todo more */ ; + + /* Renderer */ + { + py::class_ renderer{m, "Renderer", "Global renderer configuration"}; + + py::enum_{renderer, "Feature", "Feature"} + #ifndef MAGNUM_TARGET_WEBGL + .value("BLEND_ADVANCED_COHERENT", GL::Renderer::Feature::BlendAdvancedCoherent) + #endif + .value("BLENDING", GL::Renderer::Feature::Blending) + #ifndef MAGNUM_TARGET_WEBGL + .value("DEBUG_OUTPUT", GL::Renderer::Feature::DebugOutput) + .value("DEBUG_OUTPUT_SYNCHRONOUS", GL::Renderer::Feature::DebugOutputSynchronous) + #endif + #ifndef MAGNUM_TARGET_GLES + .value("DEPTH_CLAMP", GL::Renderer::Feature::DepthClamp) + #endif + .value("DEPTH_TEST", GL::Renderer::Feature::DepthTest) + .value("DITHERING", GL::Renderer::Feature::Dithering) + .value("FACE_CULLING", GL::Renderer::Feature::FaceCulling) + #ifndef MAGNUM_TARGET_WEBGL + .value("FRAMEBUFFER_SRGB", GL::Renderer::Feature::FramebufferSrgb) + #endif + #ifndef MAGNUM_TARGET_GLES + .value("LOGIC_OPERATION", GL::Renderer::Feature::LogicOperation) + .value("MULTISAMPLING", GL::Renderer::Feature::Multisampling) + #endif + .value("POLYGON_OFFSET_FILL", GL::Renderer::Feature::PolygonOffsetFill) + #ifndef MAGNUM_TARGET_WEBGL + .value("POLYGON_OFFSET_LINE", GL::Renderer::Feature::PolygonOffsetLine) + .value("POLYGON_OFFSET_POINT", GL::Renderer::Feature::PolygonOffsetPoint) + #endif + #ifndef MAGNUM_TARGET_GLES + .value("PROGRAM_POINT_SIZE", GL::Renderer::Feature::ProgramPointSize) + #endif + #ifndef MAGNUM_TARGET_GLES2 + .value("RASTERIZER_DISCARD", GL::Renderer::Feature::RasterizerDiscard) + #endif + #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) + .value("SAMPLE_SHADING", GL::Renderer::Feature::SampleShading) + #endif + #ifndef MAGNUM_TARGET_GLES + .value("SEAMLESS_CUBE_MAP_TEXTURE", GL::Renderer::Feature::SeamlessCubeMapTexture) + #endif + .value("SCISSOR_TEST", GL::Renderer::Feature::ScissorTest) + .value("STENCIL_TEST", GL::Renderer::Feature::StencilTest); + + renderer + .def_static("enable", GL::Renderer::enable, "Enable a feature") + .def_static("disable", GL::Renderer::disable, "Disable a feature") + .def_static("set_feature", GL::Renderer::setFeature, "Enable or disable a feature"); + } } }} diff --git a/src/python/magnum/test/test_gl_gl.py b/src/python/magnum/test/test_gl_gl.py index 74837de..d41b055 100644 --- a/src/python/magnum/test/test_gl_gl.py +++ b/src/python/magnum/test/test_gl_gl.py @@ -101,3 +101,9 @@ class Mesh(GLTestCase): # Deleting the mesh should decrease it again del mesh self.assertEqual(sys.getrefcount(buffer), buffer_refcount) + +class Renderer(GLTestCase): + def test_feature(self): + gl.Renderer.enable(gl.Renderer.Feature.DEPTH_TEST) + gl.Renderer.disable(gl.Renderer.Feature.FACE_CULLING) + gl.Renderer.set_feature(gl.Renderer.Feature.STENCIL_TEST, True)