summaryrefslogtreecommitdiffstats
path: root/third_party/rust/wpf-gpu-raster/src/geometry_sink.rs
blob: 3282f10a1523d754182619e98f68dffb3a768793 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
use crate::aacoverage::CCoverageInterval;
use crate::nullable_ref::Ref;
use crate::types::*;

pub trait IGeometrySink
{
    //
    // Aliased geometry output
    //
/*
    virtual HRESULT AddVertex(
        __in_ecount(1) const MilPoint2F &ptPosition,
            // In: Vertex coordinates
        __out_ecount(1) WORD *pidxOut
            // Out: Index of vertex
        ) PURE;

    virtual HRESULT AddIndexedVertices(
        UINT cVertices,
            // In: number of vertices
        __in_bcount(cVertices*uVertexStride) const void *pVertexBuffer,
            // In: vertex buffer containing the vertices
        UINT uVertexStride,
            // In: size of each vertex
        MilVertexFormat mvfFormat,
            // In: format of each vertex
        UINT cIndices,
            // In: Number of indices
        __in_ecount(cIndices) const UINT *puIndexBuffer
            // In: index buffer                                                             
        ) PURE;

    virtual void SetTransformMapping(
        __in_ecount(1) const MILMatrix3x2 &mat2DTransform
        ) PURE;

    virtual HRESULT AddTriangle(
        DWORD idx1,
            // In: Index of triangle's first vertex
        DWORD idx2,
            // In: Index of triangle's second vertex
        DWORD idx3
            // In: Index of triangle's third vertex
        ) PURE;

    //
    // Trapezoidal AA geometry output
    //
*/
    fn AddComplexScan(&mut self,
        nPixelY: INT,
            // In: y coordinate in pixel space
            pIntervalSpanStart: Ref<CCoverageInterval>
            // In: coverage segments
        ) -> HRESULT;
    
    fn AddTrapezoid(
        &mut self,
        rYMin: f32,
            // In: y coordinate of top of trapezoid
        rXLeftYMin: f32,
            // In: x coordinate for top left
        rXRightYMin: f32,
            // In: x coordinate for top right
        rYMax: f32,
            // In: y coordinate of bottom of trapezoid
        rXLeftYMax: f32,
            // In: x coordinate for bottom left
        rXRightYMax: f32,
            // In: x coordinate for bottom right
        rXDeltaLeft: f32,
            // In: trapezoid expand radius
        rXDeltaRight: f32
            // In: trapezoid expand radius
        ) -> HRESULT;

    fn IsEmpty(&self) -> bool;
    /*
    virtual HRESULT AddParallelogram(
        __in_ecount(4) const MilPoint2F *rgPosition
        ) PURE;
    
    //
    // Query sink status
    //

    // Some geometry generators don't actually know if they have output
    // any triangles, so they need to get this information from the geometry sink.

    virtual BOOL IsEmpty() PURE;
*/
}