From 8903a61c6e73a92620c433d1abfe973bdd164778 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 9 Mar 2016 10:24:46 -0800 Subject: [PATCH 1/9] basic shader --- .../rapidUniformChangeTest.fs | 26 +++++++++++ .../rapidUniformChangeTest.js | 44 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 examples/tests/rapidUniformChange/rapidUniformChangeTest.fs create mode 100644 examples/tests/rapidUniformChange/rapidUniformChangeTest.js diff --git a/examples/tests/rapidUniformChange/rapidUniformChangeTest.fs b/examples/tests/rapidUniformChange/rapidUniformChangeTest.fs new file mode 100644 index 0000000000..31ba437003 --- /dev/null +++ b/examples/tests/rapidUniformChange/rapidUniformChangeTest.fs @@ -0,0 +1,26 @@ + +// +// rapidUniformChangeTest.fs +// examples/homeContent/plant +// +// Created by Eric Levin on 3/9/16. +// Copyright 2016 High Fidelity, Inc. +// +// This fragment shader is designed to test the rapid changing of a uniform +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html + + +uniform float red = 0.1; + + +void mainImage(out vec4 fragColor, in vec2 fragCoord) { + fragColor = vec4(red, 0.0, 1.0, 1.0); +} +vec4 getProceduralColor() { + vec4 result; + vec2 position = _position.xz; + position += 0.5; + mainImage(result, position * iWorldScale.xz); + return result; +} \ No newline at end of file diff --git a/examples/tests/rapidUniformChange/rapidUniformChangeTest.js b/examples/tests/rapidUniformChange/rapidUniformChangeTest.js new file mode 100644 index 0000000000..d8d2d16e9b --- /dev/null +++ b/examples/tests/rapidUniformChange/rapidUniformChangeTest.js @@ -0,0 +1,44 @@ + +// rapidUniformChangeTest.js +// examples +// +// Created by Eric Levin on 3/9/2016. +// Copyright 2016 High Fidelity, Inc. +// This test creates a primitive with a fragment shader and rapidly updates its uniform values +// For the test to pass, the uniform should update at rate of update loop without the client crashing +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +var orientation = Camera.getOrientation(); +orientation = Quat.safeEulerAngles(orientation); +orientation.x = 0; +orientation = Quat.fromVec3Degrees(orientation); +var center = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(orientation))); + +var SHADER_URL = "file:///C:/Users/Eric/hifi/examples/tests/rapidUniformChange/rapidUniformChangeTest.fs"; + +var testEntity = Entities.addEntity({ + type: "Box", + dimensions: { + x: 0.5, + y: 0.5, + z: 0.5 + }, + position: center, + userData: JSON.stringify({ + ProceduralEntity: { + shaderUrl: SHADER_URL, + uniforms: { + red: 0.5 + } + } + }) +}); + +Script.scriptEnding.connect(cleanup); + +function cleanup() { + Entities.deleteEntity(testEntity); +} From 1a09c5d19f92b486c8be7d82d37d78a86c6b19c7 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 9 Mar 2016 10:33:18 -0800 Subject: [PATCH 2/9] test script for uniform change --- .../rapidUniformChangeTest.js | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/examples/tests/rapidUniformChange/rapidUniformChangeTest.js b/examples/tests/rapidUniformChange/rapidUniformChangeTest.js index d8d2d16e9b..cbd5ce4969 100644 --- a/examples/tests/rapidUniformChange/rapidUniformChangeTest.js +++ b/examples/tests/rapidUniformChange/rapidUniformChangeTest.js @@ -1,4 +1,3 @@ - // rapidUniformChangeTest.js // examples // @@ -19,6 +18,15 @@ var center = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(orientat var SHADER_URL = "file:///C:/Users/Eric/hifi/examples/tests/rapidUniformChange/rapidUniformChangeTest.fs"; + +var userData = { + ProceduralEntity: { + shaderUrl: SHADER_URL, + uniforms: { + red: 0.0 + } + } +} var testEntity = Entities.addEntity({ type: "Box", dimensions: { @@ -27,18 +35,23 @@ var testEntity = Entities.addEntity({ z: 0.5 }, position: center, - userData: JSON.stringify({ - ProceduralEntity: { - shaderUrl: SHADER_URL, - uniforms: { - red: 0.5 - } - } - }) + userData: JSON.stringify(userData) }); + +var currentTime = 0; + +function update(deltaTime) { + var red = (Math.sin(currentTime) + 1) / 2; + userData.ProceduralEntity.uniforms.red = red; + Entities.editEntity(testEntity, {userData: JSON.stringify(userData)}); + currentTime += deltaTime; +} + +Script.update.connect(update); + Script.scriptEnding.connect(cleanup); function cleanup() { Entities.deleteEntity(testEntity); -} +} \ No newline at end of file From 170dd418f84d9c2668fd957997dffda64805ccd4 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Wed, 9 Mar 2016 10:35:11 -0800 Subject: [PATCH 3/9] chaged shader link --- examples/tests/rapidUniformChange/rapidUniformChangeTest.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/tests/rapidUniformChange/rapidUniformChangeTest.js b/examples/tests/rapidUniformChange/rapidUniformChangeTest.js index cbd5ce4969..626ffebf8a 100644 --- a/examples/tests/rapidUniformChange/rapidUniformChangeTest.js +++ b/examples/tests/rapidUniformChange/rapidUniformChangeTest.js @@ -16,7 +16,7 @@ orientation.x = 0; orientation = Quat.fromVec3Degrees(orientation); var center = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(orientation))); -var SHADER_URL = "file:///C:/Users/Eric/hifi/examples/tests/rapidUniformChange/rapidUniformChangeTest.fs"; +var SHADER_URL = "https://s3-us-west-1.amazonaws.com/hifi-content/eric/shaders/rapidUniformChangeTest.fs"; var userData = { From d89d89fd0894404189f48db3cc42e0bf5874f691 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Wed, 9 Mar 2016 18:35:03 -0800 Subject: [PATCH 4/9] Add all entities and skybox --- .../rapidUniformChangeTest.js | 58 +++++++++++++------ 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/examples/tests/rapidUniformChange/rapidUniformChangeTest.js b/examples/tests/rapidUniformChange/rapidUniformChangeTest.js index 626ffebf8a..108b7d76af 100644 --- a/examples/tests/rapidUniformChange/rapidUniformChangeTest.js +++ b/examples/tests/rapidUniformChange/rapidUniformChangeTest.js @@ -3,8 +3,13 @@ // // Created by Eric Levin on 3/9/2016. // Copyright 2016 High Fidelity, Inc. -// This test creates a primitive with a fragment shader and rapidly updates its uniform values -// For the test to pass, the uniform should update at rate of update loop without the client crashing +// +// This test creates primitives with fragment shaders and rapidly updates its uniforms, as well as a skybox. +// For the test to pass: +// - The primitives (cube and sphere) should update at rate of update loop, cycling through red values. +// - The skymap should do the same, although its periodicity may be different. +// +// Under the hood, the primitives are driven by a uniform, while the skymap is driven by a timer. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -14,28 +19,38 @@ var orientation = Camera.getOrientation(); orientation = Quat.safeEulerAngles(orientation); orientation.x = 0; orientation = Quat.fromVec3Degrees(orientation); -var center = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(orientation))); + +var centerUp = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(orientation))); +centerUp.y += 0.5; +var centerDown = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(orientation))); +centerDown.y -= 0.5; var SHADER_URL = "https://s3-us-west-1.amazonaws.com/hifi-content/eric/shaders/rapidUniformChangeTest.fs"; - var userData = { ProceduralEntity: { shaderUrl: SHADER_URL, - uniforms: { - red: 0.0 - } + uniforms: { red: 0.0 } } } -var testEntity = Entities.addEntity({ +var edit = JSON.stringify(userData); +var testBox = Entities.addEntity({ type: "Box", - dimensions: { - x: 0.5, - y: 0.5, - z: 0.5 - }, - position: center, - userData: JSON.stringify(userData) + dimensions: { x: 0.5, y: 0.5, z: 0.5 }, + position: centerUp, + userData: edit +}); +var testSphere = Entities.addEntity({ + type: "Sphere", + dimensions: { x: 0.5, y: 0.5, z: 0.5 }, + position: centerDown, + userData: edit +}); +var testZone = Entities.addEntity({ + type: "Zone", + dimensions: { x: 3, y: 3, z: 3 }, + position: MyAvatar.position, + userData: edit }); @@ -44,7 +59,11 @@ var currentTime = 0; function update(deltaTime) { var red = (Math.sin(currentTime) + 1) / 2; userData.ProceduralEntity.uniforms.red = red; - Entities.editEntity(testEntity, {userData: JSON.stringify(userData)}); + edit = { userData: JSON.stringify(userData) }; + Entities.editEntity(testBox, edit); + Entities.editEntity(testSphere, edit); + Entities.editEntity(testZone, edit); + currentTime += deltaTime; } @@ -53,5 +72,8 @@ Script.update.connect(update); Script.scriptEnding.connect(cleanup); function cleanup() { - Entities.deleteEntity(testEntity); -} \ No newline at end of file + Entities.deleteEntity(testBox); + Entities.deleteEntity(testSphere); + Entities.deleteEntity(testZone); +} + From 3cd0f0d237c0655c7cb45263c5bb20bde2c93f9f Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Wed, 9 Mar 2016 18:35:15 -0800 Subject: [PATCH 5/9] Drive skybox off of timer --- .../rapidUniformChangeTest.js | 42 ++++++++++++------- .../tests/rapidProceduralChange/timerTest.fs | 21 ++++++++++ .../uniformTest.fs} | 15 +++---- 3 files changed, 55 insertions(+), 23 deletions(-) rename examples/tests/{rapidUniformChange => rapidProceduralChange}/rapidUniformChangeTest.js (61%) create mode 100644 examples/tests/rapidProceduralChange/timerTest.fs rename examples/tests/{rapidUniformChange/rapidUniformChangeTest.fs => rapidProceduralChange/uniformTest.fs} (85%) diff --git a/examples/tests/rapidUniformChange/rapidUniformChangeTest.js b/examples/tests/rapidProceduralChange/rapidUniformChangeTest.js similarity index 61% rename from examples/tests/rapidUniformChange/rapidUniformChangeTest.js rename to examples/tests/rapidProceduralChange/rapidUniformChangeTest.js index 108b7d76af..5652574756 100644 --- a/examples/tests/rapidUniformChange/rapidUniformChangeTest.js +++ b/examples/tests/rapidProceduralChange/rapidUniformChangeTest.js @@ -1,5 +1,5 @@ -// rapidUniformChangeTest.js -// examples +// rapidProceduralChangeTest.js +// examples/tests/rapidProceduralChange // // Created by Eric Levin on 3/9/2016. // Copyright 2016 High Fidelity, Inc. @@ -25,32 +25,40 @@ centerUp.y += 0.5; var centerDown = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(orientation))); centerDown.y -= 0.5; -var SHADER_URL = "https://s3-us-west-1.amazonaws.com/hifi-content/eric/shaders/rapidUniformChangeTest.fs"; +var ENTITY_SHADER_URL = "file:///C:/Users/User/Code/hifi-master/examples/tests/rapidUniformChange/uniformTest.fs"; +var SKYBOX_SHADER_URL = "file:///C:/Users/User/Code/hifi-master/examples/tests/rapidUniformChange/timerTest.fs"; -var userData = { +var entityData = { ProceduralEntity: { - shaderUrl: SHADER_URL, + shaderUrl: ENTITY_SHADER_URL, uniforms: { red: 0.0 } } -} -var edit = JSON.stringify(userData); +}; +var skyboxData = { + ProceduralEntity: { + shaderUrl: SKYBOX_SHADER_URL, + uniforms: { red: 0.0 } + } +}; var testBox = Entities.addEntity({ type: "Box", dimensions: { x: 0.5, y: 0.5, z: 0.5 }, position: centerUp, - userData: edit + userData: JSON.stringify(entityData) }); var testSphere = Entities.addEntity({ type: "Sphere", dimensions: { x: 0.5, y: 0.5, z: 0.5 }, position: centerDown, - userData: edit + userData: JSON.stringify(entityData) }); var testZone = Entities.addEntity({ type: "Zone", - dimensions: { x: 3, y: 3, z: 3 }, + dimensions: { x: 50, y: 50, z: 50 }, position: MyAvatar.position, - userData: edit + userData: JSON.stringify(skyboxData), + backgroundMode: "skybox", + skybox: { url: "http://kyoub.googlecode.com/svn/trunk/KYouB/textures/skybox_test.png" } }); @@ -58,11 +66,13 @@ var currentTime = 0; function update(deltaTime) { var red = (Math.sin(currentTime) + 1) / 2; - userData.ProceduralEntity.uniforms.red = red; - edit = { userData: JSON.stringify(userData) }; - Entities.editEntity(testBox, edit); - Entities.editEntity(testSphere, edit); - Entities.editEntity(testZone, edit); + entityData.ProceduralEntity.uniforms.red = red; + skyboxData.ProceduralEntity.uniforms.red = red; + entityEdit = { userData: JSON.stringify(entityData) }; + skyboxEdit = { userData: JSON.stringify(skyboxData) }; + Entities.editEntity(testBox, entityEdit); + Entities.editEntity(testSphere, entityEdit); + Entities.editEntity(testZone, skyboxEdit); currentTime += deltaTime; } diff --git a/examples/tests/rapidProceduralChange/timerTest.fs b/examples/tests/rapidProceduralChange/timerTest.fs new file mode 100644 index 0000000000..e0fcf9d1d6 --- /dev/null +++ b/examples/tests/rapidProceduralChange/timerTest.fs @@ -0,0 +1,21 @@ +// +// timerTest.fs +// examples/tests/rapidProceduralChange +// +// Created by Eric Levin on 3/9/16. +// Copyright 2016 High Fidelity, Inc. +// +// This fragment shader is designed to test the rapid changing of a uniform on the timer. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html + + +uniform float red; + +vec3 getSkyboxColor() { + float blue = red; + blue = (cos(iGlobalTime) + 1) / 2; + return vec3(1.0, 0.0, blue); +} + diff --git a/examples/tests/rapidUniformChange/rapidUniformChangeTest.fs b/examples/tests/rapidProceduralChange/uniformTest.fs similarity index 85% rename from examples/tests/rapidUniformChange/rapidUniformChangeTest.fs rename to examples/tests/rapidProceduralChange/uniformTest.fs index 31ba437003..fe0ad6a1ea 100644 --- a/examples/tests/rapidUniformChange/rapidUniformChangeTest.fs +++ b/examples/tests/rapidProceduralChange/uniformTest.fs @@ -1,26 +1,27 @@ - // -// rapidUniformChangeTest.fs -// examples/homeContent/plant +// uniformTest.fs +// examples/tests/rapidProceduralChange // // Created by Eric Levin on 3/9/16. // Copyright 2016 High Fidelity, Inc. // -// This fragment shader is designed to test the rapid changing of a uniform +// This fragment shader is designed to test the rapid changing of a uniform. +// // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -uniform float red = 0.1; - +uniform float red; void mainImage(out vec4 fragColor, in vec2 fragCoord) { fragColor = vec4(red, 0.0, 1.0, 1.0); } + vec4 getProceduralColor() { vec4 result; vec2 position = _position.xz; position += 0.5; mainImage(result, position * iWorldScale.xz); return result; -} \ No newline at end of file +} + From f37049059e8f5a559d242ba9a5a8674ffcbd38d1 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Thu, 10 Mar 2016 10:19:52 -0800 Subject: [PATCH 6/9] Finish name changes for rapidProceduralChange --- ...rapidUniformChangeTest.js => rapidProceduralChangeTest.js} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename examples/tests/rapidProceduralChange/{rapidUniformChangeTest.js => rapidProceduralChangeTest.js} (96%) diff --git a/examples/tests/rapidProceduralChange/rapidUniformChangeTest.js b/examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js similarity index 96% rename from examples/tests/rapidProceduralChange/rapidUniformChangeTest.js rename to examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js index 5652574756..5ec71330b8 100644 --- a/examples/tests/rapidProceduralChange/rapidUniformChangeTest.js +++ b/examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js @@ -25,8 +25,8 @@ centerUp.y += 0.5; var centerDown = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(orientation))); centerDown.y -= 0.5; -var ENTITY_SHADER_URL = "file:///C:/Users/User/Code/hifi-master/examples/tests/rapidUniformChange/uniformTest.fs"; -var SKYBOX_SHADER_URL = "file:///C:/Users/User/Code/hifi-master/examples/tests/rapidUniformChange/timerTest.fs"; +var ENTITY_SHADER_URL = "file:///C:/Users/User/Code/hifi-master/examples/tests/rapidProceduralChange/uniformTest.fs"; +var SKYBOX_SHADER_URL = "file:///C:/Users/User/Code/hifi-master/examples/tests/rapidProceduralChange/timerTest.fs"; var entityData = { ProceduralEntity: { From 2af4dd90e19a86eb5b958cf30e4e95c5b376d4bf Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 10 Mar 2016 11:40:09 -0800 Subject: [PATCH 7/9] updated shader links to be s3 --- .../tests/rapidProceduralChange/rapidProceduralChangeTest.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js b/examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js index 5ec71330b8..0d1bfd57ac 100644 --- a/examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js +++ b/examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js @@ -25,8 +25,8 @@ centerUp.y += 0.5; var centerDown = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(orientation))); centerDown.y -= 0.5; -var ENTITY_SHADER_URL = "file:///C:/Users/User/Code/hifi-master/examples/tests/rapidProceduralChange/uniformTest.fs"; -var SKYBOX_SHADER_URL = "file:///C:/Users/User/Code/hifi-master/examples/tests/rapidProceduralChange/timerTest.fs"; +var ENTITY_SHADER_URL = "https://s3-us-west-1.amazonaws.com/hifi-content/eric/shaders/uniformTest.fs"; +var SKYBOX_SHADER_URL = "https://s3-us-west-1.amazonaws.com/hifi-content/eric/shaders/timerTest.fs"; var entityData = { ProceduralEntity: { From 8fe926e5351ef70ba082ff6431f287082a72aa19 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 10 Mar 2016 11:41:12 -0800 Subject: [PATCH 8/9] added print statements --- .../tests/rapidProceduralChange/rapidProceduralChangeTest.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js b/examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js index 0d1bfd57ac..46c510951d 100644 --- a/examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js +++ b/examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js @@ -40,6 +40,8 @@ var skyboxData = { uniforms: { red: 0.0 } } }; + +print("ABOUT TO ADD ENTITY"); var testBox = Entities.addEntity({ type: "Box", dimensions: { x: 0.5, y: 0.5, z: 0.5 }, @@ -70,6 +72,8 @@ function update(deltaTime) { skyboxData.ProceduralEntity.uniforms.red = red; entityEdit = { userData: JSON.stringify(entityData) }; skyboxEdit = { userData: JSON.stringify(skyboxData) }; + + print("ABOUT TO EDIT ENTITIES"); Entities.editEntity(testBox, entityEdit); Entities.editEntity(testSphere, entityEdit); Entities.editEntity(testZone, skyboxEdit); From 5ba96cb07c5390173345c0533e0a00ee1fe71dad Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Thu, 10 Mar 2016 12:47:31 -0800 Subject: [PATCH 9/9] removed print statements --- .../tests/rapidProceduralChange/rapidProceduralChangeTest.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js b/examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js index 46c510951d..6897a1b70f 100644 --- a/examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js +++ b/examples/tests/rapidProceduralChange/rapidProceduralChangeTest.js @@ -41,7 +41,6 @@ var skyboxData = { } }; -print("ABOUT TO ADD ENTITY"); var testBox = Entities.addEntity({ type: "Box", dimensions: { x: 0.5, y: 0.5, z: 0.5 }, @@ -73,7 +72,6 @@ function update(deltaTime) { entityEdit = { userData: JSON.stringify(entityData) }; skyboxEdit = { userData: JSON.stringify(skyboxData) }; - print("ABOUT TO EDIT ENTITIES"); Entities.editEntity(testBox, entityEdit); Entities.editEntity(testSphere, entityEdit); Entities.editEntity(testZone, skyboxEdit);