/*
-Minetest-c55
-Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
+Minetest
+Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
#include "irrlichttypes_extrabloated.h"
#include "map.h"
+#include "camera.h"
+#include <set>
+#include <map>
struct MapDrawControl
{
MapDrawControl():
range_all(false),
- wanted_range(50),
+ wanted_range(0),
wanted_max_blocks(0),
- wanted_min_range(0),
+ show_wireframe(false),
blocks_drawn(0),
- blocks_would_have_drawn(0)
+ blocks_would_have_drawn(0),
+ farthest_drawn(0)
{
}
// Overrides limits by drawing everything
float wanted_range;
// Maximum number of blocks to draw
u32 wanted_max_blocks;
- // Blocks in this range are drawn regardless of number of blocks drawn
- float wanted_min_range;
+ // show a wire frame for debugging
+ bool show_wireframe;
// Number of blocks rendered is written here by the renderer
u32 blocks_drawn;
// Number of blocks that would have been drawn in wanted_range
u32 blocks_would_have_drawn;
+ // Distance to the farthest block drawn
+ float farthest_drawn;
};
class Client;
/*
ClientMap
-
+
This is the only map class that is able to render itself on screen.
*/
public:
ClientMap(
Client *client,
- IGameDef *gamedef,
MapDrawControl &control,
scene::ISceneNode* parent,
scene::ISceneManager* mgr,
ISceneNode::drop();
}
- void updateCamera(v3f pos, v3f dir, f32 fov)
+ void updateCamera(v3f pos, v3f dir, f32 fov, v3s16 offset)
{
- JMutexAutoLock lock(m_camera_mutex);
m_camera_position = pos;
m_camera_direction = dir;
m_camera_fov = fov;
+ m_camera_offset = offset;
}
/*
driver->setTransform(video::ETS_WORLD, AbsoluteTransformation);
renderMap(driver, SceneManager->getSceneNodeRenderPass());
}
-
- virtual const core::aabbox3d<f32>& getBoundingBox() const
+
+ virtual const aabb3f &getBoundingBox() const
{
return m_box;
}
-
+
+ void getBlocksInViewRange(v3s16 cam_pos_nodes,
+ v3s16 *p_blocks_min, v3s16 *p_blocks_max);
void updateDrawList(video::IVideoDriver* driver);
void renderMap(video::IVideoDriver* driver, s32 pass);
int getBackgroundBrightness(float max_d, u32 daylight_factor,
int oldvalue, bool *sunlight_seen_result);
- void renderPostFx();
+ void renderPostFx(CameraMode cam_mode);
// For debug printing
virtual void PrintInfo(std::ostream &out);
-
- // Check if sector was drawn on last render()
- bool sectorWasDrawn(v2s16 p)
- {
- return (m_last_drawn_sectors.find(p) != NULL);
- }
-
+
+ const MapDrawControl & getControl() const { return m_control; }
+ f32 getCameraFov() const { return m_camera_fov; }
private:
Client *m_client;
-
- core::aabbox3d<f32> m_box;
-
+
+ aabb3f m_box;
+
MapDrawControl &m_control;
v3f m_camera_position;
v3f m_camera_direction;
f32 m_camera_fov;
- JMutex m_camera_mutex;
+ v3s16 m_camera_offset;
+
+ std::map<v3s16, MapBlock*> m_drawlist;
+
+ std::set<v2s16> m_last_drawn_sectors;
- core::map<v3s16, MapBlock*> m_drawlist;
-
- core::map<v2s16, bool> m_last_drawn_sectors;
+ bool m_cache_trilinear_filter;
+ bool m_cache_bilinear_filter;
+ bool m_cache_anistropic_filter;
};
#endif