WIP update groundeffect rendering updates
This commit is contained in:
@@ -1482,6 +1482,10 @@ void MapChunk::save(sExtendableArray& lADTFile
|
||||
|
||||
if(texture_set)
|
||||
{
|
||||
// hackfix -- temp hackfix to bruteforce update + save
|
||||
texture_set->apply_alpha_changes();
|
||||
texture_set->updateDoodadMapping();
|
||||
|
||||
std::copy(texture_set->getDoodadMappingBase(), texture_set->getDoodadMappingBase() + 8
|
||||
, lMCNK_header->doodadMapping);
|
||||
*reinterpret_cast<std::uint64_t*>(lMCNK_header->doodadStencil)
|
||||
|
||||
@@ -111,7 +111,8 @@ void TileRender::draw (OpenGL::Scoped::use_program& mcnk_shader
|
||||
}
|
||||
|
||||
// run chunk updates. running this when splitdraw call detected unused sampler configuration as well.
|
||||
if (_map_tile->_chunk_update_flags || is_selected != _selected || need_paintability_update || _requires_sampler_reset || _texture_not_loaded || _requires_ground_effect_color_recalc)
|
||||
if (_map_tile->_chunk_update_flags || is_selected != _selected || need_paintability_update || _requires_sampler_reset || _texture_not_loaded
|
||||
|| _requires_ground_effect_color_recalc || _require_geffect_active_texture_update)
|
||||
{
|
||||
|
||||
gl.bindBuffer(GL_UNIFORM_BUFFER, _chunk_instance_data_ubo);
|
||||
@@ -159,8 +160,13 @@ void TileRender::draw (OpenGL::Scoped::use_program& mcnk_shader
|
||||
{
|
||||
// recalculate doodad mapping.
|
||||
chunk->getTextureSet()->updateDoodadMapping();
|
||||
|
||||
// setChunkGroundEffectActiveData();
|
||||
// update render
|
||||
setChunkGroundEffectActiveData(chunk.get());
|
||||
}
|
||||
else if (_require_geffect_active_texture_update)
|
||||
{
|
||||
// active texture render changed, just update render
|
||||
setChunkGroundEffectActiveData(chunk.get());
|
||||
}
|
||||
|
||||
if (!flags)
|
||||
@@ -249,6 +255,7 @@ void TileRender::draw (OpenGL::Scoped::use_program& mcnk_shader
|
||||
|
||||
_requires_sampler_reset = false;
|
||||
_requires_ground_effect_color_recalc = false;
|
||||
_require_geffect_active_texture_update = false;
|
||||
|
||||
if (_split_drawcall)
|
||||
{
|
||||
@@ -611,7 +618,7 @@ void TileRender::setChunkDetaildoodadsExclusionData(MapChunk* chunk)
|
||||
chunk_render_instance.ChunkDoodadsEnabled2_ChunksLayerEnabled2[1] = exclusionmap2;
|
||||
}
|
||||
|
||||
void Noggit::Rendering::TileRender::setChunkGroundEffectActiveData(MapChunk* chunk, std::string active_texture)
|
||||
void Noggit::Rendering::TileRender::setChunkGroundEffectActiveData(MapChunk* chunk)
|
||||
{
|
||||
// 1 : check if chunk has our texture AND set
|
||||
// if it does, then check if it's the active layer for each unit
|
||||
@@ -620,7 +627,7 @@ void Noggit::Rendering::TileRender::setChunkGroundEffectActiveData(MapChunk* chu
|
||||
int layer_id = -1;
|
||||
for (int i = 0; i < chunk->getTextureSet()->num(); ++i)
|
||||
{
|
||||
if (chunk->getTextureSet()->filename(i) == active_texture)
|
||||
if (chunk->getTextureSet()->filename(i) == _geffect_active_texture)
|
||||
{
|
||||
layer_id = i;
|
||||
}
|
||||
@@ -664,3 +671,14 @@ void Noggit::Rendering::TileRender::setChunkGroundEffectActiveData(MapChunk* chu
|
||||
chunk_render_instance.ChunkDoodadsEnabled2_ChunksLayerEnabled2[2] = active_map1;
|
||||
chunk_render_instance.ChunkDoodadsEnabled2_ChunksLayerEnabled2[3] = active_map2;
|
||||
}
|
||||
|
||||
void Noggit::Rendering::TileRender::setActiveRenderGEffectTexture(std::string active_texture)
|
||||
{
|
||||
if (active_texture == _geffect_active_texture)
|
||||
return;
|
||||
|
||||
_geffect_active_texture = active_texture;
|
||||
|
||||
_require_geffect_active_texture_update = true;
|
||||
|
||||
}
|
||||
|
||||
@@ -44,7 +44,8 @@ namespace Noggit::Rendering
|
||||
void initChunkData(MapChunk* chunk);
|
||||
|
||||
void setChunkDetaildoodadsExclusionData(MapChunk* chunk);
|
||||
void setChunkGroundEffectActiveData(MapChunk* chunk, std::string active_texture);
|
||||
void setChunkGroundEffectActiveData(MapChunk* chunk);
|
||||
void setActiveRenderGEffectTexture(std::string active_texture);
|
||||
|
||||
[[nodiscard]]
|
||||
unsigned objectsFrustumCullTest() const { return _objects_frustum_cull_test; };
|
||||
@@ -76,6 +77,9 @@ namespace Noggit::Rendering
|
||||
bool _requires_paintability_recalc = true;
|
||||
bool _requires_ground_effect_color_recalc = true;
|
||||
bool _texture_not_loaded = false;
|
||||
bool _require_geffect_active_texture_update = true;
|
||||
|
||||
std::string _geffect_active_texture = "";
|
||||
|
||||
// culling
|
||||
unsigned _objects_frustum_cull_test = 0;
|
||||
|
||||
@@ -536,6 +536,7 @@ namespace Noggit
|
||||
|
||||
for (MapTile* tile : _map_view->getWorld()->mapIndex.loaded_tiles())
|
||||
{
|
||||
tile->renderer()->setActiveRenderGEffectTexture(active_texture);
|
||||
for (int x = 0; x < 16; x++)
|
||||
{
|
||||
for (int y = 0; y < 16; y++)
|
||||
@@ -546,8 +547,10 @@ namespace Noggit
|
||||
|
||||
// reset to black by default
|
||||
tile->renderer()->setChunkGroundEffectColor(chunk_index, glm::vec3(0.0, 0.0, 0.0));
|
||||
// ! Set the chunk active layer data
|
||||
tile->renderer()->setChunkGroundEffectActiveData(chunk, active_texture);
|
||||
|
||||
// ! Set the chunk active layer data.
|
||||
// new system : just update the active texture and mark dirty to the renderer
|
||||
// tile->renderer()->setChunkGroundEffectActiveData(chunk);
|
||||
|
||||
if (active_texture.empty() || active_texture == "tileset\\generic\\black.blp" || _loaded_effects.empty())
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user