[Bf-blender-cvs] [77bc623] master: Get rid og gluBuild2DMipmaps on game engine.

Antony Riakiotakis noreply at git.blender.org
Mon Mar 16 16:18:42 CET 2015


Commit: 77bc623bc4b1b1d6389eb749468348c13ed19ce8
Author: Antony Riakiotakis
Date:   Mon Mar 16 16:18:37 2015 +0100
Branches: master
https://developer.blender.org/rB77bc623bc4b1b1d6389eb749468348c13ed19ce8

Get rid og gluBuild2DMipmaps on game engine.

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

M	source/gameengine/Ketsji/BL_Texture.cpp
M	source/gameengine/VideoTexture/Texture.cpp

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

diff --git a/source/gameengine/Ketsji/BL_Texture.cpp b/source/gameengine/Ketsji/BL_Texture.cpp
index 58739e7..e1a2896 100644
--- a/source/gameengine/Ketsji/BL_Texture.cpp
+++ b/source/gameengine/Ketsji/BL_Texture.cpp
@@ -203,9 +203,21 @@ void BL_Texture::InitGLTex(unsigned int *pix,int x,int y,bool mipmap)
 
 	glBindTexture(GL_TEXTURE_2D, mTexture );
 	if ( mipmap ) {
+		int i;
+		ImBuf *ibuf;
 		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, x, y, GL_RGBA, GL_UNSIGNED_BYTE, pix );
+
+		ibuf = IMB_allocFromBuffer(pix, NULL, x, y);
+
+		IMB_makemipmap(ibuf, true);
+
+		for (i = 0; i < ibuf->miptot; i++) {
+			ImBuf *mip = IMB_getmipmap(ibuf, i);
+
+			glTexImage2D(GL_TEXTURE_2D, i,  GL_RGBA,  mip->x, mip->y, 0, GL_RGBA, GL_UNSIGNED_BYTE, mip->rect);
+		}
+		IMB_freeImBuf(ibuf);
 	} 
 	else {
 		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
@@ -245,9 +257,17 @@ void BL_Texture::InitNonPow2Tex(unsigned int *pix,int x,int y,bool mipmap)
 	glBindTexture(GL_TEXTURE_2D, mTexture );
 
 	if ( mipmap ) {
+		int i;
 		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, ibuf->rect );
+
+		IMB_makemipmap(ibuf, true);
+
+		for (i = 0; i < ibuf->miptot; i++) {
+			ImBuf *mip = IMB_getmipmap(ibuf, i);
+
+			glTexImage2D(GL_TEXTURE_2D, i,  GL_RGBA,  mip->x, mip->y, 0, GL_RGBA, GL_UNSIGNED_BYTE, mip->rect);
+		}
 	}
 	else {
 		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
diff --git a/source/gameengine/VideoTexture/Texture.cpp b/source/gameengine/VideoTexture/Texture.cpp
index 9640c55..c31faf5 100644
--- a/source/gameengine/VideoTexture/Texture.cpp
+++ b/source/gameengine/VideoTexture/Texture.cpp
@@ -79,9 +79,21 @@ void loadTexture(unsigned int texId, unsigned int *texture, short *size,
 	glBindTexture(GL_TEXTURE_2D, texId);
 	if (mipmap)
 	{
+		int i;
+		ImBuf *ibuf;
 		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, size[0], size[1], GL_RGBA, GL_UNSIGNED_BYTE, texture);
+
+		ibuf = IMB_allocFromBuffer(texture, NULL, size[0], size[1]);
+
+		IMB_makemipmap(ibuf, true);
+
+		for (i = 0; i < ibuf->miptot; i++) {
+			ImBuf *mip = IMB_getmipmap(ibuf, i);
+
+			glTexImage2D(GL_TEXTURE_2D, i,  GL_RGBA,  mip->x, mip->y, 0, GL_RGBA, GL_UNSIGNED_BYTE, mip->rect);
+		}
+		IMB_freeImBuf(ibuf);
 	} 
 	else
 	{




More information about the Bf-blender-cvs mailing list