#include <matrix4.h>
#include "log.h"
#include "mapsector.h"
-#include "main.h" // dout_client, g_settings
#include "nodedef.h"
#include "mapblock.h"
#include "profiler.h"
#include "settings.h"
-#include "camera.h" // CameraModes
+#include "camera.h" // CameraModes
#include "util/mathconstants.h"
#include <algorithm>
ClientMap::~ClientMap()
{
- /*JMutexAutoLock lock(mesh_mutex);
+ /*MutexAutoLock lock(mesh_mutex);
if(mesh != NULL)
{
MapSector * ClientMap::emergeSector(v2s16 p2d)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
// Check that it doesn't exist already
try{
return getSectorNoGenerate(p2d);
ClientMapSector *sector = new ClientMapSector(this, p2d, m_gamedef);
{
- //JMutexAutoLock lock(m_sector_mutex); // Bulk comment-out
+ //MutexAutoLock lock(m_sector_mutex); // Bulk comment-out
m_sectors[p2d] = sector;
}
return sector;
}
-#if 0
-void ClientMap::deSerializeSector(v2s16 p2d, std::istream &is)
-{
- DSTACK(__FUNCTION_NAME);
- ClientMapSector *sector = NULL;
-
- //JMutexAutoLock lock(m_sector_mutex); // Bulk comment-out
-
- core::map<v2s16, MapSector*>::Node *n = m_sectors.find(p2d);
-
- if(n != NULL)
- {
- sector = (ClientMapSector*)n->getValue();
- assert(sector->getId() == MAPSECTOR_CLIENT);
- }
- else
- {
- sector = new ClientMapSector(this, p2d);
- {
- //JMutexAutoLock lock(m_sector_mutex); // Bulk comment-out
- m_sectors.insert(p2d, sector);
- }
- }
-
- sector->deSerialize(is);
-}
-#endif
-
void ClientMap::OnRegisterSceneNode()
{
if(IsVisible)
}
m_drawlist.clear();
- m_camera_mutex.Lock();
+ m_camera_mutex.lock();
v3f camera_position = m_camera_position;
v3f camera_direction = m_camera_direction;
f32 camera_fov = m_camera_fov;
//v3s16 camera_offset = m_camera_offset;
- m_camera_mutex.Unlock();
+ m_camera_mutex.unlock();
// Use a higher fov to accomodate faster camera movements.
// Blocks are cropped better when they are drawn.
u32 sector_blocks_drawn = 0;
for(MapBlockVect::iterator i = sectorblocks.begin();
- i != sectorblocks.end(); i++)
+ i != sectorblocks.end(); ++i)
{
MapBlock *block = *i;
Ignore if mesh doesn't exist
*/
{
- //JMutexAutoLock lock(block->mesh_mutex);
+ //MutexAutoLock lock(block->mesh_mutex);
if(block->mesh == NULL){
blocks_in_range_without_mesh++;
struct MeshBufList
{
video::SMaterial m;
- std::list<scene::IMeshBuffer*> bufs;
+ std::vector<scene::IMeshBuffer*> bufs;
};
struct MeshBufListList
{
- std::list<MeshBufList> lists;
+ std::vector<MeshBufList> lists;
void clear()
{
void add(scene::IMeshBuffer *buf)
{
- for(std::list<MeshBufList>::iterator i = lists.begin();
+ for(std::vector<MeshBufList>::iterator i = lists.begin();
i != lists.end(); ++i){
MeshBufList &l = *i;
video::SMaterial &m = buf->getMaterial();
void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
{
- DSTACK(__FUNCTION_NAME);
+ DSTACK(FUNCTION_NAME);
bool is_transparent_pass = pass == scene::ESNRP_TRANSPARENT;
int crack = m_client->getCrackLevel();
u32 daynight_ratio = m_client->getEnv().getDayNightRatio();
- m_camera_mutex.Lock();
+ m_camera_mutex.lock();
v3f camera_position = m_camera_position;
v3f camera_direction = m_camera_direction;
f32 camera_fov = m_camera_fov;
- m_camera_mutex.Unlock();
+ m_camera_mutex.unlock();
/*
Get all blocks and draw all visible ones
// Mesh animation
{
- //JMutexAutoLock lock(block->mesh_mutex);
+ //MutexAutoLock lock(block->mesh_mutex);
MapBlockMesh *mapBlockMesh = block->mesh;
assert(mapBlockMesh);
// Pretty random but this should work somewhat nicely
Get the meshbuffers of the block
*/
{
- //JMutexAutoLock lock(block->mesh_mutex);
+ //MutexAutoLock lock(block->mesh_mutex);
MapBlockMesh *mapBlockMesh = block->mesh;
assert(mapBlockMesh);
- scene::SMesh *mesh = mapBlockMesh->getMesh();
+ scene::IMesh *mesh = mapBlockMesh->getMesh();
assert(mesh);
u32 c = mesh->getMeshBufferCount();
}
}
- std::list<MeshBufList> &lists = drawbufs.lists;
+ std::vector<MeshBufList> &lists = drawbufs.lists;
int timecheck_counter = 0;
- for(std::list<MeshBufList>::iterator i = lists.begin();
- i != lists.end(); ++i)
- {
- {
- timecheck_counter++;
- if(timecheck_counter > 50)
- {
- timecheck_counter = 0;
- int time2 = time(0);
- if(time2 > time1 + 4)
- {
- infostream<<"ClientMap::renderMap(): "
- "Rendering takes ages, returning."
- <<std::endl;
- return;
- }
+ for(std::vector<MeshBufList>::iterator i = lists.begin();
+ i != lists.end(); ++i) {
+ timecheck_counter++;
+ if(timecheck_counter > 50) {
+ timecheck_counter = 0;
+ int time2 = time(0);
+ if(time2 > time1 + 4) {
+ infostream << "ClientMap::renderMap(): "
+ "Rendering takes ages, returning."
+ << std::endl;
+ return;
}
}
driver->setMaterial(list.m);
- for(std::list<scene::IMeshBuffer*>::iterator j = list.bufs.begin();
- j != list.bufs.end(); ++j)
- {
+ for(std::vector<scene::IMeshBuffer*>::iterator j = list.bufs.begin();
+ j != list.bufs.end(); ++j) {
scene::IMeshBuffer *buf = *j;
driver->drawMeshBuffer(buf);
vertex_count += buf->getVertexCount();
meshbuffer_count++;
}
-#if 0
- /*
- Draw the faces of the block
- */
- {
- //JMutexAutoLock lock(block->mesh_mutex);
-
- MapBlockMesh *mapBlockMesh = block->mesh;
- assert(mapBlockMesh);
-
- scene::SMesh *mesh = mapBlockMesh->getMesh();
- assert(mesh);
- u32 c = mesh->getMeshBufferCount();
- bool stuff_actually_drawn = false;
- for(u32 i=0; i<c; i++)
- {
- scene::IMeshBuffer *buf = mesh->getMeshBuffer(i);
- const video::SMaterial& material = buf->getMaterial();
- video::IMaterialRenderer* rnd =
- driver->getMaterialRenderer(material.MaterialType);
- bool transparent = (rnd && rnd->isTransparent());
- // Render transparent on transparent pass and likewise.
- if(transparent == is_transparent_pass)
- {
- if(buf->getVertexCount() == 0)
- errorstream<<"Block ["<<analyze_block(block)
- <<"] contains an empty meshbuf"<<std::endl;
- /*
- This *shouldn't* hurt too much because Irrlicht
- doesn't change opengl textures if the old
- material has the same texture.
- */
- driver->setMaterial(buf->getMaterial());
- driver->drawMeshBuffer(buf);
- vertex_count += buf->getVertexCount();
- meshbuffer_count++;
- stuff_actually_drawn = true;
- }
- }
- if(stuff_actually_drawn)
- blocks_had_pass_meshbuf++;
- else
- blocks_without_stuff++;
- }
-#endif
}
} // ScopeProfiler
// Sadly ISceneManager has no "post effects" render pass, in that case we
// could just register for that and handle it in renderMap().
- m_camera_mutex.Lock();
+ m_camera_mutex.lock();
v3f camera_position = m_camera_position;
- m_camera_mutex.Unlock();
+ m_camera_mutex.unlock();
MapNode n = getNodeNoEx(floatToInt(camera_position, BS));