Skip to content

Commit

Permalink
Merge pull request #14411 from Mugen87/dev14
Browse files Browse the repository at this point in the history
WebGLRenderer: Removed WebGLSpriteRenderer
  • Loading branch information
mrdoob committed Jul 7, 2018
2 parents 33903f7 + 0367eff commit 7130648
Show file tree
Hide file tree
Showing 16 changed files with 206 additions and 488 deletions.
39 changes: 0 additions & 39 deletions docs/api/renderers/webgl/plugins/SpritePlugin.html

This file was deleted.

4 changes: 0 additions & 4 deletions docs/list.js
Original file line number Diff line number Diff line change
Expand Up @@ -416,10 +416,6 @@ var list = {
"WebGLProgram": "api/renderers/webgl/WebGLProgram",
"WebGLShader": "api/renderers/webgl/WebGLShader",
"WebGLState": "api/renderers/webgl/WebGLState"
},

"WebGLRenderer / Plugins": {
"SpritePlugin": "api/renderers/webgl/plugins/SpritePlugin"
}

}
Expand Down
2 changes: 1 addition & 1 deletion src/materials/SpriteMaterial.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ function SpriteMaterial( parameters ) {

this.rotation = 0;

this.fog = false;
this.lights = false;
this.transparent = true;

this.setValues( parameters );

Expand Down
26 changes: 26 additions & 0 deletions src/objects/Sprite.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ import { Vector2 } from '../math/Vector2.js';
import { Vector3 } from '../math/Vector3.js';
import { Matrix4 } from '../math/Matrix4.js';
import { Object3D } from '../core/Object3D.js';
import { BufferGeometry } from '../core/BufferGeometry.js';
import { InterleavedBuffer } from '../core/InterleavedBuffer.js';
import { InterleavedBufferAttribute } from '../core/InterleavedBufferAttribute.js';
import { SpriteMaterial } from '../materials/SpriteMaterial.js';

/**
Expand All @@ -16,6 +19,7 @@ function Sprite( material ) {
this.type = 'Sprite';

this.material = ( material !== undefined ) ? material : new SpriteMaterial();
this.geometry = SpriteGeometry;

this.center = new Vector2( 0.5, 0.5 );

Expand Down Expand Up @@ -141,5 +145,27 @@ Sprite.prototype = Object.assign( Object.create( Object3D.prototype ), {

} );

//

var SpriteGeometry = ( function () {

var geometry = new BufferGeometry();

var float32Array = new Float32Array( [
- 0.5, - 0.5, 0, 0, 0,
0.5, - 0.5, 0, 1, 0,
0.5, 0.5, 0, 1, 1,
- 0.5, 0.5, 0, 0, 1
] );

var interleavedBuffer = new InterleavedBuffer( float32Array, 5 );

geometry.setIndex( [ 0, 1, 2, 0, 2, 3 ] );
geometry.addAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );
geometry.addAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );

return geometry;

} )();

export { Sprite };
63 changes: 53 additions & 10 deletions src/renderers/WebGLRenderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ import { WebGLProperties } from './webgl/WebGLProperties.js';
import { WebGLRenderLists } from './webgl/WebGLRenderLists.js';
import { WebGLRenderStates } from './webgl/WebGLRenderStates.js';
import { WebGLShadowMap } from './webgl/WebGLShadowMap.js';
import { WebGLSpriteRenderer } from './webgl/WebGLSpriteRenderer.js';
import { WebGLState } from './webgl/WebGLState.js';
import { WebGLTextures } from './webgl/WebGLTextures.js';
import { WebGLUniforms } from './webgl/WebGLUniforms.js';
Expand Down Expand Up @@ -234,7 +233,6 @@ function WebGLRenderer( parameters ) {
var programCache, renderLists, renderStates;

var background, morphtargets, bufferRenderer, indexedBufferRenderer;
var spriteRenderer;

var utils;

Expand Down Expand Up @@ -274,8 +272,6 @@ function WebGLRenderer( parameters ) {
bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );
indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );

spriteRenderer = new WebGLSpriteRenderer( _this, _gl, state, textures, capabilities );

info.programs = programCache.programs;

_this.context = _gl;
Expand Down Expand Up @@ -820,6 +816,10 @@ function WebGLRenderer( parameters ) {

renderer.setMode( _gl.POINTS );

} else if ( object.isSprite ) {

renderer.setMode( _gl.TRIANGLES );

}

if ( geometry && geometry.isInstancedBufferGeometry ) {
Expand Down Expand Up @@ -1130,13 +1130,15 @@ function WebGLRenderer( parameters ) {

var opaqueObjects = currentRenderList.opaque;
var transparentObjects = currentRenderList.transparent;
var spriteObjects = currentRenderList.sprites;

if ( scene.overrideMaterial ) {

var overrideMaterial = scene.overrideMaterial;

if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial );
if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial );
if ( spriteObjects.length ) renderObjects( spriteObjects, scene, camera, overrideMaterial );

} else {

Expand All @@ -1148,13 +1150,11 @@ function WebGLRenderer( parameters ) {

if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera );

}

// custom renderers
//

var spritesArray = currentRenderState.state.spritesArray;
if ( spriteObjects.length ) renderObjects( spriteObjects, scene, camera );

spriteRenderer.render( spritesArray, scene, camera );
}

// Generate mipmap if we're using any kind of mipmap filtering

Expand Down Expand Up @@ -1264,7 +1264,19 @@ function WebGLRenderer( parameters ) {

if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {

currentRenderState.pushSprite( object );
if ( sortObjects ) {

_vector3.setFromMatrixPosition( object.matrixWorld )
.applyMatrix4( _projScreenMatrix );

var material = object.material;

}

var geometry = objects.update( object );
var material = object.material;

currentRenderList.push( object, geometry, material, _vector3.z, null );

}

Expand Down Expand Up @@ -1872,6 +1884,10 @@ function WebGLRenderer( parameters ) {

refreshUniformsPoints( m_uniforms, material );

} else if ( material.isSpriteMaterial ) {

refreshUniformsSprites( m_uniforms, material );

} else if ( material.isShadowMaterial ) {

m_uniforms.color.value = material.color;
Expand All @@ -1896,6 +1912,12 @@ function WebGLRenderer( parameters ) {

}

if ( material.isSpriteMaterial ) {

p_uniforms.setValue( _gl, 'center', object.center );

}

// common matrices

p_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );
Expand Down Expand Up @@ -2080,6 +2102,27 @@ function WebGLRenderer( parameters ) {

}

function refreshUniformsSprites( uniforms, material ) {

uniforms.diffuse.value = material.color;
uniforms.opacity.value = material.opacity;
uniforms.rotation.value = material.rotation;
uniforms.map.value = material.map;

if ( material.map !== null ) {

if ( material.map.matrixAutoUpdate === true ) {

material.map.updateMatrix();

}

uniforms.uvTransform.value.copy( material.map.matrix );

}

}

function refreshUniformsFog( uniforms, fog ) {

uniforms.fogColor.value = fog.color;
Expand Down
6 changes: 5 additions & 1 deletion src/renderers/shaders/ShaderChunk.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,8 @@ import points_frag from './ShaderLib/points_frag.glsl';
import points_vert from './ShaderLib/points_vert.glsl';
import shadow_frag from './ShaderLib/shadow_frag.glsl';
import shadow_vert from './ShaderLib/shadow_vert.glsl';
import sprite_frag from './ShaderLib/sprite_frag.glsl';
import sprite_vert from './ShaderLib/sprite_vert.glsl';

export var ShaderChunk = {
alphamap_fragment: alphamap_fragment,
Expand Down Expand Up @@ -227,5 +229,7 @@ export var ShaderChunk = {
points_frag: points_frag,
points_vert: points_vert,
shadow_frag: shadow_frag,
shadow_vert: shadow_vert
shadow_vert: shadow_vert,
sprite_frag: sprite_frag,
sprite_vert: sprite_vert
};
12 changes: 12 additions & 0 deletions src/renderers/shaders/ShaderLib.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,18 @@ var ShaderLib = {

},

sprite: {

uniforms: UniformsUtils.merge( [
UniformsLib.sprite,
UniformsLib.fog
] ),

vertexShader: ShaderChunk.sprite_vert,
fragmentShader: ShaderChunk.sprite_frag

},

/* -------------------------------------------------------------------------
// Cube map shader
------------------------------------------------------------------------- */
Expand Down
28 changes: 28 additions & 0 deletions src/renderers/shaders/ShaderLib/sprite_frag.glsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
uniform vec3 diffuse;
uniform float opacity;

#include <common>
#include <packing>
#include <uv_pars_fragment>
#include <map_pars_fragment>
#include <fog_pars_fragment>
#include <logdepthbuf_pars_fragment>
#include <clipping_planes_pars_fragment>

void main() {

vec3 outgoingLight = vec3( 0.0 );
vec4 diffuseColor = vec4( diffuse, opacity );

#include <clipping_planes_fragment>
#include <logdepthbuf_fragment>
#include <map_fragment>
#include <alphatest_fragment>

outgoingLight = diffuseColor.rgb;

gl_FragColor = vec4( outgoingLight, diffuseColor.a );

#include <fog_fragment>

}
35 changes: 35 additions & 0 deletions src/renderers/shaders/ShaderLib/sprite_vert.glsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
uniform float rotation;
uniform vec2 center;

#include <common>
#include <uv_pars_vertex>
#include <fog_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>

void main() {

#include <uv_vertex>

vec2 scale;
scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );
scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );

vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;

vec2 rotatedPosition;
rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;
rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;

vec4 mvPosition;

mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );
mvPosition.xy += rotatedPosition;

gl_Position = projectionMatrix * mvPosition;

#include <logdepthbuf_vertex>
#include <clipping_planes_vertex>
#include <fog_vertex>

}
11 changes: 11 additions & 0 deletions src/renderers/shaders/UniformsLib.js
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,17 @@ var UniformsLib = {
map: { value: null },
uvTransform: { value: new Matrix3() }

},

sprite: {

diffuse: { value: new Color( 0xeeeeee ) },
opacity: { value: 1.0 },
center: { value: new Vector2( 0.5, 0.5 ) },
rotation: { value: 0.0 },
map: { value: null },
uvTransform: { value: new Matrix3() }

}

};
Expand Down
3 changes: 2 additions & 1 deletion src/renderers/webgl/WebGLPrograms.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
LineBasicMaterial: 'basic',
LineDashedMaterial: 'dashed',
PointsMaterial: 'points',
ShadowMaterial: 'shadow'
ShadowMaterial: 'shadow',
SpriteMaterial: 'sprite'
};

var parameterNames = [
Expand Down
Loading

0 comments on commit 7130648

Please sign in to comment.