DSDSWeb/static/js/Cesium-1.53/Specs/pick.js

80 lines
2.2 KiB
JavaScript

define([
'Core/BoundingRectangle',
'Core/Color',
'Core/defined',
'Renderer/ClearCommand',
'Renderer/Pass',
'Scene/CreditDisplay',
'Scene/FrameState',
'Scene/JobScheduler',
'Scene/PickFramebuffer'
], function(
BoundingRectangle,
Color,
defined,
ClearCommand,
Pass,
CreditDisplay,
FrameState,
JobScheduler,
PickFramebuffer) {
'use strict';
function executeCommands(context, passState, commands) {
var length = commands.length;
for (var i = 0; i < length; ++i) {
commands[i].execute(context, passState);
}
}
function pick(frameState, primitives, x, y) {
frameState.commandList.length = 0;
var context = frameState.context;
var rectangle = new BoundingRectangle(x, y, 1, 1);
var pickFramebuffer = new PickFramebuffer(context);
var passState = pickFramebuffer.begin(rectangle);
var oldPasses = frameState.passes;
frameState.passes = (new FrameState(new CreditDisplay(document.createElement('div'), undefined, document.createElement('div')), new JobScheduler())).passes;
frameState.passes.pick = true;
primitives.update(frameState);
var clear = new ClearCommand({
color : new Color(0.0, 0.0, 0.0, 0.0),
depth : 1.0,
stencil : 1.0
});
clear.execute(context, passState);
var i;
var renderCommands = new Array(Pass.NUMBER_OF_PASSES);
for (i = 0; i < Pass.NUMBER_OF_PASSES; ++i) {
renderCommands[i] = [];
}
var commands = frameState.commandList;
var length = commands.length;
for (i = 0; i < length; i++) {
var command = commands[i];
var pass = defined(command.pass) ? command.pass : Pass.OPAQUE;
renderCommands[pass].push(command);
}
for (i = 0; i < Pass.NUMBER_OF_PASSES; ++i) {
executeCommands(context, passState, renderCommands[i]);
}
frameState.passes = oldPasses;
var p = pickFramebuffer.end(rectangle);
pickFramebuffer.destroy();
return p;
}
return pick;
});