Skip to content

Commit 4a8db56

Browse files
visibility buffer works
1 parent 4450d83 commit 4a8db56

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

examples_tests/22.RaytracedAO/cull.comp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void main()
4545
return;
4646

4747
const mat4x3 worldMatrix = cullData[globalObjectID].worldMatrix;
48-
const uint drawID = floatBitsToUint(cullData[globalObjectID].drawID);
48+
const uint drawID = cullData[globalObjectID].drawID;
4949

5050
// clear drawcount for next buffer
5151
commandBuff[pc.data.currentCommandBufferIx^0x1u].draws[drawID].instanceCount = 0u;

examples_tests/22.RaytracedAO/dirty_source/ExtraCrap.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -411,11 +411,14 @@ Renderer::InitializationData Renderer::initSceneObjects(const SAssetBundle& mesh
411411
else
412412
{
413413
vertexInputParams.enabledAttribFlags &= 0b1101u;
414+
asset::SPrimitiveAssemblyParams assemblyParams;
415+
assemblyParams.primitiveType = oldPipeline->getPrimitiveAssemblyParams().primitiveType;
414416
asset::SRasterizationParams rasterParams;
415-
rasterParams.frontFaceIsCCW = frontFaceIsCCW;
417+
rasterParams.faceCullingMode = EFCM_NONE;
418+
rasterParams.frontFaceIsCCW = !frontFaceIsCCW; // compensate for Nabla's default camer being left handed
416419
newPipeline = core::make_smart_refctd_ptr<ICPURenderpassIndependentPipeline>(
417420
core::smart_refctd_ptr(m_visibilityBufferFillPipelineLayoutCPU), shaders, shaders + 2u,
418-
vertexInputParams, asset::SBlendParams{}, asset::SPrimitiveAssemblyParams{}, rasterParams
421+
vertexInputParams, asset::SBlendParams{}, assemblyParams, rasterParams
419422
);
420423
visibilityBufferFillPipelines.emplace(VisibilityBufferPipelineKey{ vertexInputParams,frontFaceIsCCW }, core::smart_refctd_ptr(newPipeline));
421424
}
@@ -1084,7 +1087,7 @@ void Renderer::render(irr::ITimer* timer)
10841087
{ // clear
10851088
m_driver->clearZBuffer();
10861089
uint32_t clearTriangleID[4] = {0xffffffffu,0,0,0};
1087-
m_driver->clearColorBuffer(EFAP_COLOR_ATTACHMENT2, clearTriangleID);
1090+
m_driver->clearColorBuffer(EFAP_COLOR_ATTACHMENT0, clearTriangleID);
10881091
float zero[4] = { 0.f,0.f,0.f,0.f };
10891092
m_driver->clearColorBuffer(EFAP_COLOR_ATTACHMENT1, zero);
10901093
m_driver->clearColorBuffer(EFAP_COLOR_ATTACHMENT2, zero);

include/irr/asset/IMeshManipulator.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ namespace asset
321321
if (iota)
322322
correctlyOffsetIndexBufferPtr = iotaUint32Buffer->getPointer();
323323
else
324-
correctlyOffsetIndexBufferPtr = reinterpret_cast<uint8_t*>(cpumb->getIndexBufferBinding()->buffer->getPointer())+cpumb->getIndexBufferBinding()->offset;
324+
correctlyOffsetIndexBufferPtr = cpumb->getIndices();
325325
switch (params.primitiveType)
326326
{
327327
case EPT_LINE_STRIP:
@@ -339,15 +339,16 @@ namespace asset
339339
newIndexBuffer = core::smart_refctd_ptr(iotaUint32Buffer);
340340
else if (indexType!=outIndexType)
341341
{
342-
newIndexBuffer = core::make_smart_refctd_ptr<ICPUBuffer>(sizeof(uint32_t)*indexCount);
343342
if (indexType==EIT_16BIT)
344343
{
345344
auto inPtr = reinterpret_cast<const uint16_t*>(correctlyOffsetIndexBufferPtr);
345+
newIndexBuffer = core::make_smart_refctd_ptr<ICPUBuffer>(sizeof(uint32_t)*indexCount);
346346
std::copy(inPtr,inPtr+indexCount,reinterpret_cast<uint32_t*>(newIndexBuffer->getPointer()));
347347
}
348348
else
349349
{
350350
auto inPtr = reinterpret_cast<const uint32_t*>(correctlyOffsetIndexBufferPtr);
351+
newIndexBuffer = core::make_smart_refctd_ptr<ICPUBuffer>(sizeof(uint16_t)*indexCount);
351352
std::copy(inPtr,inPtr+indexCount,reinterpret_cast<uint16_t*>(newIndexBuffer->getPointer()));
352353
}
353354
}

0 commit comments

Comments
 (0)