提交 f10da706 编写于 作者: M Mr.doob

UniformsUtils: Refactoring.

上级 0c51e577
import { Material } from './Material.js';
import { UniformsUtils } from '../renderers/shaders/UniformsUtils.js';
import { cloneUniforms } from '../renderers/shaders/UniformsUtils.js';
/**
* @author alteredq / http://alteredqualia.com/
......@@ -91,7 +91,7 @@ ShaderMaterial.prototype.copy = function ( source ) {
this.fragmentShader = source.fragmentShader;
this.vertexShader = source.vertexShader;
this.uniforms = UniformsUtils.clone( source.uniforms );
this.uniforms = cloneUniforms( source.uniforms );
this.defines = Object.assign( {}, source.defines );
......
......@@ -16,7 +16,7 @@ import { Frustum } from '../math/Frustum.js';
import { Matrix4 } from '../math/Matrix4.js';
import { ShaderLib } from './shaders/ShaderLib.js';
import { UniformsLib } from './shaders/UniformsLib.js';
import { UniformsUtils } from './shaders/UniformsUtils.js';
import { cloneUniforms } from './shaders/UniformsUtils.js';
import { Vector3 } from '../math/Vector3.js';
import { Vector4 } from '../math/Vector4.js';
import { WebGLAnimation } from './webgl/WebGLAnimation.js';
......@@ -1427,7 +1427,7 @@ function WebGLRenderer( parameters ) {
materialProperties.shader = {
name: material.type,
uniforms: UniformsUtils.clone( shader.uniforms ),
uniforms: cloneUniforms( shader.uniforms ),
vertexShader: shader.vertexShader,
fragmentShader: shader.fragmentShader
};
......
import { ShaderChunk } from './ShaderChunk.js';
import { UniformsUtils } from './UniformsUtils.js';
import { mergeUniforms } from './UniformsUtils.js';
import { Vector3 } from '../../math/Vector3.js';
import { UniformsLib } from './UniformsLib.js';
import { Color } from '../../math/Color.js';
......@@ -15,7 +15,7 @@ var ShaderLib = {
basic: {
uniforms: UniformsUtils.merge( [
uniforms: mergeUniforms( [
UniformsLib.common,
UniformsLib.specularmap,
UniformsLib.envmap,
......@@ -31,7 +31,7 @@ var ShaderLib = {
lambert: {
uniforms: UniformsUtils.merge( [
uniforms: mergeUniforms( [
UniformsLib.common,
UniformsLib.specularmap,
UniformsLib.envmap,
......@@ -52,7 +52,7 @@ var ShaderLib = {
phong: {
uniforms: UniformsUtils.merge( [
uniforms: mergeUniforms( [
UniformsLib.common,
UniformsLib.specularmap,
UniformsLib.envmap,
......@@ -79,7 +79,7 @@ var ShaderLib = {
standard: {
uniforms: UniformsUtils.merge( [
uniforms: mergeUniforms( [
UniformsLib.common,
UniformsLib.envmap,
UniformsLib.aomap,
......@@ -107,7 +107,7 @@ var ShaderLib = {
matcap: {
uniforms: UniformsUtils.merge( [
uniforms: mergeUniforms( [
UniformsLib.common,
UniformsLib.bumpmap,
UniformsLib.normalmap,
......@@ -125,7 +125,7 @@ var ShaderLib = {
points: {
uniforms: UniformsUtils.merge( [
uniforms: mergeUniforms( [
UniformsLib.points,
UniformsLib.fog
] ),
......@@ -137,7 +137,7 @@ var ShaderLib = {
dashed: {
uniforms: UniformsUtils.merge( [
uniforms: mergeUniforms( [
UniformsLib.common,
UniformsLib.fog,
{
......@@ -154,7 +154,7 @@ var ShaderLib = {
depth: {
uniforms: UniformsUtils.merge( [
uniforms: mergeUniforms( [
UniformsLib.common,
UniformsLib.displacementmap
] ),
......@@ -166,7 +166,7 @@ var ShaderLib = {
normal: {
uniforms: UniformsUtils.merge( [
uniforms: mergeUniforms( [
UniformsLib.common,
UniformsLib.bumpmap,
UniformsLib.normalmap,
......@@ -183,7 +183,7 @@ var ShaderLib = {
sprite: {
uniforms: UniformsUtils.merge( [
uniforms: mergeUniforms( [
UniformsLib.sprite,
UniformsLib.fog
] ),
......@@ -234,7 +234,7 @@ var ShaderLib = {
distanceRGBA: {
uniforms: UniformsUtils.merge( [
uniforms: mergeUniforms( [
UniformsLib.common,
UniformsLib.displacementmap,
{
......@@ -251,7 +251,7 @@ var ShaderLib = {
shadow: {
uniforms: UniformsUtils.merge( [
uniforms: mergeUniforms( [
UniformsLib.lights,
UniformsLib.fog,
{
......@@ -269,7 +269,7 @@ var ShaderLib = {
ShaderLib.physical = {
uniforms: UniformsUtils.merge( [
uniforms: mergeUniforms( [
ShaderLib.standard.uniforms,
{
clearCoat: { value: 0 },
......
......@@ -2,66 +2,65 @@
* Uniform Utilities
*/
var UniformsUtils = {
export function cloneUniforms( src ) {
merge: function ( uniforms ) {
var dst = {};
var merged = {};
for ( var u in src ) {
for ( var u = 0; u < uniforms.length; u ++ ) {
dst[ u ] = {};
var tmp = this.clone( uniforms[ u ] );
for ( var p in src[ u ] ) {
for ( var p in tmp ) {
var property = src[ u ][ p ];
merged[ p ] = tmp[ p ];
if ( property && ( property.isColor ||
property.isMatrix3 || property.isMatrix4 ||
property.isVector2 || property.isVector3 || property.isVector4 ||
property.isTexture ) ) {
}
}
dst[ u ][ p ] = property.clone();
return merged;
} else if ( Array.isArray( property ) ) {
},
dst[ u ][ p ] = property.slice();
clone: function ( uniforms_src ) {
} else {
var uniforms_dst = {};
dst[ u ][ p ] = property;
for ( var u in uniforms_src ) {
uniforms_dst[ u ] = {};
}
for ( var p in uniforms_src[ u ] ) {
}
var parameter_src = uniforms_src[ u ][ p ];
}
if ( parameter_src && ( parameter_src.isColor ||
parameter_src.isMatrix3 || parameter_src.isMatrix4 ||
parameter_src.isVector2 || parameter_src.isVector3 || parameter_src.isVector4 ||
parameter_src.isTexture ) ) {
return dst;
uniforms_dst[ u ][ p ] = parameter_src.clone();
}
} else if ( Array.isArray( parameter_src ) ) {
export function mergeUniforms( uniforms ) {
uniforms_dst[ u ][ p ] = parameter_src.slice();
var merged = {};
} else {
for ( var u = 0; u < uniforms.length; u ++ ) {
uniforms_dst[ u ][ p ] = parameter_src;
var tmp = cloneUniforms( uniforms[ u ] );
}
for ( var p in tmp ) {
}
merged[ p ] = tmp[ p ];
}
return uniforms_dst;
}
};
return merged;
}
// Legacy
var UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };
export { UniformsUtils };
......@@ -9,7 +9,7 @@ import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
import { Color } from '../../math/Color.js';
import { Mesh } from '../../objects/Mesh.js';
import { ShaderLib } from '../shaders/ShaderLib.js';
import { UniformsUtils } from '../shaders/UniformsUtils.js';
import { cloneUniforms } from '../shaders/UniformsUtils.js';
function WebGLBackground( renderer, state, objects, premultipliedAlpha ) {
......@@ -48,7 +48,7 @@ function WebGLBackground( renderer, state, objects, premultipliedAlpha ) {
new BoxBufferGeometry( 1, 1, 1 ),
new ShaderMaterial( {
type: 'BackgroundCubeMaterial',
uniforms: UniformsUtils.clone( ShaderLib.cube.uniforms ),
uniforms: cloneUniforms( ShaderLib.cube.uniforms ),
vertexShader: ShaderLib.cube.vertexShader,
fragmentShader: ShaderLib.cube.fragmentShader,
side: BackSide,
......@@ -96,7 +96,7 @@ function WebGLBackground( renderer, state, objects, premultipliedAlpha ) {
new PlaneBufferGeometry( 2, 2 ),
new ShaderMaterial( {
type: 'BackgroundMaterial',
uniforms: UniformsUtils.clone( ShaderLib.background.uniforms ),
uniforms: cloneUniforms( ShaderLib.background.uniforms ),
vertexShader: ShaderLib.background.vertexShader,
fragmentShader: ShaderLib.background.fragmentShader,
side: FrontSide,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册