@@ -5,68 +5,76 @@ var ObjectSorter = require("../../renderer/tools/objectsorter.js");
55var PickObjectRenderPass = function ( renderInterface , output , opt ) {
66 BaseRenderPass . call ( this , renderInterface , output , opt ) ;
77 this . sorter = new ObjectSorter ( ) ;
8+ this . objCount = 0 ;
89} ;
910XML3D . createClass ( PickObjectRenderPass , BaseRenderPass ) ;
1011
1112XML3D . 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 ( ) {
1343 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 ) ;
6560 }
6661
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 ) ;
6777 }
68- program . unbind ( ) ;
69- target . unbind ( ) ;
7078 } ;
7179 } ( ) ) ,
7280
0 commit comments