From f8fc393e93abddade4c1e4be3a3dc7e3bb258266 Mon Sep 17 00:00:00 2001 From: apistol78 Date: Tue, 4 Jun 2024 08:40:38 +0200 Subject: [PATCH] Traktor: Exposed spectrum to ocen data. --- code/Terrain/OceanComponent.cpp | 22 ++++++++-------- code/Terrain/OceanComponent.h | 5 ++-- code/Terrain/OceanComponentData.cpp | 40 +++++++++++------------------ code/Terrain/OceanComponentData.h | 29 +++++++++++---------- 4 files changed, 44 insertions(+), 52 deletions(-) diff --git a/code/Terrain/OceanComponent.cpp b/code/Terrain/OceanComponent.cpp index 31d8ac5a8c..e07d50ea31 100644 --- a/code/Terrain/OceanComponent.cpp +++ b/code/Terrain/OceanComponent.cpp @@ -22,7 +22,6 @@ #include "Render/Frame/RenderGraph.h" #include "Resource/IResourceManager.h" #include "Terrain/OceanComponent.h" -#include "Terrain/OceanComponentData.h" #include "Terrain/Terrain.h" #include "Terrain/TerrainComponent.h" #include "World/Entity.h" @@ -78,16 +77,16 @@ const uint32_t c_gridCells = (c_gridSize - 1) * (c_gridSize - 1); const uint32_t c_spectrumSize = 1024; -void setSpectrumParameters(render::ProgramParameters* params) +void setSpectrumParameters(const OceanComponentData::Spectrum& spectrum, render::ProgramParameters* params) { - params->setFloatParameter(s_handleOcean_SpectrumScale, 0.075f); - params->setFloatParameter(s_handleOcean_SpectrumAngle, -PI / 2.0f); - params->setFloatParameter(s_handleOcean_SpectrumSpreadBlend, 0.8f); - params->setFloatParameter(s_handleOcean_SpectrumSwell, 0.35f); - params->setFloatParameter(s_handleOcean_SpectrumAlpha, 0.2f); - params->setFloatParameter(s_handleOcean_SpectrumPeakOmega, 1.0f); - params->setFloatParameter(s_handleOcean_SpectrumGamma, 0.5f); - params->setFloatParameter(s_handleOcean_SpectrumShortWavesFade, 0.08f); + params->setFloatParameter(s_handleOcean_SpectrumScale, spectrum.scale); + params->setFloatParameter(s_handleOcean_SpectrumAngle, spectrum.angle); + params->setFloatParameter(s_handleOcean_SpectrumSpreadBlend, spectrum.spreadBlend); + params->setFloatParameter(s_handleOcean_SpectrumSwell, spectrum.swell); + params->setFloatParameter(s_handleOcean_SpectrumAlpha, spectrum.alpha); + params->setFloatParameter(s_handleOcean_SpectrumPeakOmega, spectrum.peakOmega); + params->setFloatParameter(s_handleOcean_SpectrumGamma, spectrum.gamma); + params->setFloatParameter(s_handleOcean_SpectrumShortWavesFade, spectrum.shortWavesFade); } } @@ -188,6 +187,7 @@ bool OceanComponent::create(resource::IResourceManager* resourceManager, render: if (!resourceManager->bind(data.m_shader, m_shader)) return false; + m_spectrum = data.m_spectrum; m_shallowTint = data.m_shallowTint; m_deepColor = data.m_deepColor; m_opacity = data.m_opacity; @@ -260,7 +260,7 @@ void OceanComponent::setup( renderBlock->programParams->setFloatParameter(s_handleOcean_TileIndex, 0); renderBlock->programParams->setImageViewParameter(s_handleOcean_WaveTexture, m_spectrumTexture, 0); - setSpectrumParameters(renderBlock->programParams); + setSpectrumParameters(m_spectrum, renderBlock->programParams); renderBlock->programParams->endParameters(renderContext); diff --git a/code/Terrain/OceanComponent.h b/code/Terrain/OceanComponent.h index 329b0739fb..139078e38d 100644 --- a/code/Terrain/OceanComponent.h +++ b/code/Terrain/OceanComponent.h @@ -12,6 +12,7 @@ #include "Core/Math/Vector4.h" #include "Render/Types.h" #include "Resource/Proxy.h" +#include "Terrain/OceanComponentData.h" #include "World/IEntityComponent.h" // import/export mechanism. @@ -53,7 +54,6 @@ class WorldSetupContext; namespace traktor::terrain { -class OceanComponentData; class Terrain; /*! Ocean component. @@ -64,8 +64,6 @@ class T_DLLCLASS OceanComponent : public world::IEntityComponent T_RTTI_CLASS; public: - static constexpr int32_t MaxWaves = 32; - virtual ~OceanComponent(); bool create(resource::IResourceManager* resourceManager, render::IRenderSystem* renderSystem, const OceanComponentData& data); @@ -116,6 +114,7 @@ class T_DLLCLASS OceanComponent : public world::IEntityComponent Ref< render::Buffer > m_indexBuffer; Ref< render::Buffer > m_vertexBuffer; render::Primitives m_primitives; + OceanComponentData::Spectrum m_spectrum; Color4f m_shallowTint; Color4f m_deepColor; float m_opacity = 0.5f; diff --git a/code/Terrain/OceanComponentData.cpp b/code/Terrain/OceanComponentData.cpp index 74fd62f7b6..84cf10315b 100644 --- a/code/Terrain/OceanComponentData.cpp +++ b/code/Terrain/OceanComponentData.cpp @@ -6,6 +6,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +#include "Core/Serialization/AttributeRange.h" #include "Core/Serialization/ISerializer.h" #include "Core/Serialization/MemberComposite.h" #include "Core/Serialization/MemberStaticArray.h" @@ -25,7 +26,7 @@ const resource::Id< render::Shader > c_defaultShader(Guid(L"{FB9B7138-B7B2-E341- } -T_IMPLEMENT_RTTI_EDIT_CLASS(L"traktor.terrain.OceanComponentData", 4, OceanComponentData, world::IEntityComponentData) +T_IMPLEMENT_RTTI_EDIT_CLASS(L"traktor.terrain.OceanComponentData", 5, OceanComponentData, world::IEntityComponentData) OceanComponentData::OceanComponentData() : m_shaderWave(c_waveShader) @@ -48,41 +49,30 @@ void OceanComponentData::setTransform(const world::EntityData* owner, const Tran void OceanComponentData::serialize(ISerializer& s) { - if (s.getVersion() >= 2) - s >> resource::Member< render::Shader >(L"shaderWave", m_shaderWave); + T_FATAL_ASSERT(s.getVersion< OceanComponentData >() >= 4); + s >> resource::Member< render::Shader >(L"shaderWave", m_shaderWave); s >> resource::Member< render::Shader >(L"shader", m_shader); - if (s.getVersion() >= 1 && s.getVersion() < 4) - s >> resource::ObsoleteMember< render::ITexture >(L"reflectionTexture"); - s >> Member< Color4f >(L"shallowTint", m_shallowTint); - - if (s.getVersion() < 3) - { - s >> ObsoleteMember< Color4f >(L"reflectionTint"); - s >> ObsoleteMember< Color4f >(L"shadowTint"); - } - s >> Member< Color4f >(L"deepColor", m_deepColor); s >> Member< float >(L"opacity", m_opacity); s >> Member< float >(L"elevation", m_elevation); - if (s.getVersion() < 3) - { - Wave waves[4]; - s >> MemberStaticArray< Wave, 4, MemberComposite< Wave > >(L"waves", waves); - } + if (s.getVersion< OceanComponentData >() >= 5) + s >> MemberComposite< Spectrum >(L"spectrum", m_spectrum); } -void OceanComponentData::Wave::serialize(ISerializer& s) +void OceanComponentData::Spectrum::serialize(ISerializer& s) { - s >> Member< float >(L"direction", direction); - s >> Member< float >(L"amplitude", amplitude); - s >> Member< float >(L"frequency", frequency); - s >> Member< float >(L"phase", phase); - s >> Member< float >(L"pinch", pinch); - s >> Member< float >(L"rate", rate); + s >> Member< float >(L"scale", scale, AttributeRange(0.0f)); + s >> Member< float >(L"angle", angle); + s >> Member< float >(L"spreadBlend", spreadBlend, AttributeRange(0.0f, 1.0f)); + s >> Member< float >(L"swell", swell); + s >> Member< float >(L"alpha", alpha, AttributeRange(0.0f)); + s >> Member< float >(L"peakOmega", peakOmega); + s >> Member< float >(L"gamma", gamma); + s >> Member< float >(L"shortWavesFade", shortWavesFade); } } diff --git a/code/Terrain/OceanComponentData.h b/code/Terrain/OceanComponentData.h index 5ccbe2c6ca..5aec04bf1a 100644 --- a/code/Terrain/OceanComponentData.h +++ b/code/Terrain/OceanComponentData.h @@ -1,6 +1,6 @@ /* * TRAKTOR - * Copyright (c) 2022 Anders Pistol. + * Copyright (c) 2022-2024 Anders Pistol. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this @@ -43,6 +43,20 @@ class T_DLLCLASS OceanComponentData : public world::IEntityComponentData T_RTTI_CLASS; public: + struct Spectrum + { + float scale = 0.075f; + float angle = -PI / 2.0f; + float spreadBlend = 0.8f; + float swell = 0.35f; + float alpha = 0.2f; + float peakOmega = 1.0f; + float gamma = 0.5f; + float shortWavesFade = 0.08f; + + void serialize(ISerializer& s); + }; + OceanComponentData(); virtual int32_t getOrdinal() const override final; @@ -60,21 +74,10 @@ class T_DLLCLASS OceanComponentData : public world::IEntityComponentData private: friend class OceanComponent; - struct Wave - { - float direction = 0.0f; - float amplitude = 0.0f; - float frequency = 0.25f; - float phase = 0.0f; - float pinch = 3.0f; - float rate = 4.0f; - - void serialize(ISerializer& s); - }; - resource::Id< render::Shader > m_shaderWave; resource::Id< render::Shader > m_shader; resource::Id< Terrain > m_terrain; + Spectrum m_spectrum; Color4f m_shallowTint; Color4f m_deepColor; float m_opacity;