import QtQuick 2.14
import Qt3D.Core 2.14
import Qt3D.Render 2.14
import Qt3D.Input 2.14
import Qt3D.Extras 2.14



Material {
    property var win_amd_card: config.IsWinGpuAmdCard()

    id: pointxyziMaterialSplit
    property vector3d colorBound: Qt.vector3d( 0.1, 0.3, 0.6 )
    property var brightness: 0.0
    property var pointSize: 1.5
    property var colorMap: "file:glsl/colormap/color_picker.frag"
    property var pointlength:3
    property var positionlist: [0.1,0.3,0.6]
    property var translist:  [0.99999,0.999999,0.9999]
    property var colorlist: [Qt.vector3d(0.0,0.0,1.0),Qt.vector3d(0.0,1.0,0.0),Qt.vector3d(1.0,0.0,0.0)]
    property vector3d colorrate: Qt.vector3d( 1.0,0.0,0.0 )
    property color belowrangeColor;
    property color aboverangeColor;
   

    effect: Effect {
        id: pointxyzi_effect
        parameters: [
            Parameter { name: "xyz"; value: Qt.vector3d( 0.0, 0.0, 0.0) },
            Parameter { name: "i"; value: 1.0 },
            Parameter { name: "color_mode"; value: 2 },
            Parameter { name: "max_distance"; value: 300.0 },
            Parameter { name: "color_bound"; value: pointxyziMaterialSplit.colorBound },
            Parameter { name: "brightness"; value: pointxyziMaterialSplit.brightness },
            Parameter { name: "point_size"; value: pointxyziMaterialSplit.pointSize },
            Parameter { name: "color_list[0]"; value: pointxyziMaterialSplit.colorlist},
            Parameter { name: "trans_list[0]"; value: pointxyziMaterialSplit.translist},
            Parameter { name: "position_list[0]"; value: pointxyziMaterialSplit.positionlist},
            Parameter { name: "color_rate_bias"; value: pointxyziMaterialSplit.colorrate},
            Parameter { name: "below_color"; value: pointxyziMaterialSplit.belowrangeColor},
            Parameter { name: "above_color"; value: pointxyziMaterialSplit.aboverangeColor},
            Parameter { name: "point_length"; value: pointxyziMaterialSplit.pointlength}

        ]
        techniques: [
            Technique {
                graphicsApiFilter {
                    api: GraphicsApiFilter.OpenGL
                    profile: GraphicsApiFilter.CoreProfile
                    majorVersion: 3
                    minorVersion: 0
                }

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

                renderPasses: [
                    RenderPass {
                        shaderProgram: ShaderProgram {
                            id: pointxyziShader
                            vertexShaderCode:  loadSource((win_amd_card) ? "file:glsl/point.vert" : "file:glsl/pointxyzi.vert")
                            geometryShaderCode: { 
                                if (win_amd_card) 
                                    return loadSource("file:glsl/point.geom") 
                                else 
                                    return null
                            }
                            fragmentShaderCode: loadSource(pointxyziMaterialSplit.colorMap) + loadSource((win_amd_card) ? "file:glsl/point.frag" : "file:glsl/pointxyzi.frag")
                        }
                        renderStates: [
                            DepthTest { depthFunction: DepthTest.Less },
                            // BlendEquationArguments {
                            //     sourceRgb: BlendEquationArguments.One
                            //     destinationRgb: BlendEquationArguments.Zero
                            // },
                            PointSize {
                                sizeMode: PointSize.Fixed
                                value: pointxyziMaterialSplit.pointSize
                            },
                            
                            AlphaCoverage{}
                        ]
                    }
                ]
            }
        ]
    }
}

