Move skies to WorldRender | Update World.cpp, World.h, and 4 more files...
This commit is contained in:
@@ -83,16 +83,11 @@ World::World(const std::string& name, int map_id, Noggit::NoggitRenderContext co
|
||||
, horizon(name, &mapIndex)
|
||||
, mWmoFilename("")
|
||||
, mWmoEntry(ENTRY_MODF())
|
||||
, ol(nullptr)
|
||||
, animtime(0)
|
||||
, time(1450)
|
||||
, basename(name)
|
||||
, fogdistance(777.0f)
|
||||
, culldistance(fogdistance)
|
||||
, skies(nullptr)
|
||||
, _current_selection()
|
||||
, _settings(new QSettings())
|
||||
, _view_distance(_settings->value("view_distance", 1000.f).toFloat())
|
||||
, _context(context)
|
||||
{
|
||||
LogDebug << "Loading world \"" << name << "\"." << std::endl;
|
||||
|
||||
@@ -61,7 +61,6 @@ protected:
|
||||
std::unordered_map<std::string, std::vector<ModelInstance*>> _models_by_filename;
|
||||
Noggit::world_model_instances_storage _model_instance_storage;
|
||||
Noggit::world_tile_update_queue _tile_update_queue;
|
||||
std::mutex _guard;
|
||||
|
||||
public:
|
||||
MapIndex mapIndex;
|
||||
@@ -71,10 +70,8 @@ public:
|
||||
std::string mWmoFilename;
|
||||
ENTRY_MODF mWmoEntry;
|
||||
|
||||
// The lighting used.
|
||||
std::unique_ptr<OutdoorLighting> ol;
|
||||
|
||||
unsigned int getMapID();
|
||||
|
||||
// Time of the day.
|
||||
float animtime;
|
||||
float time;
|
||||
@@ -82,12 +79,6 @@ public:
|
||||
//! \brief Name of this map.
|
||||
std::string basename;
|
||||
|
||||
// Dynamic distances for rendering. Actually, these should be the same..
|
||||
float fogdistance;
|
||||
float culldistance;
|
||||
|
||||
std::unique_ptr<Skies> skies;
|
||||
|
||||
explicit World(const std::string& name, int map_id, Noggit::NoggitRenderContext context, bool create_empty = false);
|
||||
|
||||
void setBasename(const std::string& name);
|
||||
|
||||
@@ -16,6 +16,8 @@ WorldRender::WorldRender(World* world)
|
||||
: BaseRender()
|
||||
, _world(world)
|
||||
, _liquid_texture_manager(world->_context)
|
||||
, _view_distance(world->_settings->value("view_distance", 1000.f).toFloat())
|
||||
, _cull_distance(0.f)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -191,7 +193,7 @@ void WorldRender::draw (glm::mat4x4 const& model_view
|
||||
, camera_pos
|
||||
, m2_shader
|
||||
, frustum
|
||||
, _world->culldistance
|
||||
, _cull_distance
|
||||
, _world->animtime
|
||||
, draw_model_animations
|
||||
, wmo.extents[0]
|
||||
@@ -207,25 +209,25 @@ void WorldRender::draw (glm::mat4x4 const& model_view
|
||||
|
||||
if (!hadSky)
|
||||
{
|
||||
_world->skies->draw( model_view
|
||||
_skies->draw( model_view
|
||||
, projection
|
||||
, camera_pos
|
||||
, m2_shader
|
||||
, frustum
|
||||
, _world->culldistance
|
||||
, _cull_distance
|
||||
, _world->animtime
|
||||
, _outdoor_light_stats
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
_world->culldistance = draw_fog ? _world->fogdistance : _world->_view_distance;
|
||||
_cull_distance= draw_fog ? _skies->fog_distance_end() : _world->_view_distance;
|
||||
|
||||
// Draw verylowres heightmap
|
||||
if (draw_fog && draw_terrain)
|
||||
{
|
||||
ZoneScopedN("World::draw() : Draw horizon");
|
||||
_horizon_render->draw (model_view, projection, &_world->mapIndex, _world->skies->color_set[FOG_COLOR], _world->culldistance, frustum, camera_pos, display);
|
||||
_horizon_render->draw (model_view, projection, &_world->mapIndex, _skies->color_set[FOG_COLOR], _cull_distance, frustum, camera_pos, display);
|
||||
}
|
||||
|
||||
gl.enable(GL_DEPTH_TEST);
|
||||
@@ -359,7 +361,7 @@ void WorldRender::draw (glm::mat4x4 const& model_view
|
||||
|
||||
// early dist check
|
||||
// TODO: optional
|
||||
if (tile->camDist() > _world->culldistance)
|
||||
if (tile->camDist() > _cull_distance)
|
||||
continue;
|
||||
|
||||
for (auto& pair : tile->getObjectInstances())
|
||||
@@ -393,7 +395,7 @@ void WorldRender::draw (glm::mat4x4 const& model_view
|
||||
|
||||
auto m2_instance = static_cast<ModelInstance*>(instance);
|
||||
|
||||
if ((tile->objects_frustum_cull_test > 1 || m2_instance->isInFrustum(frustum)) && m2_instance->isInRenderDist(_world->culldistance, camera_pos, display))
|
||||
if ((tile->objects_frustum_cull_test > 1 || m2_instance->isInFrustum(frustum)) && m2_instance->isInRenderDist(_cull_distance, camera_pos, display))
|
||||
{
|
||||
instances.push_back(m2_instance->transformMatrix());
|
||||
}
|
||||
@@ -456,14 +458,14 @@ void WorldRender::draw (glm::mat4x4 const& model_view
|
||||
, model_view
|
||||
, projection
|
||||
, frustum
|
||||
, _world->culldistance
|
||||
, _cull_distance
|
||||
, camera_pos
|
||||
, is_hidden
|
||||
, draw_wmo_doodads
|
||||
, draw_fog
|
||||
, _world->current_selection()
|
||||
, _world->animtime
|
||||
, _world->skies->hasSkies()
|
||||
, _skies->hasSkies()
|
||||
, display
|
||||
);
|
||||
}
|
||||
@@ -580,7 +582,7 @@ void WorldRender::draw (glm::mat4x4 const& model_view
|
||||
, m2_shader
|
||||
, model_render_state
|
||||
, frustum
|
||||
, _world->culldistance
|
||||
, _cull_distance
|
||||
, camera_pos
|
||||
, _world->animtime
|
||||
, draw_models_with_box
|
||||
@@ -669,7 +671,7 @@ void WorldRender::draw (glm::mat4x4 const& model_view
|
||||
continue;
|
||||
|
||||
auto model = static_cast<ModelInstance*>(obj);
|
||||
if (model->isInFrustum(frustum) && model->isInRenderDist(_world->culldistance, camera_pos, display))
|
||||
if (model->isInFrustum(frustum) && model->isInRenderDist(_cull_distance, camera_pos, display))
|
||||
{
|
||||
model->draw_box(model_view, projection, false); // make optional!
|
||||
}
|
||||
@@ -860,7 +862,7 @@ void WorldRender::upload()
|
||||
_horizon_render = std::make_unique<Noggit::map_horizon::render>(_world->horizon);
|
||||
}
|
||||
|
||||
_world->skies = std::make_unique<Skies> (_world->mapIndex._map_id, _world->_context);
|
||||
_skies = std::make_unique<Skies>(_world->mapIndex._map_id, _world->_context);
|
||||
|
||||
_outdoor_lighting = std::make_unique<OutdoorLighting>();
|
||||
|
||||
@@ -1098,7 +1100,7 @@ void WorldRender::unload()
|
||||
|
||||
_liquid_texture_manager.unload();
|
||||
|
||||
_world->skies->unload();
|
||||
_skies->unload();
|
||||
|
||||
_buffers.unload();
|
||||
_vertex_arrays.unload();
|
||||
@@ -1123,26 +1125,26 @@ void WorldRender::updateLightingUniformBlock(bool draw_fog, glm::vec3 const& cam
|
||||
|
||||
int daytime = static_cast<int>(_world->time) % 2880;
|
||||
|
||||
_world->skies->update_sky_colors(camera_pos, daytime);
|
||||
_skies->update_sky_colors(camera_pos, daytime);
|
||||
_outdoor_light_stats = _outdoor_lighting->getLightStats(static_cast<int>(_world->time));
|
||||
|
||||
glm::vec3 diffuse = _world->skies->color_set[LIGHT_GLOBAL_DIFFUSE];
|
||||
glm::vec3 ambient = _world->skies->color_set[LIGHT_GLOBAL_AMBIENT];
|
||||
glm::vec3 fog_color = _world->skies->color_set[FOG_COLOR];
|
||||
glm::vec3 ocean_color_light = _world->skies->color_set[OCEAN_COLOR_LIGHT];
|
||||
glm::vec3 ocean_color_dark = _world->skies->color_set[OCEAN_COLOR_DARK];
|
||||
glm::vec3 river_color_light = _world->skies->color_set[RIVER_COLOR_LIGHT];
|
||||
glm::vec3 river_color_dark = _world->skies->color_set[RIVER_COLOR_DARK];
|
||||
glm::vec3 diffuse = _skies->color_set[LIGHT_GLOBAL_DIFFUSE];
|
||||
glm::vec3 ambient = _skies->color_set[LIGHT_GLOBAL_AMBIENT];
|
||||
glm::vec3 fog_color = _skies->color_set[FOG_COLOR];
|
||||
glm::vec3 ocean_color_light = _skies->color_set[OCEAN_COLOR_LIGHT];
|
||||
glm::vec3 ocean_color_dark = _skies->color_set[OCEAN_COLOR_DARK];
|
||||
glm::vec3 river_color_light = _skies->color_set[RIVER_COLOR_LIGHT];
|
||||
glm::vec3 river_color_dark = _skies->color_set[RIVER_COLOR_DARK];
|
||||
|
||||
|
||||
_lighting_ubo_data.DiffuseColor_FogStart = {diffuse.x,diffuse.y,diffuse.z, _world->skies->fog_distance_start()};
|
||||
_lighting_ubo_data.AmbientColor_FogEnd = {ambient.x,ambient.y,ambient.z, _world->skies->fog_distance_end()};
|
||||
_lighting_ubo_data.DiffuseColor_FogStart = {diffuse.x,diffuse.y,diffuse.z, _skies->fog_distance_start()};
|
||||
_lighting_ubo_data.AmbientColor_FogEnd = {ambient.x,ambient.y,ambient.z, _skies->fog_distance_end()};
|
||||
_lighting_ubo_data.FogColor_FogOn = {fog_color.x,fog_color.y,fog_color.z, static_cast<float>(draw_fog)};
|
||||
_lighting_ubo_data.LightDir_FogRate = {_outdoor_light_stats.dayDir.x, _outdoor_light_stats.dayDir.y, _outdoor_light_stats.dayDir.z, _world->skies->fogRate()};
|
||||
_lighting_ubo_data.OceanColorLight = { ocean_color_light.x,ocean_color_light.y,ocean_color_light.z, _world->skies->ocean_shallow_alpha()};
|
||||
_lighting_ubo_data.OceanColorDark = { ocean_color_dark.x,ocean_color_dark.y,ocean_color_dark.z, _world->skies->ocean_deep_alpha()};
|
||||
_lighting_ubo_data.RiverColorLight = { river_color_light.x,river_color_light.y,river_color_light.z, _world->skies->river_shallow_alpha()};
|
||||
_lighting_ubo_data.RiverColorDark = { river_color_dark.x,river_color_dark.y,river_color_dark.z, _world->skies->river_deep_alpha()};
|
||||
_lighting_ubo_data.LightDir_FogRate = {_outdoor_light_stats.dayDir.x, _outdoor_light_stats.dayDir.y, _outdoor_light_stats.dayDir.z, _skies->fogRate()};
|
||||
_lighting_ubo_data.OceanColorLight = { ocean_color_light.x,ocean_color_light.y,ocean_color_light.z, _skies->ocean_shallow_alpha()};
|
||||
_lighting_ubo_data.OceanColorDark = { ocean_color_dark.x,ocean_color_dark.y,ocean_color_dark.z, _skies->ocean_deep_alpha()};
|
||||
_lighting_ubo_data.RiverColorLight = { river_color_light.x,river_color_light.y,river_color_light.z, _skies->river_shallow_alpha()};
|
||||
_lighting_ubo_data.RiverColorDark = { river_color_dark.x,river_color_dark.y,river_color_dark.z, _skies->river_deep_alpha()};
|
||||
|
||||
gl.bindBuffer(GL_UNIFORM_BUFFER, _lighting_ubo);
|
||||
gl.bufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(OpenGL::LightingUniformBlock), &_lighting_ubo_data);
|
||||
@@ -1158,7 +1160,7 @@ void WorldRender::updateLightingUniformBlockMinimap(MinimapRenderSettings* setti
|
||||
_lighting_ubo_data.DiffuseColor_FogStart = { diffuse, 0 };
|
||||
_lighting_ubo_data.AmbientColor_FogEnd = { ambient, 0 };
|
||||
_lighting_ubo_data.FogColor_FogOn = { 0, 0, 0, 0 };
|
||||
_lighting_ubo_data.LightDir_FogRate = { _outdoor_light_stats.dayDir.x, _outdoor_light_stats.dayDir.y, _outdoor_light_stats.dayDir.z, _world->skies->fogRate() };
|
||||
_lighting_ubo_data.LightDir_FogRate = { _outdoor_light_stats.dayDir.x, _outdoor_light_stats.dayDir.y, _outdoor_light_stats.dayDir.z, _skies->fogRate() };
|
||||
_lighting_ubo_data.OceanColorLight = settings->ocean_color_light;
|
||||
_lighting_ubo_data.OceanColorDark = settings->ocean_color_dark;
|
||||
_lighting_ubo_data.RiverColorLight = settings->river_color_light;
|
||||
|
||||
@@ -78,8 +78,7 @@ namespace Noggit::Rendering
|
||||
void updateTerrainParamsUniformBlock();
|
||||
void markTerrainParamsUniformBlockDirty() { _need_terrain_params_ubo_update = true; };
|
||||
|
||||
[[nodiscard]]
|
||||
LiquidTextureManager* getLiquidTextureManager() { return &_liquid_texture_manager; };
|
||||
[[nodiscard]] std::unique_ptr<Skies>& skies() { return _skies; };
|
||||
|
||||
private:
|
||||
|
||||
@@ -102,6 +101,8 @@ namespace Noggit::Rendering
|
||||
void setupLiquidChunkBuffers();
|
||||
|
||||
World* _world;
|
||||
float _cull_distance;
|
||||
float _view_distance;
|
||||
|
||||
// shaders
|
||||
std::unique_ptr<OpenGL::program> _mcnk_program;;
|
||||
@@ -119,6 +120,7 @@ namespace Noggit::Rendering
|
||||
std::unique_ptr<Noggit::map_horizon::render> _horizon_render;
|
||||
std::unique_ptr<OutdoorLighting> _outdoor_lighting;
|
||||
OutdoorLightStats _outdoor_light_stats;
|
||||
std::unique_ptr<Skies> _skies;
|
||||
|
||||
// cursor
|
||||
Noggit::CursorRender _cursor_render;
|
||||
|
||||
@@ -205,9 +205,9 @@ namespace Noggit
|
||||
}
|
||||
}
|
||||
|
||||
if (draw_skies() && world()->skies)
|
||||
if (draw_skies() && _world->renderer()->skies())
|
||||
{
|
||||
foreach (Sky sky, world()->skies->skies)
|
||||
foreach (Sky sky, _world->renderer()->skies()->skies)
|
||||
{
|
||||
//! \todo Get actual color from sky.
|
||||
//! \todo Get actual radius.
|
||||
|
||||
@@ -35,14 +35,14 @@ namespace OpenGL
|
||||
};
|
||||
|
||||
template<GLenum cap>
|
||||
bool_setter<cap, GL_TRUE>::bool_setter()
|
||||
: _was_enabled (gl.isEnabled (cap) == GL_TRUE)
|
||||
bool_setter<cap, GL_TRUE>::bool_setter()
|
||||
: _was_enabled (gl.isEnabled (cap) == GL_TRUE)
|
||||
{
|
||||
gl.enable (cap);
|
||||
}
|
||||
|
||||
template<GLenum cap>
|
||||
bool_setter<cap, GL_TRUE>::~bool_setter()
|
||||
bool_setter<cap, GL_TRUE>::~bool_setter()
|
||||
{
|
||||
if (_was_enabled != GL_TRUE)
|
||||
{
|
||||
@@ -51,14 +51,14 @@ namespace OpenGL
|
||||
}
|
||||
|
||||
template<GLenum cap>
|
||||
bool_setter<cap, GL_FALSE>::bool_setter()
|
||||
: _was_enabled (gl.isEnabled (cap) == GL_TRUE)
|
||||
bool_setter<cap, GL_FALSE>::bool_setter()
|
||||
: _was_enabled (gl.isEnabled (cap) == GL_TRUE)
|
||||
{
|
||||
gl.disable (cap);
|
||||
}
|
||||
|
||||
template<GLenum cap>
|
||||
bool_setter<cap, GL_FALSE>::~bool_setter()
|
||||
bool_setter<cap, GL_FALSE>::~bool_setter()
|
||||
{
|
||||
if (_was_enabled == GL_TRUE)
|
||||
{
|
||||
@@ -67,14 +67,14 @@ namespace OpenGL
|
||||
}
|
||||
|
||||
template<GLboolean value>
|
||||
depth_mask_setter<value>::depth_mask_setter()
|
||||
depth_mask_setter<value>::depth_mask_setter()
|
||||
{
|
||||
gl.getBooleanv (GL_DEPTH_WRITEMASK, &_was_enabled);
|
||||
gl.depthMask (value);
|
||||
}
|
||||
|
||||
template<GLboolean value>
|
||||
depth_mask_setter<value>::~depth_mask_setter()
|
||||
depth_mask_setter<value>::~depth_mask_setter()
|
||||
{
|
||||
gl.depthMask (_was_enabled);
|
||||
}
|
||||
@@ -90,7 +90,7 @@ namespace OpenGL
|
||||
}
|
||||
|
||||
template<GLenum type>
|
||||
buffer_binder<type>::buffer_binder (GLuint buffer)
|
||||
buffer_binder<type>::buffer_binder (GLuint buffer)
|
||||
{
|
||||
//! \todo commented out targets not supported on macOS due to
|
||||
//! old OpenGL. If we ever need them, find workaround.
|
||||
@@ -113,7 +113,7 @@ namespace OpenGL
|
||||
gl.bindBuffer (type, buffer);
|
||||
}
|
||||
template<GLenum type>
|
||||
buffer_binder<type>::~buffer_binder()
|
||||
buffer_binder<type>::~buffer_binder()
|
||||
{
|
||||
gl.bindBuffer (type, _old);
|
||||
}
|
||||
@@ -128,7 +128,7 @@ namespace OpenGL
|
||||
}
|
||||
|
||||
template<std::size_t count>
|
||||
void deferred_upload_buffers<count>::upload()
|
||||
void deferred_upload_buffers<count>::upload()
|
||||
{
|
||||
gl.genBuffers (count, _buffers);
|
||||
_buffer_generated = true;
|
||||
@@ -142,7 +142,7 @@ namespace OpenGL
|
||||
}
|
||||
|
||||
template<std::size_t count>
|
||||
deferred_upload_buffers<count>::~deferred_upload_buffers()
|
||||
deferred_upload_buffers<count>::~deferred_upload_buffers()
|
||||
{
|
||||
if (_buffer_generated)
|
||||
{
|
||||
@@ -151,31 +151,31 @@ namespace OpenGL
|
||||
}
|
||||
|
||||
template<std::size_t count>
|
||||
GLuint const& deferred_upload_buffers<count>::operator[] (std::size_t i) const
|
||||
GLuint const& deferred_upload_buffers<count>::operator[] (std::size_t i) const
|
||||
{
|
||||
return _buffers[i];
|
||||
}
|
||||
|
||||
template<std::size_t count>
|
||||
buffers<count>::buffers()
|
||||
buffers<count>::buffers()
|
||||
{
|
||||
_impl.upload();
|
||||
}
|
||||
|
||||
template<std::size_t count>
|
||||
GLuint const& buffers<count>::operator[] (std::size_t i) const
|
||||
GLuint const& buffers<count>::operator[] (std::size_t i) const
|
||||
{
|
||||
return _impl[i];
|
||||
}
|
||||
|
||||
template<std::size_t count>
|
||||
bool deferred_upload_vertex_arrays<count>::buffer_generated() const
|
||||
bool deferred_upload_vertex_arrays<count>::buffer_generated() const
|
||||
{
|
||||
return _buffer_generated;
|
||||
}
|
||||
|
||||
template<std::size_t count>
|
||||
void deferred_upload_vertex_arrays<count>::upload()
|
||||
void deferred_upload_vertex_arrays<count>::upload()
|
||||
{
|
||||
gl.genVertexArrays (count, _vertex_arrays);
|
||||
_buffer_generated = true;
|
||||
@@ -189,7 +189,7 @@ namespace OpenGL
|
||||
}
|
||||
|
||||
template<std::size_t count>
|
||||
deferred_upload_vertex_arrays<count>::~deferred_upload_vertex_arrays()
|
||||
deferred_upload_vertex_arrays<count>::~deferred_upload_vertex_arrays()
|
||||
{
|
||||
if (_buffer_generated)
|
||||
{
|
||||
@@ -198,7 +198,7 @@ namespace OpenGL
|
||||
}
|
||||
|
||||
template<std::size_t count>
|
||||
GLuint const& deferred_upload_vertex_arrays<count>::operator[] (std::size_t i) const
|
||||
GLuint const& deferred_upload_vertex_arrays<count>::operator[] (std::size_t i) const
|
||||
{
|
||||
return _vertex_arrays[i];
|
||||
}
|
||||
@@ -241,7 +241,7 @@ namespace OpenGL
|
||||
//
|
||||
|
||||
template<std::size_t count>
|
||||
vertex_arrays<count>::vertex_arrays()
|
||||
vertex_arrays<count>::vertex_arrays()
|
||||
{
|
||||
_impl.upload();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user