Skip to content

Commit 43a3f57

Browse files
committed
[General] fix
1 parent 7b8bd50 commit 43a3f57

1 file changed

Lines changed: 13 additions & 36 deletions

File tree

src/openminecraft-core/renderer/common/wrap/om_renderer_voxel_manager.cpp

Lines changed: 13 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@ OMVoxelManager::OMVoxelManager(OMRenderer *renderer, OMRendererTexture *tex, OMR
4141
cutoutTargetMS = new OMRendererTempTarget(renderer);
4242
cutoutTargetMS->construct(renderer->getExtent(), 4);
4343

44+
translucentTargetMS = new OMRendererTempTarget(renderer);
45+
translucentTargetMS->clearDepth = false;
46+
translucentTargetMS->construct(renderer->getExtent(), 4);
47+
48+
cutoutTarget = new OMRendererTempTarget(renderer);
49+
cutoutTarget->construct(renderer->getExtent());
50+
translucentTarget = new OMRendererTempTarget(renderer);
51+
4452
basics::OMVertexFormat format, format2, formatComplex, simpleFormat;
4553
simpleFormat.nextGroup()->decideStruct();
4654
format.setInstance()
@@ -122,7 +130,7 @@ OMVoxelManager::OMVoxelManager(OMRenderer *renderer, OMRendererTexture *tex, OMR
122130
->inputName("inTexture")
123131
->input(UniformTexelBuffer)
124132
->inputName("inChunkPos")
125-
->output(cutoutTargetMS->target)
133+
->output(translucentTargetMS->target)
126134
->samples(4)
127135
->setCullMode(renderer::common::Back)
128136
->setFrontClockwise(true)
@@ -144,7 +152,7 @@ OMVoxelManager::OMVoxelManager(OMRenderer *renderer, OMRendererTexture *tex, OMR
144152
->inputName("inTextureSec")
145153
->input(UniformTexelBuffer)
146154
->inputName("inChunkPos")
147-
->output(cutoutTargetMS->target)
155+
->output(translucentTargetMS->target)
148156
->samples(4)
149157
->setCullMode(renderer::common::Back)
150158
->setFrontClockwise(true)
@@ -183,7 +191,7 @@ OMVoxelManager::OMVoxelManager(OMRenderer *renderer, OMRendererTexture *tex, OMR
183191
->inputName("inTextureCutout")
184192
->input(ImageSampler)
185193
->inputName("inTextureTranslucent")
186-
->output(cutoutTargetMS->target)
194+
->output(cutoutTarget->target)
187195
->samples(1)
188196
->shader(renderer->shaderManager.preprocess("core/voxel/voxelcompose.frag.glsl", Fragment,
189197
GLSLSource, format))
@@ -215,12 +223,6 @@ OMVoxelManager::OMVoxelManager(OMRenderer *renderer, OMRendererTexture *tex, OMR
215223
translucentComplexPipeline->bindInput(1, textureAtlas);
216224
translucentComplexPipeline->bindInput(2, textureAtlasSecondary);
217225
translucentComplexPipeline->bindInput(3, chunkoffs);
218-
219-
translucentTargetMS = new OMRendererTempTarget(renderer);
220-
translucentTargetMS->clearDepth = false;
221-
222-
cutoutTarget = new OMRendererTempTarget(renderer);
223-
translucentTarget = new OMRendererTempTarget(renderer);
224226
}
225227
OMVoxelManager::~OMVoxelManager()
226228
{
@@ -327,21 +329,6 @@ auto OMVoxelManager::update(basics::OMCamera &camera) -> void
327329
pp3 - camera.getPosRaw(), pp5 - camera.getPosRaw(), pp3 - camera.getPosRaw(), pp7 - camera.getPosRaw(),
328330
pp4 - camera.getPosRaw(), pp6 - camera.getPosRaw(), pp4 - camera.getPosRaw(), pp7 - camera.getPosRaw(),
329331
}}.data());
330-
uint64_t hsh = chunkManager->numChunks();
331-
hsh *= 31;
332-
hsh += camera.getPosRaw().chunkx;
333-
hsh *= 31;
334-
hsh += camera.getPosRaw().chunky;
335-
hsh *= 31;
336-
hsh += camera.getPosRaw().chunkz;
337-
hsh *= 31;
338-
hsh += camera.getPosRaw().localx * 0x1000000;
339-
hsh *= 31;
340-
hsh += camera.getPosRaw().localy * 0x1000000;
341-
hsh *= 31;
342-
hsh += camera.getPosRaw().localz * 0x1000000;
343-
344-
bool miss = hsh != cameraHash;
345332

346333
if (chunkManager->numChunks())
347334
{
@@ -380,23 +367,12 @@ auto OMVoxelManager::update(basics::OMCamera &camera) -> void
380367
{
381368
delete chunkoffs;
382369
chunkoffs = renderer->allocateBuffer(UniformTexel, chunkManager->numChunks() * 3 * sizeof(float) * 2);
383-
chunkoffs->updateData(offs.data());
384370
pipeline->bindInput(2, chunkoffs);
385371
complexPipeline->bindInput(3, chunkoffs);
386372
translucentPipeline->bindInput(2, chunkoffs);
387373
translucentComplexPipeline->bindInput(3, chunkoffs);
388374
}
389-
else
390-
{
391-
if (miss)
392-
{
393-
chunkoffs->updateData(offs.data());
394-
}
395-
else
396-
{
397-
cameraHash = hsh;
398-
}
399-
}
375+
chunkoffs->updateDataPart(offs.data(), 0, offs.size() * sizeof(glm::vec3));
400376

401377
if (l != voxelLayer->buf()->totalSize || l2 != voxelComplexLayer->buf()->totalSize)
402378
{
@@ -407,6 +383,7 @@ auto OMVoxelManager::update(basics::OMCamera &camera) -> void
407383

408384
auto OMVoxelManager::submit(OMRendererTask *task, OMRendererTempTarget *resolveTarget) -> OMRendererTask *
409385
{
386+
cutoutTargetMS->construct(renderer->getExtent(), 4);
410387
translucentTargetMS->constructWithDepth(cutoutTargetMS->depthTexture, renderer->getExtent(), 4);
411388
cutoutTarget->construct(renderer->getExtent());
412389
translucentTarget->construct(renderer->getExtent());

0 commit comments

Comments
 (0)