All textures are are now searched first from the directory specified by the texture_path setting.
parent
a8acf3c391
commit
969fbb189d
|
@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
#include "utility.h"
|
#include "utility.h"
|
||||||
#include "environment.h"
|
#include "environment.h"
|
||||||
|
#include "tile.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
ClientActiveObject
|
ClientActiveObject
|
||||||
|
@ -114,7 +115,7 @@ void TestCAO::addToScene(scene::ISceneManager *smgr)
|
||||||
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
||||||
buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
||||||
buf->getMaterial().setTexture
|
buf->getMaterial().setTexture
|
||||||
(0, driver->getTexture(porting::getDataPath("rat.png").c_str()));
|
(0, driver->getTexture(getTexturePath("rat.png").c_str()));
|
||||||
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
||||||
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
||||||
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
||||||
|
@ -237,7 +238,7 @@ void ItemCAO::addToScene(scene::ISceneManager *smgr)
|
||||||
//buf->getMaterial().setTexture(0, NULL);
|
//buf->getMaterial().setTexture(0, NULL);
|
||||||
// Initialize with the stick texture
|
// Initialize with the stick texture
|
||||||
buf->getMaterial().setTexture
|
buf->getMaterial().setTexture
|
||||||
(0, driver->getTexture(porting::getDataPath("stick.png").c_str()));
|
(0, driver->getTexture(getTexturePath("stick.png").c_str()));
|
||||||
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
||||||
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
||||||
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
||||||
|
@ -443,7 +444,7 @@ void RatCAO::addToScene(scene::ISceneManager *smgr)
|
||||||
buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
||||||
//buf->getMaterial().setTexture(0, NULL);
|
//buf->getMaterial().setTexture(0, NULL);
|
||||||
buf->getMaterial().setTexture
|
buf->getMaterial().setTexture
|
||||||
(0, driver->getTexture(porting::getDataPath("rat.png").c_str()));
|
(0, driver->getTexture(getTexturePath("rat.png").c_str()));
|
||||||
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
||||||
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
||||||
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
||||||
|
@ -604,7 +605,7 @@ void Oerkki1CAO::addToScene(scene::ISceneManager *smgr)
|
||||||
buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
||||||
//buf->getMaterial().setTexture(0, NULL);
|
//buf->getMaterial().setTexture(0, NULL);
|
||||||
buf->getMaterial().setTexture
|
buf->getMaterial().setTexture
|
||||||
(0, driver->getTexture(porting::getDataPath("oerkki1.png").c_str()));
|
(0, driver->getTexture(getTexturePath("oerkki1.png").c_str()));
|
||||||
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
||||||
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
||||||
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
||||||
|
|
38
src/game.cpp
38
src/game.cpp
|
@ -345,7 +345,7 @@ void draw_hotbar(video::IVideoDriver *driver, gui::IGUIFont *font,
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
video::ITexture *heart_texture =
|
video::ITexture *heart_texture =
|
||||||
driver->getTexture(porting::getDataPath("heart.png").c_str());
|
driver->getTexture(getTexturePath("heart.png").c_str());
|
||||||
v2s32 p = pos + v2s32(0, -20);
|
v2s32 p = pos + v2s32(0, -20);
|
||||||
for(s32 i=0; i<halfheartcount/2; i++)
|
for(s32 i=0; i<halfheartcount/2; i++)
|
||||||
{
|
{
|
||||||
|
@ -597,32 +597,32 @@ void update_skybox(video::IVideoDriver* driver,
|
||||||
if(brightness >= 0.5)
|
if(brightness >= 0.5)
|
||||||
{
|
{
|
||||||
skybox = smgr->addSkyBoxSceneNode(
|
skybox = smgr->addSkyBoxSceneNode(
|
||||||
driver->getTexture(porting::getDataPath("skybox2.png").c_str()),
|
driver->getTexture(getTexturePath("skybox2.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox3.png").c_str()),
|
driver->getTexture(getTexturePath("skybox3.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox1.png").c_str()),
|
driver->getTexture(getTexturePath("skybox1.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox1.png").c_str()),
|
driver->getTexture(getTexturePath("skybox1.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox1.png").c_str()),
|
driver->getTexture(getTexturePath("skybox1.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox1.png").c_str()));
|
driver->getTexture(getTexturePath("skybox1.png").c_str()));
|
||||||
}
|
}
|
||||||
else if(brightness >= 0.2)
|
else if(brightness >= 0.2)
|
||||||
{
|
{
|
||||||
skybox = smgr->addSkyBoxSceneNode(
|
skybox = smgr->addSkyBoxSceneNode(
|
||||||
driver->getTexture(porting::getDataPath("skybox2_dawn.png").c_str()),
|
driver->getTexture(getTexturePath("skybox2_dawn.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox3_dawn.png").c_str()),
|
driver->getTexture(getTexturePath("skybox3_dawn.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox1_dawn.png").c_str()),
|
driver->getTexture(getTexturePath("skybox1_dawn.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox1_dawn.png").c_str()),
|
driver->getTexture(getTexturePath("skybox1_dawn.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox1_dawn.png").c_str()),
|
driver->getTexture(getTexturePath("skybox1_dawn.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox1_dawn.png").c_str()));
|
driver->getTexture(getTexturePath("skybox1_dawn.png").c_str()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
skybox = smgr->addSkyBoxSceneNode(
|
skybox = smgr->addSkyBoxSceneNode(
|
||||||
driver->getTexture(porting::getDataPath("skybox2_night.png").c_str()),
|
driver->getTexture(getTexturePath("skybox2_night.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox3_night.png").c_str()),
|
driver->getTexture(getTexturePath("skybox3_night.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox1_night.png").c_str()),
|
driver->getTexture(getTexturePath("skybox1_night.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox1_night.png").c_str()),
|
driver->getTexture(getTexturePath("skybox1_night.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox1_night.png").c_str()),
|
driver->getTexture(getTexturePath("skybox1_night.png").c_str()),
|
||||||
driver->getTexture(porting::getDataPath("skybox1_night.png").c_str()));
|
driver->getTexture(getTexturePath("skybox1_night.png").c_str()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -913,7 +913,7 @@ void drawMenuBackground(video::IVideoDriver* driver)
|
||||||
core::dimension2d<u32> screensize = driver->getScreenSize();
|
core::dimension2d<u32> screensize = driver->getScreenSize();
|
||||||
|
|
||||||
video::ITexture *bgtexture =
|
video::ITexture *bgtexture =
|
||||||
driver->getTexture(porting::getDataPath("mud.png").c_str());
|
driver->getTexture(getTexturePath("mud.png").c_str());
|
||||||
if(bgtexture)
|
if(bgtexture)
|
||||||
{
|
{
|
||||||
s32 texturesize = 128;
|
s32 texturesize = 128;
|
||||||
|
@ -933,7 +933,7 @@ void drawMenuBackground(video::IVideoDriver* driver)
|
||||||
}
|
}
|
||||||
|
|
||||||
video::ITexture *logotexture =
|
video::ITexture *logotexture =
|
||||||
driver->getTexture(porting::getDataPath("menulogo.png").c_str());
|
driver->getTexture(getTexturePath("menulogo.png").c_str());
|
||||||
if(logotexture)
|
if(logotexture)
|
||||||
{
|
{
|
||||||
v2s32 logosize(logotexture->getOriginalSize().Width,
|
v2s32 logosize(logotexture->getOriginalSize().Width,
|
||||||
|
@ -1288,7 +1288,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
guienv = device->getGUIEnvironment();
|
guienv = device->getGUIEnvironment();
|
||||||
gui::IGUISkin* skin = guienv->getSkin();
|
gui::IGUISkin* skin = guienv->getSkin();
|
||||||
gui::IGUIFont* font = guienv->getFont(porting::getDataPath("fontlucida.png").c_str());
|
gui::IGUIFont* font = guienv->getFont(getTexturePath("fontlucida.png").c_str());
|
||||||
if(font)
|
if(font)
|
||||||
skin->setFont(font);
|
skin->setFont(font);
|
||||||
else
|
else
|
||||||
|
|
|
@ -283,7 +283,7 @@ void RatObject::addToScene(scene::ISceneManager *smgr)
|
||||||
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
||||||
buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
||||||
buf->getMaterial().setTexture
|
buf->getMaterial().setTexture
|
||||||
(0, driver->getTexture(porting::getDataPath("rat.png").c_str()));
|
(0, driver->getTexture(getTexturePath("rat.png").c_str()));
|
||||||
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
||||||
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
||||||
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
||||||
|
@ -413,7 +413,7 @@ void PlayerObject::addToScene(scene::ISceneManager *smgr)
|
||||||
// Set material
|
// Set material
|
||||||
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
||||||
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
||||||
buf->getMaterial().setTexture(0, driver->getTexture(porting::getDataPath("player.png").c_str()));
|
buf->getMaterial().setTexture(0, driver->getTexture(getTexturePath("player.png").c_str()));
|
||||||
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
||||||
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
||||||
//buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
//buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
||||||
|
@ -437,7 +437,7 @@ void PlayerObject::addToScene(scene::ISceneManager *smgr)
|
||||||
// Set material
|
// Set material
|
||||||
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
||||||
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
||||||
buf->getMaterial().setTexture(0, driver->getTexture(porting::getDataPath("player_back.png").c_str()));
|
buf->getMaterial().setTexture(0, driver->getTexture(getTexturePath("player_back.png").c_str()));
|
||||||
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
||||||
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
||||||
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
||||||
|
|
|
@ -432,7 +432,7 @@ public:
|
||||||
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
||||||
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
||||||
buf->getMaterial().setTexture
|
buf->getMaterial().setTexture
|
||||||
(0, driver->getTexture(porting::getDataPath("sign.png").c_str()));
|
(0, driver->getTexture(getTexturePath("sign.png").c_str()));
|
||||||
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
||||||
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
||||||
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
||||||
|
@ -456,7 +456,7 @@ public:
|
||||||
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
||||||
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
||||||
buf->getMaterial().setTexture
|
buf->getMaterial().setTexture
|
||||||
(0, driver->getTexture(porting::getDataPath("sign_back.png").c_str()));
|
(0, driver->getTexture(getTexturePath("sign_back.png").c_str()));
|
||||||
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
||||||
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
||||||
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
||||||
|
|
|
@ -27,7 +27,6 @@ const char *mineral_filenames[MINERAL_COUNT] =
|
||||||
"mineral_iron.png"
|
"mineral_iron.png"
|
||||||
};
|
};
|
||||||
|
|
||||||
//textureid_t mineral_textures[MINERAL_COUNT] = {0};
|
|
||||||
std::string mineral_textures[MINERAL_COUNT];
|
std::string mineral_textures[MINERAL_COUNT];
|
||||||
|
|
||||||
void init_mineral()
|
void init_mineral()
|
||||||
|
@ -40,7 +39,6 @@ void init_mineral()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//textureid_t mineral_block_texture(u8 mineral)
|
|
||||||
std::string mineral_block_texture(u8 mineral)
|
std::string mineral_block_texture(u8 mineral)
|
||||||
{
|
{
|
||||||
if(mineral >= MINERAL_COUNT)
|
if(mineral >= MINERAL_COUNT)
|
||||||
|
|
|
@ -21,7 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
#define MINERAL_HEADER
|
#define MINERAL_HEADER
|
||||||
|
|
||||||
#include "inventory.h"
|
#include "inventory.h"
|
||||||
#include "texture.h"
|
#include "tile.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Minerals
|
Minerals
|
||||||
|
@ -39,7 +39,6 @@ void init_mineral();
|
||||||
|
|
||||||
#define MINERAL_COUNT 3
|
#define MINERAL_COUNT 3
|
||||||
|
|
||||||
//textureid_t mineral_block_texture(u8 mineral);
|
|
||||||
std::string mineral_block_texture(u8 mineral);
|
std::string mineral_block_texture(u8 mineral);
|
||||||
|
|
||||||
inline CraftItem * getDiggedMineralItem(u8 mineral)
|
inline CraftItem * getDiggedMineralItem(u8 mineral)
|
||||||
|
|
|
@ -261,7 +261,7 @@ RemotePlayer::RemotePlayer(
|
||||||
// Set material
|
// Set material
|
||||||
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
||||||
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
||||||
buf->getMaterial().setTexture(0, driver->getTexture(porting::getDataPath("player.png").c_str()));
|
buf->getMaterial().setTexture(0, driver->getTexture(getTexturePath("player.png").c_str()));
|
||||||
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
||||||
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
||||||
//buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
//buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
||||||
|
@ -285,7 +285,7 @@ RemotePlayer::RemotePlayer(
|
||||||
// Set material
|
// Set material
|
||||||
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
|
||||||
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
|
||||||
buf->getMaterial().setTexture(0, driver->getTexture(porting::getDataPath("player_back.png").c_str()));
|
buf->getMaterial().setTexture(0, driver->getTexture(getTexturePath("player_back.png").c_str()));
|
||||||
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
|
||||||
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
|
||||||
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
||||||
|
|
134
src/texture.h
134
src/texture.h
|
@ -1,134 +0,0 @@
|
||||||
/*
|
|
||||||
Minetest-c55
|
|
||||||
Copyright (C) 2010 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
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef TEXTURE_HEADER
|
|
||||||
#define TEXTURE_HEADER
|
|
||||||
|
|
||||||
// This file now contains all that was here
|
|
||||||
#include "tile.h"
|
|
||||||
|
|
||||||
// TODO: Remove this
|
|
||||||
typedef u16 textureid_t;
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
#include "common_irrlicht.h"
|
|
||||||
//#include "utility.h"
|
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
All textures are given a "texture id".
|
|
||||||
0 = nothing (a NULL pointer texture)
|
|
||||||
*/
|
|
||||||
typedef u16 textureid_t;
|
|
||||||
|
|
||||||
/*
|
|
||||||
Every texture in the game can be specified by this.
|
|
||||||
|
|
||||||
It exists instead of specification strings because arbitary
|
|
||||||
texture combinations for map nodes are handled using this,
|
|
||||||
and strings are too slow for that purpose.
|
|
||||||
|
|
||||||
Plain texture pointers are not used because they don't contain
|
|
||||||
content information by themselves. A texture can be completely
|
|
||||||
reconstructed by just looking at this, while this also is a
|
|
||||||
fast unique key to containers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define TEXTURE_SPEC_TEXTURE_COUNT 4
|
|
||||||
|
|
||||||
struct TextureSpec
|
|
||||||
{
|
|
||||||
TextureSpec()
|
|
||||||
{
|
|
||||||
clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
TextureSpec(textureid_t id0)
|
|
||||||
{
|
|
||||||
clear();
|
|
||||||
tids[0] = id0;
|
|
||||||
}
|
|
||||||
|
|
||||||
TextureSpec(textureid_t id0, textureid_t id1)
|
|
||||||
{
|
|
||||||
clear();
|
|
||||||
tids[0] = id0;
|
|
||||||
tids[1] = id1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void clear()
|
|
||||||
{
|
|
||||||
for(u32 i=0; i<TEXTURE_SPEC_TEXTURE_COUNT; i++)
|
|
||||||
{
|
|
||||||
tids[i] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool empty() const
|
|
||||||
{
|
|
||||||
for(u32 i=0; i<TEXTURE_SPEC_TEXTURE_COUNT; i++)
|
|
||||||
{
|
|
||||||
if(tids[i] != 0)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void addTid(textureid_t tid)
|
|
||||||
{
|
|
||||||
for(u32 i=0; i<TEXTURE_SPEC_TEXTURE_COUNT; i++)
|
|
||||||
{
|
|
||||||
if(tids[i] == 0)
|
|
||||||
{
|
|
||||||
tids[i] = tid;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Too many textures
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator==(const TextureSpec &other) const
|
|
||||||
{
|
|
||||||
for(u32 i=0; i<TEXTURE_SPEC_TEXTURE_COUNT; i++)
|
|
||||||
{
|
|
||||||
if(tids[i] != other.tids[i])
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator<(const TextureSpec &other) const
|
|
||||||
{
|
|
||||||
for(u32 i=0; i<TEXTURE_SPEC_TEXTURE_COUNT; i++)
|
|
||||||
{
|
|
||||||
if(tids[i] >= other.tids[i])
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ids of textures. They are blit on each other.
|
|
||||||
textureid_t tids[TEXTURE_SPEC_TEXTURE_COUNT];
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
62
src/tile.cpp
62
src/tile.cpp
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Minetest-c55
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -21,6 +21,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "main.h" // for g_settings
|
#include "main.h" // for g_settings
|
||||||
#include "filesys.h"
|
#include "filesys.h"
|
||||||
|
#include "utility.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
A cache from texture name to texture path
|
||||||
|
*/
|
||||||
|
MutexedMap<std::string, std::string> g_texturename_to_path_cache;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Replaces the filename extension.
|
Replaces the filename extension.
|
||||||
|
@ -30,7 +36,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
-> image = "a/image.jpg"
|
-> image = "a/image.jpg"
|
||||||
Returns true on success.
|
Returns true on success.
|
||||||
*/
|
*/
|
||||||
inline bool replace_ext(std::string &path, const char *ext)
|
static bool replace_ext(std::string &path, const char *ext)
|
||||||
{
|
{
|
||||||
if(ext == NULL)
|
if(ext == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
@ -61,7 +67,7 @@ inline bool replace_ext(std::string &path, const char *ext)
|
||||||
|
|
||||||
If failed, return "".
|
If failed, return "".
|
||||||
*/
|
*/
|
||||||
inline std::string getImagePath(std::string path)
|
static std::string getImagePath(std::string path)
|
||||||
{
|
{
|
||||||
// A NULL-ended list of possible image extensions
|
// A NULL-ended list of possible image extensions
|
||||||
const char *extensions[] = {
|
const char *extensions[] = {
|
||||||
|
@ -86,25 +92,55 @@ inline std::string getImagePath(std::string path)
|
||||||
/*
|
/*
|
||||||
Gets the path to a texture by first checking if the texture exists
|
Gets the path to a texture by first checking if the texture exists
|
||||||
in texture_path and if not, using the data path.
|
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.
|
||||||
*/
|
*/
|
||||||
inline std::string getTexturePath(std::string filename)
|
std::string getTexturePath(const std::string &filename)
|
||||||
{
|
{
|
||||||
|
std::string fullpath = "";
|
||||||
|
/*
|
||||||
|
Check from cache
|
||||||
|
*/
|
||||||
|
bool incache = g_texturename_to_path_cache.get(filename, &fullpath);
|
||||||
|
if(incache)
|
||||||
|
return fullpath;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Check from texture_path
|
||||||
|
*/
|
||||||
std::string texture_path = g_settings.get("texture_path");
|
std::string texture_path = g_settings.get("texture_path");
|
||||||
if(texture_path != "")
|
if(texture_path != "")
|
||||||
{
|
{
|
||||||
std::string fullpath = texture_path + '/' + filename;
|
std::string testpath = texture_path + '/' + filename;
|
||||||
// Check all filename extensions
|
// Check all filename extensions. Returns "" if not found.
|
||||||
fullpath = getImagePath(fullpath);
|
fullpath = getImagePath(testpath);
|
||||||
// If found, return it
|
|
||||||
if(fullpath != "")
|
|
||||||
return fullpath;
|
|
||||||
}
|
}
|
||||||
std::string fullpath = porting::getDataPath(filename.c_str());
|
|
||||||
// Check all filename extensions
|
/*
|
||||||
fullpath = getImagePath(fullpath);
|
Check from default data directory
|
||||||
|
*/
|
||||||
|
if(fullpath == "")
|
||||||
|
{
|
||||||
|
std::string testpath = porting::getDataPath(filename.c_str());
|
||||||
|
// Check all filename extensions. Returns "" if not found.
|
||||||
|
fullpath = getImagePath(testpath);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add to cache (also an empty result is cached)
|
||||||
|
g_texturename_to_path_cache.set(filename, fullpath);
|
||||||
|
|
||||||
|
// Finally return it
|
||||||
return fullpath;
|
return fullpath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
TextureSource
|
||||||
|
*/
|
||||||
|
|
||||||
TextureSource::TextureSource(IrrlichtDevice *device):
|
TextureSource::TextureSource(IrrlichtDevice *device):
|
||||||
m_device(device),
|
m_device(device),
|
||||||
m_main_atlas_image(NULL),
|
m_main_atlas_image(NULL),
|
||||||
|
|
18
src/tile.h
18
src/tile.h
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Minetest-c55
|
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
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -25,6 +25,22 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
#include "utility.h"
|
#include "utility.h"
|
||||||
#include <string>
|
#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.
|
Specifies a texture in an atlas.
|
||||||
|
|
||||||
|
|
|
@ -1766,12 +1766,12 @@ private:
|
||||||
core::list<Value> m_list;
|
core::list<Value> m_list;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if 0
|
#if 1
|
||||||
template<typename Key, typename Value>
|
template<typename Key, typename Value>
|
||||||
class MutexedCache
|
class MutexedMap
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MutexedCache()
|
MutexedMap()
|
||||||
{
|
{
|
||||||
m_mutex.Init();
|
m_mutex.Init();
|
||||||
assert(m_mutex.IsInitialized());
|
assert(m_mutex.IsInitialized());
|
||||||
|
@ -1793,8 +1793,10 @@ public:
|
||||||
|
|
||||||
if(n == NULL)
|
if(n == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
*result = n->getValue();
|
if(result != NULL)
|
||||||
|
*result = n->getValue();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue