85 lines
2.9 KiB
Kotlin
85 lines
2.9 KiB
Kotlin
import org.amshove.kluent.*
|
|
import org.openrndr.extra.glslify.preprocessGlslify
|
|
import org.openrndr.extra.glslify.preprocessGlslifyFromUrl
|
|
import org.openrndr.resourceUrl
|
|
import org.spekframework.spek2.Spek
|
|
import org.spekframework.spek2.style.specification.describe
|
|
|
|
const val glslifyPath = "src/test/resources/glslify"
|
|
|
|
object TestGlslify : Spek({
|
|
describe("glslify") {
|
|
describe("should download shader with full path") {
|
|
val shader = """#version 330
|
|
#pragma glslify: perlin = require(glsl-noise/classic/3d)
|
|
"""
|
|
val processed = preprocessGlslify(shader, glslifyPath = glslifyPath)
|
|
|
|
processed `should contain` "float perlin(vec3 P)"
|
|
}
|
|
|
|
describe("should download shader with just the module's name") {
|
|
val shader = """#version 330
|
|
#pragma glslify: luma = require(glsl-luma)
|
|
"""
|
|
val processed = preprocessGlslify(shader, glslifyPath = glslifyPath)
|
|
|
|
processed `should contain` "float luma(vec4 color)"
|
|
}
|
|
|
|
describe("throws exception when the import doesn't lead to a shader file") {
|
|
invoking {
|
|
val shader = """#version 330
|
|
#pragma glslify: perlin = require(glsl-noise)
|
|
"""
|
|
preprocessGlslify(shader, glslifyPath = glslifyPath)
|
|
} `should throw` RuntimeException::class `with message`
|
|
("[glslify] glsl-noise: index doesn't lead to any shader file")
|
|
}
|
|
}
|
|
|
|
describe("preprocessGlslify") {
|
|
describe("should import everything in order + write naming") {
|
|
val url = resourceUrl("/a.glsl")
|
|
val processed = preprocessGlslifyFromUrl(url, glslifyPath = glslifyPath)
|
|
|
|
processed shouldContainAll listOf(
|
|
"float add(float a, float b)",
|
|
"float multiply(float a, float b)",
|
|
"float equation(float a, float b)",
|
|
"float luminance(vec3 color)",
|
|
"void main()"
|
|
)
|
|
}
|
|
|
|
describe("should import complex") {
|
|
val url = resourceUrl("/complex.glsl")
|
|
val processed = preprocessGlslifyFromUrl(url, glslifyPath = glslifyPath)
|
|
|
|
processed shouldContainAll listOf(
|
|
"float checker(vec2 uv, float repeats)",
|
|
"float noise3d(vec3 P)",
|
|
"float easing(float t)",
|
|
"void main()"
|
|
)
|
|
}
|
|
|
|
describe("should import only once") {
|
|
val shader = """#version 330
|
|
#pragma glslify: luma = require(glsl-luma)
|
|
#pragma glslify: luma = require(glsl-luma)
|
|
#pragma glslify: luma = require(glsl-luma)
|
|
"""
|
|
val processed = preprocessGlslify(shader, glslifyPath = glslifyPath).trimEnd()
|
|
|
|
processed shouldBeEqualTo """#version 330
|
|
float luma(vec3 color) {
|
|
return dot(color, vec3(0.299, 0.587, 0.114));
|
|
}
|
|
|
|
float luma(vec4 color) {
|
|
return dot(color.rgb, vec3(0.299, 0.587, 0.114));
|
|
}"""
|
|
}
|
|
}
|
|
}) |