//! creates a loader which is able to load targa images\r
IImageLoader* createImageLoaderTGA();\r
\r
-//! creates a loader which is able to load psd images\r
-IImageLoader* createImageLoaderPSD();\r
-\r
-//! creates a loader which is able to load psd images\r
-IImageLoader* createImageLoaderPVR();\r
-\r
-//! creates a loader which is able to load dds images\r
-IImageLoader* createImageLoaderDDS();\r
-\r
-//! creates a loader which is able to load pcx images\r
-IImageLoader* createImageLoaderPCX();\r
-\r
//! creates a loader which is able to load png images\r
IImageLoader* createImageLoaderPNG();\r
\r
-//! creates a loader which is able to load WAL images\r
-IImageLoader* createImageLoaderWAL();\r
-\r
-//! creates a loader which is able to load halflife images\r
-IImageLoader* createImageLoaderHalfLife();\r
-\r
-//! creates a loader which is able to load lmp images\r
-IImageLoader* createImageLoaderLMP();\r
-\r
-//! creates a loader which is able to load ppm/pgm/pbm images\r
-IImageLoader* createImageLoaderPPM();\r
-\r
-//! creates a loader which is able to load rgb images\r
-IImageLoader* createImageLoaderRGB();\r
-\r
-\r
-//! creates a writer which is able to save bmp images\r
-IImageWriter* createImageWriterBMP();\r
-\r
//! creates a writer which is able to save jpg images\r
IImageWriter* createImageWriterJPG();\r
\r
-//! creates a writer which is able to save tga images\r
-IImageWriter* createImageWriterTGA();\r
-\r
-//! creates a writer which is able to save psd images\r
-IImageWriter* createImageWriterPSD();\r
-\r
-//! creates a writer which is able to save pcx images\r
-IImageWriter* createImageWriterPCX();\r
-\r
//! creates a writer which is able to save png images\r
IImageWriter* createImageWriterPNG();\r
\r
-//! creates a writer which is able to save ppm images\r
-IImageWriter* createImageWriterPPM();\r
\r
//! constructor\r
CNullDriver::CNullDriver(io::IFileSystem* io, const core::dimension2d<u32>& screenSize)\r
#endif\r
\r
DriverAttributes = new io::CAttributes();\r
- DriverAttributes->addInt("MaxTextures", _IRR_MATERIAL_MAX_TEXTURES_);\r
- DriverAttributes->addInt("MaxSupportedTextures", _IRR_MATERIAL_MAX_TEXTURES_);\r
- DriverAttributes->addInt("MaxLights", getMaximalDynamicLightAmount());\r
+ DriverAttributes->addInt("MaxTextures", MATERIAL_MAX_TEXTURES);\r
+ DriverAttributes->addInt("MaxSupportedTextures", MATERIAL_MAX_TEXTURES);\r
DriverAttributes->addInt("MaxAnisotropy", 1);\r
// DriverAttributes->addInt("MaxUserClipPlanes", 0);\r
// DriverAttributes->addInt("MaxAuxBuffers", 0);\r
if (FileSystem)\r
FileSystem->grab();\r
\r
- // create surface loader\r
-\r
-#ifdef _IRR_COMPILE_WITH_WAL_LOADER_\r
- SurfaceLoader.push_back(video::createImageLoaderHalfLife());\r
- SurfaceLoader.push_back(video::createImageLoaderWAL());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_LMP_LOADER_\r
- SurfaceLoader.push_back(video::createImageLoaderLMP());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PPM_LOADER_\r
- SurfaceLoader.push_back(video::createImageLoaderPPM());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_RGB_LOADER_\r
- SurfaceLoader.push_back(video::createImageLoaderRGB());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PSD_LOADER_\r
- SurfaceLoader.push_back(video::createImageLoaderPSD());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PVR_LOADER_\r
- SurfaceLoader.push_back(video::createImageLoaderPVR());\r
-#endif\r
-#if defined(_IRR_COMPILE_WITH_DDS_LOADER_) || defined(_IRR_COMPILE_WITH_DDS_DECODER_LOADER_)\r
- SurfaceLoader.push_back(video::createImageLoaderDDS());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PCX_LOADER_\r
- SurfaceLoader.push_back(video::createImageLoaderPCX());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_TGA_LOADER_\r
+ // create surface loaders and writers\r
SurfaceLoader.push_back(video::createImageLoaderTGA());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PNG_LOADER_\r
SurfaceLoader.push_back(video::createImageLoaderPNG());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_JPG_LOADER_\r
SurfaceLoader.push_back(video::createImageLoaderJPG());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_BMP_LOADER_\r
SurfaceLoader.push_back(video::createImageLoaderBMP());\r
-#endif\r
-\r
-\r
-#ifdef _IRR_COMPILE_WITH_PPM_WRITER_\r
- SurfaceWriter.push_back(video::createImageWriterPPM());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PCX_WRITER_\r
- SurfaceWriter.push_back(video::createImageWriterPCX());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PSD_WRITER_\r
- SurfaceWriter.push_back(video::createImageWriterPSD());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_TGA_WRITER_\r
- SurfaceWriter.push_back(video::createImageWriterTGA());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_JPG_WRITER_\r
+\r
SurfaceWriter.push_back(video::createImageWriterJPG());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_PNG_WRITER_\r
SurfaceWriter.push_back(video::createImageWriterPNG());\r
-#endif\r
-#ifdef _IRR_COMPILE_WITH_BMP_WRITER_\r
- SurfaceWriter.push_back(video::createImageWriterBMP());\r
-#endif\r
\r
\r
// set ExposedData to 0\r
}\r
\r
\r
-//! deletes all dynamic lights there are\r
-void CNullDriver::deleteAllDynamicLights()\r
-{\r
- Lights.set_used(0);\r
-}\r
-\r
-\r
-//! adds a dynamic light\r
-s32 CNullDriver::addDynamicLight(const SLight& light)\r
-{\r
- Lights.push_back(light);\r
- return Lights.size() - 1;\r
-}\r
-\r
-//! Turns a dynamic light on or off\r
-//! \param lightIndex: the index returned by addDynamicLight\r
-//! \param turnOn: true to turn the light on, false to turn it off\r
-void CNullDriver::turnLightOn(s32 lightIndex, bool turnOn)\r
-{\r
- // Do nothing\r
-}\r
-\r
-\r
-//! returns the maximal amount of dynamic lights the device can handle\r
-u32 CNullDriver::getMaximalDynamicLightAmount() const\r
-{\r
- return 0;\r
-}\r
-\r
-\r
-//! Returns current amount of dynamic lights set\r
-//! \return Current amount of dynamic lights set\r
-u32 CNullDriver::getDynamicLightCount() const\r
-{\r
- return Lights.size();\r
-}\r
-\r
-\r
-//! Returns light data which was previously set by IVideoDriver::addDynamicLight().\r
-//! \param idx: Zero based index of the light. Must be greater than 0 and smaller\r
-//! than IVideoDriver()::getDynamicLightCount.\r
-//! \return Light data.\r
-const SLight& CNullDriver::getDynamicLight(u32 idx) const\r
-{\r
- if ( idx < Lights.size() )\r
- return Lights[idx];\r
- else\r
- {\r
- _IRR_DEBUG_BREAK_IF(true)\r
- static const SLight dummy;\r
- return dummy;\r
- }\r
-}\r
-\r
-\r
//! Creates a boolean alpha channel of the texture based of an color key.\r
void CNullDriver::makeColorKeyTexture(video::ITexture* texture,\r
video::SColor color,\r
\r
if (prmCount > m)\r
{\r
- char tmp[1024];\r
- sprintf(tmp,"Could not draw triangles, too many primitives(%u), maximum is %u.", prmCount, m);\r
+ char tmp[128];\r
+ snprintf_irr(tmp, sizeof(tmp), "Could not draw triangles, too many primitives(%u), maximum is %u.", prmCount, m);\r
os::Printer::log(tmp, ELL_ERROR);\r
return false;\r
}\r
return 0;\r
\r
//search for hardware links\r
- core::map< const scene::IMeshBuffer*,SHWBufferLink* >::Node* node = HWBufferMap.find(mb);\r
- if (node)\r
- return node->getValue();\r
+ SHWBufferLink *HWBuffer = reinterpret_cast<SHWBufferLink*>(mb->getHWBuffer());\r
+ if (HWBuffer)\r
+ return HWBuffer;\r
\r
return createHardwareBuffer(mb); //no hardware links, and mesh wants one, create it\r
}\r
//! Update all hardware buffers, remove unused ones\r
void CNullDriver::updateAllHardwareBuffers()\r
{\r
- core::map<const scene::IMeshBuffer*,SHWBufferLink*>::ParentFirstIterator Iterator=HWBufferMap.getParentFirstIterator();\r
-\r
- for (;!Iterator.atEnd();Iterator++)\r
- {\r
- SHWBufferLink *Link=Iterator.getNode()->getValue();\r
+ auto it = HWBufferList.begin();\r
+ while (it != HWBufferList.end()) {\r
+ SHWBufferLink *Link = *it;\r
+ ++it;\r
\r
- Link->LastUsed++;\r
- if (Link->LastUsed>20000)\r
- {\r
+ if (!Link->MeshBuffer || Link->MeshBuffer->getReferenceCount() == 1)\r
deleteHardwareBuffer(Link);\r
-\r
- // todo: needs better fix\r
- Iterator = HWBufferMap.getParentFirstIterator();\r
- }\r
}\r
}\r
\r
{\r
if (!HWBuffer)\r
return;\r
- HWBufferMap.remove(HWBuffer->MeshBuffer);\r
+ HWBufferList.erase(HWBuffer->listPosition);\r
delete HWBuffer;\r
}\r
\r
//! Remove hardware buffer\r
void CNullDriver::removeHardwareBuffer(const scene::IMeshBuffer* mb)\r
{\r
- core::map<const scene::IMeshBuffer*,SHWBufferLink*>::Node* node = HWBufferMap.find(mb);\r
- if (node)\r
- deleteHardwareBuffer(node->getValue());\r
+ if (!mb)\r
+ return;\r
+ SHWBufferLink *HWBuffer = reinterpret_cast<SHWBufferLink*>(mb->getHWBuffer());\r
+ if (HWBuffer)\r
+ deleteHardwareBuffer(HWBuffer);\r
}\r
\r
\r
//! Remove all hardware buffers\r
void CNullDriver::removeAllHardwareBuffers()\r
{\r
- while (HWBufferMap.size())\r
- deleteHardwareBuffer(HWBufferMap.getRoot()->getValue());\r
+ while (!HWBufferList.empty())\r
+ deleteHardwareBuffer(HWBufferList.front());\r
}\r
\r
\r