From 6f260b05cd21edc04db7bb84a5bdd0ef34aa5b5f Mon Sep 17 00:00:00 2001 From: James Murphy Date: Wed, 15 Dec 2021 14:49:23 -0600 Subject: [PATCH] python: expose gl.Framebuffer.attach_texture(). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vladimír Vondruš --- src/python/magnum/gl.cpp | 7 +++++++ src/python/magnum/test/test_gl_gl.py | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/python/magnum/gl.cpp b/src/python/magnum/gl.cpp index 3229f59..794e123 100644 --- a/src/python/magnum/gl.cpp +++ b/src/python/magnum/gl.cpp @@ -911,6 +911,13 @@ void gl(py::module_& m) { before the framebuffer */ pyObjectHolderFor(self).attachments.emplace_back(pyObjectFromInstance(renderbuffer)); }, "Attach renderbuffer to given buffer", py::arg("attachment"), py::arg("renderbuffer")) + .def("attach_texture", [](GL::Framebuffer& self, GL::Framebuffer::BufferAttachment attachment, GL::Texture2D& texture, Int level) { + self.attachTexture(attachment, texture, level); + + /* Keep a reference to the texture to avoid it being deleted before + the framebuffer */ + pyObjectHolderFor(self).attachments.emplace_back(pyObjectFromInstance(texture)); + }, "Attach texture to given buffer", py::arg("attachment"), py::arg("texture"), py::arg("level")) .def_property_readonly("attachments", [](GL::Framebuffer& self) { return pyObjectHolderFor(self).attachments; diff --git a/src/python/magnum/test/test_gl_gl.py b/src/python/magnum/test/test_gl_gl.py index b43916f..0f15658 100644 --- a/src/python/magnum/test/test_gl_gl.py +++ b/src/python/magnum/test/test_gl_gl.py @@ -180,6 +180,20 @@ class Framebuffer(GLTestCase): del framebuffer self.assertEqual(sys.getrefcount(renderbuffer), renderbuffer_refcount) + def test_attach_texture(self): + texture = gl.Texture2D() + texture.set_storage(levels=1, internal_format=gl.TextureFormat.RGBA8, size=(4, 4)) + texture_refcount = sys.getrefcount(texture) + + framebuffer = gl.Framebuffer(((0, 0), (4, 4))) + framebuffer.attach_texture(gl.Framebuffer.ColorAttachment(0), texture, 0) + self.assertEqual(len(framebuffer.attachments), 1) + self.assertIs(framebuffer.attachments[0], texture) + self.assertEqual(sys.getrefcount(texture), texture_refcount + 1) + + del framebuffer + self.assertEqual(sys.getrefcount(texture), texture_refcount) + def test_read_image(self): renderbuffer = gl.Renderbuffer() renderbuffer.set_storage(gl.RenderbufferFormat.RGBA8, (4, 4))