Cogs.Core
ClipmapManager.h
1#pragma once
2
3#include "ClipmapUpdater.h"
4#include "NormalUpdater.h"
5
6#include "ClipmapGeometry.h"
7#include "ClipmapState.h"
8#include "ClipmapLevel.h"
9
10#include "ClipmapRenderer.h"
11#include "ClipmapDepthQuery.h"
12
13#include "OceanRenderer.h"
14
15#include "Raster/RasterSourceSubscription.h"
16
17namespace Cogs
18{
20 {
21 public:
24
25 void setRasterSources(const RasterSourcePtr & terrainSource, const std::vector<RasterSourcePtr> & imagerySources);
26 void setClipmapParameters(const ClipmapParameters * clipmapParameters);
27 void setCustomParameters(const unsigned char * data, int count);
28
29 void initialize(IGraphicsDevice * device);
30 void updateSharedDevice(IGraphicsDevice * device);
31 void initializeGeometry();
32 void initializeLevels();
33 void initializeBackgroundLevels();
34 void cleanupLevels();
35 void detachResponseHandlers();
36
37 void update();
38 size_t preRender(RenderContext & renderContext);
39
40 void renderDepth(RenderContext & renderContext, size_t maxLevel);
41 void render(RenderContext & renderContext, size_t maxLevel);
42 void renderOcean(RenderContext & renderContext, size_t maxLevel);
43
44 void postRender(RenderContext & renderContext);
45 void renderDebugOverlays(RenderContext & renderContext);
46
47 void getTerrainMetrics(TerrainMetrics * metrics) const;
48
49 void invalidateRasterSource(RasterSource * rasterSource, bool clearContents);
50 void invalidateTile(RasterSource * rasterSource, const RasterTileIdentifier & id);
51
52 bool updateRequired() const { return needsUpdate; }
53
54 bool isInitialized() const { return initialized; }
55
56 float getNearestSample();
57
58 WorldOptions worldOptions;
59 UpdateOptions updateOptions;
60 RenderOptions renderOptions;
61 DebugOptions debugOptions;
62
63 bool effectsNeedUpdate = false;
64
65 RenderContext previousContext;
66
67 ClipmapRenderer clipmapRenderer;
68 ClipmapDepthQuery depthQuery;
69
70 OceanRenderer oceanRenderer;
71 bool oceanActive = false;
72
73 std::vector<ClipmapLevel> terrainLevels;
74 std::vector<std::vector<ClipmapLevel>> imagery;
75 std::vector<ClipmapLevel> normalLevels;
76
77 ClipmapLevel backgroundLevel;
78 std::vector<ClipmapLevel> backgroundImagery;
79 ClipmapLevel backgroundNormalLevel;
80 bool backgroundNeedsUpdate = false;
81
82 std::vector<bool> imageryEnabled;
83
84 ClipmapGeometry clipmapGeometry;
85 bool geometryNeedsUpdate = true;
86
87 RasterSourceSubscription terrainSource;
88 std::vector<RasterSourceSubscription> imagerySources;
89 bool sourcesNeedUpdate = false;
90
91 ClipmapParameters parameters;
92
93 private:
94 size_t calculateCenterAndMaxLevel(RenderContext & renderContext);
95 void updateOriginInTextures(ClipmapLevel & level);
96 void requestTileLoads(RenderContext & renderContext, const size_t maxLevel);
97
98 void updateClipmapLevels(RenderContext & renderContext, const WorldOptions & worldOptions, const size_t maxLevel);
99 void updateClipmapLevel(RenderContext & renderContext, const WorldOptions & worldOptions, ClipmapLevel & level, ClipmapLevel & coarserLevel, bool normal);
100
101 void updateBackgroundLevel(RenderContext & renderContext, const WorldOptions & worldOptions);
102
103 void preloadLevelZeroTiles();
104
105 void updateMipmaps(size_t maxLevel, IGraphicsDevice * device);
106
107 void touch() { needsUpdate = true; }
108
109 void clearLevels(RasterSource * rasterSource, bool clearContents);
110
111 RenderTexture createTexture(const size_t width, const size_t height, const TextureFormat textureFormat, const bool mipmapping = false, glm::vec4 clearColor = glm::vec4(0, 0, 0, 0));
112 void destroyTexture(RenderTexture & texture);
113
114 IGraphicsDevice * device = nullptr;
115
116 ClipmapUpdater updater;
117 NormalUpdater normalUpdater;
118
119 ClipmapState clipmapState;
120
121 TerrainMetrics metrics = {};
122
123 int missingTileRegions = 1;
124 std::vector<size_t> missingImageryTileRegions;
125
126 size_t lastMaxLevel = 0;
127 bool needsUpdate = false;
128
129 bool initialized = false;
130 float nearestSample = 0;
131 bool first = true;
132 };
133}
Represents a graphics device used to manage graphics resources and issue drawing commands.
Contains all Cogs related functionality.
Definition: FieldSetter.h:23