3 Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #ifndef IRRLICHTWRAPPER_HEADER
21 #define IRRLICHTWRAPPER_HEADER
24 #include "common_irrlicht.h"
29 #include <jmutexautolock.h>
33 A thread-safe texture pointer cache.
35 This is used so that irrlicht doesn't get called from many
36 threads, because texture pointers have to be handled in
46 assert(m_mutex.IsInitialized());
49 void set(std::string name, video::ITexture *texture)
54 JMutexAutoLock lock(m_mutex);
56 m_textures[name] = texture;
59 video::ITexture* get(const std::string &name)
61 JMutexAutoLock lock(m_mutex);
63 core::map<std::string, video::ITexture*>::Node *n;
64 n = m_textures.find(name);
73 core::map<std::string, video::ITexture*> m_textures;
78 A thread-safe wrapper for irrlicht, to be accessed from
79 background worker threads.
81 Queues tasks to be done in the main thread.
88 These are called from the main thread
90 IrrlichtWrapper(IrrlichtDevice *device);
96 These are called from other threads
99 // Not exactly thread-safe but this needs to be fast.
100 // getTimer()->getRealTime() only reads one variable anyway.
103 return m_device->getTimer()->getRealTime();
107 Path can contain stuff like
108 "/usr/share/minetest/stone.png[[mod:mineral0[[mod:crack3"
110 video::ITexture* getTexture(const std::string &spec);
114 Non-thread-safe variants of stuff, for internal use
116 video::ITexture* getTextureDirect(const std::string &spec);
122 threadid_t m_main_thread;
124 JMutex m_device_mutex;
125 IrrlichtDevice *m_device;
127 TextureCache m_texturecache;
129 RequestQueue<std::string, video::ITexture*, u8, u8> m_get_texture_queue;