From 99a22dfcd5f58fd051999309d1de58dfc040f04b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 13 Nov 2022 19:09:53 +0100 Subject: [PATCH] python: adapt to Magnum changes. The Shaders classes now take a Configuration class instead of a hard-to-distinguish list of arguments. But in Python we have named arguments, so none of that is necessary -- I only made the arguments explicitly keyword-only but the interface stays the same. --- src/python/magnum/shaders.cpp | 33 ++++++++++++++++++++--- src/python/magnum/test/test_shaders_gl.py | 16 +++++------ 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/python/magnum/shaders.cpp b/src/python/magnum/shaders.cpp index d0d737b..a13f217 100644 --- a/src/python/magnum/shaders.cpp +++ b/src/python/magnum/shaders.cpp @@ -53,7 +53,13 @@ template void distanceFieldVector(PyNonDestructibleClass /* Methods */ c - .def(py::init::Flag>(), "Constructor", + .def(py::init([](typename Shaders::DistanceFieldVectorGL::Flag flags) { + return typename Shaders::DistanceFieldVectorGL{typename Shaders::DistanceFieldVectorGL::Configuration{} + .setFlags(flags)}; + }), "Constructor", + #if PYBIND11_VERSION_MAJOR*100 + PYBIND11_VERSION_MINOR >= 206 + py::kw_only{}, /* new in pybind11 2.6 */ + #endif py::arg("flags") = typename Shaders::DistanceFieldVectorGL::Flag{}) /* Using lambdas to avoid method chaining getting into signatures */ @@ -92,7 +98,13 @@ template void flat(PyNonDestructibleClass::Flag>(), "Constructor", + .def(py::init([](typename Shaders::FlatGL::Flag flags) { + return typename Shaders::FlatGL{typename Shaders::FlatGL::Configuration{} + .setFlags(flags)}; + }), "Constructor", + #if PYBIND11_VERSION_MAJOR*100 + PYBIND11_VERSION_MINOR >= 206 + py::kw_only{}, /* new in pybind11 2.6 */ + #endif py::arg("flags") = typename Shaders::FlatGL::Flag{}) /* Using lambdas to avoid method chaining getting into signatures */ @@ -135,7 +147,13 @@ template void vector(PyNonDestructibleClass::Flag>(), "Constructor", + .def(py::init([](typename Shaders::VectorGL::Flag flags) { + return typename Shaders::VectorGL{typename Shaders::VectorGL::Configuration{} + .setFlags(flags)}; + }), "Constructor", + #if PYBIND11_VERSION_MAJOR*100 + PYBIND11_VERSION_MINOR >= 206 + py::kw_only{}, /* new in pybind11 2.6 */ + #endif py::arg("flags") = typename Shaders::VectorGL::Flag{}) /* Using lambdas to avoid method chaining getting into signatures */ @@ -285,7 +303,14 @@ void shaders(py::module_& m) { corrade::enumOperators(flags); phongGL - .def(py::init(), "Constructor", + .def(py::init([](Shaders::PhongGL::Flag flags, UnsignedInt lightCount) { + return Shaders::PhongGL{Shaders::PhongGL::Configuration{} + .setFlags(flags) + .setLightCount(lightCount)}; + }), "Constructor", + #if PYBIND11_VERSION_MAJOR*100 + PYBIND11_VERSION_MINOR >= 206 + py::kw_only{}, /* new in pybind11 2.6 */ + #endif py::arg("flags") = Shaders::PhongGL::Flag{}, py::arg("light_count") = 1) .def_property_readonly("flags", [](Shaders::PhongGL& self) { diff --git a/src/python/magnum/test/test_shaders_gl.py b/src/python/magnum/test/test_shaders_gl.py index a67271f..dfdcfb4 100644 --- a/src/python/magnum/test/test_shaders_gl.py +++ b/src/python/magnum/test/test_shaders_gl.py @@ -41,7 +41,7 @@ class DistanceFieldGL(GLTestCase): self.assertEqual(b.flags, shaders.DistanceFieldVectorGL3D.Flags.TEXTURE_TRANSFORMATION) def test_uniforms_bindings(self): - a = shaders.DistanceFieldVectorGL3D(shaders.DistanceFieldVectorGL3D.Flags.TEXTURE_TRANSFORMATION) + a = shaders.DistanceFieldVectorGL3D(flags=shaders.DistanceFieldVectorGL3D.Flags.TEXTURE_TRANSFORMATION) a.color = (0.5, 1.0, 0.9) a.outline_color = (1.0, 0.5, 0.9, 0.3) a.outline_range = (0.5, 0.8) @@ -64,11 +64,11 @@ class FlatGL(GLTestCase): a = shaders.FlatGL3D() self.assertEqual(a.flags, shaders.FlatGL3D.Flags.NONE) - b = shaders.FlatGL3D(shaders.FlatGL3D.Flags.TEXTURED|shaders.FlatGL3D.Flags.ALPHA_MASK) + b = shaders.FlatGL3D(flags=shaders.FlatGL3D.Flags.TEXTURED|shaders.FlatGL3D.Flags.ALPHA_MASK) self.assertEqual(b.flags, shaders.FlatGL3D.Flags.TEXTURED|shaders.FlatGL3D.Flags.ALPHA_MASK) def test_uniforms_bindings(self): - a = shaders.FlatGL3D(shaders.FlatGL3D.Flags.TEXTURED|shaders.FlatGL3D.Flags.ALPHA_MASK|shaders.FlatGL3D.Flags.TEXTURE_TRANSFORMATION) + a = shaders.FlatGL3D(flags=shaders.FlatGL3D.Flags.TEXTURED|shaders.FlatGL3D.Flags.ALPHA_MASK|shaders.FlatGL3D.Flags.TEXTURE_TRANSFORMATION) a.color = (0.5, 1.0, 0.9) a.transformation_projection_matrix = Matrix4.translation(Vector3.x_axis()) a.alpha_mask = 0.3 @@ -106,16 +106,16 @@ class PhongGL(GLTestCase): self.assertEqual(a.flags, shaders.PhongGL.Flags.NONE) self.assertEqual(a.light_count, 1) - b = shaders.PhongGL(shaders.PhongGL.Flags.DIFFUSE_TEXTURE|shaders.PhongGL.Flags.ALPHA_MASK) + b = shaders.PhongGL(flags=shaders.PhongGL.Flags.DIFFUSE_TEXTURE|shaders.PhongGL.Flags.ALPHA_MASK) self.assertEqual(b.flags, shaders.PhongGL.Flags.DIFFUSE_TEXTURE|shaders.PhongGL.Flags.ALPHA_MASK) self.assertEqual(b.light_count, 1) - c = shaders.PhongGL(shaders.PhongGL.Flags.NONE, 3) + c = shaders.PhongGL(flags=shaders.PhongGL.Flags.NONE, light_count=3) self.assertEqual(c.flags, shaders.PhongGL.Flags.NONE) self.assertEqual(c.light_count, 3) def test_uniforms_bindings(self): - a = shaders.PhongGL(shaders.PhongGL.Flags.ALPHA_MASK|shaders.PhongGL.Flags.AMBIENT_TEXTURE|shaders.PhongGL.Flags.DIFFUSE_TEXTURE|shaders.PhongGL.Flags.SPECULAR_TEXTURE|shaders.PhongGL.Flags.NORMAL_TEXTURE|shaders.PhongGL.Flags.TEXTURE_TRANSFORMATION, 2) + a = shaders.PhongGL(flags=shaders.PhongGL.Flags.ALPHA_MASK|shaders.PhongGL.Flags.AMBIENT_TEXTURE|shaders.PhongGL.Flags.DIFFUSE_TEXTURE|shaders.PhongGL.Flags.SPECULAR_TEXTURE|shaders.PhongGL.Flags.NORMAL_TEXTURE|shaders.PhongGL.Flags.TEXTURE_TRANSFORMATION, light_count=2) a.diffuse_color = (0.5, 1.0, 0.9) a.transformation_matrix = Matrix4.translation(Vector3.x_axis()) a.projection_matrix = Matrix4.zero_init() @@ -169,11 +169,11 @@ class DistanceFieldGL(GLTestCase): a = shaders.VectorGL3D() self.assertEqual(a.flags, shaders.VectorGL3D.Flags.NONE) - b = shaders.VectorGL3D(shaders.VectorGL3D.Flags.TEXTURE_TRANSFORMATION) + b = shaders.VectorGL3D(flags=shaders.VectorGL3D.Flags.TEXTURE_TRANSFORMATION) self.assertEqual(b.flags, shaders.VectorGL3D.Flags.TEXTURE_TRANSFORMATION) def test_uniforms_bindings(self): - a = shaders.VectorGL3D(shaders.VectorGL3D.Flags.TEXTURE_TRANSFORMATION) + a = shaders.VectorGL3D(flags=shaders.VectorGL3D.Flags.TEXTURE_TRANSFORMATION) a.color = (0.5, 1.0, 0.9) a.background_color = (1.0, 0.5, 0.9, 0.3) a.transformation_projection_matrix = Matrix4.translation(Vector3.x_axis())