mirror of
https://github.com/love2d/love.git
synced 2026-08-17 19:23:38 +02:00
Image settings now survive setMode, fixes bug #10
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user