-/*******************************************************************************
-
- Copyright (c) 2009, Charles McGarvey
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*******************************************************************************/
+/*] Copyright (c) 2009-2010, Charles McGarvey [**************************
+**] All rights reserved.
+*
+* vi:ts=4 sw=4 tw=75
+*
+* Distributable under the terms and conditions of the 2-clause BSD license;
+* see the file COPYING for a complete text of the license.
+*
+**************************************************************************/
#include <cstdio> // FILE
#include <cstring> // strncmp
/**
- * The texture implementation just contains all the information about the image
- * which is worth having in memory. The image data itself is not worth keeping
- * in memory if the texture has been loaded to GL, but the name of the resource
- * is retained so that it can be reloaded if necessary. The implementation is a
- * manager so that multiple texture objects can share the same internal objects
- * and avoid having duplicate textures loaded to GL.
+ * The texture implementation just contains all the information about the
+ * image which is worth having in memory. The image data itself is not
+ * worth keeping in memory if the texture has been loaded to GL, but the
+ * name of the resource is retained so that it can be reloaded if
+ * necessary. The implementation is a manager so that multiple texture
+ * objects can share the same internal objects and avoid having duplicate
+ * textures loaded to GL.
*/
class Texture::Impl : public Manager<Impl>
}
/**
- * If the GL context was recreated, we need to reload the texture. This may
- * involve reading it from disk again, but hopefully the OS was smart enough
- * to cache it if the client has plenty of RAM.
+ * If the GL context was recreated, we need to reload the texture.
+ * This may involve reading it from disk again, but hopefully the OS
+ * was smart enough to cache it if the client has plenty of RAM.
*/
void contextRecreated()
}
/**
- * This is a helper method used by some of the texture loading code. It
- * returns the first power of two which is greater than the input value.
+ * This is a helper method used by some of the texture loading code.
+ * It returns the first power of two which is greater than the input
+ * value.
*/
static int powerOfTwo(int input)
script.push(GL_REPEAT); script.set("REPEAT");
script.push(GL_LINEAR); script.set("LINEAR");
script.push(GL_NEAREST); script.set("NEAREST");
- script.push(GL_LINEAR_MIPMAP_LINEAR); script.set("LINEAR_MIPMAP_LINEAR");
- script.push(GL_LINEAR_MIPMAP_NEAREST); script.set("LINEAR_MIPMAP_NEAREST");
- script.push(GL_NEAREST_MIPMAP_LINEAR); script.set("NEAREST_MIPMAP_LINEAR");
- script.push(GL_NEAREST_MIPMAP_NEAREST); script.set("NEAREST_MIPMAP_NEAREST");
+ script.push(GL_LINEAR_MIPMAP_LINEAR);
+ script.set("LINEAR_MIPMAP_LINEAR");
+ script.push(GL_LINEAR_MIPMAP_NEAREST);
+ script.set("LINEAR_MIPMAP_NEAREST");
+ script.push(GL_NEAREST_MIPMAP_LINEAR);
+ script.set("NEAREST_MIPMAP_LINEAR");
+ script.push(GL_NEAREST_MIPMAP_NEAREST);
+ script.set("NEAREST_MIPMAP_NEAREST");
}
public:
mObject(0)
{
// make sure we have a video context
- ASSERT(video && "cannot load textures without a current video context");
+ ASSERT(video &&
+ "cannot load textures without a current video context");
// we want to know when the GL context is recreated
mDispatchHandler = core.addHandler("video.newcontext",
/**
- * Adapted from some public domain code. This stuff is common enough that
- * it really should be included in SDL_image... We need this because images
- * loaded with SDL_image aren't exactly GL-ready right out of the box. This
- * method makes them ready.
+ * Adapted from some public domain code. This stuff is common enough
+ * that it really should be included in SDL_image... We need this
+ * because images loaded with SDL_image aren't exactly GL-ready right
+ * out of the box. This method makes them ready.
*/
/*
int w = powerOfTwo(surface->w);
int h = powerOfTwo(surface->h);
- // 2. OpenGL textures make more sense within the coordinate system when
- // they are "upside down," so let's flip it.
+ // 2. OpenGL textures make more sense within the coordinate system
+ // when they are "upside down," so let's flip it.
flipSurface(surface);
- // 1. OpenGL images must (generally) have dimensions of a power-of-two.
- // If this one doesn't, we can at least be more friendly by expanding
- // the dimensions so that they are, though there will be some empty
- // space within the range of normal texture coordinates. It's better if
- // textures are the right size to begin with.
+ // 1. OpenGL images must (generally) have dimensions of a
+ // power-of-two. If this one doesn't, we can at least be more
+ // friendly by expanding the dimensions so that they are, though
+ // there will be some empty space within the range of normal
+ // texture coordinates. It's better if textures are the right size
+ // to begin with.
SDL_Surface* image = SDL_CreateRGBSurface
(
*/
/**
- * Use SDL_image to load images from file. A surface with the image data is
- * returned.
+ * Use SDL_image to load images from file. A surface with the image
+ * data is returned.
* @return Image data.
*/
}
else
{
- Mf::logInfo << "loading tiles from texture " << path << std::endl;
+ Mf::logInfo << "loading tiles from texture " << path
+ << std::endl;
Mf::Script::Slot globals = script.getGlobalTable();
Mf::Script::Slot top = script[-1];
/**
- * Sets some texture properties such as the filters and external coordinate
- * behavior.
+ * Sets some texture properties such as the filters and external
+ * coordinate behavior.
*/
void setProperties()
Scalar h = 1.0 / Scalar(mTilesT);
coords[0] = Scalar(index % mTilesS) * w;
- coords[1] = (Scalar(mTilesT - 1) -
- Scalar(index / mTilesS)) * h;
+ coords[1] = (Scalar(mTilesT - 1) - Scalar(index / mTilesS)) * h;
coords[2] = coords[0] + w;
coords[3] = coords[1];
coords[4] = coords[2];
ImageP mImage;
- GLuint mMinFilter; ///< Minification filter.
- GLuint mMagFilter; ///< Magnification filter.
- GLuint mWrapS; ///< Wrapping behavior horizontally.
- GLuint mWrapT; ///< Wrapping behavior vertically.
+ GLuint mMinFilter; ///< Minification filter.
+ GLuint mMagFilter; ///< Magnification filter.
+ GLuint mWrapS; ///< Wrapping behavior horizontally.
+ GLuint mWrapT; ///< Wrapping behavior vertically.
unsigned mTilesS;
unsigned mTilesT;
- GLuint mObject; ///< GL texture handle.
- static GLuint gObject; ///< Global GL texture handle.
+ GLuint mObject; ///< GL texture handle.
+ static GLuint gObject; ///< Global GL texture handle.
Dispatch::Handler mDispatchHandler;
};
} // namespace Mf
-/** vim: set ts=4 sw=4 tw=80: *************************************************/
-