diff options
author | Kahrl <kahrl@gmx.net> | 2013-07-03 02:22:39 +0200 |
---|---|---|
committer | Kahrl <kahrl@gmx.net> | 2013-07-03 03:24:28 +0200 |
commit | 8f1d5d34a6191346d7f8cb5e012053bcd19795c4 (patch) | |
tree | 05626dceb2ba4ce97ed79cb3f5d43c2dd5a12513 /src/mesh.cpp | |
parent | b1ef850877278d2af0b35f792e34b39258cf875f (diff) | |
download | minetest-8f1d5d34a6191346d7f8cb5e012053bcd19795c4.tar.gz minetest-8f1d5d34a6191346d7f8cb5e012053bcd19795c4.tar.bz2 minetest-8f1d5d34a6191346d7f8cb5e012053bcd19795c4.zip |
Move generateTextureFromMesh to TextureSource to fix a texture leak
TextureSource has a list of textures to delete (m_texture_trash) so this
provides a proper, non-hacky way to delete RTT textures. Also, the prior,
hacky way of deleting them seems to be broken (see pull request #803).
To avoid header file clutter by repeating the same long list of
arguments over and over again, store the arguments of
generateTextureFromMesh in a struct called TextureFromMeshParams.
Also fix issue #782 (Only use bilinear (and others) on item textures
when settings allow it).
Diffstat (limited to 'src/mesh.cpp')
-rw-r--r-- | src/mesh.cpp | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/src/mesh.cpp b/src/mesh.cpp index fd35a3a06..a98cb8bf4 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -23,7 +23,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include <iostream> #include <IAnimatedMesh.h> #include <SAnimatedMesh.h> -#include <ICameraSceneNode.h> // In Irrlicht 1.8 the signature of ITexture::lock was changed from // (bool, u32) to (E_TEXTURE_LOCK_MODE, u32). @@ -407,79 +406,3 @@ void setMeshColorByNormalXYZ(scene::IMesh *mesh, } } } - -video::ITexture *generateTextureFromMesh(scene::IMesh *mesh, - IrrlichtDevice *device, - core::dimension2d<u32> dim, - std::string texture_name, - v3f camera_position, - v3f camera_lookat, - core::CMatrix4<f32> camera_projection_matrix, - video::SColorf ambient_light, - v3f light_position, - video::SColorf light_color, - f32 light_radius) -{ - video::IVideoDriver *driver = device->getVideoDriver(); - if(driver->queryFeature(video::EVDF_RENDER_TO_TARGET) == false) - { - static bool warned = false; - if(!warned) - { - errorstream<<"generateTextureFromMesh(): EVDF_RENDER_TO_TARGET" - " not supported."<<std::endl; - warned = true; - } - return NULL; - } - - // Create render target texture - video::ITexture *rtt = driver->addRenderTargetTexture( - dim, texture_name.c_str(), video::ECF_A8R8G8B8); - if(rtt == NULL) - { - errorstream<<"generateTextureFromMesh(): addRenderTargetTexture" - " returned NULL."<<std::endl; - return NULL; - } - - // Set render target - driver->setRenderTarget(rtt, false, true, video::SColor(0,0,0,0)); - - // Get a scene manager - scene::ISceneManager *smgr_main = device->getSceneManager(); - assert(smgr_main); - scene::ISceneManager *smgr = smgr_main->createNewSceneManager(); - assert(smgr); - - scene::IMeshSceneNode* meshnode = smgr->addMeshSceneNode(mesh, NULL, -1, v3f(0,0,0), v3f(0,0,0), v3f(1,1,1), true); - meshnode->setMaterialFlag(video::EMF_LIGHTING, true); - meshnode->setMaterialFlag(video::EMF_ANTI_ALIASING, true); - meshnode->setMaterialFlag(video::EMF_BILINEAR_FILTER, true); - - scene::ICameraSceneNode* camera = smgr->addCameraSceneNode(0, - camera_position, camera_lookat); - // second parameter of setProjectionMatrix (isOrthogonal) is ignored - camera->setProjectionMatrix(camera_projection_matrix, false); - - smgr->setAmbientLight(ambient_light); - smgr->addLightSceneNode(0, light_position, light_color, light_radius); - - // Render scene - driver->beginScene(true, true, video::SColor(0,0,0,0)); - smgr->drawAll(); - driver->endScene(); - - // NOTE: The scene nodes should not be dropped, otherwise - // smgr->drop() segfaults - /*cube->drop(); - camera->drop(); - light->drop();*/ - // Drop scene manager - smgr->drop(); - - // Unset render target - driver->setRenderTarget(0, false, true, 0); - - return rtt; -} |