Revision control

+ // Copyright (C) 2026 The Qt Company Ltd.
+ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+ // An AugmentMaterial pass over a CustomMaterial.
+ //
+ // The augmentation is folded into the custom material's shader path key, and
+ // that key is also emitted as the "//Shader name -" comment of the generated
+ // shader. An augment shader is always more than one line long -- the license
+ // header alone sees to that -- so appending it to the key verbatim used to
+ // push everything after its first line out of the comment and into the shader
+ // as stray code, which then failed to compile.
+ //
+ // The material paints itself red and the augment shader overrides that with
+ // green, so a sphere that is not green means the augmentation never ran.
+
+ import QtQuick
+ import QtQuick3D
+ import QtQuick3D.Helpers
+
+ Item {
+ id: root
+ width: 400
+ height: 400
+
+ View3D {
+ anchors.fill: parent
+ renderOverrides: View3D.DisableInternalPasses
+
+ environment: SceneEnvironment {
+ backgroundMode: SceneEnvironment.Color
+ clearColor: "black"
+ tonemapMode: SceneEnvironment.TonemapModeNone
+ }
+
+ PerspectiveCamera {
+ position: Qt.vector3d(0, 0, 300)
+ }
+
+ RenderPassTexture {
+ id: outputTex
+ format: RenderPassTexture.RGBA8
+ }
+
+ RenderPass {
+ id: mainPass
+ materialMode: RenderPass.AugmentMaterial
+ augmentShader: "augment_custom_material_augment.glsl"
+ clearColor: "black"
+
+ commands: [
+ ColorAttachment { target: outputTex },
+ DepthStencilAttachment {}
+ ]
+ }
+
+ SimpleQuadRenderer {
+ texture: Texture {
+ textureProvider: RenderOutputProvider {
+ textureSource: RenderOutputProvider.UserPassTexture
+ renderPass: mainPass
+ attachmentSelector: RenderOutputProvider.Attachment0
+ }
+ }
+ }
+
+ Model {
+ source: "#Sphere"
+ scale: Qt.vector3d(3, 3, 3)
+ materials: CustomMaterial {
+ fragmentShader: "augment_custom_material_material.frag"
+ }
+ }
+ }
+ }