From 7f25fecb5fc5830a791aa8d97b5de527352ceef2 Mon Sep 17 00:00:00 2001 From: Robert Long <robert@robertlong.me> Date: Mon, 6 Aug 2018 18:06:30 -0700 Subject: [PATCH] Add gamma-factor component . --- src/avatar-selector.js | 1 + src/components/gamma-factor.js | 43 ++++++++++++++++++++++++++++++++++ src/hub.html | 1 + src/hub.js | 1 + 4 files changed, 46 insertions(+) create mode 100644 src/components/gamma-factor.js diff --git a/src/avatar-selector.js b/src/avatar-selector.js index 0b0aead55..1ded01b45 100644 --- a/src/avatar-selector.js +++ b/src/avatar-selector.js @@ -15,6 +15,7 @@ import "three/examples/js/loaders/GLTFLoader"; import "./components/animation-mixer"; import "./components/audio-feedback"; import "./components/loop-animation"; +import "./components/gamma-factor"; import "./gltf-component-mappings"; import { avatars } from "./assets/avatars/avatars"; diff --git a/src/components/gamma-factor.js b/src/components/gamma-factor.js new file mode 100644 index 000000000..c3ffa4fce --- /dev/null +++ b/src/components/gamma-factor.js @@ -0,0 +1,43 @@ +AFRAME.registerComponent("gamma-factor", { + schema: { + gammaFactor: { type: "number", default: 2.2 } + }, + + init() { + const el = this.el; + + if (!el.isScene) { + console.warn("gamma-factor component can only be applied to <a-scene>"); + } + }, + + update(prevData) { + const data = this.data; + const sceneEl = this.el; + const renderer = sceneEl.renderer; + let needsShaderUpdate = false; + + if (data.gammaFactor !== prevData.gammaFactor) { + renderer.gammaFactor = data.gammaFactor; + needsShaderUpdate = true; + } + + if (!needsShaderUpdate || sceneEl.time === 0) { + return; + } + + sceneEl.object3D.traverse(function(node) { + if (!node.isMesh) { + return; + } + + if (Array.isArray(node.material)) { + node.material.forEach(function(material) { + material.needsUpdate = true; + }); + } else { + node.material.needsUpdate = true; + } + }); + } +}); diff --git a/src/hub.html b/src/hub.html index 601c0d52b..aa2b0b31e 100644 --- a/src/hub.html +++ b/src/hub.html @@ -25,6 +25,7 @@ <a-scene renderer="antialias: true; gammaOutput: true; sortObjects: true; physicallyCorrectLights: true;" + gamma-factor networked-scene="adapter: janus; audio: true; debug: true; connectOnLoad: false;" physics="gravity: -6; debug: false;" mute-mic="eventSrc: a-scene; toggleEvents: action_mute" diff --git a/src/hub.js b/src/hub.js index 592b30b01..68798e671 100644 --- a/src/hub.js +++ b/src/hub.js @@ -73,6 +73,7 @@ import "./components/position-at-box-shape-border"; import "./components/remove-networked-object-button"; import "./components/destroy-at-extreme-distances"; import "./components/media-loader"; +import "./components/gamma-factor"; import ReactDOM from "react-dom"; import React from "react"; -- GitLab