summaryrefslogtreecommitdiff
path: root/src/client/tile.cpp
diff options
context:
space:
mode:
authorLoïc Blot <nerzhul@users.noreply.github.com>2017-06-26 20:11:17 +0200
committerGitHub <noreply@github.com>2017-06-26 20:11:17 +0200
commitb3a36f7378ea0f299cfa36c81de42e00adb7292d (patch)
tree23d056b575ff0dba8cc759cc00f732099a1f3bce /src/client/tile.cpp
parenta8650e785df3f12efa5f8cd3c6a695fb9e22a598 (diff)
downloadminetest-b3a36f7378ea0f299cfa36c81de42e00adb7292d.tar.gz
minetest-b3a36f7378ea0f299cfa36c81de42e00adb7292d.tar.bz2
minetest-b3a36f7378ea0f299cfa36c81de42e00adb7292d.zip
Isolate irrlicht references and use a singleton (#6041)
* Add Device3D class which will contain IrrlichtDevice interface move getSupportedVideoDrivers to Device3D Add Device3D singleton & use it in various places Rename Device3D to Rendering engine & add helper functions to various device pointers More singleton work RenderingEngine owns draw_load_screen move draw functions to RenderingEngine Reduce IrrlichtDevice exposure and guienvironment RenderingEngine: Expose get_timer_time() to remove device from guiEngine Make irrlichtdevice & scene manager less exposed * Code style fixes * Move porting::getVideoDriverName, getVideoDriverFriendlyName, getDisplayDensity, getDisplaySize to RenderingEngine Fix XORG_USED macro -> RenderingEngine + create_engine_device from RenderingEngine constructor directly * enum paralax => enum parallax
Diffstat (limited to 'src/client/tile.cpp')
-rw-r--r--src/client/tile.cpp65
1 files changed, 25 insertions, 40 deletions
diff --git a/src/client/tile.cpp b/src/client/tile.cpp
index e47a40ea1..1bcbdc6f9 100644
--- a/src/client/tile.cpp
+++ b/src/client/tile.cpp
@@ -36,6 +36,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "imagefilters.h"
#include "guiscalingfilter.h"
#include "nodedef.h"
+#include "renderingengine.h"
#ifdef __ANDROID__
@@ -198,8 +199,7 @@ public:
}
m_images.clear();
}
- void insert(const std::string &name, video::IImage *img,
- bool prefer_local, video::IVideoDriver *driver)
+ void insert(const std::string &name, video::IImage *img, bool prefer_local)
{
assert(img); // Pre-condition
// Remove old image
@@ -217,7 +217,8 @@ public:
if (prefer_local){
std::string path = getTexturePath(name);
if (path != ""){
- video::IImage *img2 = driver->createImageFromFile(path.c_str());
+ video::IImage *img2 = RenderingEngine::get_video_driver()->
+ createImageFromFile(path.c_str());
if (img2){
toadd = img2;
need_to_grab = false;
@@ -238,7 +239,7 @@ public:
return NULL;
}
// Primarily fetches from cache, secondarily tries to read from filesystem
- video::IImage* getOrLoad(const std::string &name, IrrlichtDevice *device)
+ video::IImage *getOrLoad(const std::string &name)
{
std::map<std::string, video::IImage*>::iterator n;
n = m_images.find(name);
@@ -246,7 +247,7 @@ public:
n->second->grab(); // Grab for caller
return n->second;
}
- video::IVideoDriver* driver = device->getVideoDriver();
+ video::IVideoDriver *driver = RenderingEngine::get_video_driver();
std::string path = getTexturePath(name);
if (path == ""){
infostream<<"SourceImageCache::getOrLoad(): No path found for \""
@@ -274,7 +275,7 @@ private:
class TextureSource : public IWritableTextureSource
{
public:
- TextureSource(IrrlichtDevice *device);
+ TextureSource();
virtual ~TextureSource();
/*
@@ -343,12 +344,6 @@ public:
virtual Palette* getPalette(const std::string &name);
- // Returns a pointer to the irrlicht device
- virtual IrrlichtDevice* getDevice()
- {
- return m_device;
- }
-
bool isKnownSourceImage(const std::string &name)
{
bool is_known = false;
@@ -387,8 +382,6 @@ private:
// The id of the thread that is allowed to use irrlicht directly
std::thread::id m_main_thread;
- // The irrlicht device
- IrrlichtDevice *m_device;
// Cache of source images
// This should be only accessed from the main thread
@@ -435,16 +428,13 @@ private:
bool m_setting_anisotropic_filter;
};
-IWritableTextureSource* createTextureSource(IrrlichtDevice *device)
+IWritableTextureSource *createTextureSource()
{
- return new TextureSource(device);
+ return new TextureSource();
}
-TextureSource::TextureSource(IrrlichtDevice *device):
- m_device(device)
+TextureSource::TextureSource()
{
- assert(m_device); // Pre-condition
-
m_main_thread = std::this_thread::get_id();
// Add a NULL TextureInfo as the first index, named ""
@@ -461,7 +451,7 @@ TextureSource::TextureSource(IrrlichtDevice *device):
TextureSource::~TextureSource()
{
- video::IVideoDriver* driver = m_device->getVideoDriver();
+ video::IVideoDriver *driver = RenderingEngine::get_video_driver();
unsigned int textures_before = driver->getTextureCount();
@@ -622,7 +612,7 @@ u32 TextureSource::generateTexture(const std::string &name)
return 0;
}
- video::IVideoDriver *driver = m_device->getVideoDriver();
+ video::IVideoDriver *driver = RenderingEngine::get_video_driver();
sanity_check(driver);
video::IImage *img = generateImage(name);
@@ -773,7 +763,7 @@ void TextureSource::insertSourceImage(const std::string &name, video::IImage *im
sanity_check(std::this_thread::get_id() == m_main_thread);
- m_sourcecache.insert(name, img, true, m_device->getVideoDriver());
+ m_sourcecache.insert(name, img, true);
m_source_image_existence.set(name, true);
}
@@ -781,7 +771,7 @@ void TextureSource::rebuildImagesAndTextures()
{
MutexAutoLock lock(m_textureinfo_cache_mutex);
- video::IVideoDriver* driver = m_device->getVideoDriver();
+ video::IVideoDriver *driver = RenderingEngine::get_video_driver();
sanity_check(driver);
// Recreate textures
@@ -810,7 +800,7 @@ void TextureSource::rebuildImagesAndTextures()
video::ITexture* TextureSource::generateTextureFromMesh(
const TextureFromMeshParams &params)
{
- video::IVideoDriver *driver = m_device->getVideoDriver();
+ video::IVideoDriver *driver = RenderingEngine::get_video_driver();
sanity_check(driver);
#ifdef __ANDROID__
@@ -935,8 +925,7 @@ video::ITexture* TextureSource::generateTextureFromMesh(
}
#endif
- if (driver->queryFeature(video::EVDF_RENDER_TO_TARGET) == false)
- {
+ if (!driver->queryFeature(video::EVDF_RENDER_TO_TARGET)) {
static bool warned = false;
if (!warned)
{
@@ -967,7 +956,7 @@ video::ITexture* TextureSource::generateTextureFromMesh(
}
// Get a scene manager
- scene::ISceneManager *smgr_main = m_device->getSceneManager();
+ scene::ISceneManager *smgr_main = RenderingEngine::get_scene_manager();
assert(smgr_main);
scene::ISceneManager *smgr = smgr_main->createNewSceneManager();
assert(smgr);
@@ -1065,10 +1054,6 @@ video::IImage* TextureSource::generateImage(const std::string &name)
baseimg = generateImage(name.substr(0, last_separator_pos));
}
-
- video::IVideoDriver* driver = m_device->getVideoDriver();
- sanity_check(driver);
-
/*
Parse out the last part of the name of the image and act
according to it
@@ -1196,13 +1181,13 @@ bool TextureSource::generateImagePart(std::string part_of_name,
video::IImage *& baseimg)
{
const char escape = '\\'; // same as in generateImage()
- video::IVideoDriver* driver = m_device->getVideoDriver();
+ video::IVideoDriver *driver = RenderingEngine::get_video_driver();
sanity_check(driver);
// Stuff starting with [ are special commands
if (part_of_name.size() == 0 || part_of_name[0] != '[')
{
- video::IImage *image = m_sourcecache.getOrLoad(part_of_name, m_device);
+ video::IImage *image = m_sourcecache.getOrLoad(part_of_name);
#ifdef __ANDROID__
image = Align2Npot2(image, driver);
#endif
@@ -1275,7 +1260,7 @@ bool TextureSource::generateImagePart(std::string part_of_name,
blit_with_alpha(image, baseimg, pos_from, pos_to, dim);
} else if (dim.Width * dim.Height < dim_dst.Width * dim_dst.Height) {
// Upscale overlying image
- video::IImage* scaled_image = m_device->getVideoDriver()->
+ video::IImage *scaled_image = RenderingEngine::get_video_driver()->
createImage(video::ECF_A8R8G8B8, dim_dst);
image->copyToScaling(scaled_image);
@@ -1283,7 +1268,7 @@ bool TextureSource::generateImagePart(std::string part_of_name,
scaled_image->drop();
} else {
// Upscale base image
- video::IImage* scaled_base = m_device->getVideoDriver()->
+ video::IImage *scaled_base = RenderingEngine::get_video_driver()->
createImage(video::ECF_A8R8G8B8, dim);
baseimg->copyToScaling(scaled_base);
baseimg->drop();
@@ -1333,7 +1318,7 @@ bool TextureSource::generateImagePart(std::string part_of_name,
horizontally tiled.
*/
video::IImage *img_crack = m_sourcecache.getOrLoad(
- "crack_anylength.png", m_device);
+ "crack_anylength.png");
if (img_crack) {
draw_crack(img_crack, baseimg,
@@ -1855,7 +1840,7 @@ bool TextureSource::generateImagePart(std::string part_of_name,
u32 height = stoi(sf.next(""));
core::dimension2d<u32> dim(width, height);
- video::IImage* image = m_device->getVideoDriver()->
+ video::IImage *image = RenderingEngine::get_video_driver()->
createImage(video::ECF_A8R8G8B8, dim);
baseimg->copyToScaling(image);
baseimg->drop();
@@ -2356,7 +2341,7 @@ video::ITexture* TextureSource::getNormalTexture(const std::string &name)
video::SColor TextureSource::getTextureAverageColor(const std::string &name)
{
- video::IVideoDriver *driver = m_device->getVideoDriver();
+ video::IVideoDriver *driver = RenderingEngine::get_video_driver();
video::SColor c(0, 0, 0, 0);
video::ITexture *texture = getTexture(name);
video::IImage *image = driver->createImage(texture,
@@ -2400,7 +2385,7 @@ video::ITexture *TextureSource::getShaderFlagsTexture(bool normalmap_present)
if (isKnownSourceImage(tname)) {
return getTexture(tname);
} else {
- video::IVideoDriver *driver = m_device->getVideoDriver();
+ video::IVideoDriver *driver = RenderingEngine::get_video_driver();
video::IImage *flags_image = driver->createImage(
video::ECF_A8R8G8B8, core::dimension2d<u32>(1, 1));
sanity_check(flags_image != NULL);