@@ -5,68 +5,76 @@ var ObjectSorter = require("../../renderer/tools/objectsorter.js");
5
5
var PickObjectRenderPass = function ( renderInterface , output , opt ) {
6
6
BaseRenderPass . call ( this , renderInterface , output , opt ) ;
7
7
this . sorter = new ObjectSorter ( ) ;
8
+ this . objCount = 0 ;
8
9
} ;
9
10
XML3D . createClass ( PickObjectRenderPass , BaseRenderPass ) ;
10
11
11
12
XML3D . extend ( PickObjectRenderPass . prototype , {
12
- render : ( function ( ) {
13
+ render : function ( objects , viewMatrix , projMatrix ) {
14
+ var gl = this . renderInterface . context . gl , target = this . output ;
15
+ target . bind ( ) ;
16
+ var sortedObjects = this . sorter . sortObjects ( objects , viewMatrix ) ;
17
+ this . objCount = 0 ;
18
+
19
+ gl . enable ( gl . DEPTH_TEST ) ;
20
+ gl . disable ( gl . CULL_FACE ) ;
21
+ gl . disable ( gl . BLEND ) ;
22
+ gl . clear ( gl . COLOR_BUFFER_BIT | gl . DEPTH_BUFFER_BIT ) ;
23
+
24
+ var program = this . renderInterface . context . programFactory . getPickingObjectIdProgram ( ) ;
25
+ program . bind ( ) ;
26
+ for ( var j = 0 , n = sortedObjects . zLayers . length ; j < n ; j ++ ) {
27
+ var zLayer = sortedObjects . zLayers [ j ] ;
28
+ gl . clear ( gl . DEPTH_BUFFER_BIT ) ;
29
+ if ( sortedObjects . opaque [ zLayer ] ) {
30
+ for ( var prg in sortedObjects . opaque [ zLayer ] ) {
31
+ this . renderObjects ( sortedObjects . opaque [ zLayer ] [ prg ] , program , viewMatrix , projMatrix ) ;
32
+ }
33
+ }
34
+ if ( sortedObjects . transparent [ zLayer ] ) {
35
+ this . renderObjects ( sortedObjects . transparent [ zLayer ] , program , viewMatrix , projMatrix ) ;
36
+ }
37
+ }
38
+ program . unbind ( ) ;
39
+ target . unbind ( ) ;
40
+ } ,
41
+
42
+ renderObjects : ( function ( ) {
13
43
var c_mvp = mat4 . create ( ) , c_uniformCollection = {
14
- envBase : { } ,
15
- envOverride : null ,
16
- sysBase : { }
17
- } , c_systemUniformNames = [ "id" , "modelViewProjectionMatrix" ] ;
18
-
19
- return function ( objects , viewMatrix , projMatrix ) {
20
- var gl = this . renderInterface . context . gl , target = this . output ;
21
- target . bind ( ) ;
22
- var sortedObjects = this . sorter . sortObjects ( objects , viewMatrix ) ;
23
-
24
- gl . enable ( gl . DEPTH_TEST ) ;
25
- gl . disable ( gl . CULL_FACE ) ;
26
- gl . disable ( gl . BLEND ) ;
27
- gl . clear ( gl . COLOR_BUFFER_BIT | gl . DEPTH_BUFFER_BIT ) ;
28
-
29
- var program = this . renderInterface . context . programFactory . getPickingObjectIdProgram ( ) ;
30
- program . bind ( ) ;
31
- var objCount = 0 ;
32
- for ( var j = 0 , n = sortedObjects . zLayers . length ; j < n ; j ++ ) {
33
- var zLayer = sortedObjects . zLayers [ j ] ;
34
- gl . clear ( gl . DEPTH_BUFFER_BIT ) ;
35
- for ( var ind in sortedObjects . opaque [ zLayer ] ) {
36
- var objs = sortedObjects . opaque [ zLayer ] [ ind ] ;
37
- for ( var i = 0 ; i < objs . length ; i ++ ) {
38
- var obj = objs [ i ] ;
39
- var mesh = obj . mesh ;
40
-
41
- if ( ! obj . visible )
42
- continue ;
43
-
44
- if ( viewMatrix && projMatrix ) {
45
- obj . updateModelViewMatrix ( viewMatrix ) ;
46
- obj . updateModelViewProjectionMatrix ( projMatrix ) ;
47
- }
48
-
49
- obj . getModelViewProjectionMatrix ( c_mvp ) ;
50
-
51
- var objId = ++ objCount ;
52
- obj . pickId = objId ;
53
- var c1 = objId & 255 ;
54
- objId = objId >> 8 ;
55
- var c2 = objId & 255 ;
56
- objId = objId >> 8 ;
57
- var c3 = objId & 255 ;
58
-
59
- c_uniformCollection . sysBase [ "id" ] = [ c3 / 255.0 , c2 / 255.0 , c1 / 255.0 ] ;
60
- c_uniformCollection . sysBase [ "modelViewProjectionMatrix" ] = c_mvp ;
61
-
62
- program . setUniformVariables ( null , c_systemUniformNames , c_uniformCollection ) ;
63
- mesh . draw ( program ) ;
64
- }
44
+ envBase : { } ,
45
+ envOverride : null ,
46
+ sysBase : { }
47
+ } , c_systemUniformNames = [ "id" , "modelViewProjectionMatrix" ] ;
48
+
49
+ return function ( objects , program , viewMatrix , projMatrix ) {
50
+ for ( var i = 0 ; i < objects . length ; i ++ ) {
51
+ var obj = objects [ i ] ;
52
+ var mesh = obj . mesh ;
53
+
54
+ if ( ! obj . visible )
55
+ continue ;
56
+
57
+ if ( viewMatrix && projMatrix ) {
58
+ obj . updateModelViewMatrix ( viewMatrix ) ;
59
+ obj . updateModelViewProjectionMatrix ( projMatrix ) ;
65
60
}
66
61
62
+ obj . getModelViewProjectionMatrix ( c_mvp ) ;
63
+
64
+ var objId = ++ this . objCount ;
65
+ obj . pickId = objId ;
66
+ var c1 = objId & 255 ;
67
+ objId = objId >> 8 ;
68
+ var c2 = objId & 255 ;
69
+ objId = objId >> 8 ;
70
+ var c3 = objId & 255 ;
71
+
72
+ c_uniformCollection . sysBase [ "id" ] = [ c3 / 255.0 , c2 / 255.0 , c1 / 255.0 ] ;
73
+ c_uniformCollection . sysBase [ "modelViewProjectionMatrix" ] = c_mvp ;
74
+
75
+ program . setUniformVariables ( null , c_systemUniformNames , c_uniformCollection ) ;
76
+ mesh . draw ( program ) ;
67
77
}
68
- program . unbind ( ) ;
69
- target . unbind ( ) ;
70
78
} ;
71
79
} ( ) ) ,
72
80
0 commit comments