/
transforms.go
48 lines (36 loc) · 1.26 KB
/
transforms.go
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
package texture
import "github.com/rajveermalviya/go-webgpu/wgpu"
func (t *Texture) FlipVertical() {
t.flipVertical = !t.flipVertical
t.updateFlipBuffer()
}
func (t *Texture) FlipHorizontal() {
t.flipHorizontal = !t.flipHorizontal
t.updateFlipBuffer()
}
func (t *Texture) SetDefaultClip() {
t.SetClipRect(0, 0, t.originalWidth, t.originalHeight)
}
func (t *Texture) SetClipRect(minX, minY, maxX, maxY float32) {
t.clipRect = [4]float32{
minX / t.originalWidth,
minY / t.originalHeight,
maxX / t.originalWidth,
maxY / t.originalHeight,
}
t.Device.GetQueue().WriteBuffer(t.clipBuffer, 0, wgpu.ToBytes(t.clipRect[:]))
}
func (t *Texture) GetCurrentSize() (float32, float32) {
scaleX := t.Transform.Matrix[0]
scaleY := t.Transform.Matrix[5]
currentWidth := t.originalWidth * scaleX
currentHeight := t.originalHeight * scaleY
return currentWidth, currentHeight
}
func (t *Texture) GetCurrentClipSize() (float32, float32) {
scaleX := t.Transform.Matrix[0]
scaleY := t.Transform.Matrix[5]
clipWidth := ((t.clipRect[2] * t.originalWidth) - (t.clipRect[0] * t.originalWidth)) * scaleX
clipHeight := ((t.clipRect[3] * t.originalHeight) - (t.clipRect[1] * t.originalHeight)) * scaleY
return clipWidth, clipHeight
}