diff --git a/src/python/magnum/gl.cpp b/src/python/magnum/gl.cpp index 41d57c3..902b383 100644 --- a/src/python/magnum/gl.cpp +++ b/src/python/magnum/gl.cpp @@ -340,6 +340,7 @@ void gl(py::module& m) { /* Public interface */ .def_property_readonly("id", &GL::AbstractShaderProgram::id, "OpenGL program ID") .def("validate", &GL::AbstractShaderProgram::validate, "Validate program") + .def("draw", static_cast(&GL::AbstractShaderProgram::draw), "Draw a mesh") #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) .def("dispatch_compute", &GL::AbstractShaderProgram::dispatchCompute, "Dispatch compute") #endif @@ -814,9 +815,6 @@ void gl(py::module& m) { the mesh */ pyObjectHolderFor(self).buffers.emplace_back(pyObjectFromInstance(buffer)); }, "Add vertex buffer", py::arg("buffer"), py::arg("offset"), py::arg("stride"), py::arg("attribute")) - .def("draw", [](GL::Mesh& self, GL::AbstractShaderProgram& shader) { - self.draw(shader); - }, "Draw the mesh") /** @todo more */ .def_property_readonly("buffers", [](GL::Mesh& self) { diff --git a/src/python/magnum/shaders.cpp b/src/python/magnum/shaders.cpp index 5f6687f..14fc21c 100644 --- a/src/python/magnum/shaders.cpp +++ b/src/python/magnum/shaders.cpp @@ -26,6 +26,7 @@ #include #include /* for vector arguments */ #include +#include #include #include #include @@ -43,6 +44,10 @@ namespace magnum { namespace { +template void anyShader(PyNonDestructibleClass& c) { + c.def("draw", static_cast(&GL::AbstractShaderProgram::draw), "Draw a mesh"); +} + template void flat(PyNonDestructibleClass, GL::AbstractShaderProgram>& c) { /* Attributes */ c.attr("TEXTURE_COORDINATES") = GL::DynamicAttribute{typename Shaders::Flat::TextureCoordinates{}}; @@ -77,6 +82,8 @@ template void flat(PyNonDestructibleClass void vertexColor(PyNonDestructibleClass, GL::AbstractShaderProgram>& c) { @@ -92,6 +99,8 @@ template void vertexColor(PyNonDestructibleClass::setTransformationProjectionMatrix, "Transformation and projection matrix"); + + anyShader(c); } } @@ -260,6 +269,8 @@ void shaders(py::module& m) { self.bindTextures(ambient, diffuse, specular, normal); }, "Bind textures", py::arg("ambient") = nullptr, py::arg("diffuse") = nullptr, py::arg("specular") = nullptr, py::arg("normal") = nullptr) ; + + anyShader(phong); } }