BGE patch: [#29285] Video Texture: Avoid slow rescale (non power of 2 support check...
authorDalai Felinto <dfelinto@gmail.com>
Thu, 24 Nov 2011 19:27:15 +0000 (19:27 +0000)
committerDalai Felinto <dfelinto@gmail.com>
Thu, 24 Nov 2011 19:27:15 +0000 (19:27 +0000)
"Just a simple check for non power of two support (GLEW_ARB_texture_non_power_of_two), to avoid what seems to be a very slow, and very unnecessary gluScaleImage call."

This is the only part of the VideoTexture that does the POT calculation, so the check seems good.
It would be interesting if some opengl guru would like to benchmark the use of this in other areas of Blender (e.g. 2D Filters, and all GLSL materials).

Note that mipmap should also be supported automatically by this extension, so it's not something to worry about.

source/gameengine/VideoTexture/Texture.cpp

index e1ddd7fce1e2c5342ceadd46c5695383130c5a6e..40e9f899ef098a95e573cb863681eccf619d9aef 100644 (file)
@@ -329,7 +329,17 @@ PyObject * Texture_refresh (Texture * self, PyObject * args)
                                        // get texture size
                                        short * orgSize = self->m_source->m_image->getSize();
                                        // calc scaled sizes
-                                       short size[] = {ImageBase::calcSize(orgSize[0]), ImageBase::calcSize(orgSize[1])};
+                                       short size[2];
+                                       if (GLEW_ARB_texture_non_power_of_two)
+                                       {
+                                               size[0] = orgSize[0];
+                                               size[1] = orgSize[1];
+                                       }
+                                       else
+                                       {
+                                               size[0] = ImageBase::calcSize(orgSize[0]);
+                                               size[1] = ImageBase::calcSize(orgSize[1]);
+                                       }
                                        // scale texture if needed
                                        if (size[0] != orgSize[0] || size[1] != orgSize[1])
                                        {