Cogs.Core
TerrainFunctions.cpp
1#include "TerrainFunctions.h"
2
3#include "../Source/TerrainSystem.h"
4
5#include "Context.h"
6#include "Bridge/DebugFunctions.h"
7#include "Resources/ResourceStore.h"
8
9#include "../Source/Terrain.h"
10
11#include "Foundation/ComponentModel/Entity.h"
12
13
14using namespace Cogs::Core;
15
16void initializeTerrain()
17{
18 // Nothing to do here.
19}
20
21namespace Cogs
22{
23 namespace Core
24 {
25 TerrainData * getTerrainData(Context * context, EntityId id)
26 {
27 auto terrainSystem = ExtensionRegistry::getExtensionSystem<TerrainSystem>(context);
28
29 for (auto & terrainComponent : terrainSystem->pool) {
30 if (terrainComponent.getContainer()->getId() == id) {
31 return &terrainSystem->getData(&terrainComponent);
32 }
33 }
34
35 return nullptr;
36 }
37 }
38}
39
40void setRasterSources(BridgeContext * ctx,
41 EntityId id,
42 Cogs::RasterSourceParameters * terrainParameters,
43 const size_t numTerrain,
44 Cogs::RasterSourceParameters * imageryParameters,
45 const size_t numImagery)
46{
47 auto context = static_cast<Context*>(ctx);
48 auto terrainData = Cogs::Core::getTerrainData(context, id);
49
50 terrainSetRasterSources(terrainData->context, terrainParameters, numTerrain, imageryParameters, numImagery);
51}
52
53void setDebugOptions(BridgeContext * ctx, EntityId id, const Cogs::DebugOptions * options)
54{
55 auto context = static_cast<Context*>(ctx);
56 auto terrainData = Cogs::Core::getTerrainData(context, id);
57
58 terrainSetDebugOptions(terrainData->context, options);
59}
60
61void setOceanOptions(BridgeContext * ctx, EntityId id, const Cogs::OceanOptions * options)
62{
63 auto context = static_cast<Context*>(ctx);
64 auto terrainData = Cogs::Core::getTerrainData(context, id);
65
66 oceanSetOptions(terrainData->context, options);
67}
68
69void * createSharedContext(BridgeContext * ctx)
70{
71 auto context = static_cast<Context*>(ctx);
72 return context->device->createSharedContext();
73}
74
75void initializeSharedContext(BridgeContext * ctx, void * sharedContext)
76{
77 auto context = static_cast<Context*>(ctx);
78 context->device->activateSharedContext((Cogs::SharedGraphicsContext *)sharedContext);
79}
80
81void releaseSharedContext(BridgeContext * ctx, void * sharedContext)
82{
83 auto context = static_cast<Context*>(ctx);
84 context->device->releaseSharedContext((Cogs::SharedGraphicsContext *)sharedContext);
85}
86
87void setShadingOptions(BridgeContext * ctx, EntityId id, const Cogs::ShadingOptions * options)
88{
89 auto context = static_cast<Context*>(ctx);
90 auto terrainData = Cogs::Core::getTerrainData(context, id);
91
92 terrainData->customComputeColor = options->customComputeColor;
93}
94
95void invalidateRasterSource(BridgeContext * ctx, EntityId id, const long rasterSourceId, const bool clearContents)
96{
97 auto context = static_cast<Context*>(ctx);
98 auto terrainData = Cogs::Core::getTerrainData(context, id);
99
100 terrainInvalidateRasterSource(terrainData->context, rasterSourceId, clearContents);
101}
102
103float getNearestSample(BridgeContext * ctx, EntityId id)
104{
105 auto context = static_cast<Context*>(ctx);
106 auto terrainData = Cogs::Core::getTerrainData(context, id);
107
108 return terrainGetNearestSample(terrainData->context);
109}
110
111void triggerTerrainUpdate(BridgeContext * /*ctx*/, EntityId /*id*/)
112{
113
114}
115
116void setClipmapParameters(BridgeContext * ctx, EntityId id, const Cogs::ClipmapParameters * parameters)
117{
118 auto context = static_cast<Context*>(ctx);
119 auto terrainData = Cogs::Core::getTerrainData(context, id);
120
121 terrainSetParameters(terrainData->context, parameters);
122}
123
124void setWorldOptions(BridgeContext * ctx, EntityId id, const Cogs::WorldOptions * options)
125{
126 auto context = static_cast<Context*>(ctx);
127 auto terrainData = Cogs::Core::getTerrainData(context, id);
128
129 terrainSetWorldOptions(terrainData->context, options);
130}
131
132void setUpdateOptions(BridgeContext * ctx, EntityId id, const Cogs::UpdateOptions * options)
133{
134 auto context = static_cast<Context*>(ctx);
135 auto terrainData = Cogs::Core::getTerrainData(context, id);
136
137 terrainSetUpdateOptions(terrainData->context, options);
138}
139
140void setRenderOptions(BridgeContext * ctx, EntityId id, const Cogs::RenderOptions * options)
141{
142 auto context = static_cast<Context*>(ctx);
143 auto terrainData = Cogs::Core::getTerrainData(context, id);
144
145 terrainSetRenderOptions(terrainData->context, options);
146}
147
148void queryTerrain(BridgeContext * ctx, EntityId id, Cogs::TerrainQuery * query, Cogs::TerrainQueryCallback callback)
149{
150 auto context = static_cast<Context*>(ctx);
151 auto terrainData = Cogs::Core::getTerrainData(context, id);
152
153 terrainPostQuery(terrainData->context, query, callback);
154}
155
156void processQueries(BridgeContext * ctx, EntityId id)
157{
158 auto context = static_cast<Context*>(ctx);
159 auto terrainData = Cogs::Core::getTerrainData(context, id);
160
161 CHECKED(context, terrainProcessQueries(terrainData->context));
162}
163
164void getTerrainMetrics(BridgeContext * ctx, EntityId id, Cogs::TerrainMetrics * metrics)
165{
166 auto context = static_cast<Context*>(ctx);
167 auto terrainData = Cogs::Core::getTerrainData(context, id);
168
169 terrainGetTerrainMetrics(terrainData->context, metrics);
170}
171
172void setMaxTilesPerFrame(BridgeContext * ctx, EntityId id, int count)
173{
174 auto context = static_cast<Context*>(ctx);
175 auto terrainData = Cogs::Core::getTerrainData(context, id);
176
177 terrainData->maxTilesPerFrame = count;
178}
179
180void disposeRasterSource(BridgeContext* /*ctx*/, int64_t id)
181{
182 terrainDisposeRasterSource(id);
183}
184
185void invalidateRasterTile(BridgeContext*, int64_t id, int level, int x, int y, int flags)
186{
187 terrainInvalidateTile(id, level, x, y, flags);
188}
189
190void setImageryEnabled(BridgeContext * ctx, EntityId id, const bool * data, int count)
191{
192 auto context = static_cast<Context*>(ctx);
193 auto terrainData = Cogs::Core::getTerrainData(context, id);
194
195 terrainSetImageryEnabled(terrainData->context, data, count);
196}
197
198void setCustomParameters(BridgeContext * ctx, EntityId id, const unsigned char * data, int count)
199{
200 auto context = static_cast<Context*>(ctx);
201 auto terrainData = Cogs::Core::getTerrainData(context, id);
202
203 terrainSetCustomParameters(terrainData->context, data, count);
204}
A Context instance contains all the services, systems and runtime components needed to use Cogs.
Definition: Context.h:83
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....
Contains all Cogs related functionality.
Definition: FieldSetter.h:23