Browse Source

WebGLFlareRenderer, WebGLSpriteRenderer: context lost support.

Mr.doob 8 years ago
parent
commit
5e661c2b30

+ 6 - 7
src/renderers/WebGLRenderer.js

@@ -246,6 +246,7 @@ function WebGLRenderer( parameters ) {
 	var programCache, renderLists;
 
 	var background, bufferRenderer, indexedBufferRenderer;
+	var flareRenderer, spriteRenderer;
 
 	function initGLContext() {
 
@@ -284,6 +285,9 @@ function WebGLRenderer( parameters ) {
 		bufferRenderer = new WebGLBufferRenderer( _gl, extensions, _infoRender );
 		indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, _infoRender );
 
+		flareRenderer = new WebGLFlareRenderer( _this, _gl, state, capabilities );
+		spriteRenderer = new WebGLSpriteRenderer( _this, _gl, state, capabilities );
+
 		_this.info.programs = programCache.programs;
 
 		_this.context = _gl;
@@ -309,11 +313,6 @@ function WebGLRenderer( parameters ) {
 
 	this.shadowMap = shadowMap;
 
-	//
-
-	var spriteRenderer = new WebGLSpriteRenderer( this, spritesArray );
-	var flareRenderer = new WebGLFlareRenderer( this, flaresArray );
-
 	// API
 
 	this.getContext = function () {
@@ -1184,8 +1183,8 @@ function WebGLRenderer( parameters ) {
 
 		// custom renderers
 
-		spriteRenderer.render( scene, camera );
-		flareRenderer.render( scene, camera, _currentViewport );
+		spriteRenderer.render( spritesArray, scene, camera );
+		flareRenderer.render( flaresArray, scene, camera, _currentViewport );
 
 		// Generate mipmap if we're using any kind of mipmap filtering
 

+ 3 - 6
src/renderers/webgl/WebGLFlareRenderer.js

@@ -7,10 +7,7 @@ import { Box2 } from '../../math/Box2';
 import { Vector2 } from '../../math/Vector2';
 import { Vector3 } from '../../math/Vector3';
 
-function WebGLFlareRenderer( renderer, flares ) {
-
-	var gl = renderer.context;
-	var state = renderer.state;
+function WebGLFlareRenderer( renderer, gl, state, capabilities ) {
 
 	var vertexBuffer, elementBuffer;
 	var shader, program, attributes, uniforms;
@@ -181,7 +178,7 @@ function WebGLFlareRenderer( renderer, flares ) {
 	 *         reads these back and calculates occlusion.
 	 */
 
-	this.render = function ( scene, camera, viewport ) {
+	this.render = function ( flares, scene, camera, viewport ) {
 
 		if ( flares.length === 0 ) return;
 
@@ -366,7 +363,7 @@ function WebGLFlareRenderer( renderer, flares ) {
 		var fragmentShader = gl.createShader( gl.FRAGMENT_SHADER );
 		var vertexShader = gl.createShader( gl.VERTEX_SHADER );
 
-		var prefix = "precision " + renderer.getPrecision() + " float;\n";
+		var prefix = "precision " + capabilities.precision + " float;\n";
 
 		gl.shaderSource( fragmentShader, prefix + shader.fragmentShader );
 		gl.shaderSource( vertexShader, prefix + shader.vertexShader );

+ 4 - 7
src/renderers/webgl/WebGLSpriteRenderer.js

@@ -7,10 +7,7 @@ import { CanvasTexture } from '../../textures/CanvasTexture';
 import { Vector3 } from '../../math/Vector3';
 import { Quaternion } from '../../math/Quaternion';
 
-function WebGLSpriteRenderer( renderer, sprites ) {
-
-	var gl = renderer.context;
-	var state = renderer.state;
+function WebGLSpriteRenderer( renderer, gl, state, capabilities ) {
 
 	var vertexBuffer, elementBuffer;
 	var program, attributes, uniforms;
@@ -88,7 +85,7 @@ function WebGLSpriteRenderer( renderer, sprites ) {
 
 	}
 
-	this.render = function ( scene, camera ) {
+	this.render = function ( sprites, scene, camera ) {
 
 		if ( sprites.length === 0 ) return;
 
@@ -261,7 +258,7 @@ function WebGLSpriteRenderer( renderer, sprites ) {
 
 		gl.shaderSource( vertexShader, [
 
-			'precision ' + renderer.getPrecision() + ' float;',
+			'precision ' + capabilities.precision + ' float;',
 
 			'#define SHADER_NAME ' + 'SpriteMaterial',
 
@@ -301,7 +298,7 @@ function WebGLSpriteRenderer( renderer, sprites ) {
 
 		gl.shaderSource( fragmentShader, [
 
-			'precision ' + renderer.getPrecision() + ' float;',
+			'precision ' + capabilities.precision + ' float;',
 
 			'#define SHADER_NAME ' + 'SpriteMaterial',