Godot Version
4.5.1
Question
Hi everyone,
I’m running into an unexpected rendering issue while using Godot’s native _draw() function on older hardware, and I’d like to understand whether this is a known limitation or something I might be doing incorrectly.
Project context
I’m developing a web-exported application in Godot 4.5.1, using the Compatibility renderer.
The project relies heavily on _draw() to render interactive 2D elements, including:
-
Draggable circular points
-
A bounding box that can be moved and scaled
-
A smile outline drawn by connecting points (curved / polyline style)
All of these elements are drawn using _draw() and respond to user input.
The issue
During testing, I noticed that on Firefox running on macOS with older Intel GPUs, some draw calls fail to appear correctly.
Tested hardware where the issue occurs:
-
Intel Iris 6100
-
Intel Iris Pro 6200
-
Both Macs reported OpenGL 4.1 INTEL-18.8.16
-
Both Firefox versions 132.0.1
On these systems:
-
The circle drawings (points) render correctly -
The bounding box outline does not render -
The smile outline (lines / curves between points) does not render as intended
The same build works correctly on:
-
Newer macOS hardware
-
Windows (multiple GPUs)
-
Other browsers and systems I’ve tested
This makes me suspect a limitation or difference in how _draw() is handled on older macOS + Firefox + Compatibility pipeline combinations.
Code snippets
Drawing the circles
func _draw():
var circle_pos = Vector2(size.x/2,size.y/2)
draw_circle(circle_pos,10,Color("404040"),true,-1,true)
draw_circle(circle_pos,8,Color("fff187"),true,-1,true)
Drawing the bounding box
func _draw() -> void:
var top_left : Vector2 = Vector2.ZERO
var top_right : Vector2 = Vector2(size.x,0)
var bot_left : Vector2 = Vector2(0,size.y)
var bot_right : Vector2 = size
#_width is 0.8
#_dash is 5.0
draw_dashed_line(top_left,top_right,_color,_width,_dash,true,true)
draw_dashed_line(top_right,bot_right,_color,_width,_dash,true,true)
draw_dashed_line(bot_right,bot_left,_color,_width,_dash,true,true)
draw_dashed_line(bot_left,top_left,_color,_width,_dash,true,true)
Drawing the dashed curve
###This is a simplified version of the code I use to draw the curve, only illustrating how I use the draw_line function.
###The function draw_dashed_polyline is called inside _draw()
func draw_dashed_polyline(points: PackedVector2Array, color: Color) -> void:
if points.size() < 2:
return
for i in range(points.size() - 1):
var from := points[i]
var to := points[i + 1]
# Dash logic simplified for illustration
var dash_start := from
var dash_end := from.lerp(to, 0.5)
# Draw dashed segment
draw_line(dash_start, dash_end, color, curve_width, true)
Expected result:

