#include <IrrlichtDevice.h>
#include "threads.h"
#include <string>
+#include <map>
class IGameDef;
TextureSource creates and caches textures.
*/
-class ITextureSource
+class ISimpleTextureSource
+{
+public:
+ ISimpleTextureSource(){}
+ virtual ~ISimpleTextureSource(){}
+ virtual video::ITexture* getTexture(
+ const std::string &name, u32 *id = NULL) = 0;
+};
+
+class ITextureSource : public ISimpleTextureSource
{
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 video::ITexture* getTexture(u32 id){return NULL;}
+ virtual u32 getTextureId(const std::string &name)=0;
+ virtual u32 getTextureIdDirect(const std::string &name)=0;
+ virtual std::string getTextureName(u32 id)=0;
+ virtual video::ITexture* getTexture(u32 id)=0;
virtual video::ITexture* getTexture(
- const std::string &name, u32 *id = NULL){
- if(id) *id = 0;
- return NULL;
- }
- virtual IrrlichtDevice* getDevice()
- {return NULL;}
+ const std::string &name, u32 *id = NULL)=0;
+ virtual IrrlichtDevice* getDevice()=0;
virtual bool isKnownSourceImage(const std::string &name)=0;
virtual video::ITexture* generateTextureFromMesh(
const TextureFromMeshParams ¶ms)=0;
+ virtual video::ITexture* getNormalTexture(const std::string &name)=0;
};
class IWritableTextureSource : public ITextureSource
public:
IWritableTextureSource(){}
virtual ~IWritableTextureSource(){}
- 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 video::ITexture* getTexture(u32 id){return NULL;}
+ virtual u32 getTextureId(const std::string &name)=0;
+ virtual u32 getTextureIdDirect(const std::string &name)=0;
+ virtual std::string getTextureName(u32 id)=0;
+ virtual video::ITexture* getTexture(u32 id)=0;
virtual video::ITexture* getTexture(
- const std::string &name, u32 *id = NULL){
- if(id) *id = 0;
- return NULL;
- }
- virtual IrrlichtDevice* getDevice(){return NULL;}
+ const std::string &name, u32 *id = NULL)=0;
+ virtual IrrlichtDevice* getDevice()=0;
virtual bool isKnownSourceImage(const std::string &name)=0;
+ virtual video::ITexture* generateTextureFromMesh(
+ const TextureFromMeshParams ¶ms)=0;
virtual void processQueue()=0;
virtual void insertSourceImage(const std::string &name, video::IImage *img)=0;
virtual void rebuildImagesAndTextures()=0;
- virtual video::ITexture* generateTextureFromMesh(
- const TextureFromMeshParams ¶ms)=0;
+ virtual video::ITexture* getNormalTexture(const std::string &name)=0;
};
IWritableTextureSource* createTextureSource(IrrlichtDevice *device);
+#ifdef __ANDROID__
+/**
+ * @param size get next npot2 value
+ * @return npot2 value
+ */
+inline unsigned int npot2(unsigned int size)
+{
+ if (size == 0) return 0;
+ unsigned int npot = 1;
+
+ while ((size >>= 1) > 0) {
+ npot <<= 1;
+ }
+ return npot;
+}
+
+video::IImage * Align2Npot2(video::IImage * image, video::IVideoDriver* driver);
+#endif
+
enum MaterialType{
TILE_MATERIAL_BASIC,
TILE_MATERIAL_ALPHA,
TILE_MATERIAL_LIQUID_TRANSPARENT,
TILE_MATERIAL_LIQUID_OPAQUE,
+ TILE_MATERIAL_WAVING_LEAVES,
+ TILE_MATERIAL_WAVING_PLANTS
};
// Material flags
This fully defines the looks of a tile.
The SMaterial of a tile is constructed according to this.
*/
+struct FrameSpec
+{
+ FrameSpec():
+ texture_id(0),
+ texture(NULL),
+ normal_texture(NULL)
+ {
+ }
+ u32 texture_id;
+ video::ITexture *texture;
+ video::ITexture *normal_texture;
+};
+
struct TileSpec
{
TileSpec():
texture_id(0),
texture(NULL),
+ normal_texture(NULL),
alpha(255),
material_type(TILE_MATERIAL_BASIC),
material_flags(
//0 // <- DEBUG, Use the one below
MATERIAL_FLAG_BACKFACE_CULLING
),
+ shader_id(0),
animation_frame_count(1),
animation_frame_length_ms(0),
rotation(0)
case TILE_MATERIAL_LIQUID_OPAQUE:
material.MaterialType = video::EMT_SOLID;
break;
+ case TILE_MATERIAL_WAVING_LEAVES:
+ material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
+ break;
+ case TILE_MATERIAL_WAVING_PLANTS:
+ material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
+ break;
}
material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) ? true : false;
}
- void applyMaterialOptionsWithShaders(video::SMaterial &material,
- const video::E_MATERIAL_TYPE &basic,
- const video::E_MATERIAL_TYPE &liquid,
- const video::E_MATERIAL_TYPE &alpha) const
+
+ void applyMaterialOptionsWithShaders(video::SMaterial &material) const
{
- switch(material_type){
- case TILE_MATERIAL_BASIC:
- material.MaterialType = basic;
- break;
- case TILE_MATERIAL_ALPHA:
- material.MaterialType = alpha;
- break;
- case TILE_MATERIAL_LIQUID_TRANSPARENT:
- material.MaterialType = liquid;
- break;
- case TILE_MATERIAL_LIQUID_OPAQUE:
- material.MaterialType = liquid;
- break;
- }
material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) ? true : false;
}
u32 texture_id;
video::ITexture *texture;
+ video::ITexture *normal_texture;
+
// Vertex alpha (when MATERIAL_ALPHA_VERTEX is used)
u8 alpha;
// Material parameters
u8 material_type;
u8 material_flags;
+ u32 shader_id;
// Animation parameters
u8 animation_frame_count;
u16 animation_frame_length_ms;
+ std::map<u32, FrameSpec> frames;
+
u8 rotation;
};