3 releases

0.1.2 Mar 13, 2024
0.1.1 Mar 12, 2024
0.1.0 Mar 12, 2024

#712 in Graphics APIs

Download history 32/week @ 2024-07-28 5/week @ 2024-09-22

75 downloads per month

GPL-3.0-or-later

14MB
35K SLoC

Pascal 15K SLoC // 0.1% comments C++ 11K SLoC // 0.1% comments Visual Studio Project 7.5K SLoC Rust 1K SLoC // 0.0% comments Visual Studio Solution 264 SLoC Xcode Config 20 SLoC // 0.3% comments

FFGL in Rust

FFGL (Resolume & VDMX plugin) framework for rust.

Screenshot

Support

  • ! Currently Macos only
    • Wouldn't require too much to get working on windows, someone just needs to test and create the build script
  • FFGL 2 (resolume)
  • VDMX 5

Please get in contact with me at dev@edt.nz if you have any questions!

Functionality

  • Logging inside resolume
  • Handy scripts to build and run inside resolume
  • Example ISF plugin
    • Give an input ISF file and output an FFGL plugin
    • Quicker than using Wire for basic ISF shaders
  • Buildtime error for invalid ISF code
  • GLSL translation

Usage

ISF Example

The following command will take an ISF file, compile it to a plugin and deploy it to the system plugin folder. It is a good example of the steps required to make a plugin work.

example_isf/deploy_isf.sh <isf_file>

There also a bulk version of the script that will deploy all the ISF files in the example_isf folder and some from the system ISF directory. example_isf/bulk_deploy_isf.sh

Commands

Deploy

Once a plugin has been built, it needs to be deployed to the system FFGL directory. On macos, it needs to be packaged as a 'Bundle' (A fancy folder). deploy_bundle.sh <output_lib_name>

Run

./resolume.sh or ./vdmx.sh

Change log level

I have integrated tracing into the plugin. To change the log level you can set the RUST_LOG environment variable. For example to set the log level to trace you can run

RUST_LOG=trace ./resolume.sh

Extending

ffgl-core

You can create your own plugin from scratch by either using the SimpleFFGLInstance trait, or implement both the FFGLHandler and FFGLInstance traits.

You must call the ffgl_handler!() macro to associate your plugin with the correct entry points.

ffgl-glium

Use this to create a glium instance while inside an ffgl plugin

ffgl-isf

Use this to create an isf plugin. Needs more work to be modular.

Future work

  • Get working on Windows
  • Embed any linked photos into the dylib along with the ISf source
  • Handle multiple passes ✔️
  • Label inputs
  • String inputs

Aims

I want a simple wrapper to make plugins for VJ programs such as resolume and present the user a basic GL context that can be used however you want for fun &advanced FX/Sources. This could be a good starting point for other connections (Connect to a touchdesigner instance that can automatically pause and swap between COMPs)

Dependencies

~11–29MB
~390K SLoC