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


Entity {
    id: lineEntity
    property int vertexCount: 2

    LineMaterial {
        id: line_material
    }
    PhongAlphaMaterial  {
        id: phong_alpha_material
        alpha: 0.5
        ambient: 'gray'
    }
    GeometryRenderer {
        id: measure_line_geometry
        primitiveType: GeometryRenderer.Lines
        geometry: Geometry {
            boundingVolumePositionAttribute: position
            attributes: [
                Attribute {
                    id: position
                    attributeType: Attribute.VertexAttribute
                    vertexBaseType: Attribute.Float
                    vertexSize: 3
                    count: lineEntity.vertexCount
                    byteOffset: 0
                    byteStride: 3 * 4 // 1 vertex (=3 coordinates) * sizeof(float)
                    name: defaultPositionAttributeName
                    buffer: lineVertexBuffer
                }
            ]
        }
        Buffer {
            id: lineVertexBuffer
            type: Buffer.VertexBuffer
            data: {
                var vertexes = new Float32Array(vertexCount * 3)
                vertexes[0] = lineEntityLoader.begin.x
                vertexes[1] = lineEntityLoader.begin.y
                vertexes[2] = lineEntityLoader.begin.z
                vertexes[3] = lineEntityLoader.end.x
                vertexes[4] = lineEntityLoader.end.y
                vertexes[5] = lineEntityLoader.end.z
                return vertexes
            }
        }
    }
    
    components: [config.IsWinGpuAmdCard()?line_material:phong_alpha_material, measure_line_geometry]
}