Skip to content

Commit 2681d3a

Browse files
committed
Remove geo shader for points and rectangles
1 parent d497e25 commit 2681d3a

5 files changed

Lines changed: 49 additions & 48 deletions

File tree

arcade/context.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,8 @@ def __init__(
170170
self.shape_rectangle_filled_unbuffered_program = self.load_program(
171171
vertex_shader=":system:shaders/shapes/rectangle/filled_unbuffered_vs.glsl",
172172
fragment_shader=":system:shaders/shapes/rectangle/filled_unbuffered_fs.glsl",
173-
geometry_shader=":system:shaders/shapes/rectangle/filled_unbuffered_geo.glsl",
174173
)
174+
175175
# Atlas shaders
176176
self.atlas_resize_program: Program = self.load_program(
177177
# NOTE: This is the geo shader version of the atlas resize program.
@@ -253,9 +253,36 @@ def __init__(
253253
)
254254
# rectangle filled
255255
self.shape_rectangle_filled_unbuffered_buffer = self.buffer(reserve=8)
256+
# fmt: off
256257
self.shape_rectangle_filled_unbuffered_geometry: Geometry = self.geometry(
257-
[BufferDescription(self.shape_rectangle_filled_unbuffered_buffer, "2f", ["in_vert"])]
258+
[
259+
# Instanced quad (triangle strip)
260+
BufferDescription(
261+
self.buffer(
262+
data=array(
263+
"f",
264+
[
265+
-0.5, +0.5, # Upper left
266+
-0.5, -0.5, # lower left
267+
+0.5, +0.5, # upper right
268+
+0.5, -0.5, # lower right
269+
],
270+
)
271+
),
272+
"2f",
273+
["in_vert"],
274+
),
275+
# Per instance data
276+
BufferDescription(
277+
self.shape_rectangle_filled_unbuffered_buffer,
278+
"2f",
279+
["in_instance_pos"],
280+
instanced=True
281+
),
282+
],
283+
mode=self.TRIANGLE_STRIP,
258284
)
285+
# fmt: on
259286
self.geometry_empty: Geometry = self.geometry()
260287

261288
self._atlas: TextureAtlasBase | None = None

arcade/draw/point.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ def draw_points(point_list: Point2List, color: RGBOrA255, size: float = 1.0) ->
6868

6969
# Resize buffer
7070
data_size = num_points * 8
71-
# if data_size > buffer.size:
7271
buffer.orphan(size=data_size)
7372

7473
ctx.enable(ctx.BLEND)
@@ -79,6 +78,6 @@ def draw_points(point_list: Point2List, color: RGBOrA255, size: float = 1.0) ->
7978
buffer.write(data=point_array)
8079

8180
# Only render the # of points we have complete data for
82-
geometry.render(program, mode=ctx.POINTS, vertices=data_size // 8)
81+
geometry.render(program, instances=num_points)
8382

8483
ctx.disable(ctx.BLEND)

arcade/draw/rect.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ def draw_rect_filled(rect: Rect, color: RGBOrA255, tilt_angle: float = 0) -> Non
395395
buffer.orphan()
396396
buffer.write(data=array.array("f", (rect.x, rect.y)))
397397

398-
geometry.render(program, mode=ctx.POINTS, vertices=1)
398+
geometry.render(program, instances=1)
399399

400400
ctx.disable(ctx.BLEND)
401401

arcade/resources/system/shaders/shapes/rectangle/filled_unbuffered_geo.glsl

Lines changed: 0 additions & 42 deletions
This file was deleted.
Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,24 @@
11
#version 330
22

3+
uniform WindowBlock {
4+
mat4 projection;
5+
mat4 view;
6+
} window;
7+
8+
// [w, h, tilt]
9+
uniform vec3 shape;
10+
311
in vec2 in_vert;
12+
in vec2 in_instance_pos;
413

514
void main() {
6-
gl_Position = vec4(in_vert, 0.0, 1.0);
15+
float angle = radians(shape.z);
16+
mat2 rot = mat2(
17+
cos(angle), -sin(angle),
18+
sin(angle), cos(angle)
19+
);
20+
// vec2 size = shape.xy / 2.0;
21+
mat4 mvp = window.projection * window.view;
22+
vec2 pos = in_instance_pos + (in_vert * shape.xy);
23+
gl_Position = mvp * vec4(rot * pos, 0.0, 1.0);
724
}

0 commit comments

Comments
 (0)