projectM-visualizer / projectM-visualizer/projectm
[FEATURE] Add Vulkan/Metal rendering support
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 4.5k
- Forks
- 485
- Avg merge
- 3d 7h
- Merged PRs (30d)
- 5
Description
Currently, libprojectM only supports rendering using OpenGL 3 and GLES 2. Since OpenGL is generally considered a deprecated API and Vulkan/Metal has a better API to perform multi-threaded rendering and shader compilation, it will be a good step forward to add support for these next-gen rendering APIs.
Any API-specific initialization calls, e.g. providing the required Vulkan structs, should be implemented in a specific header, e.g. libprojectM/renderer_vulkan.h. Adding support for multiple rendering backends will also require a major refactoring of the library, abstracting rendering-related calls. projectM only renders a few primitives (triangle fans/strips, line strips and points) and uses vertex and fragment shader programs, so there's not much to implement.
Line rendering should be improved beforehand, as covered by issue #682.
Vulkan support should be introduced together with the EGL migration covered by issue #681.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing the existing OpenGL 3 and GLES 2 rendering paths, then read the proposed libprojectM/renderer_vulkan.h interface and the related issues #681 and #682. Done means adding Vulkan and Metal rendering support while accommodating the EGL migration and the prerequisite line-rendering improvements.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- computer-graphics
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100