UNPKG

glam

Version:

Experimental WebGL Engine

53 lines (37 loc) 1.35 kB
import UpdateTransform from '../../transform/update' import UpdateShaders from './update-shaders' import RenderDone from '../../scene/render-done' import Clear from './clear' import UpdateLights from './update-lights' export default function renderForwardScene( renderer, shaderCache, scene, camera ) { var gl = renderer.gl var meshes = scene.getByType( 'mesh' ) var lights = scene.getByType( 'light' ) gl.enable( gl.DEPTH_TEST ) gl.viewport( 0, 0, gl.canvas.width, gl.canvas.height ) Clear( gl, renderer.clear ) if( scene.flags.changed ) { UpdateShaders( renderer.gl, shaderCache, meshes, lights, scene ) } scene.updateTransforms() camera.update( renderer.canvas ) UpdateLights( lights ) renderer.emitter.emit('beforerender') for( var i=0; i < meshes.length; i++ ) { var mesh = meshes[i] var material = mesh.material var geometry = mesh.geometry if( material && geometry ) { if( material.shader.attributes.aNormal ) { camera.updateModelView( mesh.transform.global ) camera.updateNormal() } geometry.buffers.bind( material.shader ) material.setUniforms.forEach( fn => fn( material.shader, camera, mesh, lights ) ) geometry.buffers.draw( gl[material.mode] ) geometry.buffers.unbind() } } renderer.emitter.emit('afterrender') RenderDone( scene ) }