Files
orx/orx-jvm/orx-dnk3/src/main/kotlin/Material.kt
2024-06-24 10:02:34 +02:00

62 lines
1.9 KiB
Kotlin

package org.openrndr.extra.dnk3
import org.openrndr.draw.Cubemap
import org.openrndr.draw.RenderTarget
import org.openrndr.draw.ShadeStyle
import org.openrndr.draw.shadeStyle
import org.openrndr.extra.dnk3.features.IrradianceSH
interface Material {
val name: String?
var doubleSided: Boolean
var transparent: Boolean
val fragmentID: Int
fun generateShadeStyle(context: MaterialContext, primitiveContext: PrimitiveContext): ShadeStyle
fun applyToShadeStyle(context: MaterialContext, shadeStyle: ShadeStyle)
}
class DummyMaterial : Material {
override var name: String? = null
override var doubleSided: Boolean = true
override var transparent: Boolean = false
override var fragmentID = 0
override fun generateShadeStyle(context: MaterialContext, primitiveContext: PrimitiveContext): ShadeStyle {
return shadeStyle {
fragmentPreamble = """
int f_fragmentID = p_fragmentID;
""".trimIndent()
fragmentTransform = """
x_fill.rgb = vec3(normalize(v_viewNormal).z);
""".trimIndent()
parameter("fragmentID", fragmentID)
}
}
override fun applyToShadeStyle(context: MaterialContext, shadeStyle: ShadeStyle) {
}
}
data class MaterialContext(val pass: RenderPass,
val lights: List<NodeContent<Light>>,
val fogs: List<NodeContent<Fog>>,
val shadowMaps: Map<ShadowLight, RenderTarget>,
val meshCubemaps: Map<Mesh, Cubemap>,
val irradianceProbeCount: Int
) {
var irradianceSH: IrradianceSH? = null
}
@JvmRecord
data class PrimitiveContext(val hasNormalAttribute: Boolean, val hasSkinning: Boolean)
@JvmRecord
data class ContextKey(val materialContext: MaterialContext, val primitiveContext: PrimitiveContext)