lkarch.org/tools/hexgl/bkcore/threejs/RenderManager.js
Lucas Kent e39465ad2f Changes to be committed:
new file:   Files/flashplayer_32_sa.exe
	new file:   favicon.ico
	new file:   globe.gif
	new file:   imgs/download.png
	new file:   imgs/zuck.jpg
	new file:   index.html
	new file:   other.ico
	new file:   script.js
	new file:   site.webmanifest
	new file:   sitemap.html
	new file:   styles/backround.css
	new file:   styles/border.css
	new file:   styles/fonts/Titillium_Web/OFL.txt
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Black.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Bold.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-BoldItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-ExtraLight.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-ExtraLightItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Italic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Light.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-LightItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Regular.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-SemiBold.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-SemiBoldItalic.ttf
	new file:   styles/fonts/webfontkit-20221027-163353/generator_config.txt
	new file:   styles/fonts/webfontkit-20221027-163353/specimen_files/grid_12-825-55-15.css
	new file:   styles/fonts/webfontkit-20221027-163353/specimen_files/specimen_stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-163353/stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-demo.html
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-webfont.woff
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-webfont.woff2
	new file:   styles/fonts/webfontkit-20221027-165950/generator_config.txt
	new file:   styles/fonts/webfontkit-20221027-165950/specimen_files/grid_12-825-55-15.css
	new file:   styles/fonts/webfontkit-20221027-165950/specimen_files/specimen_stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-165950/stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-demo.html
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-webfont.woff
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-webfont.woff2
	new file:   styles/style.css
	new file:   tools/2048/.gitignore
	new file:   tools/2048/.jshintrc
	new file:   tools/2048/CONTRIBUTING.md
	new file:   tools/2048/LICENSE.txt
	new file:   tools/2048/README.md
	new file:   tools/2048/Rakefile
	new file:   tools/2048/favicon.ico
	new file:   tools/2048/index.html
	new file:   tools/2048/js/animframe_polyfill.js
	new file:   tools/2048/js/application.js
	new file:   tools/2048/js/bind_polyfill.js
	new file:   tools/2048/js/classlist_polyfill.js
	new file:   tools/2048/js/game_manager.js
	new file:   tools/2048/js/grid.js
	new file:   tools/2048/js/html_actuator.js
	new file:   tools/2048/js/keyboard_input_manager.js
	new file:   tools/2048/js/local_storage_manager.js
	new file:   tools/2048/js/tile.js
    new file:   tools/2048/meta/apple-touch-icon.png
	new file:   tools/webretro/cores/neocd_libretro.js
	new file:   tools/webretro/cores/neocd_libretro.wasm
	new file:   tools/webretro/cores/nestopia_libretro.js
	new file:   tools/webretro/cores/nestopia_libretro.wasm
	new file:   tools/webretro/cores/o2em_libretro.js
	new file:   tools/webretro/cores/o2em_libretro.wasm
	new file:   tools/webretro/cores/opera_libretro.js
	new file:   tools/webretro/cores/opera_libretro.wasm
2022-11-02 08:40:01 -04:00

132 lines
3.1 KiB
JavaScript

/*!
* bkcore.threejs.RenderManager helps handling multiple scenes, cameras and render loops.
*
* @author Thibaut 'BKcore' Despoulain <http://bkcore.com>
* @license MIT
*
* Initialize the a RenderManager by passing a Renderer object:
* var renderManager = new bkcore.threejs.RenderManager(new THREE.WebGLRenderer());
*
* A render setup structure :
* {
* id <String> : render setup ID,
* scene <THREE.Scene> : main scene,
* camera <THREE.Camera> : main camera,
* render <Function> : render loop called when render setup is active (current),
* objects <Dic> : object references accessible in the render loop via this.objects
* }
*
* The render method's context will be the render setup's object, so in your render loop:
* function(delta, renderer)
* {
* this.scene;
* this.camera;
* this.id;
* this.objects;
* renderer.render(...);
* }
*
* Use the "objects" attribute to store useful references and variables like time, geometries, materials, etc.
* Example:
* renderManager.add('mySetup', scene, camera, function(delta, renderer)
* {
* this.objects.timer += delta;
* this.objects.torus.rotation.z = Math.PI * Math.cos(this.objects.timer);
* renderer.render(this.scene, this.camera);
* },
* {
* timer: 0,
* torus: torusMesh
* });
*/
var bkcore = bkcore || {};
bkcore.threejs = bkcore.threejs || {};
(function(w){
var perfNow;
var perfNowNames = ['now', 'webkitNow', 'msNow', 'mozNow'];
if(!!w['performance']) for(var i = 0; i < perfNowNames.length; ++i)
{
var n = perfNowNames[i];
if(!!w['performance'][n])
{
perfNow = function(){return w['performance'][n]()};
break;
}
}
if(!perfNow)
{
perfNow = Date.now;
}
w.perfNow = perfNow;
})(window);
bkcore.threejs.RenderManager = function(renderer)
{
this.renderer = renderer;
this.time = window.perfNow();
this.renders = {};
this.current = {};
this.size = 0;
this.defaultRenderMethod = function(delta, renderer)
{
renderer.render(this.scene, this.camera);
};
};
bkcore.threejs.RenderManager.prototype.add = function(id, scene, camera, render, objects)
{
render = render || this.defaultRenderMethod;
objects = objects || {};
this.renders[id] = {
id: id,
scene: scene,
camera: camera,
render: render,
objects: objects
};
if(this.size == 0) this.current = this.renders[id];
this.size++;
};
bkcore.threejs.RenderManager.prototype.get = function(id)
{
return this.renders[id];
};
bkcore.threejs.RenderManager.prototype.remove = function(id)
{
if(id in this.renders)
{
delete this.renders[id];
this.size--;
}
};
bkcore.threejs.RenderManager.prototype.renderCurrent = function()
{
if(this.current && this.current.render)
{
var now = window.perfNow();
var delta = now - this.time;
this.time = now;
this.current.render.call(this.current, delta, this.renderer);
}
else console.warn('RenderManager: No current render defined.');
};
bkcore.threejs.RenderManager.prototype.setCurrent = function(id)
{
if(id in this.renders)
{
this.current = this.renders[id];
}
else console.warn('RenderManager: Render "'+id+'" not found.');
};