Image settings now survive setMode, fixes bug #10

This commit is contained in:
Bart van Strien
2010-08-04 13:38:22 +02:00
parent 5235ceac53
commit 29c68d06f1
3 changed files with 52 additions and 40 deletions
+19 -14
View File
@@ -1,14 +1,14 @@
/** /**
* Copyright (c) 2006-2010 LOVE Development Team * Copyright (c) 2006-2010 LOVE Development Team
* *
* This software is provided 'as-is', without any express or implied * This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages * warranty. In no event will the authors be held liable for any damages
* arising from the use of this software. * arising from the use of this software.
* *
* Permission is granted to anyone to use this software for any purpose, * Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it * including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions: * freely, subject to the following restrictions:
* *
* 1. The origin of this software must not be misrepresented; you must not * 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software * claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be * in a product, an acknowledgment in the product documentation would be
@@ -106,7 +106,7 @@ namespace opengl
void Image::draw(float x, float y, float angle, float sx, float sy, float ox, float oy) const void Image::draw(float x, float y, float angle, float sx, float sy, float ox, float oy) const
{ {
static Matrix t; static Matrix t;
t.setTransformation(x, y, angle, sx, sy, ox, oy); t.setTransformation(x, y, angle, sx, sy, ox, oy);
drawv(t, vertices); drawv(t, vertices);
} }
@@ -165,7 +165,7 @@ namespace opengl
glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &gmag); glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &gmag);
Image::Filter f; Image::Filter f;
switch(gmin) switch(gmin)
{ {
case GL_NEAREST: case GL_NEAREST:
@@ -272,7 +272,7 @@ namespace opengl
void Image::unload() void Image::unload()
{ {
unloadVolatile(); return unloadVolatile();
} }
bool Image::loadVolatile() bool Image::loadVolatile()
@@ -285,21 +285,26 @@ namespace opengl
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, glTexImage2D(GL_TEXTURE_2D,
0, 0,
GL_RGBA8, GL_RGBA8,
(GLsizei)width, (GLsizei)width,
(GLsizei)height, (GLsizei)height,
0, 0,
GL_RGBA, GL_RGBA,
GL_UNSIGNED_BYTE, GL_UNSIGNED_BYTE,
data->getData()); data->getData());
setFilter(settings.filter);
setWrap(settings.wrap);
return true; return true;
} }
void Image::unloadVolatile() void Image::unloadVolatile()
{ {
settings.filter = getFilter();
settings.wrap = getWrap();
// Delete the hardware texture. // Delete the hardware texture.
if(texture != 0) if(texture != 0)
{ {
+22 -15
View File
@@ -1,14 +1,14 @@
/** /**
* Copyright (c) 2006-2010 LOVE Development Team * Copyright (c) 2006-2010 LOVE Development Team
* *
* This software is provided 'as-is', without any express or implied * This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages * warranty. In no event will the authors be held liable for any damages
* arising from the use of this software. * arising from the use of this software.
* *
* Permission is granted to anyone to use this software for any purpose, * Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it * including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions: * freely, subject to the following restrictions:
* *
* 1. The origin of this software must not be misrepresented; you must not * 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software * claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be * in a product, an acknowledgment in the product documentation would be
@@ -39,11 +39,11 @@ namespace graphics
{ {
namespace opengl namespace opengl
{ {
/** /**
* A drawable image based on OpenGL-textures. This class takes ImageData * A drawable image based on OpenGL-textures. This class takes ImageData
* objects and create textures on the GPU for fast drawing. * objects and create textures on the GPU for fast drawing.
* *
* @author Anders Ruud * @author Anders Ruud
**/ **/
class Image : public love::graphics::Image class Image : public love::graphics::Image
@@ -53,7 +53,7 @@ namespace opengl
// The ImageData from which the texture is created. // The ImageData from which the texture is created.
love::image::ImageData * data; love::image::ImageData * data;
// Width and height of the hardware texture. // Width and height of the hardware texture.
float width, height; float width, height;
// OpenGL texture identifier. // OpenGL texture identifier.
@@ -62,16 +62,23 @@ namespace opengl
// The source vertices of the image. // The source vertices of the image.
vertex vertices[4]; vertex vertices[4];
// The settings we need to save when reloading.
struct
{
Image::Filter filter;
Image::Wrap wrap;
} settings;
public: public:
/** /**
* Creates a new Image. Not that anything is ready to use * Creates a new Image. Not that anything is ready to use
* before load is called. * before load is called.
* *
* @param file The file from which to load the image. * @param file The file from which to load the image.
**/ **/
Image(love::image::ImageData * data); Image(love::image::ImageData * data);
/** /**
* Destructor. Deletes the hardware texture and other resources. * Destructor. Deletes the hardware texture and other resources.
**/ **/
@@ -81,15 +88,15 @@ namespace opengl
float getHeight() const; float getHeight() const;
const vertex * getVertices() const; const vertex * getVertices() const;
love::image::ImageData * getData() const; love::image::ImageData * getData() const;
/** /**
* Generate vertices according to a subimage. * Generate vertices according to a subimage.
* *
* Note: out-of-range values will be clamped. * Note: out-of-range values will be clamped.
* Note: the vertex colors will not be changed. * Note: the vertex colors will not be changed.
* *
* @param x The top-left corner of the subimage along the x-axis. * @param x The top-left corner of the subimage along the x-axis.
* @param y The top-left corner of the subimage along the y-axis. * @param y The top-left corner of the subimage along the y-axis.
* @param w The width of the subimage. * @param w The width of the subimage.
@@ -131,14 +138,14 @@ namespace opengl
// Implements Volatile. // Implements Volatile.
bool loadVolatile(); bool loadVolatile();
void unloadVolatile(); void unloadVolatile();
private: private:
void drawv(const Matrix & t, const vertex * v) const; void drawv(const Matrix & t, const vertex * v) const;
}; // Image }; // Image
} // opengl } // opengl
} // graphics } // graphics
} // love } // love
+11 -11
View File
@@ -1,14 +1,14 @@
/** /**
* Copyright (c) 2006-2010 LOVE Development Team * Copyright (c) 2006-2010 LOVE Development Team
* *
* This software is provided 'as-is', without any express or implied * This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages * warranty. In no event will the authors be held liable for any damages
* arising from the use of this software. * arising from the use of this software.
* *
* Permission is granted to anyone to use this software for any purpose, * Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it * including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions: * freely, subject to the following restrictions:
* *
* 1. The origin of this software must not be misrepresented; you must not * 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software * claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be * in a product, an acknowledgment in the product documentation would be
@@ -39,9 +39,9 @@ namespace lullaby
return 1; return 1;
} }
size_t vorbisRead(void * ptr /* ptr to the data that the vorbis files need*/, size_t vorbisRead(void * ptr /* ptr to the data that the vorbis files need*/,
size_t byteSize /* how big a byte is*/, size_t byteSize /* how big a byte is*/,
size_t sizeToRead /* How much we can read*/, size_t sizeToRead /* How much we can read*/,
void * datasource /* this is a pointer to the data we passed into ov_open_callbacks (our SOggFile struct*/) void * datasource /* this is a pointer to the data we passed into ov_open_callbacks (our SOggFile struct*/)
{ {
size_t spaceToEOF; // How much more we can read till we hit the EOF marker size_t spaceToEOF; // How much more we can read till we hit the EOF marker
@@ -56,8 +56,8 @@ namespace lullaby
if ((sizeToRead*byteSize) < spaceToEOF) if ((sizeToRead*byteSize) < spaceToEOF)
actualSizeToRead = (sizeToRead*byteSize); actualSizeToRead = (sizeToRead*byteSize);
else else
actualSizeToRead = spaceToEOF; actualSizeToRead = spaceToEOF;
// A simple copy of the data from memory to the datastruct that the vorbis libs will use // A simple copy of the data from memory to the datastruct that the vorbis libs will use
if (actualSizeToRead) if (actualSizeToRead)
{ {
@@ -100,7 +100,7 @@ namespace lullaby
if (offset < spaceToEOF) if (offset < spaceToEOF)
actualOffset = (offset); actualOffset = (offset);
else else
actualOffset = spaceToEOF; actualOffset = spaceToEOF;
// Seek from our currrent location // Seek from our currrent location
vorbisData->dataRead += (int)actualOffset; vorbisData->dataRead += (int)actualOffset;
break; break;
@@ -133,7 +133,7 @@ namespace lullaby
vorbisCallbacks.seek_func = vorbisSeek; vorbisCallbacks.seek_func = vorbisSeek;
vorbisCallbacks.read_func = vorbisRead; vorbisCallbacks.read_func = vorbisRead;
vorbisCallbacks.tell_func = vorbisTell; vorbisCallbacks.tell_func = vorbisTell;
// Check endianness // Check endianness
#ifdef LOVE_BIG_ENDIAN #ifdef LOVE_BIG_ENDIAN
endian = 1; endian = 1;
@@ -149,7 +149,7 @@ namespace lullaby
// Open Vorbis handle // Open Vorbis handle
if(ov_open_callbacks(&oggFile, &handle, NULL, 0, vorbisCallbacks) < 0) if(ov_open_callbacks(&oggFile, &handle, NULL, 0, vorbisCallbacks) < 0)
throw love::Exception("Could not read Ogg bitstream"); throw love::Exception("Could not read Ogg bitstream");
// Get info and comments // Get info and comments
vorbisInfo = ov_info(&handle, -1); vorbisInfo = ov_info(&handle, -1);
vorbisComment = ov_comment(&handle, -1); vorbisComment = ov_comment(&handle, -1);