import QtQuick 2.14
import QtQuick.Controls 2.14
import QtQuick.Layouts 1.14
import QtQuick.Scene3D 2.14
import Qt3D.Core 2.14
import Qt3D.Render 2.14
import Qt3D.Input 2.14
import Qt3D.Extras 2.14

Material {
    id: lineMaterial
    property double lineWidth: 1
    property vector3d colorBound: Qt.vector3d( 0.7, 0.7, 0.7 )
    property var brightness: 0.0
    property var transparency: 0.5
    effect: Effect {
        id: lineEffect
        parameters: [
            Parameter { name: "line_width"; value: lineMaterial.lineWidth },
            Parameter { name: "view_width"; value: scene3d.width },
            Parameter { name: "view_height"; value: scene3d.height },
            Parameter { name: "color_bound"; value: lineMaterial.colorBound },
            Parameter { name: "brightness"; value: lineMaterial.brightness },
            Parameter { name: "transparency"; value: lineMaterial.transparency }
        ]
        techniques: [
            Technique {
                graphicsApiFilter {
                    api: GraphicsApiFilter.OpenGL
                    profile: GraphicsApiFilter.CoreProfile
                    majorVersion: 3
                    minorVersion: 0
                }

                filterKeys: [ FilterKey { name: "renderingStyle"; value: "forward" } ]

                renderPasses: [
                    RenderPass { 
                        
                        shaderProgram: ShaderProgram {
                            vertexShaderCode: loadSource("file:glsl/line.vert")
                            geometryShaderCode: loadSource("file:glsl/line.geom")
                            fragmentShaderCode: loadSource("file:glsl/line.frag")
                        }
                        renderStates: [
                            DepthTest { depthFunction: DepthTest.Less },
                            AlphaCoverage{}
                        ]
                    }
                ]
            }
        ]
    }
}
