[Bf-blender-cvs] [15957a9] master: Get rid of gluScaleImage in our game engine as well.

Antony Riakiotakis noreply at git.blender.org
Fri Feb 27 14:47:54 CET 2015


Commit: 15957a9e4d640af223b0ff0b893139d436cab7fb
Author: Antony Riakiotakis
Date:   Fri Feb 27 14:47:39 2015 +0100
Branches: master
https://developer.blender.org/rB15957a9e4d640af223b0ff0b893139d436cab7fb

Get rid of gluScaleImage in our game engine as well.

===================================================================

M	source/blender/gpu/intern/gpu_draw.c
M	source/gameengine/Ketsji/BL_Texture.cpp
M	source/gameengine/VideoTexture/Texture.cpp
M	source/gameengine/VideoTexture/Texture.h

===================================================================

diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c
index aa4a84a..3ed7253 100644
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -983,7 +983,7 @@ static bool GPU_check_scaled_image(ImBuf *ibuf, Image *ima, float *frect, int x,
 		if (rectw + x > x_limit) rectw--;
 		if (recth + y > y_limit) recth--;
 
-		/* float rectangles are already continuous in memory so we can use gluScaleImage */
+		/* float rectangles are already continuous in memory so we can use IMB_scaleImBuf */
 		if (frect) {
 			ImBuf *ibuf = IMB_allocFromBuffer(NULL, frect, w, h);
 			IMB_scaleImBuf(ibuf, rectw, recth);
diff --git a/source/gameengine/Ketsji/BL_Texture.cpp b/source/gameengine/Ketsji/BL_Texture.cpp
index 1a78efb..58739e7 100644
--- a/source/gameengine/Ketsji/BL_Texture.cpp
+++ b/source/gameengine/Ketsji/BL_Texture.cpp
@@ -239,26 +239,26 @@ void BL_Texture::InitNonPow2Tex(unsigned int *pix,int x,int y,bool mipmap)
 	int nx= power_of_2_min_i(x);
 	int ny= power_of_2_min_i(y);
 
-	unsigned int *newPixels = (unsigned int *)malloc(nx*ny*sizeof(unsigned int));
-	
-	gluScaleImage(GL_RGBA, x, y, GL_UNSIGNED_BYTE, pix, nx,ny, GL_UNSIGNED_BYTE, newPixels);
+	ImBuf *ibuf = IMB_allocFromBuffer(pix, NULL, x, y);
+	IMB_scaleImBuf(ibuf, nx, ny);
+
 	glBindTexture(GL_TEXTURE_2D, mTexture );
 
 	if ( mipmap ) {
 		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
 		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-		gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, nx, ny, GL_RGBA, GL_UNSIGNED_BYTE, newPixels );
+		gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, nx, ny, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect );
 	}
 	else {
 		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-		glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, nx, ny, 0, GL_RGBA, GL_UNSIGNED_BYTE, newPixels );
+		glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, nx, ny, 0, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect );
 	}
 
 	if (GLEW_EXT_texture_filter_anisotropic)
 		glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, GPU_get_anisotropic());
 	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
-	free(newPixels);
+	IMB_freeImBuf(ibuf);
 }
 
 
diff --git a/source/gameengine/VideoTexture/Texture.cpp b/source/gameengine/VideoTexture/Texture.cpp
index 5eb609c..9640c55 100644
--- a/source/gameengine/VideoTexture/Texture.cpp
+++ b/source/gameengine/VideoTexture/Texture.cpp
@@ -57,6 +57,9 @@
 #include <memory.h>
 #include "glew-mx.h"
 
+extern "C" {
+	#include "IMB_imbuf.h"
+}
 
 // macro for exception handling and logging
 #define CATCH_EXCP catch (Exception & exp) \
@@ -163,8 +166,7 @@ static PyObject *Texture_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 	self->m_imgTexture = NULL;
 	self->m_matTexture = NULL;
 	self->m_mipmap = false;
-	self->m_scaledImg = NULL;
-	self->m_scaledImgSize = 0;
+	self->m_scaledImBuf = NULL;
 	self->m_source = NULL;
 	self->m_lastClock = 0.0;
 	// return allocated object
@@ -186,7 +188,7 @@ static void Texture_dealloc(Texture *self)
 	PyObject *ret = Texture_close(self);
 	Py_DECREF(ret);
 	// release scaled image buffer
-	delete [] self->m_scaledImg;
+	IMB_freeImBuf(self->m_scaledImBuf);
 	// release object
 	Py_TYPE((PyObject *)self)->tp_free((PyObject *)self);
 }
@@ -370,20 +372,12 @@ static PyObject *Texture_refresh(Texture *self, PyObject *args)
 					// scale texture if needed
 					if (size[0] != orgSize[0] || size[1] != orgSize[1])
 					{
-						// if scaled image buffer is smaller than needed
-						if (self->m_scaledImgSize < (unsigned int)(size[0] * size[1]))
-						{
-							// new size
-							self->m_scaledImgSize = size[0] * size[1];
-							// allocate scaling image
-							delete [] self->m_scaledImg;
-							self->m_scaledImg = new unsigned int[self->m_scaledImgSize];
-						}
-						// scale texture
-						gluScaleImage(GL_RGBA, orgSize[0], orgSize[1], GL_UNSIGNED_BYTE, texture,
-							size[0], size[1], GL_UNSIGNED_BYTE, self->m_scaledImg);
+						IMB_freeImBuf(self->m_scaledImBuf);
+						self->m_scaledImBuf = IMB_allocFromBuffer(texture, NULL, orgSize[0], orgSize[1]);
+						IMB_scaleImBuf(self->m_scaledImBuf, size[0], size[1]);
+
 						// use scaled image instead original
-						texture = self->m_scaledImg;
+						texture = self->m_scaledImBuf->rect;
 					}
 					// load texture for rendering
 					loadTexture(self->m_actTex, texture, size, self->m_mipmap);
diff --git a/source/gameengine/VideoTexture/Texture.h b/source/gameengine/VideoTexture/Texture.h
index 1befb62..ae778ba 100644
--- a/source/gameengine/VideoTexture/Texture.h
+++ b/source/gameengine/VideoTexture/Texture.h
@@ -71,9 +71,7 @@ struct Texture
 	bool m_mipmap;
 
 	// scaled image buffer
-	unsigned int * m_scaledImg;
-	// scaled image buffer size
-	unsigned int m_scaledImgSize;
+	ImBuf * m_scaledImBuf;
 	// last refresh
 	double m_lastClock;




More information about the Bf-blender-cvs mailing list