Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve line rendering on higher resolutions #682

Open
kblaschke opened this issue Jan 7, 2023 · 0 comments
Open

Improve line rendering on higher resolutions #682

kblaschke opened this issue Jan 7, 2023 · 0 comments
Milestone

Comments

@kblaschke
Copy link
Member

kblaschke commented Jan 7, 2023

Currently, projectM implements the exact same line rendering technique as Milkdrop. It renders either a single, 1px-wide line or four 1px-wide lines in a 2x2 raster for thick/bold lines. There are a few issues with the current implementation, from which Milkdrop also suffers:

  • Line anti-aliasing is not a guaranteed feature, e.g. it's basically only available on desktop platforms and if the line is only 1px wide.
  • The line with always stays the same, regardless of the rendering resolution, meaning that the higher the resolution gets, there is less and less brightness/color added to the image overall. This causes many presets to become darker or almost black on 4K+ screens, while very small resoutions will be way too bright.
  • Vulkan/Metal don't support line rendering with the optional VK_EXT_line_rasterization extension.

Ideally, line width should scale smoothly with the rendering resolution, e.g. 1px width (or 2px for thick lines) at 1000px. such lines would then render 4px/8px wide on 4K resolutions, covering about the same percentage of image pixels overall.

One feasible approach would be implementing a technique suggested by this article, which will also work fine for OpenGL and WebGL. This will also take care of line joints and end caps to look nice, e.g. shapes can use miter joints while waveforms should ideally be rendered with round joints and end caps.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Development

No branches or pull requests

1 participant