Skip to content

Commit 79e5837

Browse files
committed
Refactored WebGL classes.
1 parent 65c22da commit 79e5837

10 files changed

+653
-577
lines changed

src/Three.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,7 @@ export { SpritePlugin } from './renderers/webgl/plugins/SpritePlugin.js';
44
export { LensFlarePlugin } from './renderers/webgl/plugins/LensFlarePlugin.js';
55
export { WebGLUniforms } from './renderers/webgl/WebGLUniforms.js';
66
export { WebGLTextures } from './renderers/webgl/WebGLTextures.js';
7-
export {
8-
WebGLStencilBuffer,
9-
WebGLDepthBuffer,
10-
WebGLColorBuffer,
11-
WebGLState
12-
} from './renderers/webgl/WebGLState.js';
7+
export { WebGLState } from './renderers/webgl/WebGLState.js';
138
export { WebGLShadowMap } from './renderers/webgl/WebGLShadowMap.js';
149
export { WebGLShader } from './renderers/webgl/WebGLShader.js';
1510
export { WebGLProperties } from './renderers/webgl/WebGLProperties.js';

src/renderers/WebGLRenderer.js

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1673,22 +1673,15 @@ function WebGLRenderer( parameters ) {
16731673

16741674
function setMaterial( material ) {
16751675

1676-
if ( material.side !== DoubleSide )
1677-
state.enable( _gl.CULL_FACE );
1678-
else
1679-
state.disable( _gl.CULL_FACE );
1676+
material.side === DoubleSide
1677+
? state.disable( _gl.CULL_FACE )
1678+
: state.enable( _gl.CULL_FACE );
16801679

16811680
state.setFlipSided( material.side === BackSide );
16821681

1683-
if ( material.transparent === true ) {
1684-
1685-
state.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );
1686-
1687-
} else {
1688-
1689-
state.setBlending( NoBlending );
1690-
1691-
}
1682+
material.transparent === true
1683+
? state.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha )
1684+
: state.setBlending( NoBlending );
16921685

16931686
state.setDepthFunc( material.depthFunc );
16941687
state.setDepthTest( material.depthTest );

src/renderers/webgl/WebGLBufferRenderer.js

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* @author mrdoob / http://mrdoob.com/
33
*/
44

5-
function WebGLBufferRenderer( _gl, extensions, _infoRender ) {
5+
function WebGLBufferRenderer( gl, extensions, infoRender ) {
66

77
var mode;
88

@@ -14,12 +14,12 @@ function WebGLBufferRenderer( _gl, extensions, _infoRender ) {
1414

1515
function render( start, count ) {
1616

17-
_gl.drawArrays( mode, start, count );
17+
gl.drawArrays( mode, start, count );
1818

19-
_infoRender.calls ++;
20-
_infoRender.vertices += count;
19+
infoRender.calls ++;
20+
infoRender.vertices += count;
2121

22-
if ( mode === _gl.TRIANGLES ) _infoRender.faces += count / 3;
22+
if ( mode === gl.TRIANGLES ) infoRender.faces += count / 3;
2323

2424
}
2525

@@ -52,15 +52,18 @@ function WebGLBufferRenderer( _gl, extensions, _infoRender ) {
5252

5353
}
5454

55-
_infoRender.calls ++;
56-
_infoRender.vertices += count * geometry.maxInstancedCount;
57-
if ( mode === _gl.TRIANGLES ) _infoRender.faces += geometry.maxInstancedCount * count / 3;
55+
infoRender.calls ++;
56+
infoRender.vertices += count * geometry.maxInstancedCount;
57+
58+
if ( mode === gl.TRIANGLES ) infoRender.faces += geometry.maxInstancedCount * count / 3;
5859

5960
}
6061

61-
this.setMode = setMode;
62-
this.render = render;
63-
this.renderInstances = renderInstances;
62+
return {
63+
setMode: setMode,
64+
render: render,
65+
renderInstances: renderInstances
66+
};
6467

6568
}
6669

src/renderers/webgl/WebGLCapabilities.js

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -56,40 +56,41 @@ function WebGLCapabilities( gl, extensions, parameters ) {
5656

5757
}
5858

59-
this.getMaxAnisotropy = getMaxAnisotropy;
60-
this.getMaxPrecision = getMaxPrecision;
59+
var precision = parameters.precision !== undefined ? parameters.precision : 'highp';
60+
var maxPrecision = getMaxPrecision( precision );
6161

62-
this.precision = parameters.precision !== undefined ? parameters.precision : 'highp';
63-
this.logarithmicDepthBuffer = parameters.logarithmicDepthBuffer !== undefined ? parameters.logarithmicDepthBuffer : false;
62+
if ( maxPrecision !== precision ) {
6463

65-
this.maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );
66-
this.maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );
67-
this.maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );
68-
this.maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );
64+
console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );
65+
precision = maxPrecision;
6966

70-
this.maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );
71-
this.maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );
72-
this.maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );
73-
this.maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );
67+
}
7468

75-
this.vertexTextures = this.maxVertexTextures > 0;
76-
this.floatFragmentTextures = !! extensions.get( 'OES_texture_float' );
77-
this.floatVertexTextures = this.vertexTextures && this.floatFragmentTextures;
69+
var logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true && !! extensions.get( 'EXT_frag_depth' );
7870

79-
var _maxPrecision = getMaxPrecision( this.precision );
71+
return {
8072

81-
if ( _maxPrecision !== this.precision ) {
73+
getMaxAnisotropy: getMaxAnisotropy,
74+
getMaxPrecision: getMaxPrecision,
8275

83-
console.warn( 'THREE.WebGLRenderer:', this.precision, 'not supported, using', _maxPrecision, 'instead.' );
84-
this.precision = _maxPrecision;
76+
precision: precision,
77+
logarithmicDepthBuffer: logarithmicDepthBuffer,
8578

86-
}
79+
maxTextures: gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS ),
80+
maxVertexTextures: gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS ),
81+
maxTextureSize: gl.getParameter( gl.MAX_TEXTURE_SIZE ),
82+
maxCubemapSize: gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE ),
8783

88-
if ( this.logarithmicDepthBuffer ) {
84+
maxAttributes: gl.getParameter( gl.MAX_VERTEX_ATTRIBS ),
85+
maxVertexUniforms: gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS ),
86+
maxVaryings: gl.getParameter( gl.MAX_VARYING_VECTORS ),
87+
maxFragmentUniforms: gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS ),
8988

90-
this.logarithmicDepthBuffer = !! extensions.get( 'EXT_frag_depth' );
89+
vertexTextures: this.maxVertexTextures > 0,
90+
floatFragmentTextures: !! extensions.get( 'OES_texture_float' ),
91+
floatVertexTextures: this.vertexTextures && this.floatFragmentTextures
9192

92-
}
93+
};
9394

9495
}
9596

src/renderers/webgl/WebGLExtensions.js

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,52 +6,56 @@ function WebGLExtensions( gl ) {
66

77
var extensions = {};
88

9-
this.get = function ( name ) {
9+
return {
1010

11-
if ( extensions[ name ] !== undefined ) {
11+
get: function ( name ) {
1212

13-
return extensions[ name ];
13+
if ( extensions[ name ] !== undefined ) {
1414

15-
}
15+
return extensions[ name ];
1616

17-
var extension;
17+
}
1818

19-
switch ( name ) {
19+
var extension;
2020

21-
case 'WEBGL_depth_texture':
22-
extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );
23-
break;
21+
switch ( name ) {
2422

25-
case 'EXT_texture_filter_anisotropic':
26-
extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );
27-
break;
23+
case 'WEBGL_depth_texture':
24+
extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );
25+
break;
2826

29-
case 'WEBGL_compressed_texture_s3tc':
30-
extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );
31-
break;
27+
case 'EXT_texture_filter_anisotropic':
28+
extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );
29+
break;
3230

33-
case 'WEBGL_compressed_texture_pvrtc':
34-
extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );
35-
break;
31+
case 'WEBGL_compressed_texture_s3tc':
32+
extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );
33+
break;
3634

37-
case 'WEBGL_compressed_texture_etc1':
38-
extension = gl.getExtension( 'WEBGL_compressed_texture_etc1' );
39-
break;
35+
case 'WEBGL_compressed_texture_pvrtc':
36+
extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );
37+
break;
4038

41-
default:
42-
extension = gl.getExtension( name );
39+
case 'WEBGL_compressed_texture_etc1':
40+
extension = gl.getExtension( 'WEBGL_compressed_texture_etc1' );
41+
break;
4342

44-
}
43+
default:
44+
extension = gl.getExtension( name );
4545

46-
if ( extension === null ) {
46+
}
4747

48-
console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );
48+
if ( extension === null ) {
4949

50-
}
50+
console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );
5151

52-
extensions[ name ] = extension;
52+
}
5353

54-
return extension;
54+
extensions[ name ] = extension;
55+
56+
return extension;
57+
58+
}
5559

5660
};
5761

src/renderers/webgl/WebGLGeometries.js

Lines changed: 43 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,44 +8,6 @@ function WebGLGeometries( gl, properties, info ) {
88

99
var geometries = {};
1010

11-
function get( object ) {
12-
13-
var geometry = object.geometry;
14-
15-
if ( geometries[ geometry.id ] !== undefined ) {
16-
17-
return geometries[ geometry.id ];
18-
19-
}
20-
21-
geometry.addEventListener( 'dispose', onGeometryDispose );
22-
23-
var buffergeometry;
24-
25-
if ( (geometry && geometry.isBufferGeometry) ) {
26-
27-
buffergeometry = geometry;
28-
29-
} else if ( (geometry && geometry.isGeometry) ) {
30-
31-
if ( geometry._bufferGeometry === undefined ) {
32-
33-
geometry._bufferGeometry = new BufferGeometry().setFromObject( object );
34-
35-
}
36-
37-
buffergeometry = geometry._bufferGeometry;
38-
39-
}
40-
41-
geometries[ geometry.id ] = buffergeometry;
42-
43-
info.memory.geometries ++;
44-
45-
return buffergeometry;
46-
47-
}
48-
4911
function onGeometryDispose( event ) {
5012

5113
var geometry = event.target;
@@ -93,7 +55,7 @@ function WebGLGeometries( gl, properties, info ) {
9355

9456
function getAttributeBuffer( attribute ) {
9557

96-
if ( (attribute && attribute.isInterleavedBufferAttribute) ) {
58+
if ( attribute.isInterleavedBufferAttribute ) {
9759

9860
return properties.get( attribute.data ).__webglBuffer;
9961

@@ -128,7 +90,7 @@ function WebGLGeometries( gl, properties, info ) {
12890

12991
function removeAttributeBuffer( attribute ) {
13092

131-
if ( (attribute && attribute.isInterleavedBufferAttribute) ) {
93+
if ( attribute.isInterleavedBufferAttribute ) {
13294

13395
properties.delete( attribute.data );
13496

@@ -140,7 +102,47 @@ function WebGLGeometries( gl, properties, info ) {
140102

141103
}
142104

143-
this.get = get;
105+
return {
106+
107+
get: function ( object ) {
108+
109+
var geometry = object.geometry;
110+
111+
if ( geometries[ geometry.id ] !== undefined ) {
112+
113+
return geometries[ geometry.id ];
114+
115+
}
116+
117+
geometry.addEventListener( 'dispose', onGeometryDispose );
118+
119+
var buffergeometry;
120+
121+
if ( geometry.isBufferGeometry ) {
122+
123+
buffergeometry = geometry;
124+
125+
} else if ( geometry.isGeometry ) {
126+
127+
if ( geometry._bufferGeometry === undefined ) {
128+
129+
geometry._bufferGeometry = new BufferGeometry().setFromObject( object );
130+
131+
}
132+
133+
buffergeometry = geometry._bufferGeometry;
134+
135+
}
136+
137+
geometries[ geometry.id ] = buffergeometry;
138+
139+
info.memory.geometries ++;
140+
141+
return buffergeometry;
142+
143+
}
144+
145+
};
144146

145147
}
146148

0 commit comments

Comments
 (0)