/*
Minetest-c55
-Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2010-2011 celeron55, Perttu Ahola <celeron55@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "utility.h"
#include <string>
+/*
+ tile.{h,cpp}: Texture handling stuff.
+*/
+
+/*
+ Gets the path to a texture by first checking if the texture exists
+ in texture_path and if not, using the data path.
+
+ Checks all supported extensions by replacing the original extension.
+
+ If not found, returns "".
+
+ Utilizes a thread-safe cache.
+*/
+std::string getTexturePath(const std::string &filename);
+
/*
Specifies a texture in an atlas.
}
};
+/*
+ Implementation (to be used as a no-op on the server)
+*/
+class ITextureSource
+{
+public:
+ ITextureSource(){}
+ virtual ~ITextureSource(){}
+ virtual u32 getTextureId(const std::string &name){return 0;}
+ virtual u32 getTextureIdDirect(const std::string &name){return 0;}
+ virtual std::string getTextureName(u32 id){return "";}
+ virtual AtlasPointer getTexture(u32 id){return AtlasPointer(0);}
+ virtual AtlasPointer getTexture(const std::string &name)
+ {return AtlasPointer(0);}
+ virtual video::ITexture* getTextureRaw(const std::string &name)
+ {return NULL;}
+};
+
/*
Creates and caches textures.
*/
-class TextureSource
+class TextureSource : public ITextureSource
{
public:
TextureSource(IrrlichtDevice *device);
/*
This fully defines the looks of a tile.
The SMaterial of a tile is constructed according to this.
-
- TODO: Change this to use an AtlasPointer
*/
struct TileSpec
{
TileSpec():
texture(0),
alpha(255),
- material_type(MATERIAL_ALPHA_NONE),
+ //material_type(MATERIAL_ALPHA_NONE),
// Use this so that leaves don't need a separate material
- //material_type(MATERIAL_ALPHA_SIMPLE),
+ material_type(MATERIAL_ALPHA_SIMPLE),
material_flags(
+ //0 // <- DEBUG, Use the one below
MATERIAL_FLAG_BACKFACE_CULLING
)
{
}
// Sets everything else except the texture in the material
- void applyMaterialOptions(video::SMaterial &material)
+ void applyMaterialOptions(video::SMaterial &material) const
{
if(alpha != 255 && material_type != MATERIAL_ALPHA_VERTEX)
dstream<<"WARNING: TileSpec: alpha != 255 "