Skip to content

Commit

Permalink
fix debugView UBO data for native custom pipeline (#16218)
Browse files Browse the repository at this point in the history
  • Loading branch information
troublemaker52025 authored Sep 8, 2023
1 parent 4c7d2ce commit 3c0aaf5
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 56 deletions.
41 changes: 22 additions & 19 deletions cocos/rendering/pipeline-ubo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import { builtinResMgr } from '../asset/asset-manager/builtin-res-mgr';
import { Texture2D } from '../asset/assets';
import { DebugViewCompositeType } from './debug-view';
import { getDescBindingFromName } from './custom/define';
import { Root } from '../root';

const _matShadowView = new Mat4();
const _matShadowProj = new Mat4();
Expand All @@ -47,7 +48,7 @@ const _tempVec3 = new Vec3();
export class PipelineUBO {
public static updateGlobalUBOView (window: RenderWindow, bufferView: Float32Array): void {
const director = cclegacy.director;
const root = director.root;
const root = director.root as Root;
const fv = bufferView;

const shadingWidth = Math.floor(window.width);
Expand Down Expand Up @@ -75,19 +76,21 @@ export class PipelineUBO {
}

const debugView = root.debugView;
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET] = debugView.singleMode as number;

for (let i = 1; i <= 3; i++) {
for (let i = 0; i <= 3; i++) {
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET + i] = 0.0;
}
for (let i = DebugViewCompositeType.DIRECT_DIFFUSE as number; i < DebugViewCompositeType.MAX_BIT_COUNT; i++) {
const offset = i >> 3;
const bit = i % 8;
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET + 1 + offset] += (debugView.isCompositeModeEnabled(i) ? 1.0 : 0.0) * (10.0 ** bit);
}
if (debugView.isEnabled()) {
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET] = debugView.singleMode as number;

for (let i = DebugViewCompositeType.DIRECT_DIFFUSE as number; i < (DebugViewCompositeType.MAX_BIT_COUNT as unknown as number); i++) {
const offset = i >> 3;
const bit = i % 8;
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET + 1 + offset] += (debugView.isCompositeModeEnabled(i) ? 1.0 : 0.0) * (10.0 ** bit);
}

fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET + 3] += (debugView.lightingWithAlbedo ? 1.0 : 0.0) * (10.0 ** 6.0);
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET + 3] += (debugView.csmLayerColoration ? 1.0 : 0.0) * (10.0 ** 7.0);
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET + 3] += (debugView.lightingWithAlbedo ? 1.0 : 0.0) * (10.0 ** 6.0);
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET + 3] += (debugView.csmLayerColoration ? 1.0 : 0.0) * (10.0 ** 7.0);
}
}

public static updateCameraUBOView (
Expand All @@ -96,7 +99,7 @@ export class PipelineUBO {
camera: Camera,
): void {
const scene = camera.scene ? camera.scene : cclegacy.director.getScene().renderScene;
const mainLight = scene.mainLight;
const mainLight = scene.mainLight as DirectionalLight;
const sceneData = pipeline.pipelineSceneData;
const ambient = sceneData.ambient;
const skybox = sceneData.skybox;
Expand Down Expand Up @@ -339,9 +342,9 @@ export class PipelineUBO {
if (shadowInfo.type === ShadowType.ShadowMap) {
let near = 0.1;
let far = 0;
let matShadowView;
let matShadowProj;
let matShadowViewProj;
let matShadowView: Mat4;
let matShadowProj: Mat4;
let matShadowViewProj: Mat4;
let levelCount = 0;
if (mainLight.shadowFixedArea || mainLight.csmLevel === CSMLevel.LEVEL_1 || !csmSupported) {
matShadowView = csmLayers.specialLayer.matShadowView;
Expand Down Expand Up @@ -403,10 +406,10 @@ export class PipelineUBO {

Mat4.perspective(
_matShadowProj,
(light as any).angle,
spotLight.angle,
1.0,
0.001,
(light as any).range,
spotLight.range,
true,
cap.clipSpaceMinZ,
cap.clipSpaceSignY,
Expand Down Expand Up @@ -564,6 +567,6 @@ export class PipelineUBO {
}
}

public destroy (): void {
}
// eslint-disable-next-line @typescript-eslint/no-empty-function
public destroy (): void {}
}
54 changes: 17 additions & 37 deletions native/cocos/renderer/pipeline/custom/NativeBuiltinUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,10 @@ namespace cc {
namespace render {

void setupQuadVertexBuffer(gfx::Device &device, const Vec4 &viewport, float vbData[16]) {
auto minX = static_cast<float>(viewport.x);
auto maxX = static_cast<float>(viewport.x + viewport.z);
auto minY = static_cast<float>(viewport.y);
auto maxY = static_cast<float>(viewport.y + viewport.w);
const float minX = viewport.x;
const float maxX = viewport.x + viewport.z;
float minY = viewport.y;
float maxY = viewport.y + viewport.w;
if (device.getCapabilities().screenSpaceSignY > 0) {
std::swap(minY, maxY);
}
Expand Down Expand Up @@ -87,43 +87,23 @@ void updateRasterPassConstants(uint32_t width, uint32_t height, Setter &setter)
setter.setVec4(
"cc_nativeSize",
Vec4(shadingWidth, shadingHeight, 1.0F / shadingWidth, 1.0F / shadingHeight));
#if 0

const auto *debugView = root.getDebugView();
if (debugView) {
setter.setVec4(
"cc_debug_view_mode",
Vec4(static_cast<float>(debugView->getSingleMode()),
debugView->isLightingWithAlbedo() ? 1.0F : 0.0F,
debugView->isCsmLayerColoration() ? 1.0F : 0.0F,
0.0F));
Vec4 debugPackVec{};
for (auto i = static_cast<uint32_t>(pipeline::DebugViewCompositeType::DIRECT_DIFFUSE);
i < static_cast<uint32_t>(pipeline::DebugViewCompositeType::MAX_BIT_COUNT); ++i) {
const auto idx = i % 4;
(&debugPackVec.x)[idx] = debugView->isCompositeModeEnabled(i) ? 1.0F : 0.0F;
const auto packIdx = static_cast<uint32_t>(floor(static_cast<float>(i) / 4.0F));
if (idx == 3) {
std::string name("cc_debug_view_composite_pack_");
name.append(std::to_string(packIdx + 1));
setter.setVec4(name, debugPackVec);
}
}
} else {
setter.setVec4("cc_debug_view_mode", Vec4(0.0F, 1.0F, 0.0F, 0.0F));
Vec4 debugPackVec{};
float debugViewData[4] = {0.0F, 0.0F, 0.0F, 0.0F};
if (debugView && debugView->isEnabled()) {
debugViewData[0] = static_cast<float>(debugView->getSingleMode());
for (auto i = static_cast<uint32_t>(pipeline::DebugViewCompositeType::DIRECT_DIFFUSE);
i < static_cast<uint32_t>(pipeline::DebugViewCompositeType::MAX_BIT_COUNT); ++i) {
const auto idx = i % 4;
(&debugPackVec.x)[idx] = 1.0F;
const auto packIdx = static_cast<uint32_t>(floor(i / 4.0));
if (idx == 3) {
std::string name("cc_debug_view_composite_pack_");
name.append(std::to_string(packIdx + 1));
setter.setVec4(name, debugPackVec);
}
const uint32_t offset = i >> 3;
const uint32_t bit = i % 8;
debugViewData[1 + offset] += (debugView->isCompositeModeEnabled(i) ? 1.0F : 0.0F) * powf(10.0F, static_cast<float>(bit));
}
debugViewData[3] += (debugView->isLightingWithAlbedo() ? 1.0F : 0.0F) * powf(10.0F, static_cast<float>(6));
debugViewData[3] += (debugView->isCsmLayerColoration() ? 1.0F : 0.0F) * powf(10.0F, static_cast<float>(7));
}
#endif
setter.setVec4(
"cc_debug_view_mode",
Vec4(debugViewData[0], debugViewData[1], debugViewData[2], debugViewData[3]));
}

namespace {
Expand Down Expand Up @@ -373,7 +353,7 @@ void setShadowUBOView(
}
}
} else {
Vec3 tempVec3 = shadowInfo.getNormal().getNormalized();
const Vec3 tempVec3 = shadowInfo.getNormal().getNormalized();
setVec4Impl(data, layoutGraph,
"cc_planarNDInfo",
Vec4(tempVec3.x, tempVec3.y, tempVec3.z, -shadowInfo.getDistance()));
Expand Down

0 comments on commit 3c0aaf5

Please sign in to comment.