X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclientmap.h;h=8402bb00d5d88e43fa56f99c7e8c394788a49a15;hb=5a6618cc57097e1e7205ad6b1d967a3ad79d016e;hp=f36e6127c1ff5a704fd9d86a333f6087f8f26546;hpb=c50c9a10f12fb28724b30ec0db00aee39c4a1414;p=minetest.git diff --git a/src/clientmap.h b/src/clientmap.h index f36e6127c..8402bb00d 100644 --- a/src/clientmap.h +++ b/src/clientmap.h @@ -17,40 +17,24 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef CLIENTMAP_HEADER -#define CLIENTMAP_HEADER +#pragma once #include "irrlichttypes_extrabloated.h" #include "map.h" +#include "camera.h" #include #include struct MapDrawControl { - MapDrawControl(): - range_all(false), - wanted_range(50), - wanted_max_blocks(0), - wanted_min_range(0), - blocks_drawn(0), - blocks_would_have_drawn(0), - farthest_drawn(0) - { - } // Overrides limits by drawing everything - bool range_all; + bool range_all = false; // Wanted drawing range - float wanted_range; + float wanted_range = 0.0f; // 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; - // 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; + u32 wanted_max_blocks = 0; + // show a wire frame for debugging + bool show_wireframe = false; }; class Client; @@ -58,7 +42,7 @@ class ITextureSource; /* ClientMap - + This is the only map class that is able to render itself on screen. */ @@ -67,14 +51,11 @@ class ClientMap : public Map, public scene::ISceneNode public: ClientMap( Client *client, - IGameDef *gamedef, MapDrawControl &control, - scene::ISceneNode* parent, - scene::ISceneManager* mgr, s32 id ); - ~ClientMap(); + virtual ~ClientMap() = default; s32 mapType() const { @@ -86,12 +67,12 @@ class ClientMap : public Map, public scene::ISceneNode ISceneNode::drop(); } - void updateCamera(v3f pos, v3f dir, f32 fov) + void updateCamera(const v3f &pos, const v3f &dir, f32 fov, const v3s16 &offset) { - JMutexAutoLock lock(m_camera_mutex); m_camera_position = pos; m_camera_direction = dir; m_camera_fov = fov; + m_camera_offset = offset; } /* @@ -113,45 +94,45 @@ class ClientMap : public Map, public scene::ISceneNode driver->setTransform(video::ETS_WORLD, AbsoluteTransformation); renderMap(driver, SceneManager->getSceneNodeRenderPass()); } - - virtual const core::aabbox3d& getBoundingBox() const + + virtual const aabb3f &getBoundingBox() const { return m_box; } - - void updateDrawList(video::IVideoDriver* driver); + + void getBlocksInViewRange(v3s16 cam_pos_nodes, + v3s16 *p_blocks_min, v3s16 *p_blocks_max); + void updateDrawList(); 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) != m_last_drawn_sectors.end()); - } - + + const MapDrawControl & getControl() const { return m_control; } + f32 getCameraFov() const { return m_camera_fov; } private: Client *m_client; - - core::aabbox3d m_box; - + + aabb3f m_box = aabb3f(-BS * 1000000, -BS * 1000000, -BS * 1000000, + BS * 1000000, BS * 1000000, BS * 1000000); + MapDrawControl &m_control; - v3f m_camera_position; - v3f m_camera_direction; - f32 m_camera_fov; - JMutex m_camera_mutex; + v3f m_camera_position = v3f(0,0,0); + v3f m_camera_direction = v3f(0,0,1); + f32 m_camera_fov = M_PI; + v3s16 m_camera_offset; std::map m_drawlist; - - std::set m_last_drawn_sectors; -}; -#endif + std::set m_last_drawn_sectors; + bool m_cache_trilinear_filter; + bool m_cache_bilinear_filter; + bool m_cache_anistropic_filter; +};