Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
Molstar
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Michal Malý
Molstar
Commits
0e617e8b
Commit
0e617e8b
authored
Mar 18, 2019
by
Alexander Rose
Browse files
Options
Downloads
Patches
Plain Diff
renderable sorting improvements and fixes
parent
b6bb956d
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
src/mol-gl/renderable.ts
+2
-0
2 additions, 0 deletions
src/mol-gl/renderable.ts
src/mol-gl/scene.ts
+8
-4
8 additions, 4 deletions
src/mol-gl/scene.ts
src/mol-gl/webgl/render-item.ts
+2
-0
2 additions, 0 deletions
src/mol-gl/webgl/render-item.ts
with
12 additions
and
4 deletions
src/mol-gl/renderable.ts
+
2
−
0
View file @
0e617e8b
...
@@ -22,6 +22,7 @@ export type RenderableState = {
...
@@ -22,6 +22,7 @@ export type RenderableState = {
export
interface
Renderable
<
T
extends
RenderableValues
>
{
export
interface
Renderable
<
T
extends
RenderableValues
>
{
readonly
id
:
number
readonly
id
:
number
readonly
materialId
:
number
readonly
values
:
T
readonly
values
:
T
readonly
state
:
RenderableState
readonly
state
:
RenderableState
...
@@ -34,6 +35,7 @@ export interface Renderable<T extends RenderableValues> {
...
@@ -34,6 +35,7 @@ export interface Renderable<T extends RenderableValues> {
export
function
createRenderable
<
T
extends
Values
<
RenderableSchema
>>
(
renderItem
:
RenderItem
,
values
:
T
,
state
:
RenderableState
):
Renderable
<
T
>
{
export
function
createRenderable
<
T
extends
Values
<
RenderableSchema
>>
(
renderItem
:
RenderItem
,
values
:
T
,
state
:
RenderableState
):
Renderable
<
T
>
{
return
{
return
{
id
:
getNextRenderableId
(),
id
:
getNextRenderableId
(),
materialId
:
renderItem
.
materialId
,
values
,
values
,
state
,
state
,
...
...
This diff is collapsed.
Click to expand it.
src/mol-gl/scene.ts
+
8
−
4
View file @
0e617e8b
...
@@ -38,15 +38,19 @@ function calculateBoundingSphere(renderables: Renderable<RenderableValues & Base
...
@@ -38,15 +38,19 @@ function calculateBoundingSphere(renderables: Renderable<RenderableValues & Base
function
renderableSort
(
a
:
Renderable
<
RenderableValues
&
BaseValues
>
,
b
:
Renderable
<
RenderableValues
&
BaseValues
>
)
{
function
renderableSort
(
a
:
Renderable
<
RenderableValues
&
BaseValues
>
,
b
:
Renderable
<
RenderableValues
&
BaseValues
>
)
{
const
drawProgramIdA
=
a
.
getProgram
(
'
draw
'
).
id
const
drawProgramIdA
=
a
.
getProgram
(
'
draw
'
).
id
const
drawProgramIdB
=
b
.
getProgram
(
'
draw
'
).
id
const
drawProgramIdB
=
b
.
getProgram
(
'
draw
'
).
id
const
materialIdA
=
a
.
materialId
const
materialIdB
=
b
.
materialId
const
zA
=
a
.
values
.
boundingSphere
.
ref
.
value
.
center
[
2
]
const
zA
=
a
.
values
.
boundingSphere
.
ref
.
value
.
center
[
2
]
const
zB
=
a
.
values
.
boundingSphere
.
ref
.
value
.
center
[
2
]
const
zB
=
b
.
values
.
boundingSphere
.
ref
.
value
.
center
[
2
]
if
(
drawProgramIdA
!==
drawProgramIdB
)
{
if
(
drawProgramIdA
!==
drawProgramIdB
)
{
return
drawProgramIdA
-
drawProgramIdB
;
// sort by program id to minimize gl state changes
return
drawProgramIdA
-
drawProgramIdB
// sort by program id to minimize gl state changes
}
else
if
(
materialIdA
!==
materialIdB
)
{
return
materialIdA
-
materialIdB
// sort by material id to minimize gl state changes
}
else
if
(
zA
!==
zB
)
{
}
else
if
(
zA
!==
zB
)
{
return
a
.
state
.
opaque
return
a
.
state
.
opaque
?
zA
-
zB
// when opaque draw closer elements first to minimize overdraw
?
zA
-
zB
// when opaque
,
draw closer elements first to minimize overdraw
:
zB
-
zA
// when transparent draw elements last to maximize partial visibility
:
zB
-
zA
// when transparent
,
draw elements last to maximize partial visibility
}
else
{
}
else
{
return
a
.
id
-
b
.
id
;
return
a
.
id
-
b
.
id
;
}
}
...
...
This diff is collapsed.
Click to expand it.
src/mol-gl/webgl/render-item.ts
+
2
−
0
View file @
0e617e8b
...
@@ -35,6 +35,7 @@ export function getDrawMode(ctx: WebGLContext, drawMode: DrawMode) {
...
@@ -35,6 +35,7 @@ export function getDrawMode(ctx: WebGLContext, drawMode: DrawMode) {
export
interface
RenderItem
{
export
interface
RenderItem
{
readonly
id
:
number
readonly
id
:
number
readonly
materialId
:
number
getProgram
:
(
variant
:
RenderVariant
)
=>
Program
getProgram
:
(
variant
:
RenderVariant
)
=>
Program
render
:
(
variant
:
RenderVariant
)
=>
void
render
:
(
variant
:
RenderVariant
)
=>
void
...
@@ -133,6 +134,7 @@ export function createRenderItem(ctx: WebGLContext, drawMode: DrawMode, shaderCo
...
@@ -133,6 +134,7 @@ export function createRenderItem(ctx: WebGLContext, drawMode: DrawMode, shaderCo
return
{
return
{
id
,
id
,
materialId
,
getProgram
:
(
variant
:
RenderVariant
)
=>
programs
[
variant
].
value
,
getProgram
:
(
variant
:
RenderVariant
)
=>
programs
[
variant
].
value
,
render
:
(
variant
:
RenderVariant
)
=>
{
render
:
(
variant
:
RenderVariant
)
=>
{
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment