Cogs.Core
OceanRenderer.h
1#pragma once
2
3#include "RenderContext.h"
4
5#include "ClipmapConstants.h"
6#include "ClipmapEffectVariables.h"
7#include "WaveSpectrum.h"
8
9#include "Foundation/Platform/Timer.h"
10
11namespace Cogs
12{
13 class IGraphicsDevice;
14 struct ClipmapRenderer;
15 struct ClipmapState;
16 struct IBuffers;
17 struct ITextures;
18 struct RenderBlock;
19 struct RenderLevel;
20
23 {
24 bool initialized = false;
25 EffectHandle oceanEffect;
26 ClipmapEffectVariables effectVariables;
27 OceanEffectVariables oceanEffectVariables;
28
29 ClipmapTextureBindings effectBindings;
30 ClipmapTextureBindings oceanEffectBindings;
31 };
32
34 {
35 public:
36 void initialize(ClipmapRenderer * renderer, IGraphicsDevice * device);
37
38 void setOptions(const OceanOptions * options);
39
40 void initializeTextures(ITextures * textures, IRenderTargets * renderTargets);
41 void initializeEffects(IBuffers * buffers, IEffects * effects, const size_t numImagery, size_t permutation);
42 void initializeConstantBuffers(IBuffers * buffers, EffectHandle effect, ClipmapEffectVariables & variables, OceanEffectVariables & oceanEffectVariables, bool isDepth);
43 void initializeEffectVariables(IEffects * effects, EffectHandle effect, ClipmapEffectVariables & variables, OceanEffectVariables & oceanEffectVariables, const size_t numImagery, bool isDepth);
44 void initializeEffectBindings(IEffects * effects, EffectHandle effect, ClipmapTextureBindings & bindings, const size_t numImagery, bool isDepth);
45
46 void updateGlobalParameters(const RenderContext & renderContext, const RenderOptions & renderOptions, const ClipmapState & clipmapState, const GlobalParameters & globalParameters);
47 void updateLevelParameters(IContext * context, const RenderOptions & options, const LevelParameters & parameters, const ImageryParameters & imageryParameters, size_t permutation);
48 void updateLevelTextures(IContext * context, const RenderLevel * renderLevel, size_t permutation);
49
50 void preRender(RenderContext & renderContext);
51
52 void setupOceanPass(RenderContext & renderContext);
53
54 void render(RenderContext & renderContext, const RenderOptions & renderOptions, const WorldOptions & worldOptions, bool usePreviousCullingResults = false);
55
56 void drawBlock(const RenderBlock & renderBlock, RenderContext & renderContext);
57 void update();
58
59 PermutationDependentOceanRendererData & getPermutationDependentOceanRendererData(const size_t index)
60 {
61 if (permutationDependentOceanRendererData.size() <= index)
62 permutationDependentOceanRendererData.resize(index + 4);
63
64 return permutationDependentOceanRendererData[index];
65 }
66
67 OceanOptions oceanOptions;
68 Timer timer;
69
70 InputLayoutHandle inputLayout;
71
72 OceanParameters oceanParameters;
73
74 BlendStateHandle blendStateHandle;
75
76 WaveSpectrum baseSpectrum;
77
78 IGraphicsDevice * device;
79 ClipmapRenderer * renderer;
80
81 protected:
82 float baseTileLength = -1; // Side-length of base tile in meters.
83 int baseTileSizeLog2 = -1; // Number of samples along
84 float significantWavePeriod = -1.f;
85
86 private:
87 std::vector<PermutationDependentOceanRendererData> permutationDependentOceanRendererData;
88 };
89}
Represents a graphics device used to manage graphics resources and issue drawing commands.
Old timer class.
Definition: Timer.h:37
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
Provides buffer management functionality.
Definition: IBuffers.h:13
Represents a graphics device context which can receive rendering commands.
Definition: IContext.h:43
Provides effects and shader management functionality.
Definition: IEffects.h:148
Provides render target management functionality.
Provides texture management functionality.
Definition: ITextures.h:40
Part of the OceanRenderer context that depends on the selected permutation.
Definition: OceanRenderer.h:23