Files
orx/orx-glslify/src/test/kotlin/TestGlslify.kt
2020-03-09 11:00:05 +01:00

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));
}"""
}
}
})