@@ -28,51 +28,37 @@ func XYWHTo4points(x, y, w, h, fbh float32) (x1, y1, x2, y2, x3, y3, x4, y4 floa
2828
2929// DrawImage draws an image with x, y, w, h
3030func (video * Video ) DrawImage (image uint32 , x , y , w , h float32 , scale float32 , c Color ) {
31- _ , fbh := video .Window .GetFramebufferSize ()
32- ffbh := float32 (fbh )
33-
34- w *= scale
35- h *= scale
36-
37- x1 , y1 , x2 , y2 , x3 , y3 , x4 , y4 := XYWHTo4points (x , y , w , h , ffbh )
38-
39- video .drawTextureQuad (image , x1 , y1 , x2 , y2 , x3 , y3 , x4 , y4 , c )
40- }
41-
42- // DrawQuad draws a colored quad
43- func (video * Video ) DrawQuad (x1 , y1 , x2 , y2 , x3 , y3 , x4 , y4 float32 , c Color ) {
44- video .drawTextureQuad (video .white , x1 , y1 , x2 , y2 , x3 , y3 , x4 , y4 , c )
31+ video .drawTexturedQuad (image , x , y , w , h , scale , c )
4532}
4633
4734// DrawRect draws a colored rectangle
4835func (video * Video ) DrawRect (x , y , w , h float32 , scale float32 , c Color ) {
49- _ , fbh := video .Window .GetFramebufferSize ()
50- ffbh := float32 (fbh )
51-
52- w *= scale
53- h *= scale
54-
55- x1 , y1 , x2 , y2 , x3 , y3 , x4 , y4 := XYWHTo4points (x , y , w , h , ffbh )
56-
57- video .drawTextureQuad (video .white , x1 , y1 , x2 , y2 , x3 , y3 , x4 , y4 , c )
36+ video .drawTexturedQuad (video .white , x , y , w , h , scale , c )
5837}
5938
60- // DrawBorder draws a colored rectangle border
61- func (video * Video ) DrawBorder (x , y , w , h float32 , borderWidth float32 , c Color ) {
62-
39+ func (video * Video ) vertexArray (x , y , w , h , scale float32 ) []float32 {
6340 fbw , fbh := video .Window .GetFramebufferSize ()
6441 ffbw := float32 (fbw )
6542 ffbh := float32 (fbh )
6643
44+ w *= scale
45+ h *= scale
46+
6747 x1 , y1 , x2 , y2 , x3 , y3 , x4 , y4 := XYWHTo4points (x , y , w , h , ffbh )
6848
69- var va = []float32 {
49+ return []float32 {
7050 // X, Y, U, V
7151 x1 / ffbw * 2 - 1 , y1 / ffbh * 2 - 1 , 0 , 1 , // left-bottom
7252 x2 / ffbw * 2 - 1 , y2 / ffbh * 2 - 1 , 0 , 0 , // left-top
7353 x3 / ffbw * 2 - 1 , y3 / ffbh * 2 - 1 , 1 , 1 , // right-bottom
7454 x4 / ffbw * 2 - 1 , y4 / ffbh * 2 - 1 , 1 , 0 , // right-top
7555 }
56+ }
57+
58+ // DrawBorder draws a colored rectangle border
59+ func (video * Video ) DrawBorder (x , y , w , h , borderWidth float32 , c Color ) {
60+
61+ va := video .vertexArray (x , y , w , h , 1.0 )
7662
7763 gl .UseProgram (video .borderProgram )
7864 gl .Uniform1f (gl .GetUniformLocation (video .borderProgram , gl .Str ("border_width\x00 " )), borderWidth )
@@ -90,18 +76,9 @@ func (video *Video) DrawBorder(x, y, w, h float32, borderWidth float32, c Color)
9076}
9177
9278// Draw a texture on a polygon
93- func (video * Video ) drawTextureQuad (image uint32 , x1 , y1 , x2 , y2 , x3 , y3 , x4 , y4 float32 , c Color ) {
94- fbw , fbh := video .Window .GetFramebufferSize ()
95- ffbw := float32 (fbw )
96- ffbh := float32 (fbh )
79+ func (video * Video ) drawTexturedQuad (image uint32 , x , y , w , h , scale float32 , c Color ) {
9780
98- var va = []float32 {
99- // X, Y, U, V
100- x1 / ffbw * 2 - 1 , y1 / ffbh * 2 - 1 , 0 , 1 , // left-bottom
101- x2 / ffbw * 2 - 1 , y2 / ffbh * 2 - 1 , 0 , 0 , // left-top
102- x3 / ffbw * 2 - 1 , y3 / ffbh * 2 - 1 , 1 , 1 , // right-bottom
103- x4 / ffbw * 2 - 1 , y4 / ffbh * 2 - 1 , 1 , 0 , // right-top
104- }
81+ va := video .vertexArray (x , y , w , h , scale )
10582
10683 gl .UseProgram (video .demulProgram )
10784 maskUniform := gl .GetUniformLocation (video .demulProgram , gl .Str ("mask\x00 " ))
@@ -124,19 +101,7 @@ func (video *Video) drawTextureQuad(image uint32, x1, y1, x2, y2, x3, y3, x4, y4
124101// DrawRoundedRect draws a rectangle with rounded corners
125102func (video * Video ) DrawRoundedRect (x , y , w , h , r float32 , c Color ) {
126103
127- fbw , fbh := video .Window .GetFramebufferSize ()
128- ffbw := float32 (fbw )
129- ffbh := float32 (fbh )
130-
131- x1 , y1 , x2 , y2 , x3 , y3 , x4 , y4 := XYWHTo4points (x , y , w , h , ffbh )
132-
133- var va = []float32 {
134- // X, Y, U, V
135- x1 / ffbw * 2 - 1 , y1 / ffbh * 2 - 1 , 0 , 1 , // left-bottom
136- x2 / ffbw * 2 - 1 , y2 / ffbh * 2 - 1 , 0 , 0 , // left-top
137- x3 / ffbw * 2 - 1 , y3 / ffbh * 2 - 1 , 1 , 1 , // right-bottom
138- x4 / ffbw * 2 - 1 , y4 / ffbh * 2 - 1 , 1 , 0 , // right-top
139- }
104+ va := video .vertexArray (x , y , w , h , 1.0 )
140105
141106 gl .UseProgram (video .roundedProgram )
142107 gl .Uniform4f (gl .GetUniformLocation (video .roundedProgram , gl .Str ("color\x00 " )), c .R , c .G , c .B , c .A )
@@ -156,19 +121,7 @@ func (video *Video) DrawRoundedRect(x, y, w, h, r float32, c Color) {
156121// DrawCircle draws a circle
157122func (video * Video ) DrawCircle (x , y , r float32 , c Color ) {
158123
159- fbw , fbh := video .Window .GetFramebufferSize ()
160- ffbw := float32 (fbw )
161- ffbh := float32 (fbh )
162-
163- x1 , y1 , x2 , y2 , x3 , y3 , x4 , y4 := XYWHTo4points (x - r , y - r , r * 2 , r * 2 , ffbh )
164-
165- var va = []float32 {
166- // X, Y, U, V
167- x1 / ffbw * 2 - 1 , y1 / ffbh * 2 - 1 , 0 , 1 , // left-bottom
168- x2 / ffbw * 2 - 1 , y2 / ffbh * 2 - 1 , 0 , 0 , // left-top
169- x3 / ffbw * 2 - 1 , y3 / ffbh * 2 - 1 , 1 , 1 , // right-bottom
170- x4 / ffbw * 2 - 1 , y4 / ffbh * 2 - 1 , 1 , 0 , // right-top
171- }
124+ va := video .vertexArray (x , y , r * 2 , r * 2 , 1.0 )
172125
173126 gl .UseProgram (video .circleProgram )
174127 gl .Uniform4f (gl .GetUniformLocation (video .circleProgram , gl .Str ("color\x00 " )), c .R , c .G , c .B , c .A )
0 commit comments