Remove orx-glslify
This commit is contained in:
@@ -20,7 +20,6 @@ librealsense = "2.53.1-1.5.9"
|
||||
gson = "2.10.1"
|
||||
antlr = "4.13.0"
|
||||
tensorflow = "0.5.0"
|
||||
jarchivelib = "1.2.0"
|
||||
minim = "2.2.2"
|
||||
netty = "4.1.92.Final"
|
||||
rabbitcontrol = "0.3.29"
|
||||
@@ -60,7 +59,6 @@ tensorflow = { group = "org.tensorflow", name = "tensorflow-core-api", version.r
|
||||
boofcv = { group = "org.boofcv", name = "boofcv-core", version.ref = "boofcv" }
|
||||
libfreenect = { group = "org.bytedeco", name = "libfreenect", version.ref = "libfreenect" }
|
||||
librealsense = { group = "org.bytedeco", name = "librealsense2", version.ref = "librealsense" }
|
||||
jarchivelib = { group = "org.rauschig", name = "jarchivelib", version.ref = "jarchivelib" }
|
||||
minim = { group = "net.compartmental.code", name = "minim", version.ref = "minim" }
|
||||
netty-all = { group = "io.netty", name = "netty-all", version.ref = "netty" }
|
||||
rabbitcontrol-rcp = { group = "cc.rabbitcontrol", name = "rcp", version.ref = "rabbitcontrol" }
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
# orx-glslify
|
||||
|
||||
Load glslify compatible shaders from [npm](https://www.npmjs.com/search?q=glslify).
|
||||
|
||||
### Caveats
|
||||
|
||||
There's also a mapping functionality that glslify provides that we don't support. This can be easily solved
|
||||
by doing as the following example (based on `glsl-raytrace` package):
|
||||
|
||||
```glsl
|
||||
const int steps = 50;
|
||||
vec2 map(vec3 p);
|
||||
|
||||
#pragma glslify: raytrace = require(glsl-raytrace)
|
||||
```
|
||||
|
||||
## Example
|
||||
|
||||
Shader file:
|
||||
|
||||
```glsl
|
||||
#version 330
|
||||
|
||||
in vec2 v_texCoord0;
|
||||
|
||||
uniform sampler2D tex0;
|
||||
uniform float uTime;
|
||||
|
||||
out vec4 o_color;
|
||||
|
||||
#pragma glslify: checker = require(glsl-checker)
|
||||
#pragma glslify: perlin = require(glsl-noise/classic/3d)
|
||||
#pragma glslify: easing = require(glsl-easings/cubic-in-out)
|
||||
|
||||
void main() {
|
||||
vec2 uv = v_texCoord0;
|
||||
float n = perlin(vec3(uv * 2.5 + uTime * 0.01, uTime * 0.2)) * 0.5 + 0.5;
|
||||
|
||||
float patt = checker(uv * easing(n), 6.0);
|
||||
|
||||
vec3 col = mix(vec3(0.173, 0.216, 0.278),vec3(0.792, 0.282, 0.478), vec3(patt)) * (n + 0.1);
|
||||
|
||||
o_color = vec4(col, 1.0);
|
||||
}
|
||||
```
|
||||
|
||||
Then preprocess it with either:
|
||||
|
||||
```kotlin
|
||||
preprocessGlslifyFromUrl(resourceUrl("/shaders/ray-marching.glsl"))
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```kotlin
|
||||
preprocessGlslify("""version #330 ...""")
|
||||
```
|
||||
@@ -1,21 +0,0 @@
|
||||
plugins {
|
||||
org.openrndr.extra.convention.`kotlin-jvm`
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(libs.openrndr.application)
|
||||
implementation(libs.openrndr.math)
|
||||
implementation(libs.gson)
|
||||
implementation(libs.jarchivelib)
|
||||
implementation(project(":orx-noise"))
|
||||
testImplementation(libs.kluent)
|
||||
testImplementation(libs.spek.dsl)
|
||||
testRuntimeOnly(libs.spek.junit5)
|
||||
testRuntimeOnly(libs.kotlin.reflect)
|
||||
}
|
||||
|
||||
tasks.test {
|
||||
useJUnitPlatform {
|
||||
includeEngines("spek2")
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
package org.openrndr.extra.glslify
|
||||
|
||||
import org.rauschig.jarchivelib.Archiver
|
||||
import org.rauschig.jarchivelib.ArchiverFactory
|
||||
import java.io.File
|
||||
import java.io.InputStream
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
import java.nio.file.Paths
|
||||
|
||||
internal fun extractGzipStream(tarStream: InputStream, dest: File) {
|
||||
val archiver: Archiver = ArchiverFactory.createArchiver("tar", "gz")
|
||||
|
||||
archiver.extract(tarStream, dest)
|
||||
}
|
||||
|
||||
internal fun moveFilesUp(modulePath: Path) {
|
||||
val packageFolder = modulePath.resolve("package")
|
||||
|
||||
val packageFiles = Files.list(packageFolder).filter {
|
||||
Files.isDirectory(it) || shaderExtensions.contains(it.fileName.toString().substringAfterLast("."))
|
||||
}
|
||||
|
||||
packageFiles.forEach {
|
||||
// fileName also retrieves folders ¯\_(ツ)_/¯
|
||||
val dest = modulePath.resolve(modulePath.relativize(it).fileName)
|
||||
Files.move(it, dest)
|
||||
}
|
||||
}
|
||||
|
||||
internal fun parseModule(module: String): Pair<String, Path> {
|
||||
val path = Paths.get(module)
|
||||
val pathLen = path.nameCount
|
||||
val moduleName = path.subpath(0, 1).toString()
|
||||
var shaderPath = Paths.get("index")
|
||||
|
||||
if (pathLen > 1) {
|
||||
shaderPath = path.subpath(1, pathLen)
|
||||
}
|
||||
|
||||
return Pair(moduleName, shaderPath)
|
||||
}
|
||||
@@ -1,182 +0,0 @@
|
||||
package org.openrndr.extra.glslify
|
||||
|
||||
import mu.KotlinLogging
|
||||
import org.openrndr.draw.codeFromURL
|
||||
import java.io.ByteArrayInputStream
|
||||
import java.io.InputStream
|
||||
import java.net.URL
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
import java.nio.file.Paths
|
||||
import javax.net.ssl.HttpsURLConnection
|
||||
import kotlin.streams.toList
|
||||
|
||||
internal const val BASE_URL = "https://registry.npmjs.org"
|
||||
internal const val IMPORT_PATT = """#pragma\sglslify:\s([\w]+).*\s=\s*require\('?([\w\-\\/]+).*'?\)$"""
|
||||
internal const val IMPORT_RELATIVE_PATT = """#pragma\sglslify:\s([\w]+).*\s=\s*require\('?(\./[\w\-\\/]+).*'?\)$"""
|
||||
internal const val EXPORT_PATT = """#pragma\sglslify:\s*export\(([\w\-]+)\)"""
|
||||
internal const val PRAGMA_IDENTIFIER = "#pragma glslify"
|
||||
|
||||
internal val shaderExtensions = arrayOf("glsl", "frag")
|
||||
|
||||
internal val logger = KotlinLogging.logger {}
|
||||
|
||||
private var importTree = mutableSetOf<String>()
|
||||
|
||||
fun preprocessGlslifyFromUrl(url: String, glslifyPath: String = "src/main/resources/glslify"): String {
|
||||
return preprocessGlslify(codeFromURL(url), glslifyPath)
|
||||
}
|
||||
|
||||
data class GlslifyModule(
|
||||
val requirePath: String,
|
||||
val functionName: String,
|
||||
val lineNumber: Int
|
||||
) {
|
||||
private var shaderFile: MutableList<String> = mutableListOf()
|
||||
|
||||
lateinit var moduleName: String
|
||||
lateinit var shaderFilePath: Path
|
||||
|
||||
var exportName: String? = null
|
||||
|
||||
private val dependencies = mutableListOf<GlslifyModule>()
|
||||
|
||||
fun import(glslifyPath: String): String {
|
||||
val parsed = parseModule(requirePath)
|
||||
|
||||
moduleName = parsed.first
|
||||
shaderFilePath = parsed.second
|
||||
|
||||
val importPath = Paths.get(glslifyPath).resolve(moduleName)
|
||||
|
||||
shaderFile = glslifyImport(moduleName, importPath, shaderFilePath)
|
||||
|
||||
dependencies.asReversed().map {
|
||||
shaderFile[it.lineNumber] = it.import(glslifyPath)
|
||||
}
|
||||
|
||||
var shader = shaderFile.joinToString("\n")
|
||||
|
||||
if (exportName != null) {
|
||||
shader = shader.replace(exportName!!, functionName)
|
||||
}
|
||||
|
||||
return shader.trimMargin()
|
||||
}
|
||||
|
||||
private fun glslifyImport(moduleName: String, moduleDir: Path, shaderPath: Path): MutableList<String> {
|
||||
if (!Files.exists(moduleDir)) {
|
||||
fetchModule(moduleName, moduleDir)
|
||||
} else {
|
||||
logger.trace("[glslify] $moduleName already exists.. Skipping download")
|
||||
}
|
||||
|
||||
val shaderFile: Path
|
||||
|
||||
try {
|
||||
shaderFile = shaderExtensions.map {
|
||||
moduleDir.resolve("$shaderPath.$it")
|
||||
}.first { Files.exists(it) }
|
||||
} catch (ex: NoSuchElementException) {
|
||||
throw error("[glslify] $moduleName: $shaderPath doesn't lead to any shader file")
|
||||
}
|
||||
|
||||
return Files.lines(shaderFile).toList().mapIndexed { dependencyLineNumber, line ->
|
||||
if (line.startsWith(PRAGMA_IDENTIFIER)) {
|
||||
Regex(IMPORT_PATT).find(line)?.let {
|
||||
val functionName = it.groupValues[1]
|
||||
val dependencyRequirePath = it.groupValues[2]
|
||||
|
||||
if (importTree.contains(dependencyRequirePath)) return@mapIndexed ""
|
||||
|
||||
importTree.add(dependencyRequirePath)
|
||||
|
||||
dependencies.add(GlslifyModule(dependencyRequirePath, functionName, dependencyLineNumber))
|
||||
}
|
||||
|
||||
Regex(IMPORT_RELATIVE_PATT).find(line)?.let {
|
||||
val functionName = it.groupValues[1]
|
||||
val dependencyRequirePath = it.groupValues[2]
|
||||
|
||||
if (importTree.contains(dependencyRequirePath)) return@mapIndexed ""
|
||||
|
||||
importTree.add(dependencyRequirePath)
|
||||
|
||||
val dependency = moduleDir.fileName.resolve(Paths.get(dependencyRequirePath).normalize()).toString()
|
||||
|
||||
dependencies.add(GlslifyModule(dependency, functionName, dependencyLineNumber))
|
||||
}
|
||||
|
||||
Regex(EXPORT_PATT).find(line)?.let {
|
||||
if (it.groupValues.size > 1) {
|
||||
exportName = it.groupValues[1]
|
||||
}
|
||||
|
||||
return@mapIndexed ""
|
||||
}
|
||||
}
|
||||
|
||||
line
|
||||
}.toMutableList()
|
||||
}
|
||||
}
|
||||
|
||||
internal val stack = mutableListOf<GlslifyModule>()
|
||||
|
||||
fun preprocessGlslify(source: String, glslifyPath: String = "src/main/resources/glslify"): String {
|
||||
importTree = mutableSetOf()
|
||||
|
||||
stack.clear()
|
||||
|
||||
val mainShader = source.split("\n").mapIndexed { lineNumber, line ->
|
||||
if (line.trimStart().startsWith(PRAGMA_IDENTIFIER)) {
|
||||
Regex(IMPORT_PATT).find(line)?.let {
|
||||
if (it.groupValues.size > 1) {
|
||||
val functionName = it.groupValues[1]
|
||||
val requirePath = it.groupValues[2]
|
||||
|
||||
if (importTree.contains(requirePath)) return@mapIndexed ""
|
||||
|
||||
importTree.add(requirePath)
|
||||
|
||||
stack.add(GlslifyModule(requirePath, functionName, lineNumber))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
line
|
||||
}.toMutableList()
|
||||
|
||||
stack.asReversed().forEach {
|
||||
mainShader[it.lineNumber] = it.import(glslifyPath)
|
||||
}
|
||||
|
||||
return mainShader.joinToString("\n").trimMargin()
|
||||
}
|
||||
|
||||
internal fun fetchModule(moduleName: String, moduleDir: Path) {
|
||||
val packageUrl = getPackageUrl(moduleName)
|
||||
|
||||
if (packageUrl.isNullOrEmpty()) {
|
||||
throw error("[glslify] $moduleName not found")
|
||||
}
|
||||
|
||||
try {
|
||||
Files.createDirectories(moduleDir)
|
||||
|
||||
val url = URL(packageUrl)
|
||||
val con = url.openConnection()
|
||||
val tarStream: InputStream = ByteArrayInputStream(con.getInputStream().readBytes())
|
||||
|
||||
extractGzipStream(tarStream, moduleDir.toFile())
|
||||
|
||||
moveFilesUp(moduleDir)
|
||||
|
||||
moduleDir.resolve("package").toFile().deleteRecursively()
|
||||
|
||||
logger.trace("[glslify] $moduleName downloaded")
|
||||
(con as HttpsURLConnection).disconnect()
|
||||
} catch (ex: Exception) {
|
||||
logger.error(ex) { "[glslify]: There was an error getting $moduleName" }
|
||||
}
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
package org.openrndr.extra.glslify
|
||||
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import java.net.URL
|
||||
import javax.net.ssl.HttpsURLConnection
|
||||
|
||||
|
||||
internal data class NPMPackageDist(
|
||||
val shasum: String,
|
||||
val tarball: String
|
||||
)
|
||||
|
||||
internal data class NPMPackageVersion(
|
||||
val name: String,
|
||||
val version: String,
|
||||
val dist: NPMPackageDist
|
||||
)
|
||||
|
||||
internal data class NPMResponse(
|
||||
val name: String?,
|
||||
val error: String?,
|
||||
@SerializedName("dist-tags")
|
||||
val distTags: MutableMap<String, String>?,
|
||||
val versions: Map<String, NPMPackageVersion>?
|
||||
)
|
||||
|
||||
internal fun getPackageUrl(module: String): String? {
|
||||
val moduleUrl = "$BASE_URL/$module"
|
||||
|
||||
val url = URL(moduleUrl)
|
||||
|
||||
val con = url.openConnection() as HttpsURLConnection
|
||||
con.setRequestProperty("Accept", "application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8")
|
||||
|
||||
val json = String(con.inputStream.readBytes())
|
||||
val gson = GsonBuilder().create()
|
||||
|
||||
val npmResponse = gson.fromJson(json, NPMResponse::class.java)
|
||||
|
||||
if (npmResponse.error != null) {
|
||||
return null
|
||||
}
|
||||
|
||||
return npmResponse.distTags?.let {
|
||||
val latest = it["latest"]
|
||||
|
||||
npmResponse.versions?.get(latest)?.dist?.tarball
|
||||
}
|
||||
}
|
||||
@@ -1,99 +0,0 @@
|
||||
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)
|
||||
println(processed)
|
||||
processed shouldContainAll listOf(
|
||||
"float add(float a, float b)",
|
||||
"float multiply(float a, float b)",
|
||||
"float equation(float a, float b)",
|
||||
"float subtract(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));
|
||||
}"""
|
||||
}
|
||||
|
||||
describe("should import multiple from same package") {
|
||||
val shader = """#version 330
|
||||
#pragma glslify: snoise = require(glsl-noise/simplex/2d)
|
||||
#pragma glslify: cnoise = require(glsl-noise/classic/2d)
|
||||
"""
|
||||
val processed = preprocessGlslify(shader, glslifyPath = glslifyPath)
|
||||
|
||||
processed shouldContainAll listOf(
|
||||
"float snoise(vec2 v)",
|
||||
"float cnoise(vec2 P)"
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -1,27 +0,0 @@
|
||||
#version 330
|
||||
|
||||
float add(float a, float b) {
|
||||
return a + b;
|
||||
}
|
||||
|
||||
float multiply(float a, float b) {
|
||||
return a * b;
|
||||
}
|
||||
|
||||
|
||||
float equation(float a, float b) {
|
||||
return multiply(add(a, b), b);
|
||||
}
|
||||
|
||||
float luminance(vec3 color) {
|
||||
return dot(color, vec3(0.299, 0.587, 0.114));
|
||||
}
|
||||
|
||||
float luminance(vec4 color) {
|
||||
return dot(color.rgb, vec3(0.299, 0.587, 0.114));
|
||||
}
|
||||
|
||||
|
||||
void main() {
|
||||
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
#version 330
|
||||
|
||||
#pragma glslify: equation = require(solve)
|
||||
#pragma glslify: luminance = require(glsl-luma)
|
||||
|
||||
void main() {
|
||||
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
#version 330
|
||||
|
||||
#pragma glslify: checker = require(glsl-checker, foo = bar)
|
||||
#pragma glslify: noise3d = require('glsl-noise/classic/3d')
|
||||
#pragma glslify: easing = require('glsl-easings/cubic-in-out')
|
||||
|
||||
void main() {
|
||||
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
float checker(vec2 uv, float repeats) {
|
||||
float cx = floor(repeats * uv.x);
|
||||
float cy = floor(repeats * uv.y);
|
||||
float result = mod(cx + cy, 2.0);
|
||||
return sign(result);
|
||||
}
|
||||
|
||||
#pragma glslify: export(checker)
|
||||
@@ -1,17 +0,0 @@
|
||||
#ifndef PI
|
||||
#define PI 3.141592653589793
|
||||
#endif
|
||||
|
||||
float backOut(float t) {
|
||||
float f = t < 0.5
|
||||
? 2.0 * t
|
||||
: 1.0 - (2.0 * t - 1.0);
|
||||
|
||||
float g = pow(f, 3.0) - f * sin(f * PI);
|
||||
|
||||
return t < 0.5
|
||||
? 0.5 * g
|
||||
: 0.5 * (1.0 - g) + 0.5;
|
||||
}
|
||||
|
||||
#pragma glslify: export(backOut)
|
||||
@@ -1,9 +0,0 @@
|
||||
#ifndef PI
|
||||
#define PI 3.141592653589793
|
||||
#endif
|
||||
|
||||
float backIn(float t) {
|
||||
return pow(t, 3.0) - t * sin(t * PI);
|
||||
}
|
||||
|
||||
#pragma glslify: export(backIn)
|
||||
@@ -1,10 +0,0 @@
|
||||
#ifndef PI
|
||||
#define PI 3.141592653589793
|
||||
#endif
|
||||
|
||||
float backOut(float t) {
|
||||
float f = 1.0 - t;
|
||||
return 1.0 - (pow(f, 3.0) - f * sin(f * PI));
|
||||
}
|
||||
|
||||
#pragma glslify: export(backOut)
|
||||
@@ -1,11 +0,0 @@
|
||||
#pragma glslify: bounceOut = require(./bounce-out)
|
||||
|
||||
float bounceInOut(float t) {
|
||||
return t < 0.5
|
||||
? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0))
|
||||
: 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma glslify: export(bounceInOut)
|
||||
@@ -1,7 +0,0 @@
|
||||
#pragma glslify: bounceOut = require(./bounce-out)
|
||||
|
||||
float bounceIn(float t) {
|
||||
return 1.0 - bounceOut(1.0 - t);
|
||||
}
|
||||
|
||||
#pragma glslify: export(bounceIn)
|
||||
@@ -1,25 +0,0 @@
|
||||
#ifndef PI
|
||||
#define PI 3.141592653589793
|
||||
#endif
|
||||
|
||||
float bounceOut(float t) {
|
||||
const float a = 4.0 / 11.0;
|
||||
const float b = 8.0 / 11.0;
|
||||
const float c = 9.0 / 10.0;
|
||||
|
||||
const float ca = 4356.0 / 361.0;
|
||||
const float cb = 35442.0 / 1805.0;
|
||||
const float cc = 16061.0 / 1805.0;
|
||||
|
||||
float t2 = t * t;
|
||||
|
||||
return t < a
|
||||
? 7.5625 * t2
|
||||
: t < b
|
||||
? 9.075 * t2 - 9.9 * t + 3.4
|
||||
: t < c
|
||||
? ca * t2 - cb * t + cc
|
||||
: 10.8 * t * t - 20.52 * t + 10.72;
|
||||
}
|
||||
|
||||
#pragma glslify: export(bounceOut)
|
||||
@@ -1,7 +0,0 @@
|
||||
float circularInOut(float t) {
|
||||
return t < 0.5
|
||||
? 0.5 * (1.0 - sqrt(1.0 - 4.0 * t * t))
|
||||
: 0.5 * (sqrt((3.0 - 2.0 * t) * (2.0 * t - 1.0)) + 1.0);
|
||||
}
|
||||
|
||||
#pragma glslify: export(circularInOut)
|
||||
@@ -1,5 +0,0 @@
|
||||
float circularIn(float t) {
|
||||
return 1.0 - sqrt(1.0 - t * t);
|
||||
}
|
||||
|
||||
#pragma glslify: export(circularIn)
|
||||
@@ -1,5 +0,0 @@
|
||||
float circularOut(float t) {
|
||||
return sqrt((2.0 - t) * t);
|
||||
}
|
||||
|
||||
#pragma glslify: export(circularOut)
|
||||
@@ -1,7 +0,0 @@
|
||||
float cubicInOut(float t) {
|
||||
return t < 0.5
|
||||
? 4.0 * t * t * t
|
||||
: 0.5 * pow(2.0 * t - 2.0, 3.0) + 1.0;
|
||||
}
|
||||
|
||||
#pragma glslify: export(cubicInOut)
|
||||
@@ -1,5 +0,0 @@
|
||||
float cubicIn(float t) {
|
||||
return t * t * t;
|
||||
}
|
||||
|
||||
#pragma glslify: export(cubicIn)
|
||||
@@ -1,6 +0,0 @@
|
||||
float cubicOut(float t) {
|
||||
float f = t - 1.0;
|
||||
return f * f * f + 1.0;
|
||||
}
|
||||
|
||||
#pragma glslify: export(cubicOut)
|
||||
@@ -1,11 +0,0 @@
|
||||
#ifndef HALF_PI
|
||||
#define HALF_PI 1.5707963267948966
|
||||
#endif
|
||||
|
||||
float elasticInOut(float t) {
|
||||
return t < 0.5
|
||||
? 0.5 * sin(+13.0 * HALF_PI * 2.0 * t) * pow(2.0, 10.0 * (2.0 * t - 1.0))
|
||||
: 0.5 * sin(-13.0 * HALF_PI * ((2.0 * t - 1.0) + 1.0)) * pow(2.0, -10.0 * (2.0 * t - 1.0)) + 1.0;
|
||||
}
|
||||
|
||||
#pragma glslify: export(elasticInOut)
|
||||
@@ -1,9 +0,0 @@
|
||||
#ifndef HALF_PI
|
||||
#define HALF_PI 1.5707963267948966
|
||||
#endif
|
||||
|
||||
float elasticIn(float t) {
|
||||
return sin(13.0 * t * HALF_PI) * pow(2.0, 10.0 * (t - 1.0));
|
||||
}
|
||||
|
||||
#pragma glslify: export(elasticIn)
|
||||
@@ -1,9 +0,0 @@
|
||||
#ifndef HALF_PI
|
||||
#define HALF_PI 1.5707963267948966
|
||||
#endif
|
||||
|
||||
float elasticOut(float t) {
|
||||
return sin(-13.0 * (t + 1.0) * HALF_PI) * pow(2.0, -10.0 * t) + 1.0;
|
||||
}
|
||||
|
||||
#pragma glslify: export(elasticOut)
|
||||
@@ -1,9 +0,0 @@
|
||||
float exponentialInOut(float t) {
|
||||
return t == 0.0 || t == 1.0
|
||||
? t
|
||||
: t < 0.5
|
||||
? +0.5 * pow(2.0, (20.0 * t) - 10.0)
|
||||
: -0.5 * pow(2.0, 10.0 - (t * 20.0)) + 1.0;
|
||||
}
|
||||
|
||||
#pragma glslify: export(exponentialInOut)
|
||||
@@ -1,5 +0,0 @@
|
||||
float exponentialIn(float t) {
|
||||
return t == 0.0 ? t : pow(2.0, 10.0 * (t - 1.0));
|
||||
}
|
||||
|
||||
#pragma glslify: export(exponentialIn)
|
||||
@@ -1,5 +0,0 @@
|
||||
float exponentialOut(float t) {
|
||||
return t == 1.0 ? t : 1.0 - pow(2.0, -10.0 * t);
|
||||
}
|
||||
|
||||
#pragma glslify: export(exponentialOut)
|
||||
@@ -1,5 +0,0 @@
|
||||
float linear(float t) {
|
||||
return t;
|
||||
}
|
||||
|
||||
#pragma glslify: export(linear)
|
||||
@@ -1,6 +0,0 @@
|
||||
float quadraticInOut(float t) {
|
||||
float p = 2.0 * t * t;
|
||||
return t < 0.5 ? p : -p + (4.0 * t) - 1.0;
|
||||
}
|
||||
|
||||
#pragma glslify: export(quadraticInOut)
|
||||
@@ -1,5 +0,0 @@
|
||||
float quadraticIn(float t) {
|
||||
return t * t;
|
||||
}
|
||||
|
||||
#pragma glslify: export(quadraticIn)
|
||||
@@ -1,5 +0,0 @@
|
||||
float quadraticOut(float t) {
|
||||
return -t * (t - 2.0);
|
||||
}
|
||||
|
||||
#pragma glslify: export(quadraticOut)
|
||||
@@ -1,7 +0,0 @@
|
||||
float quarticInOut(float t) {
|
||||
return t < 0.5
|
||||
? +8.0 * pow(t, 4.0)
|
||||
: -8.0 * pow(t - 1.0, 4.0) + 1.0;
|
||||
}
|
||||
|
||||
#pragma glslify: export(quarticInOut)
|
||||
@@ -1,5 +0,0 @@
|
||||
float quarticIn(float t) {
|
||||
return pow(t, 4.0);
|
||||
}
|
||||
|
||||
#pragma glslify: export(quarticIn)
|
||||
@@ -1,5 +0,0 @@
|
||||
float quarticOut(float t) {
|
||||
return pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;
|
||||
}
|
||||
|
||||
#pragma glslify: export(quarticOut)
|
||||
@@ -1,7 +0,0 @@
|
||||
float qinticInOut(float t) {
|
||||
return t < 0.5
|
||||
? +16.0 * pow(t, 5.0)
|
||||
: -0.5 * pow(2.0 * t - 2.0, 5.0) + 1.0;
|
||||
}
|
||||
|
||||
#pragma glslify: export(qinticInOut)
|
||||
@@ -1,5 +0,0 @@
|
||||
float qinticIn(float t) {
|
||||
return pow(t, 5.0);
|
||||
}
|
||||
|
||||
#pragma glslify: export(qinticIn)
|
||||
@@ -1,5 +0,0 @@
|
||||
float qinticOut(float t) {
|
||||
return 1.0 - (pow(t - 1.0, 5.0));
|
||||
}
|
||||
|
||||
#pragma glslify: export(qinticOut)
|
||||
@@ -1,9 +0,0 @@
|
||||
#ifndef PI
|
||||
#define PI 3.141592653589793
|
||||
#endif
|
||||
|
||||
float sineInOut(float t) {
|
||||
return -0.5 * (cos(PI * t) - 1.0);
|
||||
}
|
||||
|
||||
#pragma glslify: export(sineInOut)
|
||||
@@ -1,9 +0,0 @@
|
||||
#ifndef HALF_PI
|
||||
#define HALF_PI 1.5707963267948966
|
||||
#endif
|
||||
|
||||
float sineIn(float t) {
|
||||
return sin((t - 1.0) * HALF_PI) + 1.0;
|
||||
}
|
||||
|
||||
#pragma glslify: export(sineIn)
|
||||
@@ -1,9 +0,0 @@
|
||||
#ifndef HALF_PI
|
||||
#define HALF_PI 1.5707963267948966
|
||||
#endif
|
||||
|
||||
float sineOut(float t) {
|
||||
return sin(t * HALF_PI);
|
||||
}
|
||||
|
||||
#pragma glslify: export(sineOut)
|
||||
@@ -1,13 +0,0 @@
|
||||
precision mediump float;
|
||||
|
||||
uniform sampler2D uTexture;
|
||||
varying vec2 vUv;
|
||||
|
||||
#pragma glslify: luma = require(../)
|
||||
|
||||
void main() {
|
||||
vec4 color = texture2D(uTexture, vUv);
|
||||
float brightness = luma(color);
|
||||
|
||||
gl_FragColor = vec4(vec3(brightness), 1.0);
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
var canvas = document.body.appendChild(document.createElement('canvas'))
|
||||
var triangle = require('a-big-triangle')
|
||||
var createContext = require('gl-context')
|
||||
var createTex2d = require('gl-texture2d')
|
||||
var glslify = require('glslify')
|
||||
var createShell = require('gl-now')
|
||||
var lena = require('lena')
|
||||
|
||||
canvas.width = 512
|
||||
canvas.height = 512
|
||||
|
||||
var gl = createContext(canvas, render)
|
||||
var tex = createTex2d(gl, lena)
|
||||
var shader = glslify({
|
||||
vert: './index.vert'
|
||||
, frag: './index.frag'
|
||||
})(gl)
|
||||
|
||||
function render() {
|
||||
shader.bind()
|
||||
shader.uniforms.uTexture = tex.bind(0)
|
||||
triangle(gl)
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
precision mediump float;
|
||||
|
||||
attribute vec2 position;
|
||||
varying vec2 vUv;
|
||||
|
||||
void main() {
|
||||
vUv = (position + vec2(1.0)) / 2.0;
|
||||
vUv.y = 1.0 - vUv.y;
|
||||
gl_Position = vec4(position, 1.0, 1.0);
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
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));
|
||||
}
|
||||
|
||||
#pragma glslify: export(luma)
|
||||
@@ -1,74 +0,0 @@
|
||||
//
|
||||
// GLSL textureless classic 2D noise "cnoise",
|
||||
// with an RSL-style periodic variant "pnoise".
|
||||
// Author: Stefan Gustavson (stefan.gustavson@liu.se)
|
||||
// Version: 2011-08-22
|
||||
//
|
||||
// Many thanks to Ian McEwan of Ashima Arts for the
|
||||
// ideas for permutation and gradient selection.
|
||||
//
|
||||
// Copyright (c) 2011 Stefan Gustavson. All rights reserved.
|
||||
// Distributed under the MIT license. See LICENSE file.
|
||||
// https://github.com/ashima/webgl-noise
|
||||
//
|
||||
|
||||
vec4 mod289(vec4 x)
|
||||
{
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
vec4 permute(vec4 x)
|
||||
{
|
||||
return mod289(((x*34.0)+1.0)*x);
|
||||
}
|
||||
|
||||
vec4 taylorInvSqrt(vec4 r)
|
||||
{
|
||||
return 1.79284291400159 - 0.85373472095314 * r;
|
||||
}
|
||||
|
||||
vec2 fade(vec2 t) {
|
||||
return t*t*t*(t*(t*6.0-15.0)+10.0);
|
||||
}
|
||||
|
||||
// Classic Perlin noise
|
||||
float cnoise(vec2 P)
|
||||
{
|
||||
vec4 Pi = floor(P.xyxy) + vec4(0.0, 0.0, 1.0, 1.0);
|
||||
vec4 Pf = fract(P.xyxy) - vec4(0.0, 0.0, 1.0, 1.0);
|
||||
Pi = mod289(Pi); // To avoid truncation effects in permutation
|
||||
vec4 ix = Pi.xzxz;
|
||||
vec4 iy = Pi.yyww;
|
||||
vec4 fx = Pf.xzxz;
|
||||
vec4 fy = Pf.yyww;
|
||||
|
||||
vec4 i = permute(permute(ix) + iy);
|
||||
|
||||
vec4 gx = fract(i * (1.0 / 41.0)) * 2.0 - 1.0 ;
|
||||
vec4 gy = abs(gx) - 0.5 ;
|
||||
vec4 tx = floor(gx + 0.5);
|
||||
gx = gx - tx;
|
||||
|
||||
vec2 g00 = vec2(gx.x,gy.x);
|
||||
vec2 g10 = vec2(gx.y,gy.y);
|
||||
vec2 g01 = vec2(gx.z,gy.z);
|
||||
vec2 g11 = vec2(gx.w,gy.w);
|
||||
|
||||
vec4 norm = taylorInvSqrt(vec4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));
|
||||
g00 *= norm.x;
|
||||
g01 *= norm.y;
|
||||
g10 *= norm.z;
|
||||
g11 *= norm.w;
|
||||
|
||||
float n00 = dot(g00, vec2(fx.x, fy.x));
|
||||
float n10 = dot(g10, vec2(fx.y, fy.y));
|
||||
float n01 = dot(g01, vec2(fx.z, fy.z));
|
||||
float n11 = dot(g11, vec2(fx.w, fy.w));
|
||||
|
||||
vec2 fade_xy = fade(Pf.xy);
|
||||
vec2 n_x = mix(vec2(n00, n01), vec2(n10, n11), fade_xy.x);
|
||||
float n_xy = mix(n_x.x, n_x.y, fade_xy.y);
|
||||
return 2.3 * n_xy;
|
||||
}
|
||||
|
||||
#pragma glslify: export(cnoise)
|
||||
@@ -1,109 +0,0 @@
|
||||
//
|
||||
// GLSL textureless classic 3D noise "cnoise",
|
||||
// with an RSL-style periodic variant "pnoise".
|
||||
// Author: Stefan Gustavson (stefan.gustavson@liu.se)
|
||||
// Version: 2011-10-11
|
||||
//
|
||||
// Many thanks to Ian McEwan of Ashima Arts for the
|
||||
// ideas for permutation and gradient selection.
|
||||
//
|
||||
// Copyright (c) 2011 Stefan Gustavson. All rights reserved.
|
||||
// Distributed under the MIT license. See LICENSE file.
|
||||
// https://github.com/ashima/webgl-noise
|
||||
//
|
||||
|
||||
vec3 mod289(vec3 x)
|
||||
{
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
vec4 mod289(vec4 x)
|
||||
{
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
vec4 permute(vec4 x)
|
||||
{
|
||||
return mod289(((x*34.0)+1.0)*x);
|
||||
}
|
||||
|
||||
vec4 taylorInvSqrt(vec4 r)
|
||||
{
|
||||
return 1.79284291400159 - 0.85373472095314 * r;
|
||||
}
|
||||
|
||||
vec3 fade(vec3 t) {
|
||||
return t*t*t*(t*(t*6.0-15.0)+10.0);
|
||||
}
|
||||
|
||||
// Classic Perlin noise
|
||||
float cnoise(vec3 P)
|
||||
{
|
||||
vec3 Pi0 = floor(P); // Integer part for indexing
|
||||
vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1
|
||||
Pi0 = mod289(Pi0);
|
||||
Pi1 = mod289(Pi1);
|
||||
vec3 Pf0 = fract(P); // Fractional part for interpolation
|
||||
vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0
|
||||
vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
|
||||
vec4 iy = vec4(Pi0.yy, Pi1.yy);
|
||||
vec4 iz0 = Pi0.zzzz;
|
||||
vec4 iz1 = Pi1.zzzz;
|
||||
|
||||
vec4 ixy = permute(permute(ix) + iy);
|
||||
vec4 ixy0 = permute(ixy + iz0);
|
||||
vec4 ixy1 = permute(ixy + iz1);
|
||||
|
||||
vec4 gx0 = ixy0 * (1.0 / 7.0);
|
||||
vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;
|
||||
gx0 = fract(gx0);
|
||||
vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);
|
||||
vec4 sz0 = step(gz0, vec4(0.0));
|
||||
gx0 -= sz0 * (step(0.0, gx0) - 0.5);
|
||||
gy0 -= sz0 * (step(0.0, gy0) - 0.5);
|
||||
|
||||
vec4 gx1 = ixy1 * (1.0 / 7.0);
|
||||
vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;
|
||||
gx1 = fract(gx1);
|
||||
vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);
|
||||
vec4 sz1 = step(gz1, vec4(0.0));
|
||||
gx1 -= sz1 * (step(0.0, gx1) - 0.5);
|
||||
gy1 -= sz1 * (step(0.0, gy1) - 0.5);
|
||||
|
||||
vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);
|
||||
vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);
|
||||
vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);
|
||||
vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);
|
||||
vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);
|
||||
vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);
|
||||
vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);
|
||||
vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);
|
||||
|
||||
vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));
|
||||
g000 *= norm0.x;
|
||||
g010 *= norm0.y;
|
||||
g100 *= norm0.z;
|
||||
g110 *= norm0.w;
|
||||
vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));
|
||||
g001 *= norm1.x;
|
||||
g011 *= norm1.y;
|
||||
g101 *= norm1.z;
|
||||
g111 *= norm1.w;
|
||||
|
||||
float n000 = dot(g000, Pf0);
|
||||
float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));
|
||||
float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));
|
||||
float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));
|
||||
float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));
|
||||
float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));
|
||||
float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));
|
||||
float n111 = dot(g111, Pf1);
|
||||
|
||||
vec3 fade_xyz = fade(Pf0);
|
||||
vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);
|
||||
vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);
|
||||
float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);
|
||||
return 2.2 * n_xyz;
|
||||
}
|
||||
|
||||
#pragma glslify: export(cnoise)
|
||||
@@ -1,169 +0,0 @@
|
||||
//
|
||||
// GLSL textureless classic 4D noise "cnoise",
|
||||
// with an RSL-style periodic variant "pnoise".
|
||||
// Author: Stefan Gustavson (stefan.gustavson@liu.se)
|
||||
// Version: 2011-08-22
|
||||
//
|
||||
// Many thanks to Ian McEwan of Ashima Arts for the
|
||||
// ideas for permutation and gradient selection.
|
||||
//
|
||||
// Copyright (c) 2011 Stefan Gustavson. All rights reserved.
|
||||
// Distributed under the MIT license. See LICENSE file.
|
||||
// https://github.com/ashima/webgl-noise
|
||||
//
|
||||
|
||||
vec4 mod289(vec4 x)
|
||||
{
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
vec4 permute(vec4 x)
|
||||
{
|
||||
return mod289(((x*34.0)+1.0)*x);
|
||||
}
|
||||
|
||||
vec4 taylorInvSqrt(vec4 r)
|
||||
{
|
||||
return 1.79284291400159 - 0.85373472095314 * r;
|
||||
}
|
||||
|
||||
vec4 fade(vec4 t) {
|
||||
return t*t*t*(t*(t*6.0-15.0)+10.0);
|
||||
}
|
||||
|
||||
// Classic Perlin noise
|
||||
float cnoise(vec4 P)
|
||||
{
|
||||
vec4 Pi0 = floor(P); // Integer part for indexing
|
||||
vec4 Pi1 = Pi0 + 1.0; // Integer part + 1
|
||||
Pi0 = mod289(Pi0);
|
||||
Pi1 = mod289(Pi1);
|
||||
vec4 Pf0 = fract(P); // Fractional part for interpolation
|
||||
vec4 Pf1 = Pf0 - 1.0; // Fractional part - 1.0
|
||||
vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
|
||||
vec4 iy = vec4(Pi0.yy, Pi1.yy);
|
||||
vec4 iz0 = vec4(Pi0.zzzz);
|
||||
vec4 iz1 = vec4(Pi1.zzzz);
|
||||
vec4 iw0 = vec4(Pi0.wwww);
|
||||
vec4 iw1 = vec4(Pi1.wwww);
|
||||
|
||||
vec4 ixy = permute(permute(ix) + iy);
|
||||
vec4 ixy0 = permute(ixy + iz0);
|
||||
vec4 ixy1 = permute(ixy + iz1);
|
||||
vec4 ixy00 = permute(ixy0 + iw0);
|
||||
vec4 ixy01 = permute(ixy0 + iw1);
|
||||
vec4 ixy10 = permute(ixy1 + iw0);
|
||||
vec4 ixy11 = permute(ixy1 + iw1);
|
||||
|
||||
vec4 gx00 = ixy00 * (1.0 / 7.0);
|
||||
vec4 gy00 = floor(gx00) * (1.0 / 7.0);
|
||||
vec4 gz00 = floor(gy00) * (1.0 / 6.0);
|
||||
gx00 = fract(gx00) - 0.5;
|
||||
gy00 = fract(gy00) - 0.5;
|
||||
gz00 = fract(gz00) - 0.5;
|
||||
vec4 gw00 = vec4(0.75) - abs(gx00) - abs(gy00) - abs(gz00);
|
||||
vec4 sw00 = step(gw00, vec4(0.0));
|
||||
gx00 -= sw00 * (step(0.0, gx00) - 0.5);
|
||||
gy00 -= sw00 * (step(0.0, gy00) - 0.5);
|
||||
|
||||
vec4 gx01 = ixy01 * (1.0 / 7.0);
|
||||
vec4 gy01 = floor(gx01) * (1.0 / 7.0);
|
||||
vec4 gz01 = floor(gy01) * (1.0 / 6.0);
|
||||
gx01 = fract(gx01) - 0.5;
|
||||
gy01 = fract(gy01) - 0.5;
|
||||
gz01 = fract(gz01) - 0.5;
|
||||
vec4 gw01 = vec4(0.75) - abs(gx01) - abs(gy01) - abs(gz01);
|
||||
vec4 sw01 = step(gw01, vec4(0.0));
|
||||
gx01 -= sw01 * (step(0.0, gx01) - 0.5);
|
||||
gy01 -= sw01 * (step(0.0, gy01) - 0.5);
|
||||
|
||||
vec4 gx10 = ixy10 * (1.0 / 7.0);
|
||||
vec4 gy10 = floor(gx10) * (1.0 / 7.0);
|
||||
vec4 gz10 = floor(gy10) * (1.0 / 6.0);
|
||||
gx10 = fract(gx10) - 0.5;
|
||||
gy10 = fract(gy10) - 0.5;
|
||||
gz10 = fract(gz10) - 0.5;
|
||||
vec4 gw10 = vec4(0.75) - abs(gx10) - abs(gy10) - abs(gz10);
|
||||
vec4 sw10 = step(gw10, vec4(0.0));
|
||||
gx10 -= sw10 * (step(0.0, gx10) - 0.5);
|
||||
gy10 -= sw10 * (step(0.0, gy10) - 0.5);
|
||||
|
||||
vec4 gx11 = ixy11 * (1.0 / 7.0);
|
||||
vec4 gy11 = floor(gx11) * (1.0 / 7.0);
|
||||
vec4 gz11 = floor(gy11) * (1.0 / 6.0);
|
||||
gx11 = fract(gx11) - 0.5;
|
||||
gy11 = fract(gy11) - 0.5;
|
||||
gz11 = fract(gz11) - 0.5;
|
||||
vec4 gw11 = vec4(0.75) - abs(gx11) - abs(gy11) - abs(gz11);
|
||||
vec4 sw11 = step(gw11, vec4(0.0));
|
||||
gx11 -= sw11 * (step(0.0, gx11) - 0.5);
|
||||
gy11 -= sw11 * (step(0.0, gy11) - 0.5);
|
||||
|
||||
vec4 g0000 = vec4(gx00.x,gy00.x,gz00.x,gw00.x);
|
||||
vec4 g1000 = vec4(gx00.y,gy00.y,gz00.y,gw00.y);
|
||||
vec4 g0100 = vec4(gx00.z,gy00.z,gz00.z,gw00.z);
|
||||
vec4 g1100 = vec4(gx00.w,gy00.w,gz00.w,gw00.w);
|
||||
vec4 g0010 = vec4(gx10.x,gy10.x,gz10.x,gw10.x);
|
||||
vec4 g1010 = vec4(gx10.y,gy10.y,gz10.y,gw10.y);
|
||||
vec4 g0110 = vec4(gx10.z,gy10.z,gz10.z,gw10.z);
|
||||
vec4 g1110 = vec4(gx10.w,gy10.w,gz10.w,gw10.w);
|
||||
vec4 g0001 = vec4(gx01.x,gy01.x,gz01.x,gw01.x);
|
||||
vec4 g1001 = vec4(gx01.y,gy01.y,gz01.y,gw01.y);
|
||||
vec4 g0101 = vec4(gx01.z,gy01.z,gz01.z,gw01.z);
|
||||
vec4 g1101 = vec4(gx01.w,gy01.w,gz01.w,gw01.w);
|
||||
vec4 g0011 = vec4(gx11.x,gy11.x,gz11.x,gw11.x);
|
||||
vec4 g1011 = vec4(gx11.y,gy11.y,gz11.y,gw11.y);
|
||||
vec4 g0111 = vec4(gx11.z,gy11.z,gz11.z,gw11.z);
|
||||
vec4 g1111 = vec4(gx11.w,gy11.w,gz11.w,gw11.w);
|
||||
|
||||
vec4 norm00 = taylorInvSqrt(vec4(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));
|
||||
g0000 *= norm00.x;
|
||||
g0100 *= norm00.y;
|
||||
g1000 *= norm00.z;
|
||||
g1100 *= norm00.w;
|
||||
|
||||
vec4 norm01 = taylorInvSqrt(vec4(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));
|
||||
g0001 *= norm01.x;
|
||||
g0101 *= norm01.y;
|
||||
g1001 *= norm01.z;
|
||||
g1101 *= norm01.w;
|
||||
|
||||
vec4 norm10 = taylorInvSqrt(vec4(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));
|
||||
g0010 *= norm10.x;
|
||||
g0110 *= norm10.y;
|
||||
g1010 *= norm10.z;
|
||||
g1110 *= norm10.w;
|
||||
|
||||
vec4 norm11 = taylorInvSqrt(vec4(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));
|
||||
g0011 *= norm11.x;
|
||||
g0111 *= norm11.y;
|
||||
g1011 *= norm11.z;
|
||||
g1111 *= norm11.w;
|
||||
|
||||
float n0000 = dot(g0000, Pf0);
|
||||
float n1000 = dot(g1000, vec4(Pf1.x, Pf0.yzw));
|
||||
float n0100 = dot(g0100, vec4(Pf0.x, Pf1.y, Pf0.zw));
|
||||
float n1100 = dot(g1100, vec4(Pf1.xy, Pf0.zw));
|
||||
float n0010 = dot(g0010, vec4(Pf0.xy, Pf1.z, Pf0.w));
|
||||
float n1010 = dot(g1010, vec4(Pf1.x, Pf0.y, Pf1.z, Pf0.w));
|
||||
float n0110 = dot(g0110, vec4(Pf0.x, Pf1.yz, Pf0.w));
|
||||
float n1110 = dot(g1110, vec4(Pf1.xyz, Pf0.w));
|
||||
float n0001 = dot(g0001, vec4(Pf0.xyz, Pf1.w));
|
||||
float n1001 = dot(g1001, vec4(Pf1.x, Pf0.yz, Pf1.w));
|
||||
float n0101 = dot(g0101, vec4(Pf0.x, Pf1.y, Pf0.z, Pf1.w));
|
||||
float n1101 = dot(g1101, vec4(Pf1.xy, Pf0.z, Pf1.w));
|
||||
float n0011 = dot(g0011, vec4(Pf0.xy, Pf1.zw));
|
||||
float n1011 = dot(g1011, vec4(Pf1.x, Pf0.y, Pf1.zw));
|
||||
float n0111 = dot(g0111, vec4(Pf0.x, Pf1.yzw));
|
||||
float n1111 = dot(g1111, Pf1);
|
||||
|
||||
vec4 fade_xyzw = fade(Pf0);
|
||||
vec4 n_0w = mix(vec4(n0000, n1000, n0100, n1100), vec4(n0001, n1001, n0101, n1101), fade_xyzw.w);
|
||||
vec4 n_1w = mix(vec4(n0010, n1010, n0110, n1110), vec4(n0011, n1011, n0111, n1111), fade_xyzw.w);
|
||||
vec4 n_zw = mix(n_0w, n_1w, fade_xyzw.z);
|
||||
vec2 n_yzw = mix(n_zw.xy, n_zw.zw, fade_xyzw.y);
|
||||
float n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);
|
||||
return 2.2 * n_xyzw;
|
||||
}
|
||||
|
||||
#pragma glslify: export(cnoise)
|
||||
@@ -1,75 +0,0 @@
|
||||
//
|
||||
// GLSL textureless classic 2D noise "cnoise",
|
||||
// with an RSL-style periodic variant "pnoise".
|
||||
// Author: Stefan Gustavson (stefan.gustavson@liu.se)
|
||||
// Version: 2011-08-22
|
||||
//
|
||||
// Many thanks to Ian McEwan of Ashima Arts for the
|
||||
// ideas for permutation and gradient selection.
|
||||
//
|
||||
// Copyright (c) 2011 Stefan Gustavson. All rights reserved.
|
||||
// Distributed under the MIT license. See LICENSE file.
|
||||
// https://github.com/ashima/webgl-noise
|
||||
//
|
||||
|
||||
vec4 mod289(vec4 x)
|
||||
{
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
vec4 permute(vec4 x)
|
||||
{
|
||||
return mod289(((x*34.0)+1.0)*x);
|
||||
}
|
||||
|
||||
vec4 taylorInvSqrt(vec4 r)
|
||||
{
|
||||
return 1.79284291400159 - 0.85373472095314 * r;
|
||||
}
|
||||
|
||||
vec2 fade(vec2 t) {
|
||||
return t*t*t*(t*(t*6.0-15.0)+10.0);
|
||||
}
|
||||
|
||||
// Classic Perlin noise, periodic variant
|
||||
float pnoise(vec2 P, vec2 rep)
|
||||
{
|
||||
vec4 Pi = floor(P.xyxy) + vec4(0.0, 0.0, 1.0, 1.0);
|
||||
vec4 Pf = fract(P.xyxy) - vec4(0.0, 0.0, 1.0, 1.0);
|
||||
Pi = mod(Pi, rep.xyxy); // To create noise with explicit period
|
||||
Pi = mod289(Pi); // To avoid truncation effects in permutation
|
||||
vec4 ix = Pi.xzxz;
|
||||
vec4 iy = Pi.yyww;
|
||||
vec4 fx = Pf.xzxz;
|
||||
vec4 fy = Pf.yyww;
|
||||
|
||||
vec4 i = permute(permute(ix) + iy);
|
||||
|
||||
vec4 gx = fract(i * (1.0 / 41.0)) * 2.0 - 1.0 ;
|
||||
vec4 gy = abs(gx) - 0.5 ;
|
||||
vec4 tx = floor(gx + 0.5);
|
||||
gx = gx - tx;
|
||||
|
||||
vec2 g00 = vec2(gx.x,gy.x);
|
||||
vec2 g10 = vec2(gx.y,gy.y);
|
||||
vec2 g01 = vec2(gx.z,gy.z);
|
||||
vec2 g11 = vec2(gx.w,gy.w);
|
||||
|
||||
vec4 norm = taylorInvSqrt(vec4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));
|
||||
g00 *= norm.x;
|
||||
g01 *= norm.y;
|
||||
g10 *= norm.z;
|
||||
g11 *= norm.w;
|
||||
|
||||
float n00 = dot(g00, vec2(fx.x, fy.x));
|
||||
float n10 = dot(g10, vec2(fx.y, fy.y));
|
||||
float n01 = dot(g01, vec2(fx.z, fy.z));
|
||||
float n11 = dot(g11, vec2(fx.w, fy.w));
|
||||
|
||||
vec2 fade_xy = fade(Pf.xy);
|
||||
vec2 n_x = mix(vec2(n00, n01), vec2(n10, n11), fade_xy.x);
|
||||
float n_xy = mix(n_x.x, n_x.y, fade_xy.y);
|
||||
return 2.3 * n_xy;
|
||||
}
|
||||
|
||||
#pragma glslify: export(pnoise)
|
||||
@@ -1,109 +0,0 @@
|
||||
//
|
||||
// GLSL textureless classic 3D noise "cnoise",
|
||||
// with an RSL-style periodic variant "pnoise".
|
||||
// Author: Stefan Gustavson (stefan.gustavson@liu.se)
|
||||
// Version: 2011-10-11
|
||||
//
|
||||
// Many thanks to Ian McEwan of Ashima Arts for the
|
||||
// ideas for permutation and gradient selection.
|
||||
//
|
||||
// Copyright (c) 2011 Stefan Gustavson. All rights reserved.
|
||||
// Distributed under the MIT license. See LICENSE file.
|
||||
// https://github.com/ashima/webgl-noise
|
||||
//
|
||||
|
||||
vec3 mod289(vec3 x)
|
||||
{
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
vec4 mod289(vec4 x)
|
||||
{
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
vec4 permute(vec4 x)
|
||||
{
|
||||
return mod289(((x*34.0)+1.0)*x);
|
||||
}
|
||||
|
||||
vec4 taylorInvSqrt(vec4 r)
|
||||
{
|
||||
return 1.79284291400159 - 0.85373472095314 * r;
|
||||
}
|
||||
|
||||
vec3 fade(vec3 t) {
|
||||
return t*t*t*(t*(t*6.0-15.0)+10.0);
|
||||
}
|
||||
|
||||
// Classic Perlin noise, periodic variant
|
||||
float pnoise(vec3 P, vec3 rep)
|
||||
{
|
||||
vec3 Pi0 = mod(floor(P), rep); // Integer part, modulo period
|
||||
vec3 Pi1 = mod(Pi0 + vec3(1.0), rep); // Integer part + 1, mod period
|
||||
Pi0 = mod289(Pi0);
|
||||
Pi1 = mod289(Pi1);
|
||||
vec3 Pf0 = fract(P); // Fractional part for interpolation
|
||||
vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0
|
||||
vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
|
||||
vec4 iy = vec4(Pi0.yy, Pi1.yy);
|
||||
vec4 iz0 = Pi0.zzzz;
|
||||
vec4 iz1 = Pi1.zzzz;
|
||||
|
||||
vec4 ixy = permute(permute(ix) + iy);
|
||||
vec4 ixy0 = permute(ixy + iz0);
|
||||
vec4 ixy1 = permute(ixy + iz1);
|
||||
|
||||
vec4 gx0 = ixy0 * (1.0 / 7.0);
|
||||
vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;
|
||||
gx0 = fract(gx0);
|
||||
vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);
|
||||
vec4 sz0 = step(gz0, vec4(0.0));
|
||||
gx0 -= sz0 * (step(0.0, gx0) - 0.5);
|
||||
gy0 -= sz0 * (step(0.0, gy0) - 0.5);
|
||||
|
||||
vec4 gx1 = ixy1 * (1.0 / 7.0);
|
||||
vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;
|
||||
gx1 = fract(gx1);
|
||||
vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);
|
||||
vec4 sz1 = step(gz1, vec4(0.0));
|
||||
gx1 -= sz1 * (step(0.0, gx1) - 0.5);
|
||||
gy1 -= sz1 * (step(0.0, gy1) - 0.5);
|
||||
|
||||
vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);
|
||||
vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);
|
||||
vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);
|
||||
vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);
|
||||
vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);
|
||||
vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);
|
||||
vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);
|
||||
vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);
|
||||
|
||||
vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));
|
||||
g000 *= norm0.x;
|
||||
g010 *= norm0.y;
|
||||
g100 *= norm0.z;
|
||||
g110 *= norm0.w;
|
||||
vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));
|
||||
g001 *= norm1.x;
|
||||
g011 *= norm1.y;
|
||||
g101 *= norm1.z;
|
||||
g111 *= norm1.w;
|
||||
|
||||
float n000 = dot(g000, Pf0);
|
||||
float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));
|
||||
float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));
|
||||
float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));
|
||||
float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));
|
||||
float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));
|
||||
float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));
|
||||
float n111 = dot(g111, Pf1);
|
||||
|
||||
vec3 fade_xyz = fade(Pf0);
|
||||
vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);
|
||||
vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);
|
||||
float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);
|
||||
return 2.2 * n_xyz;
|
||||
}
|
||||
|
||||
#pragma glslify: export(pnoise)
|
||||
@@ -1,169 +0,0 @@
|
||||
//
|
||||
// GLSL textureless classic 4D noise "cnoise",
|
||||
// with an RSL-style periodic variant "pnoise".
|
||||
// Author: Stefan Gustavson (stefan.gustavson@liu.se)
|
||||
// Version: 2011-08-22
|
||||
//
|
||||
// Many thanks to Ian McEwan of Ashima Arts for the
|
||||
// ideas for permutation and gradient selection.
|
||||
//
|
||||
// Copyright (c) 2011 Stefan Gustavson. All rights reserved.
|
||||
// Distributed under the MIT license. See LICENSE file.
|
||||
// https://github.com/ashima/webgl-noise
|
||||
//
|
||||
|
||||
vec4 mod289(vec4 x)
|
||||
{
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
vec4 permute(vec4 x)
|
||||
{
|
||||
return mod289(((x*34.0)+1.0)*x);
|
||||
}
|
||||
|
||||
vec4 taylorInvSqrt(vec4 r)
|
||||
{
|
||||
return 1.79284291400159 - 0.85373472095314 * r;
|
||||
}
|
||||
|
||||
vec4 fade(vec4 t) {
|
||||
return t*t*t*(t*(t*6.0-15.0)+10.0);
|
||||
}
|
||||
|
||||
// Classic Perlin noise, periodic version
|
||||
float pnoise(vec4 P, vec4 rep)
|
||||
{
|
||||
vec4 Pi0 = mod(floor(P), rep); // Integer part modulo rep
|
||||
vec4 Pi1 = mod(Pi0 + 1.0, rep); // Integer part + 1 mod rep
|
||||
Pi0 = mod289(Pi0);
|
||||
Pi1 = mod289(Pi1);
|
||||
vec4 Pf0 = fract(P); // Fractional part for interpolation
|
||||
vec4 Pf1 = Pf0 - 1.0; // Fractional part - 1.0
|
||||
vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
|
||||
vec4 iy = vec4(Pi0.yy, Pi1.yy);
|
||||
vec4 iz0 = vec4(Pi0.zzzz);
|
||||
vec4 iz1 = vec4(Pi1.zzzz);
|
||||
vec4 iw0 = vec4(Pi0.wwww);
|
||||
vec4 iw1 = vec4(Pi1.wwww);
|
||||
|
||||
vec4 ixy = permute(permute(ix) + iy);
|
||||
vec4 ixy0 = permute(ixy + iz0);
|
||||
vec4 ixy1 = permute(ixy + iz1);
|
||||
vec4 ixy00 = permute(ixy0 + iw0);
|
||||
vec4 ixy01 = permute(ixy0 + iw1);
|
||||
vec4 ixy10 = permute(ixy1 + iw0);
|
||||
vec4 ixy11 = permute(ixy1 + iw1);
|
||||
|
||||
vec4 gx00 = ixy00 * (1.0 / 7.0);
|
||||
vec4 gy00 = floor(gx00) * (1.0 / 7.0);
|
||||
vec4 gz00 = floor(gy00) * (1.0 / 6.0);
|
||||
gx00 = fract(gx00) - 0.5;
|
||||
gy00 = fract(gy00) - 0.5;
|
||||
gz00 = fract(gz00) - 0.5;
|
||||
vec4 gw00 = vec4(0.75) - abs(gx00) - abs(gy00) - abs(gz00);
|
||||
vec4 sw00 = step(gw00, vec4(0.0));
|
||||
gx00 -= sw00 * (step(0.0, gx00) - 0.5);
|
||||
gy00 -= sw00 * (step(0.0, gy00) - 0.5);
|
||||
|
||||
vec4 gx01 = ixy01 * (1.0 / 7.0);
|
||||
vec4 gy01 = floor(gx01) * (1.0 / 7.0);
|
||||
vec4 gz01 = floor(gy01) * (1.0 / 6.0);
|
||||
gx01 = fract(gx01) - 0.5;
|
||||
gy01 = fract(gy01) - 0.5;
|
||||
gz01 = fract(gz01) - 0.5;
|
||||
vec4 gw01 = vec4(0.75) - abs(gx01) - abs(gy01) - abs(gz01);
|
||||
vec4 sw01 = step(gw01, vec4(0.0));
|
||||
gx01 -= sw01 * (step(0.0, gx01) - 0.5);
|
||||
gy01 -= sw01 * (step(0.0, gy01) - 0.5);
|
||||
|
||||
vec4 gx10 = ixy10 * (1.0 / 7.0);
|
||||
vec4 gy10 = floor(gx10) * (1.0 / 7.0);
|
||||
vec4 gz10 = floor(gy10) * (1.0 / 6.0);
|
||||
gx10 = fract(gx10) - 0.5;
|
||||
gy10 = fract(gy10) - 0.5;
|
||||
gz10 = fract(gz10) - 0.5;
|
||||
vec4 gw10 = vec4(0.75) - abs(gx10) - abs(gy10) - abs(gz10);
|
||||
vec4 sw10 = step(gw10, vec4(0.0));
|
||||
gx10 -= sw10 * (step(0.0, gx10) - 0.5);
|
||||
gy10 -= sw10 * (step(0.0, gy10) - 0.5);
|
||||
|
||||
vec4 gx11 = ixy11 * (1.0 / 7.0);
|
||||
vec4 gy11 = floor(gx11) * (1.0 / 7.0);
|
||||
vec4 gz11 = floor(gy11) * (1.0 / 6.0);
|
||||
gx11 = fract(gx11) - 0.5;
|
||||
gy11 = fract(gy11) - 0.5;
|
||||
gz11 = fract(gz11) - 0.5;
|
||||
vec4 gw11 = vec4(0.75) - abs(gx11) - abs(gy11) - abs(gz11);
|
||||
vec4 sw11 = step(gw11, vec4(0.0));
|
||||
gx11 -= sw11 * (step(0.0, gx11) - 0.5);
|
||||
gy11 -= sw11 * (step(0.0, gy11) - 0.5);
|
||||
|
||||
vec4 g0000 = vec4(gx00.x,gy00.x,gz00.x,gw00.x);
|
||||
vec4 g1000 = vec4(gx00.y,gy00.y,gz00.y,gw00.y);
|
||||
vec4 g0100 = vec4(gx00.z,gy00.z,gz00.z,gw00.z);
|
||||
vec4 g1100 = vec4(gx00.w,gy00.w,gz00.w,gw00.w);
|
||||
vec4 g0010 = vec4(gx10.x,gy10.x,gz10.x,gw10.x);
|
||||
vec4 g1010 = vec4(gx10.y,gy10.y,gz10.y,gw10.y);
|
||||
vec4 g0110 = vec4(gx10.z,gy10.z,gz10.z,gw10.z);
|
||||
vec4 g1110 = vec4(gx10.w,gy10.w,gz10.w,gw10.w);
|
||||
vec4 g0001 = vec4(gx01.x,gy01.x,gz01.x,gw01.x);
|
||||
vec4 g1001 = vec4(gx01.y,gy01.y,gz01.y,gw01.y);
|
||||
vec4 g0101 = vec4(gx01.z,gy01.z,gz01.z,gw01.z);
|
||||
vec4 g1101 = vec4(gx01.w,gy01.w,gz01.w,gw01.w);
|
||||
vec4 g0011 = vec4(gx11.x,gy11.x,gz11.x,gw11.x);
|
||||
vec4 g1011 = vec4(gx11.y,gy11.y,gz11.y,gw11.y);
|
||||
vec4 g0111 = vec4(gx11.z,gy11.z,gz11.z,gw11.z);
|
||||
vec4 g1111 = vec4(gx11.w,gy11.w,gz11.w,gw11.w);
|
||||
|
||||
vec4 norm00 = taylorInvSqrt(vec4(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));
|
||||
g0000 *= norm00.x;
|
||||
g0100 *= norm00.y;
|
||||
g1000 *= norm00.z;
|
||||
g1100 *= norm00.w;
|
||||
|
||||
vec4 norm01 = taylorInvSqrt(vec4(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));
|
||||
g0001 *= norm01.x;
|
||||
g0101 *= norm01.y;
|
||||
g1001 *= norm01.z;
|
||||
g1101 *= norm01.w;
|
||||
|
||||
vec4 norm10 = taylorInvSqrt(vec4(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));
|
||||
g0010 *= norm10.x;
|
||||
g0110 *= norm10.y;
|
||||
g1010 *= norm10.z;
|
||||
g1110 *= norm10.w;
|
||||
|
||||
vec4 norm11 = taylorInvSqrt(vec4(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));
|
||||
g0011 *= norm11.x;
|
||||
g0111 *= norm11.y;
|
||||
g1011 *= norm11.z;
|
||||
g1111 *= norm11.w;
|
||||
|
||||
float n0000 = dot(g0000, Pf0);
|
||||
float n1000 = dot(g1000, vec4(Pf1.x, Pf0.yzw));
|
||||
float n0100 = dot(g0100, vec4(Pf0.x, Pf1.y, Pf0.zw));
|
||||
float n1100 = dot(g1100, vec4(Pf1.xy, Pf0.zw));
|
||||
float n0010 = dot(g0010, vec4(Pf0.xy, Pf1.z, Pf0.w));
|
||||
float n1010 = dot(g1010, vec4(Pf1.x, Pf0.y, Pf1.z, Pf0.w));
|
||||
float n0110 = dot(g0110, vec4(Pf0.x, Pf1.yz, Pf0.w));
|
||||
float n1110 = dot(g1110, vec4(Pf1.xyz, Pf0.w));
|
||||
float n0001 = dot(g0001, vec4(Pf0.xyz, Pf1.w));
|
||||
float n1001 = dot(g1001, vec4(Pf1.x, Pf0.yz, Pf1.w));
|
||||
float n0101 = dot(g0101, vec4(Pf0.x, Pf1.y, Pf0.z, Pf1.w));
|
||||
float n1101 = dot(g1101, vec4(Pf1.xy, Pf0.z, Pf1.w));
|
||||
float n0011 = dot(g0011, vec4(Pf0.xy, Pf1.zw));
|
||||
float n1011 = dot(g1011, vec4(Pf1.x, Pf0.y, Pf1.zw));
|
||||
float n0111 = dot(g0111, vec4(Pf0.x, Pf1.yzw));
|
||||
float n1111 = dot(g1111, Pf1);
|
||||
|
||||
vec4 fade_xyzw = fade(Pf0);
|
||||
vec4 n_0w = mix(vec4(n0000, n1000, n0100, n1100), vec4(n0001, n1001, n0101, n1101), fade_xyzw.w);
|
||||
vec4 n_1w = mix(vec4(n0010, n1010, n0110, n1110), vec4(n0011, n1011, n0111, n1111), fade_xyzw.w);
|
||||
vec4 n_zw = mix(n_0w, n_1w, fade_xyzw.z);
|
||||
vec2 n_yzw = mix(n_zw.xy, n_zw.zw, fade_xyzw.y);
|
||||
float n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);
|
||||
return 2.2 * n_xyzw;
|
||||
}
|
||||
|
||||
#pragma glslify: export(pnoise)
|
||||
@@ -1,72 +0,0 @@
|
||||
//
|
||||
// Description : Array and textureless GLSL 2D simplex noise function.
|
||||
// Author : Ian McEwan, Ashima Arts.
|
||||
// Maintainer : ijm
|
||||
// Lastmod : 20110822 (ijm)
|
||||
// License : Copyright (C) 2011 Ashima Arts. All rights reserved.
|
||||
// Distributed under the MIT License. See LICENSE file.
|
||||
// https://github.com/ashima/webgl-noise
|
||||
//
|
||||
|
||||
vec3 mod289(vec3 x) {
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
vec2 mod289(vec2 x) {
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
vec3 permute(vec3 x) {
|
||||
return mod289(((x*34.0)+1.0)*x);
|
||||
}
|
||||
|
||||
float snoise(vec2 v)
|
||||
{
|
||||
const vec4 C = vec4(0.211324865405187, // (3.0-sqrt(3.0))/6.0
|
||||
0.366025403784439, // 0.5*(sqrt(3.0)-1.0)
|
||||
-0.577350269189626, // -1.0 + 2.0 * C.x
|
||||
0.024390243902439); // 1.0 / 41.0
|
||||
// First corner
|
||||
vec2 i = floor(v + dot(v, C.yy) );
|
||||
vec2 x0 = v - i + dot(i, C.xx);
|
||||
|
||||
// Other corners
|
||||
vec2 i1;
|
||||
//i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0
|
||||
//i1.y = 1.0 - i1.x;
|
||||
i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
|
||||
// x0 = x0 - 0.0 + 0.0 * C.xx ;
|
||||
// x1 = x0 - i1 + 1.0 * C.xx ;
|
||||
// x2 = x0 - 1.0 + 2.0 * C.xx ;
|
||||
vec4 x12 = x0.xyxy + C.xxzz;
|
||||
x12.xy -= i1;
|
||||
|
||||
// Permutations
|
||||
i = mod289(i); // Avoid truncation effects in permutation
|
||||
vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 ))
|
||||
+ i.x + vec3(0.0, i1.x, 1.0 ));
|
||||
|
||||
vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);
|
||||
m = m*m ;
|
||||
m = m*m ;
|
||||
|
||||
// Gradients: 41 points uniformly over a line, mapped onto a diamond.
|
||||
// The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287)
|
||||
|
||||
vec3 x = 2.0 * fract(p * C.www) - 1.0;
|
||||
vec3 h = abs(x) - 0.5;
|
||||
vec3 ox = floor(x + 0.5);
|
||||
vec3 a0 = x - ox;
|
||||
|
||||
// Normalise gradients implicitly by scaling m
|
||||
// Approximation of: m *= inversesqrt( a0*a0 + h*h );
|
||||
m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );
|
||||
|
||||
// Compute final noise value at P
|
||||
vec3 g;
|
||||
g.x = a0.x * x0.x + h.x * x0.y;
|
||||
g.yz = a0.yz * x12.xz + h.yz * x12.yw;
|
||||
return 130.0 * dot(m, g);
|
||||
}
|
||||
|
||||
#pragma glslify: export(snoise)
|
||||
@@ -1,104 +0,0 @@
|
||||
//
|
||||
// Description : Array and textureless GLSL 2D/3D/4D simplex
|
||||
// noise functions.
|
||||
// Author : Ian McEwan, Ashima Arts.
|
||||
// Maintainer : ijm
|
||||
// Lastmod : 20110822 (ijm)
|
||||
// License : Copyright (C) 2011 Ashima Arts. All rights reserved.
|
||||
// Distributed under the MIT License. See LICENSE file.
|
||||
// https://github.com/ashima/webgl-noise
|
||||
//
|
||||
|
||||
vec3 mod289(vec3 x) {
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
vec4 mod289(vec4 x) {
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
vec4 permute(vec4 x) {
|
||||
return mod289(((x*34.0)+1.0)*x);
|
||||
}
|
||||
|
||||
vec4 taylorInvSqrt(vec4 r)
|
||||
{
|
||||
return 1.79284291400159 - 0.85373472095314 * r;
|
||||
}
|
||||
|
||||
float snoise(vec3 v)
|
||||
{
|
||||
const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;
|
||||
const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
|
||||
|
||||
// First corner
|
||||
vec3 i = floor(v + dot(v, C.yyy) );
|
||||
vec3 x0 = v - i + dot(i, C.xxx) ;
|
||||
|
||||
// Other corners
|
||||
vec3 g = step(x0.yzx, x0.xyz);
|
||||
vec3 l = 1.0 - g;
|
||||
vec3 i1 = min( g.xyz, l.zxy );
|
||||
vec3 i2 = max( g.xyz, l.zxy );
|
||||
|
||||
// x0 = x0 - 0.0 + 0.0 * C.xxx;
|
||||
// x1 = x0 - i1 + 1.0 * C.xxx;
|
||||
// x2 = x0 - i2 + 2.0 * C.xxx;
|
||||
// x3 = x0 - 1.0 + 3.0 * C.xxx;
|
||||
vec3 x1 = x0 - i1 + C.xxx;
|
||||
vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y
|
||||
vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y
|
||||
|
||||
// Permutations
|
||||
i = mod289(i);
|
||||
vec4 p = permute( permute( permute(
|
||||
i.z + vec4(0.0, i1.z, i2.z, 1.0 ))
|
||||
+ i.y + vec4(0.0, i1.y, i2.y, 1.0 ))
|
||||
+ i.x + vec4(0.0, i1.x, i2.x, 1.0 ));
|
||||
|
||||
// Gradients: 7x7 points over a square, mapped onto an octahedron.
|
||||
// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)
|
||||
float n_ = 0.142857142857; // 1.0/7.0
|
||||
vec3 ns = n_ * D.wyz - D.xzx;
|
||||
|
||||
vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)
|
||||
|
||||
vec4 x_ = floor(j * ns.z);
|
||||
vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)
|
||||
|
||||
vec4 x = x_ *ns.x + ns.yyyy;
|
||||
vec4 y = y_ *ns.x + ns.yyyy;
|
||||
vec4 h = 1.0 - abs(x) - abs(y);
|
||||
|
||||
vec4 b0 = vec4( x.xy, y.xy );
|
||||
vec4 b1 = vec4( x.zw, y.zw );
|
||||
|
||||
//vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;
|
||||
//vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;
|
||||
vec4 s0 = floor(b0)*2.0 + 1.0;
|
||||
vec4 s1 = floor(b1)*2.0 + 1.0;
|
||||
vec4 sh = -step(h, vec4(0.0));
|
||||
|
||||
vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
|
||||
vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
|
||||
|
||||
vec3 p0 = vec3(a0.xy,h.x);
|
||||
vec3 p1 = vec3(a0.zw,h.y);
|
||||
vec3 p2 = vec3(a1.xy,h.z);
|
||||
vec3 p3 = vec3(a1.zw,h.w);
|
||||
|
||||
//Normalise gradients
|
||||
vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));
|
||||
p0 *= norm.x;
|
||||
p1 *= norm.y;
|
||||
p2 *= norm.z;
|
||||
p3 *= norm.w;
|
||||
|
||||
// Mix final noise value
|
||||
vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);
|
||||
m = m * m;
|
||||
return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),
|
||||
dot(p2,x2), dot(p3,x3) ) );
|
||||
}
|
||||
|
||||
#pragma glslify: export(snoise)
|
||||
@@ -1,130 +0,0 @@
|
||||
//
|
||||
// Description : Array and textureless GLSL 2D/3D/4D simplex
|
||||
// noise functions.
|
||||
// Author : Ian McEwan, Ashima Arts.
|
||||
// Maintainer : ijm
|
||||
// Lastmod : 20110822 (ijm)
|
||||
// License : Copyright (C) 2011 Ashima Arts. All rights reserved.
|
||||
// Distributed under the MIT License. See LICENSE file.
|
||||
// https://github.com/ashima/webgl-noise
|
||||
//
|
||||
|
||||
vec4 mod289(vec4 x) {
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0; }
|
||||
|
||||
float mod289(float x) {
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0; }
|
||||
|
||||
vec4 permute(vec4 x) {
|
||||
return mod289(((x*34.0)+1.0)*x);
|
||||
}
|
||||
|
||||
float permute(float x) {
|
||||
return mod289(((x*34.0)+1.0)*x);
|
||||
}
|
||||
|
||||
vec4 taylorInvSqrt(vec4 r)
|
||||
{
|
||||
return 1.79284291400159 - 0.85373472095314 * r;
|
||||
}
|
||||
|
||||
float taylorInvSqrt(float r)
|
||||
{
|
||||
return 1.79284291400159 - 0.85373472095314 * r;
|
||||
}
|
||||
|
||||
vec4 grad4(float j, vec4 ip)
|
||||
{
|
||||
const vec4 ones = vec4(1.0, 1.0, 1.0, -1.0);
|
||||
vec4 p,s;
|
||||
|
||||
p.xyz = floor( fract (vec3(j) * ip.xyz) * 7.0) * ip.z - 1.0;
|
||||
p.w = 1.5 - dot(abs(p.xyz), ones.xyz);
|
||||
s = vec4(lessThan(p, vec4(0.0)));
|
||||
p.xyz = p.xyz + (s.xyz*2.0 - 1.0) * s.www;
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
// (sqrt(5) - 1)/4 = F4, used once below
|
||||
#define F4 0.309016994374947451
|
||||
|
||||
float snoise(vec4 v)
|
||||
{
|
||||
const vec4 C = vec4( 0.138196601125011, // (5 - sqrt(5))/20 G4
|
||||
0.276393202250021, // 2 * G4
|
||||
0.414589803375032, // 3 * G4
|
||||
-0.447213595499958); // -1 + 4 * G4
|
||||
|
||||
// First corner
|
||||
vec4 i = floor(v + dot(v, vec4(F4)) );
|
||||
vec4 x0 = v - i + dot(i, C.xxxx);
|
||||
|
||||
// Other corners
|
||||
|
||||
// Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI)
|
||||
vec4 i0;
|
||||
vec3 isX = step( x0.yzw, x0.xxx );
|
||||
vec3 isYZ = step( x0.zww, x0.yyz );
|
||||
// i0.x = dot( isX, vec3( 1.0 ) );
|
||||
i0.x = isX.x + isX.y + isX.z;
|
||||
i0.yzw = 1.0 - isX;
|
||||
// i0.y += dot( isYZ.xy, vec2( 1.0 ) );
|
||||
i0.y += isYZ.x + isYZ.y;
|
||||
i0.zw += 1.0 - isYZ.xy;
|
||||
i0.z += isYZ.z;
|
||||
i0.w += 1.0 - isYZ.z;
|
||||
|
||||
// i0 now contains the unique values 0,1,2,3 in each channel
|
||||
vec4 i3 = clamp( i0, 0.0, 1.0 );
|
||||
vec4 i2 = clamp( i0-1.0, 0.0, 1.0 );
|
||||
vec4 i1 = clamp( i0-2.0, 0.0, 1.0 );
|
||||
|
||||
// x0 = x0 - 0.0 + 0.0 * C.xxxx
|
||||
// x1 = x0 - i1 + 1.0 * C.xxxx
|
||||
// x2 = x0 - i2 + 2.0 * C.xxxx
|
||||
// x3 = x0 - i3 + 3.0 * C.xxxx
|
||||
// x4 = x0 - 1.0 + 4.0 * C.xxxx
|
||||
vec4 x1 = x0 - i1 + C.xxxx;
|
||||
vec4 x2 = x0 - i2 + C.yyyy;
|
||||
vec4 x3 = x0 - i3 + C.zzzz;
|
||||
vec4 x4 = x0 + C.wwww;
|
||||
|
||||
// Permutations
|
||||
i = mod289(i);
|
||||
float j0 = permute( permute( permute( permute(i.w) + i.z) + i.y) + i.x);
|
||||
vec4 j1 = permute( permute( permute( permute (
|
||||
i.w + vec4(i1.w, i2.w, i3.w, 1.0 ))
|
||||
+ i.z + vec4(i1.z, i2.z, i3.z, 1.0 ))
|
||||
+ i.y + vec4(i1.y, i2.y, i3.y, 1.0 ))
|
||||
+ i.x + vec4(i1.x, i2.x, i3.x, 1.0 ));
|
||||
|
||||
// Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope
|
||||
// 7*7*6 = 294, which is close to the ring size 17*17 = 289.
|
||||
vec4 ip = vec4(1.0/294.0, 1.0/49.0, 1.0/7.0, 0.0) ;
|
||||
|
||||
vec4 p0 = grad4(j0, ip);
|
||||
vec4 p1 = grad4(j1.x, ip);
|
||||
vec4 p2 = grad4(j1.y, ip);
|
||||
vec4 p3 = grad4(j1.z, ip);
|
||||
vec4 p4 = grad4(j1.w, ip);
|
||||
|
||||
// Normalise gradients
|
||||
vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));
|
||||
p0 *= norm.x;
|
||||
p1 *= norm.y;
|
||||
p2 *= norm.z;
|
||||
p3 *= norm.w;
|
||||
p4 *= taylorInvSqrt(dot(p4,p4));
|
||||
|
||||
// Mix contributions from the five corners
|
||||
vec3 m0 = max(0.6 - vec3(dot(x0,x0), dot(x1,x1), dot(x2,x2)), 0.0);
|
||||
vec2 m1 = max(0.6 - vec2(dot(x3,x3), dot(x4,x4) ), 0.0);
|
||||
m0 = m0 * m0;
|
||||
m1 = m1 * m1;
|
||||
return 49.0 * ( dot(m0*m0, vec3( dot( p0, x0 ), dot( p1, x1 ), dot( p2, x2 )))
|
||||
+ dot(m1*m1, vec2( dot( p3, x3 ), dot( p4, x4 ) ) ) ) ;
|
||||
|
||||
}
|
||||
|
||||
#pragma glslify: export(snoise)
|
||||
@@ -1,5 +0,0 @@
|
||||
float multiply(float a, float b) {
|
||||
return a * b;
|
||||
}
|
||||
|
||||
#pragma glslify: export(multiply)
|
||||
@@ -1,9 +0,0 @@
|
||||
#pragma glslify: add = require(sum)
|
||||
#pragma glslify: multiply = require(multiply)
|
||||
#pragma glslify: subtract = require('./subtract.glsl')
|
||||
|
||||
float solve(float a, float b) {
|
||||
return subtract(multiply(add(a, b), b), b);
|
||||
}
|
||||
|
||||
#pragma glslify: export(solve)
|
||||
@@ -1,5 +0,0 @@
|
||||
float subtract(float a, float b) {
|
||||
return a - b;
|
||||
}
|
||||
|
||||
#pragma glslify: export(subtract)
|
||||
@@ -1,74 +0,0 @@
|
||||
var assert = require('assert');
|
||||
var src = require(__dirname + '/../index');
|
||||
var async = require('async')
|
||||
var _ = require('underscore')
|
||||
var cache = src({expiry:2});
|
||||
describe('Simple Redis Cache', function(){
|
||||
it('should connect to a redis instance', function(done){
|
||||
//Give redis some time to init
|
||||
setTimeout(function(){
|
||||
assert.equal('localhost', cache.client.host);
|
||||
done();
|
||||
}, 100);
|
||||
});
|
||||
it('should set a key with a value', function(done){
|
||||
cache.set('test', 'this is a string', done);
|
||||
});
|
||||
it('should retrieve the value', function(done){
|
||||
cache.get('test', function(err, value){
|
||||
assert.equal('this is a string', value);
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('the key should be valid still', function(done){
|
||||
setTimeout(function(){
|
||||
cache.get('test', function(err, value){
|
||||
assert.notEqual(null, value);
|
||||
done();
|
||||
})}, 1000);
|
||||
});
|
||||
it('the key should be invalid now', function(done){
|
||||
setTimeout(function(){
|
||||
cache.get('test', function(err, value){
|
||||
assert.equal(null, value);
|
||||
done();
|
||||
})}, 3000);
|
||||
});
|
||||
it('should be able to delete a key', function(done){
|
||||
cache.set('test2', 'whatever', function(err){
|
||||
cache.del('test2', function(){
|
||||
cache.get('test2', function(err, value){
|
||||
assert.equal(value, null);
|
||||
done()
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
it('should have a function to get the cache id', function() {
|
||||
assert.ok(cache.id())
|
||||
})
|
||||
it('should allow setting cache id', function() {
|
||||
assert.equal(src({id:'id-test'}).id(), 'id-test')
|
||||
})
|
||||
it('should list the cache keys', function(done) {
|
||||
var keys = _.map([
|
||||
1,2,3,4,5,6,7,8,9,10,11,12
|
||||
], String)
|
||||
async.each(keys, function(k, cb) {
|
||||
cache.set(k, new Date().toJSON(), cb)
|
||||
}, function() {
|
||||
cache.keys(function(err, ks) {
|
||||
_.each(keys, function(k) {
|
||||
assert.ok(ks.indexOf(k) !== -1)
|
||||
})
|
||||
cache.keys(function(er, ks) {
|
||||
var raws = _.map(keys, function(p) { return cache.id() + ':' + p })
|
||||
_.each(raws, function(k) {
|
||||
assert.ok(ks.indexOf(k) !== -1)
|
||||
})
|
||||
done()
|
||||
}, { raw: true })
|
||||
});
|
||||
})
|
||||
})
|
||||
});
|
||||
@@ -1 +0,0 @@
|
||||
module.exports = (a, b) => a - b
|
||||
@@ -1,5 +0,0 @@
|
||||
float sum(float a, float b) {
|
||||
return a + b;
|
||||
}
|
||||
|
||||
#pragma glslify: export(sum)
|
||||
@@ -33,7 +33,6 @@ include(
|
||||
"orx-fx",
|
||||
"orx-jvm:orx-git-archiver",
|
||||
"orx-jvm:orx-git-archiver-gradle",
|
||||
"orx-glslify",
|
||||
"orx-gradient-descent",
|
||||
"orx-hash-grid",
|
||||
"orx-integral-image",
|
||||
|
||||
Reference in New Issue
Block a user