提交 fd161888 编写于 作者: C Chandler Prall

Making the variable user-customizable

上级 d141ea85
......@@ -7,18 +7,9 @@
THREE.WebGLRenderer = function ( parameters ) {
// Currently you can use just up to 4 directional / point lights total.
// Chrome barfs on shader linking when there are more than 4 lights :(
// The problem comes from shader using too many varying vectors.
// This is not GPU limitation as the same shader works ok in Firefox
// and Chrome with "--use-gl=desktop" flag.
// Difference comes from Chrome on Windows using by default ANGLE,
// thus going DirectX9 route (while FF uses OpenGL).
// See http://code.google.com/p/chromium/issues/detail?id=63491
// By default you can use just up to 4 directional / point lights total.
// ANGLE implementation (Chrome/Firefox on Windows) is bound to
// 10 varying vectors due to DirectX9 limitation.
var _this = this,
_gl, _programs = [],
......@@ -78,6 +69,7 @@ THREE.WebGLRenderer = function ( parameters ) {
_antialias = parameters.antialias !== undefined ? parameters.antialias : false,
_clearColor = parameters.clearColor !== undefined ? new THREE.Color( parameters.clearColor ) : new THREE.Color( 0x000000 ),
_clearAlpha = parameters.clearAlpha !== undefined ? parameters.clearAlpha : 0;
_maxLights = parameters.maxLights !== undefined ? parameters.maxLights : 4;
this.data = {
......@@ -2310,7 +2302,7 @@ THREE.WebGLRenderer = function ( parameters ) {
// heuristics to create shader parameters according to lights in the scene
// (not to blow over maxLights budget)
maxLightCount = allocateLights( lights, 4 );
maxLightCount = allocateLights( lights );
maxBones = allocateBones( object );
......@@ -5329,7 +5321,7 @@ THREE.WebGLRenderer = function ( parameters ) {
};
function allocateLights( lights, maxLights ) {
function allocateLights( lights ) {
var l, ll, light, dirLights, pointLights, maxDirLights, maxPointLights;
dirLights = pointLights = maxDirLights = maxPointLights = 0;
......@@ -5343,15 +5335,15 @@ THREE.WebGLRenderer = function ( parameters ) {
}
if ( ( pointLights + dirLights ) <= maxLights ) {
if ( ( pointLights + dirLights ) <= _maxLights ) {
maxDirLights = dirLights;
maxPointLights = pointLights;
} else {
maxDirLights = Math.ceil( maxLights * dirLights / ( pointLights + dirLights ) );
maxPointLights = maxLights - maxDirLights;
maxDirLights = Math.ceil( _maxLights * dirLights / ( pointLights + dirLights ) );
maxPointLights = _maxLights - maxDirLights;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册