Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
0c2f53a9
T
three.js
项目概览
Ablesons
/
three.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
three.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0c2f53a9
编写于
4月 30, 2019
作者:
F
Fernando Serrano
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use getDrawingBufferSize instead of canvas directly and minor functions renaming and restyling
上级
04c11963
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
79 addition
and
56 deletion
+79
-56
src/renderers/WebGLRenderer.js
src/renderers/WebGLRenderer.js
+3
-3
src/renderers/webgl/WebGLMultiview.js
src/renderers/webgl/WebGLMultiview.js
+75
-52
src/renderers/webgl/WebGLTextures.js
src/renderers/webgl/WebGLTextures.js
+1
-1
未找到文件。
src/renderers/WebGLRenderer.js
浏览文件 @
0c2f53a9
...
...
@@ -1724,7 +1724,7 @@ function WebGLRenderer( parameters ) {
if
(
program
.
numMultiviewViews
>
0
)
{
multiview
.
updateCameraProjectionMatrices
(
camera
,
p_uniforms
);
multiview
.
updateCameraProjectionMatrices
Uniform
(
camera
,
p_uniforms
);
}
else
{
...
...
@@ -1780,7 +1780,7 @@ function WebGLRenderer( parameters ) {
if
(
program
.
numMultiviewViews
>
0
)
{
multiview
.
updateCameraViewMatrices
(
camera
,
p_uniforms
);
multiview
.
updateCameraViewMatrices
Uniform
(
camera
,
p_uniforms
);
}
else
{
...
...
@@ -1986,7 +1986,7 @@ function WebGLRenderer( parameters ) {
if
(
program
.
numMultiviewViews
>
0
)
{
multiview
.
updateObjectMatrices
(
object
,
camera
,
p_uniforms
);
multiview
.
updateObjectMatrices
Uniforms
(
object
,
camera
,
p_uniforms
);
}
else
{
...
...
src/renderers/webgl/WebGLMultiview.js
浏览文件 @
0c2f53a9
...
...
@@ -6,6 +6,7 @@
import
{
WebGLMultiviewRenderTarget
}
from
'
../WebGLMultiviewRenderTarget.js
'
;
import
{
Matrix3
}
from
'
../../math/Matrix3.js
'
;
import
{
Matrix4
}
from
'
../../math/Matrix4.js
'
;
import
{
Vector2
}
from
'
../../math/Vector2.js
'
;
function
WebGLMultiview
(
renderer
,
requested
,
options
)
{
...
...
@@ -13,20 +14,19 @@ function WebGLMultiview( renderer, requested, options ) {
var
DEFAULT_NUMVIEWS
=
2
;
var
gl
=
renderer
.
context
;
var
canvas
=
renderer
.
domElement
;
var
capabilities
=
renderer
.
capabilities
;
var
properties
=
renderer
.
properties
;
var
renderTarget
,
currentRenderTarget
;
var
mat3
,
mat4
,
cameraArray
;
var
mat3
,
mat4
,
cameraArray
,
renderSize
;
this
.
getMaxViews
=
function
()
{
function
getMaxViews
()
{
return
capabilities
.
maxMultiviewViews
;
}
;
}
this
.
getNumViews
=
function
()
{
function
getNumViews
()
{
if
(
renderTarget
&&
renderer
.
getRenderTarget
()
===
renderTarget
)
{
...
...
@@ -36,8 +36,7 @@ function WebGLMultiview( renderer, requested, options ) {
return
0
;
};
}
function
getCameraArray
(
camera
)
{
...
...
@@ -51,25 +50,25 @@ function WebGLMultiview( renderer, requested, options ) {
//
this
.
isAvailable
=
function
()
{
function
isAvailable
()
{
return
capabilities
.
multiview
;
}
;
}
this
.
isEnabled
=
function
()
{
function
isEnabled
()
{
return
requested
&&
this
.
isAvailable
();
return
requested
&&
isAvailable
();
}
;
}
if
(
options
.
debug
)
{
if
(
requested
&&
!
this
.
isAvailable
()
)
{
if
(
requested
&&
!
isAvailable
()
)
{
console
.
warn
(
'
WebGLRenderer: Multiview requested but not supported by the browser
'
);
}
else
if
(
requested
!==
false
&&
this
.
isAvailable
()
)
{
}
else
if
(
requested
!==
false
&&
isAvailable
()
)
{
console
.
info
(
'
WebGLRenderer: Multiview enabled
'
);
...
...
@@ -78,7 +77,7 @@ function WebGLMultiview( renderer, requested, options ) {
}
this
.
updateCameraProjectionMatrices
=
function
(
camera
,
uniforms
)
{
function
updateCameraProjectionMatricesUniform
(
camera
,
uniforms
)
{
var
cameras
=
getCameraArray
(
camera
);
...
...
@@ -90,9 +89,9 @@ function WebGLMultiview( renderer, requested, options ) {
uniforms
.
setValue
(
gl
,
'
projectionMatrices
'
,
mat4
);
}
;
}
this
.
updateCameraViewMatrices
=
function
(
camera
,
uniforms
)
{
function
updateCameraViewMatricesUniform
(
camera
,
uniforms
)
{
var
cameras
=
getCameraArray
(
camera
);
...
...
@@ -104,9 +103,9 @@ function WebGLMultiview( renderer, requested, options ) {
uniforms
.
setValue
(
gl
,
'
viewMatrices
'
,
mat4
);
}
;
}
this
.
updateObjectMatrices
=
function
(
object
,
camera
,
uniforms
)
{
function
updateObjectMatricesUniforms
(
object
,
camera
,
uniforms
)
{
var
cameras
=
getCameraArray
(
camera
);
...
...
@@ -120,84 +119,98 @@ function WebGLMultiview( renderer, requested, options ) {
uniforms
.
setValue
(
gl
,
'
modelViewMatrices
'
,
mat4
);
uniforms
.
setValue
(
gl
,
'
normalMatrices
'
,
mat3
);
};
}
this
.
attachRenderTarget
=
function
(
camera
)
{
function
resizeRenderTarget
(
camera
)
{
currentRenderTarget
=
renderer
.
getRenderTarget
();
if
(
currentRenderTarget
)
{
renderSize
.
set
(
currentRenderTarget
.
width
,
currentRenderTarget
.
height
);
}
else
{
renderer
.
getDrawingBufferSize
(
renderSize
);
// Resize if needed
var
width
=
canvas
.
width
;
var
height
=
canvas
.
height
;
}
if
(
camera
.
isArrayCamera
)
{
// Every camera must have the same size, so we just get the size from the first one
var
bounds
=
camera
.
cameras
[
0
].
bounds
;
width
*=
bounds
.
z
;
height
*=
bounds
.
w
;
renderTarget
.
setSize
(
bounds
.
z
*
renderSize
.
x
,
bounds
.
w
*
renderSize
.
y
);
renderTarget
.
setNumViews
(
camera
.
cameras
.
length
);
}
else
{
renderTarget
.
setSize
(
renderSize
.
x
,
renderSize
.
y
);
renderTarget
.
setNumViews
(
DEFAULT_NUMVIEWS
);
}
renderTarget
.
setSize
(
width
,
height
);
}
function
attachRenderTarget
(
camera
)
{
currentRenderTarget
=
renderer
.
getRenderTarget
();
resizeRenderTarget
(
camera
);
renderer
.
setRenderTarget
(
renderTarget
);
};
}
function
detachRenderTarget
(
camera
)
{
renderer
.
setRenderTarget
(
currentRenderTarget
);
flush
(
camera
);
this
.
detachRenderTarget
=
function
(
camera
)
{
}
var
viewFramebuffers
=
properties
.
get
(
renderTarget
).
__webglViewFramebuffers
;
function
flush
(
camera
)
{
// @todo Use actual framebuffer
gl
.
bindFramebuffer
(
gl
.
FRAMEBUFFER
,
null
);
var
srcRenderTarget
=
renderTarget
;
var
numViews
=
srcRenderTarget
.
numViews
;
var
srcFramebuffers
=
properties
.
get
(
srcRenderTarget
).
__webglViewFramebuffers
;
var
viewWidth
=
srcRenderTarget
.
width
;
var
viewHeight
=
srcRenderTarget
.
height
;
if
(
camera
.
isArrayCamera
)
{
for
(
var
i
=
0
;
i
<
camera
.
cameras
.
length
;
i
++
)
{
for
(
var
i
=
0
;
i
<
numViews
;
i
++
)
{
var
bounds
=
camera
.
cameras
[
i
].
bounds
;
var
x
=
bounds
.
x
*
canvas
.
width
;
var
y
=
bounds
.
y
*
canvas
.
height
;
var
width
=
bounds
.
z
*
canvas
.
width
;
var
height
=
bounds
.
w
*
canvas
.
height
;
var
x
1
=
bounds
.
x
*
renderSize
.
x
;
var
y
1
=
bounds
.
y
*
renderSize
.
y
;
var
x2
=
x1
+
bounds
.
z
*
renderSize
.
x
;
var
y2
=
y1
+
bounds
.
w
*
renderSize
.
y
;
gl
.
bindFramebuffer
(
gl
.
READ_FRAMEBUFFER
,
view
Framebuffers
[
i
]
);
gl
.
blitFramebuffer
(
0
,
0
,
width
,
height
,
x
,
y
,
x
+
width
,
y
+
height
,
gl
.
COLOR_BUFFER_BIT
,
gl
.
NEAREST
);
gl
.
bindFramebuffer
(
gl
.
READ_FRAMEBUFFER
,
src
Framebuffers
[
i
]
);
gl
.
blitFramebuffer
(
0
,
0
,
viewWidth
,
viewHeight
,
x1
,
y1
,
x2
,
y2
,
gl
.
COLOR_BUFFER_BIT
,
gl
.
NEAREST
);
}
}
else
{
// If no array camera, blit just one view
gl
.
bindFramebuffer
(
gl
.
READ_FRAMEBUFFER
,
viewFramebuffers
[
0
]
);
gl
.
blitFramebuffer
(
0
,
0
,
canvas
.
width
,
canvas
.
height
,
0
,
0
,
canvas
.
width
,
canvas
.
height
,
gl
.
COLOR_BUFFER_BIT
,
gl
.
NEAREST
);
gl
.
bindFramebuffer
(
gl
.
READ_FRAMEBUFFER
,
srcFramebuffers
[
0
]
);
gl
.
blitFramebuffer
(
0
,
0
,
viewWidth
,
viewHeight
,
0
,
0
,
renderSize
.
x
,
renderSize
.
y
,
gl
.
COLOR_BUFFER_BIT
,
gl
.
NEAREST
);
}
renderer
.
setRenderTarget
(
currentRenderTarget
);
};
}
if
(
this
.
isEnabled
()
)
{
if
(
isEnabled
()
)
{
renderTarget
=
new
WebGLMultiviewRenderTarget
(
canvas
.
width
,
canvas
.
height
,
this
.
numViews
);
renderTarget
=
new
WebGLMultiviewRenderTarget
(
0
,
0
,
DEFAULT_NUMVIEWS
);
// Auxiliary matrices to be used when updating arrays of uniforms
renderSize
=
new
Vector2
();
mat4
=
[];
mat3
=
[];
cameraArray
=
[];
for
(
var
i
=
0
;
i
<
this
.
getMaxViews
();
i
++
)
{
for
(
var
i
=
0
;
i
<
getMaxViews
();
i
++
)
{
mat4
[
i
]
=
new
Matrix4
();
mat3
[
i
]
=
new
Matrix3
();
...
...
@@ -206,6 +219,16 @@ function WebGLMultiview( renderer, requested, options ) {
}
this
.
attachRenderTarget
=
attachRenderTarget
;
this
.
detachRenderTarget
=
detachRenderTarget
;
this
.
isAvailable
=
isAvailable
;
this
.
isEnabled
=
isEnabled
;
this
.
getNumViews
=
getNumViews
;
this
.
updateCameraProjectionMatricesUniform
=
updateCameraProjectionMatricesUniform
;
this
.
updateCameraViewMatricesUniform
=
updateCameraViewMatricesUniform
;
this
.
updateObjectMatricesUniforms
=
updateObjectMatricesUniforms
;
}
export
{
WebGLMultiview
};
src/renderers/webgl/WebGLTextures.js
浏览文件 @
0c2f53a9
...
...
@@ -1260,4 +1260,4 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
}
export
{
WebGLTextures
};
\ No newline at end of file
export
{
WebGLTextures
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录