• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

vispy / vispy / 19958508322
75%

Build:
DEFAULT BRANCH: main
Ran 05 Dec 2025 09:27AM UTC
Jobs 4
Files 345
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

05 Dec 2025 09:24AM UTC coverage: 75.021% (+0.1%) from 74.903%
19958508322

push

github

web-flow
Updated Markers visual: instanced rendering and canvas size limits (#2701)

# Summary
This PR adds an optional `method` parameter to the `Markers` visual that
enables instanced rendering of markers using quads instead of
`GL_POINTS`. This works around platform-specific point size limitations
while maintaining full backward compatibility. Many OpenGL
implementations (macOS in particular) limit `GL_POINTS` to a maximum
size (often 64px or less), which prevents rendering large markers.
Applications like napari need to render markers at arbitrary sizes, and
exhibit inconsistent behavior across platforms. Instanced rendering
using quads allows for arbitrarily large markers where instanced
rendering is supported (most modern desktop hardware and operating
systems).

This is intended to fix #2078 

*Note: `method='instanced'` requires `vispy.use(gl="gl+")`, I'm not sure
how much of a limitation this is.*

## Changes
- Implemented instanced rendering using quads with per-instance
attributes
- Added `method` parameter to `Markers.__init__()` with options
`'points'` (default) or `'instanced'`
- Uses templates to share the bulk of the shader code between both
methods
- Both methods support all existing features: symbols, colors, edges,
scaling, spherical lighting
- Refactored `set_data()` to reduce complexity from 21 to 3
- Added an example to demonstrate the behavior changes, and validate the
appearance/performance of the new method

### New feature: Canvas size clamping
- Added `canvas_size_limits` property to clamp marker sizes in screen
pixels
- Eliminates need for downstream shader monkey-patching in napari
- Optional feature that works with both rendering methods, allowing
controlled consistent behavior across platforms (mimic the "aliasing"
effect on macOS with `GL_POINTS` in a predictable way)

## Testing & Backward Compatibility
The change is intended to be fully backward compatible, with the default
behavior unchanged. Marker tests are now parametrized... (continued)

5915 of 10670 branches covered (55.44%)

189 of 192 new or added lines in 2 files covered. (98.44%)

24348 of 32455 relevant lines covered (75.02%)

2.46 hits per line

New Missed Lines in Diff

Lines Coverage ∆ File
3
92.83
2.58% vispy/visuals/markers.py
Jobs
ID Job ID Ran Files Coverage
1 run-2 - 19958508322.1 05 Dec 2025 09:38AM UTC 345
74.26
2 run-3 - 19958508322.2 05 Dec 2025 09:38AM UTC 345
52.0
3 run-4 - 19958508322.3 05 Dec 2025 09:38AM UTC 345
72.58
4 run-1 - 19958508322.4 05 Dec 2025 09:38AM UTC 345
46.95
Source Files on build 19958508322
  • Tree
  • List 345
  • Changed 5
  • Source Changed 0
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • ebccac38 on github
  • Prev Build on main (#19731777862)
  • Next Build on main (#20023344087)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc