@@ -4,7 +4,6 @@ import org.openrndr.Extension
|
|||||||
import org.openrndr.Program
|
import org.openrndr.Program
|
||||||
import org.openrndr.color.ColorRGBa
|
import org.openrndr.color.ColorRGBa
|
||||||
import org.openrndr.draw.*
|
import org.openrndr.draw.*
|
||||||
import org.openrndr.extra.fx.blend.DestinationOut
|
|
||||||
import org.openrndr.extra.fx.blend.SourceIn
|
import org.openrndr.extra.fx.blend.SourceIn
|
||||||
import org.openrndr.extra.fx.blend.SourceOut
|
import org.openrndr.extra.fx.blend.SourceOut
|
||||||
import org.openrndr.extra.parameters.BooleanParameter
|
import org.openrndr.extra.parameters.BooleanParameter
|
||||||
@@ -140,10 +139,10 @@ open class Layer internal constructor() {
|
|||||||
val layerPost = postFilters.let { filters ->
|
val layerPost = postFilters.let { filters ->
|
||||||
val targets = postBufferCache
|
val targets = postBufferCache
|
||||||
val result = filters.foldIndexed(target.colorBuffer(0)) { i, source, filter ->
|
val result = filters.foldIndexed(target.colorBuffer(0)) { i, source, filter ->
|
||||||
val target = targets[i % targets.size]
|
val localTarget = targets[i % targets.size]
|
||||||
filter.first.apply(filter.second)
|
filter.first.apply(filter.second)
|
||||||
filter.first.apply(source, target)
|
filter.first.apply(source, localTarget)
|
||||||
target
|
localTarget
|
||||||
}
|
}
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ fun <T, R> (() -> T).watch(transducer: (T) -> R):()->R {
|
|||||||
|
|
||||||
var result = transducer(this())
|
var result = transducer(this())
|
||||||
|
|
||||||
watchers[this as () -> Any?]!!.watchers.add {
|
watchers[this]!!.watchers.add {
|
||||||
result = transducer(this())
|
result = transducer(this())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -214,7 +214,7 @@ class GUI : Extension {
|
|||||||
layout {
|
layout {
|
||||||
div("container") {
|
div("container") {
|
||||||
id = "container"
|
id = "container"
|
||||||
val header = div("toolbar") {
|
@Suppress("UNUSED_VARIABLE") val header = div("toolbar") {
|
||||||
randomizeButton = button {
|
randomizeButton = button {
|
||||||
label = "Randomize"
|
label = "Randomize"
|
||||||
clicked {
|
clicked {
|
||||||
@@ -266,7 +266,7 @@ class GUI : Extension {
|
|||||||
for ((labeledObject, binding) in trackedObjects) {
|
for ((labeledObject, binding) in trackedObjects) {
|
||||||
val (label, _) = labeledObject
|
val (label, _) = labeledObject
|
||||||
|
|
||||||
val header = h3 { label }
|
val h3Header = h3 { label }
|
||||||
val collapsible = div("compartment") {
|
val collapsible = div("compartment") {
|
||||||
for (parameter in binding.parameters) {
|
for (parameter in binding.parameters) {
|
||||||
val element = addControl(labeledObject, parameter)
|
val element = addControl(labeledObject, parameter)
|
||||||
@@ -282,10 +282,10 @@ class GUI : Extension {
|
|||||||
collapsible.classes.add(collapseClass)
|
collapsible.classes.add(collapseClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
header.mouse.pressed.listen {
|
h3Header.mouse.pressed.listen {
|
||||||
it.cancelPropagation()
|
it.cancelPropagation()
|
||||||
}
|
}
|
||||||
header.mouse.clicked.listen {
|
h3Header.mouse.clicked.listen {
|
||||||
|
|
||||||
if (KeyModifier.CTRL in it.modifiers) {
|
if (KeyModifier.CTRL in it.modifiers) {
|
||||||
collapsible.classes.remove(collapseClass)
|
collapsible.classes.remove(collapseClass)
|
||||||
|
|||||||
@@ -8,17 +8,17 @@ inline fun fbm(seed: Int, x: Double, y: Double, z: Double, w: Double, crossinlin
|
|||||||
var sum = noise(seed, x, y, z, w)
|
var sum = noise(seed, x, y, z, w)
|
||||||
var amp = 1.0
|
var amp = 1.0
|
||||||
|
|
||||||
var x = x
|
var lx = x
|
||||||
var y = y
|
var ly = y
|
||||||
var z = z
|
var lz = z
|
||||||
var w = w
|
var lw = w
|
||||||
for (i in 1 until octaves) {
|
for (i in 1 until octaves) {
|
||||||
x *= lacunarity
|
lx *= lacunarity
|
||||||
y *= lacunarity
|
ly *= lacunarity
|
||||||
z *= lacunarity
|
lz *= lacunarity
|
||||||
w *= lacunarity
|
lw *= lacunarity
|
||||||
amp *= gain
|
amp *= gain
|
||||||
sum += noise(seed + i, x, y, z, w) * amp
|
sum += noise(seed + i, lx, ly, lz, lw) * amp
|
||||||
}
|
}
|
||||||
return sum
|
return sum
|
||||||
}
|
}
|
||||||
@@ -28,15 +28,15 @@ inline fun fbm(seed: Int, x: Double, y: Double, z: Double, crossinline noise: (I
|
|||||||
var sum = noise(seed, x, y, z)
|
var sum = noise(seed, x, y, z)
|
||||||
var amp = 1.0
|
var amp = 1.0
|
||||||
|
|
||||||
var x = x
|
var lx = x
|
||||||
var y = y
|
var ly = y
|
||||||
var z = z
|
var lz = z
|
||||||
for (i in 1 until octaves) {
|
for (i in 1 until octaves) {
|
||||||
x *= lacunarity
|
lx *= lacunarity
|
||||||
y *= lacunarity
|
ly *= lacunarity
|
||||||
z *= lacunarity
|
lz *= lacunarity
|
||||||
amp *= gain
|
amp *= gain
|
||||||
sum += noise(seed + i, x, y, z) * amp
|
sum += noise(seed + i, lx, ly, lz) * amp
|
||||||
}
|
}
|
||||||
return sum
|
return sum
|
||||||
}
|
}
|
||||||
@@ -46,13 +46,13 @@ inline fun fbm(seed: Int, x: Double, y: Double, crossinline noise: (Int, Double,
|
|||||||
var sum = noise(seed, x, y)
|
var sum = noise(seed, x, y)
|
||||||
var amp = 1.0
|
var amp = 1.0
|
||||||
|
|
||||||
var x = x
|
var lx = x
|
||||||
var y = y
|
var ly = y
|
||||||
for (i in 1 until octaves) {
|
for (i in 1 until octaves) {
|
||||||
x *= lacunarity
|
lx *= lacunarity
|
||||||
y *= lacunarity
|
ly *= lacunarity
|
||||||
amp *= gain
|
amp *= gain
|
||||||
sum += noise(seed + i, x, y) * amp
|
sum += noise(seed + i, lx, ly) * amp
|
||||||
}
|
}
|
||||||
return sum
|
return sum
|
||||||
}
|
}
|
||||||
@@ -62,11 +62,11 @@ inline fun fbm(seed: Int, x: Double, crossinline noise: (Int, Double) -> Double,
|
|||||||
var sum = noise(seed, x)
|
var sum = noise(seed, x)
|
||||||
var amp = 1.0
|
var amp = 1.0
|
||||||
|
|
||||||
var x = x
|
var lx = x
|
||||||
for (i in 1 until octaves) {
|
for (i in 1 until octaves) {
|
||||||
x *= lacunarity
|
lx *= lacunarity
|
||||||
amp *= gain
|
amp *= gain
|
||||||
sum += noise(seed + i, x) * amp
|
sum += noise(seed + i, lx) * amp
|
||||||
}
|
}
|
||||||
return sum
|
return sum
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,43 +56,43 @@ fun simplex(seed: Int, x: Double, y: Double, z: Double): Double {
|
|||||||
|
|
||||||
val n0: Double
|
val n0: Double
|
||||||
run {
|
run {
|
||||||
var t = 0.6 - x0 * x0 - y0 * y0 - z0 * z0
|
var lt = 0.6 - x0 * x0 - y0 * y0 - z0 * z0
|
||||||
if (t < 0) {
|
if (lt < 0) {
|
||||||
n0 = 0.0
|
n0 = 0.0
|
||||||
} else {
|
} else {
|
||||||
t *= t
|
lt *= lt
|
||||||
n0 = t * t * gradCoord3D(seed, i, j, k, x0, y0, z0)
|
n0 = lt * lt * gradCoord3D(seed, i, j, k, x0, y0, z0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val n1: Double
|
val n1: Double
|
||||||
run {
|
run {
|
||||||
var t = 0.6 - x1 * x1 - y1 * y1 - z1 * z1
|
var lt = 0.6 - x1 * x1 - y1 * y1 - z1 * z1
|
||||||
if (t < 0) {
|
if (lt < 0) {
|
||||||
n1 = 0.0
|
n1 = 0.0
|
||||||
} else {
|
} else {
|
||||||
t *= t
|
lt *= lt
|
||||||
n1 = t * t * gradCoord3D(seed, i + i1, j + j1, k + k1, x1, y1, z1)
|
n1 = lt * lt * gradCoord3D(seed, i + i1, j + j1, k + k1, x1, y1, z1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val n2: Double
|
val n2: Double
|
||||||
run {
|
run {
|
||||||
var t = 0.6 - x2 * x2 - y2 * y2 - z2 * z2
|
var lt = 0.6 - x2 * x2 - y2 * y2 - z2 * z2
|
||||||
if (t < 0) {
|
if (lt < 0) {
|
||||||
n2 = 0.0
|
n2 = 0.0
|
||||||
} else {
|
} else {
|
||||||
t *= t
|
lt *= lt
|
||||||
n2 = t * t * gradCoord3D(seed, i + i2, j + j2, k + k2, x2, y2, z2)
|
n2 = lt * lt * gradCoord3D(seed, i + i2, j + j2, k + k2, x2, y2, z2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val n3: Double
|
val n3: Double
|
||||||
run {
|
run {
|
||||||
var t = 0.6 - x3 * x3 - y3 * y3 - z3 * z3
|
var lt = 0.6 - x3 * x3 - y3 * y3 - z3 * z3
|
||||||
if (t < 0)
|
if (lt < 0)
|
||||||
n3 = 0.0
|
n3 = 0.0
|
||||||
else {
|
else {
|
||||||
t *= t
|
lt *= lt
|
||||||
n3 = t * t * gradCoord3D(seed, i + 1, j + 1, k + 1, x3, y3, z3)
|
n3 = lt * lt * gradCoord3D(seed, i + 1, j + 1, k + 1, x3, y3, z3)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 32 * (n0 + n1 + n2 + n3)
|
return 32 * (n0 + n1 + n2 + n3)
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ internal fun evalScriptWithConfiguration(
|
|||||||
return host.eval(script.toScriptSource(), compilationConfiguration, null)
|
return host.eval(script.toScriptSource(), compilationConfiguration, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
fun <T> loadFromScriptKSH(
|
fun <T> loadFromScriptKSH(
|
||||||
script: File,
|
script: File,
|
||||||
host: BasicScriptingHost = BasicJvmScriptingHost(),
|
host: BasicScriptingHost = BasicJvmScriptingHost(),
|
||||||
|
|||||||
@@ -167,10 +167,8 @@ class Slider : Element(ElementType("slider")) {
|
|||||||
if (it.key == KEY_ENTER) {
|
if (it.key == KEY_ENTER) {
|
||||||
try {
|
try {
|
||||||
val number = NumberFormat.getInstance().parse(keyboardInput).toDouble()
|
val number = NumberFormat.getInstance().parse(keyboardInput).toDouble()
|
||||||
if (number != null) {
|
|
||||||
interactiveValue = number.coerceIn(range.min, range.max)
|
interactiveValue = number.coerceIn(range.min, range.max)
|
||||||
}
|
} catch (e: ParseException) {
|
||||||
} catch (e : ParseException) {
|
|
||||||
// -- silently (but safely) ignore the exception
|
// -- silently (but safely) ignore the exception
|
||||||
}
|
}
|
||||||
keyboardInput = ""
|
keyboardInput = ""
|
||||||
|
|||||||
@@ -81,9 +81,6 @@ abstract class TextElement(et: ElementType) : Element(et) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun TextElement.bind(property: KMutableProperty0<String>) {
|
fun TextElement.bind(property: KMutableProperty0<String>) {
|
||||||
var currentValue: Double? = null
|
|
||||||
|
|
||||||
|
|
||||||
if (root() as? Body == null) {
|
if (root() as? Body == null) {
|
||||||
throw RuntimeException("no body")
|
throw RuntimeException("no body")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,9 @@ class Matcher {
|
|||||||
Combinator.LATER_SIBLING -> if (result == MatchingResult.RESTART_FROM_CLOSEST_DESCENDANT) {
|
Combinator.LATER_SIBLING -> if (result == MatchingResult.RESTART_FROM_CLOSEST_DESCENDANT) {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
Combinator.DESCENDANT -> {
|
||||||
|
// intentionally do nothing
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ fun preprocessShader(source: String): String {
|
|||||||
"/* imported from $packageClass.$it */\n${it.get(null)}\n"
|
"/* imported from $packageClass.$it */\n${it.get(null)}\n"
|
||||||
}.joinToString("\n")
|
}.joinToString("\n")
|
||||||
} else {
|
} else {
|
||||||
var result:String? = null
|
var result:String?
|
||||||
try {
|
try {
|
||||||
val methodName = "get${fieldName.take(1).toUpperCase() + fieldName.drop(1)}"
|
val methodName = "get${fieldName.take(1).toUpperCase() + fieldName.drop(1)}"
|
||||||
result = c.getMethod(methodName).invoke(null) as String
|
result = c.getMethod(methodName).invoke(null) as String
|
||||||
|
|||||||
Reference in New Issue
Block a user