47 lines
1.1 KiB
Markdown
47 lines
1.1 KiB
Markdown
# orx-shader-phrases
|
|
|
|
A library that provides a `#pragma import` statement for shaders by using the JVM class loader.
|
|
|
|
## Usage
|
|
|
|
Given a shader source:
|
|
|
|
````glsl
|
|
#version 330
|
|
// -- this imports all phrases in Dummy
|
|
#pragma import org.openrndr.extra.shaderphrases.phrases.Dummy.*
|
|
|
|
void main() {
|
|
float a = dummy();
|
|
}
|
|
````
|
|
|
|
We can use the `preprocessShader()` function to resolve `#pragma import` statements.
|
|
|
|
```kotlin
|
|
val preprocessedSource = preprocessShader(originalSource)
|
|
```
|
|
|
|
Alternatively loading and preprocessing can be combined in a single function call.
|
|
|
|
```kotlin
|
|
val preprocessedSource = preprocessShaderFromUrl(resourceUrl("/some-shader.frag"))
|
|
```
|
|
|
|
To create importable shader phrases one creates a Kotlin class and adds the `ShaderPhrases` annotation.
|
|
For example the `dummy` phrase in our example is made available as follows:
|
|
|
|
```kotlin
|
|
// -- force the class name to be Dummy on the JVM
|
|
@file:JvmName("Dummy")
|
|
@file:ShaderPhrases
|
|
package org.openrndr.extra.shaderphrases.phrases
|
|
import org.openrndr.extra.shaderphrases.annotations.ShaderPhrases
|
|
|
|
// -- the shader phrase
|
|
const val dummy = """
|
|
float dummy() {
|
|
return 0.0;
|
|
}
|
|
"""
|
|
``` |