Browse Source

Only pad when needed

Bart van Strien 14 years ago
parent
commit
d613505a77
2 changed files with 37 additions and 1 deletions
  1. 34 1
      src/modules/graphics/opengl/Image.cpp
  2. 3 0
      src/modules/graphics/opengl/Image.h

+ 34 - 1
src/modules/graphics/opengl/Image.cpp

@@ -29,7 +29,6 @@ namespace graphics
 {
 namespace opengl
 {
-
 	Image::Image(love::image::ImageData * data)
 		: width((float)(data->getWidth())), height((float)(data->getHeight())), texture(0)
 	{
@@ -276,6 +275,14 @@ namespace opengl
 	}
 
 	bool Image::loadVolatile()
+	{
+		if (GLEE_ARB_texture_non_power_of_two)
+			return loadVolatileNPOT();
+		else
+			return loadVolatilePOT();
+	}
+
+	bool Image::loadVolatilePOT()
 	{
 		glGenTextures(1,(GLuint*)&texture);
 		glBindTexture(GL_TEXTURE_2D, texture);
@@ -321,6 +328,32 @@ namespace opengl
 		return true;
 	}
 
+	bool Image::loadVolatileNPOT()
+	{
+		glGenTextures(1,(GLuint*)&texture);
+		glBindTexture(GL_TEXTURE_2D, texture);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+
+		glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+		glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+		
+		glTexImage2D(GL_TEXTURE_2D,
+			0,
+			GL_RGBA8,
+			(GLsizei)width,
+			(GLsizei)height,
+			0,
+			GL_RGBA,
+			GL_UNSIGNED_BYTE,
+			data->getData());
+
+		setFilter(settings.filter);
+		setWrap(settings.wrap);
+
+		return true;
+	}
+
 	void Image::unloadVolatile()
 	{
 		settings.filter = getFilter();

+ 3 - 0
src/modules/graphics/opengl/Image.h

@@ -69,6 +69,9 @@ namespace opengl
 			Image::Wrap wrap;
 		} settings;
 
+		bool loadVolatilePOT();
+		bool loadVolatileNPOT();
+
 	public:
 
 		/**