@@ -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}
225227OMVoxelManager::~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
408384auto 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