Skip to content

Commit 93def68

Browse files
committed
[Renderer] oit preview
1 parent f557115 commit 93def68

2 files changed

Lines changed: 52 additions & 5 deletions

File tree

include/openminecraft/renderer/common/wrap/om_renderer_voxel.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,9 +333,11 @@ class OMVoxelManager
333333
auto submit(OMRendererTask *, OMRendererTempTarget *, OMRendererTempTarget *) -> OMRendererTask *;
334334
auto update(basics::OMCamera &camera) -> void;
335335

336-
OMRendererTempTarget *translucentTarget;
336+
OMRendererTempTarget *translucentTargetMS, *translucentTarget;
337+
OMRendererTempTarget *cutoutTarget;
337338
OMRendererPipeline *pipeline, *debugPipeline, *complexPipeline;
338339
OMRendererPipeline *translucentPipeline, *translucentComplexPipeline;
340+
OMRendererPipeline *biltCutoutPipeline, *biltTranslucentPipeline;
339341
OMRendererBuffer *chunkoffs, *debugoffs;
340342
OMRendererTexture *textureAtlas;
341343
OMRendererTexture *textureAtlasSecondary;

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

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,33 @@ OMVoxelManager::OMVoxelManager(OMRenderer *renderer, OMRendererRenderTarget *tar
175175
->depthReverseZ(true)
176176
->buildN();
177177

178+
biltCutoutPipeline =
179+
renderer->createPipeline()
180+
->input(ImageSampler)
181+
->inputName("inTexture")
182+
->output(target)
183+
->samples(1)
184+
->shader(renderer->shaderManager.preprocess("core/bilt.frag.glsl", Fragment, GLSLSource, format))
185+
->shader(renderer->shaderManager.preprocess("core/bilt2.vert.glsl", Vertex, GLSLSource, format))
186+
->format(format)
187+
->blend(false)
188+
->depth(false, false)
189+
->buildN();
190+
191+
biltTranslucentPipeline =
192+
renderer->createPipeline()
193+
->input(ImageSampler)
194+
->inputName("inTexture")
195+
->output(target)
196+
->samples(1)
197+
->shader(renderer->shaderManager.preprocess("core/bilt.frag.glsl", Fragment, GLSLSource, format))
198+
->shader(renderer->shaderManager.preprocess("core/bilt2.vert.glsl", Vertex, GLSLSource, format))
199+
->format(format)
200+
->blendFunc({One, Alpha, One, OneMinusAlpha})
201+
->blend(true)
202+
->depth(false, false)
203+
->buildN();
204+
178205
voxelLayer = new OMVoxelLayer<OMVoxel>(renderer);
179206
voxelComplexLayer = new OMVoxelLayer<OMVoxelComplex>(renderer);
180207
voxelTranslucentLayer = new OMVoxelLayer<OMVoxel>(renderer);
@@ -197,8 +224,11 @@ OMVoxelManager::OMVoxelManager(OMRenderer *renderer, OMRendererRenderTarget *tar
197224
translucentComplexPipeline->bindInput(2, textureAtlasSecondary);
198225
translucentComplexPipeline->bindInput(3, chunkoffs);
199226

227+
translucentTargetMS = new OMRendererTempTarget(renderer);
228+
translucentTargetMS->clearDepth = false;
229+
230+
cutoutTarget = new OMRendererTempTarget(renderer);
200231
translucentTarget = new OMRendererTempTarget(renderer);
201-
translucentTarget->clearDepth = false;
202232
}
203233
OMVoxelManager::~OMVoxelManager()
204234
{
@@ -213,6 +243,10 @@ OMVoxelManager::~OMVoxelManager()
213243
delete translucentPipeline;
214244
delete translucentComplexPipeline;
215245
delete debugPipeline;
246+
delete biltTranslucentPipeline;
247+
delete biltCutoutPipeline;
248+
delete translucentTargetMS;
249+
delete cutoutTarget;
216250
delete translucentTarget;
217251
}
218252

@@ -382,7 +416,12 @@ auto OMVoxelManager::update(basics::OMCamera &camera) -> void
382416
auto OMVoxelManager::submit(OMRendererTask *task, OMRendererTempTarget *target, OMRendererTempTarget *resolveTarget)
383417
-> OMRendererTask *
384418
{
385-
translucentTarget->constructWithDepth(target->depthTexture, renderer->getExtent(), 4);
419+
translucentTargetMS->constructWithDepth(target->depthTexture, renderer->getExtent(), 4);
420+
cutoutTarget->construct(renderer->getExtent());
421+
translucentTarget->construct(renderer->getExtent());
422+
biltCutoutPipeline->bindInput(0, cutoutTarget->colorTexture);
423+
biltTranslucentPipeline->bindInput(0, translucentTarget->colorTexture);
424+
386425
return task->target(target->target)
387426
->pipeline(pipeline)
388427
->vertexBuffer({voxelLayer->buf()->buffer})
@@ -393,15 +432,21 @@ auto OMVoxelManager::submit(OMRendererTask *task, OMRendererTempTarget *target,
393432
->pipeline(debugPipeline)
394433
->vertexBuffer({debugoffs})
395434
->drawN(2 * 12)
396-
->resolve(resolveTarget->target)
435+
->resolve(cutoutTarget->target)
397436
->clearColor(glm::vec4(0.0, 0.0, 0.0, 1.0))
398-
->target(translucentTarget->target)
437+
->target(translucentTargetMS->target)
399438
->pipeline(translucentPipeline)
400439
->vertexBuffer({voxelTranslucentLayer->buf()->buffer})
401440
->drawInstanceN(6, voxelTranslucentLayer->buf()->totalSize / sizeof(OMVoxel))
402441
->pipeline(translucentComplexPipeline)
403442
->vertexBuffer({voxelTranslucentComplexLayer->buf()->buffer})
404443
->drawInstanceN(6, voxelTranslucentComplexLayer->buf()->totalSize / sizeof(OMVoxelComplex))
444+
->resolve(translucentTarget->target)
445+
->target(resolveTarget->target)
446+
->pipeline(biltCutoutPipeline)
447+
->drawN(6)
448+
->pipeline(biltTranslucentPipeline)
449+
->drawN(6)
405450
->finishN();
406451
}
407452
} // namespace openminecraft::renderer::common::wrap

0 commit comments

Comments
 (0)