Revision control
Copy as Markdown
// Copyright (C) 2026 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Test for QTBUG-145057: PrincipledMaterial with a normalMap, alphaMode=Mask,
// OpaquePrePassDepthDraw, shadows, and IBL — switching to DebugSettings.Normals
// caused a shader compile crash ('qt_tangent' undeclared identifier).
// The Normal debug mode only set needsWorldNormal, but normal map sampling also
// requires tangent/binormal for the TBN matrix.
import QtQuick
import QtQuick3D
import QtQuick3D.Helpers
Rectangle {
width: 400
height: 400
color: "black"
View3D {
anchors.fill: parent
renderMode: View3D.Offscreen
environment: SceneEnvironment {
backgroundMode: SceneEnvironment.SkyBox
lightProbe: Texture {
textureData: ProceduralSkyTextureData {}
}
debugSettings: DebugSettings {
materialOverride: DebugSettings.Normals
}
}
DirectionalLight {
brightness: 1.5
eulerRotation.x: -40
eulerRotation.y: 45
castsShadow: true
}
camera: PerspectiveCamera {
id: camera
z: 350
}
Texture {
id: normalTex
source: "../shared/maps/RibsNormal.png"
}
Texture {
id: baseTex
source: "../shared/maps/oulu_2.jpeg"
}
// PrincipledMaterial with normalMap + alphaMode=Mask + OpaquePrePassDepthDraw:
// the exact combination that triggered QTBUG-145057 when debug Normals was active.
Model {
source: "#Sphere"
position: Qt.vector3d(-100, 0, 0)
scale: Qt.vector3d(0.8, 0.8, 0.8)
materials: PrincipledMaterial {
baseColorMap: baseTex
normalMap: normalTex
roughness: 0.8
alphaMode: PrincipledMaterial.Mask
depthDrawMode: PrincipledMaterial.OpaquePrePassDepthDraw
}
}
// Control: same setup without a normal map
Model {
source: "#Sphere"
position: Qt.vector3d(100, 0, 0)
scale: Qt.vector3d(0.8, 0.8, 0.8)
materials: PrincipledMaterial {
baseColorMap: baseTex
roughness: 0.8
alphaMode: PrincipledMaterial.Mask
depthDrawMode: PrincipledMaterial.OpaquePrePassDepthDraw
}
}
}
}