summaryrefslogtreecommitdiff
path: root/src/mesh.cpp
diff options
context:
space:
mode:
authorKahrl <kahrl@gmx.net>2013-07-03 02:22:39 +0200
committerKahrl <kahrl@gmx.net>2013-07-03 03:24:28 +0200
commit8f1d5d34a6191346d7f8cb5e012053bcd19795c4 (patch)
tree05626dceb2ba4ce97ed79cb3f5d43c2dd5a12513 /src/mesh.cpp
parentb1ef850877278d2af0b35f792e34b39258cf875f (diff)
downloadminetest-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.cpp77
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;
-}