| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | 
							- import Color from "../Core/Color.js";
 
- import DrawCommand from "../Renderer/DrawCommand.js";
 
- import ShaderSource from "../Renderer/ShaderSource.js";
 
- import ShaderProgram from "../Renderer/ShaderProgram.js";
 
- import defined from "../Core/defined.js";
 
- /**
 
-  * @private
 
-  */
 
- function DebugInspector() {
 
-   this._cachedShowFrustumsShaders = {};
 
- }
 
- function getAttributeLocations(shaderProgram) {
 
-   const attributeLocations = {};
 
-   const attributes = shaderProgram.vertexAttributes;
 
-   for (const a in attributes) {
 
-     if (attributes.hasOwnProperty(a)) {
 
-       attributeLocations[a] = attributes[a].index;
 
-     }
 
-   }
 
-   return attributeLocations;
 
- }
 
- function createDebugShowFrustumsShaderProgram(scene, shaderProgram) {
 
-   const context = scene.context;
 
-   const sp = shaderProgram;
 
-   const fs = sp.fragmentShaderSource.clone();
 
-   const targets = [];
 
-   fs.sources = fs.sources.map(function (source) {
 
-     source = ShaderSource.replaceMain(source, "czm_Debug_main");
 
-     const re = /gl_FragData\[(\d+)\]/g;
 
-     let match;
 
-     while ((match = re.exec(source)) !== null) {
 
-       if (targets.indexOf(match[1]) === -1) {
 
-         targets.push(match[1]);
 
-       }
 
-     }
 
-     return source;
 
-   });
 
-   const length = targets.length;
 
-   let newMain = "";
 
-   newMain += "uniform vec3 debugShowCommandsColor;\n";
 
-   newMain += "uniform vec3 debugShowFrustumsColor;\n";
 
-   newMain += "void main() \n" + "{ \n" + "    czm_Debug_main(); \n";
 
-   // set debugShowCommandsColor to Color(1.0, 1.0, 1.0, 1.0) to stop rendering scene.debugShowCommands
 
-   // set debugShowFrustumsColor to Color(1.0, 1.0, 1.0, 1.0) to stop rendering scene.debugShowFrustums
 
-   let i;
 
-   if (length > 0) {
 
-     for (i = 0; i < length; ++i) {
 
-       newMain += `    gl_FragData[${targets[i]}].rgb *= debugShowCommandsColor;\n`;
 
-       newMain += `    gl_FragData[${targets[i]}].rgb *= debugShowFrustumsColor;\n`;
 
-     }
 
-   } else {
 
-     newMain += "    gl_FragColor.rgb *= debugShowCommandsColor;\n";
 
-     newMain += "    gl_FragColor.rgb *= debugShowFrustumsColor;\n";
 
-   }
 
-   newMain += "}";
 
-   fs.sources.push(newMain);
 
-   const attributeLocations = getAttributeLocations(sp);
 
-   return ShaderProgram.fromCache({
 
-     context: context,
 
-     vertexShaderSource: sp.vertexShaderSource,
 
-     fragmentShaderSource: fs,
 
-     attributeLocations: attributeLocations,
 
-   });
 
- }
 
- const scratchFrustumColor = new Color();
 
- function createDebugShowFrustumsUniformMap(scene, command) {
 
-   // setup uniform for the shader
 
-   let debugUniformMap;
 
-   if (!defined(command.uniformMap)) {
 
-     debugUniformMap = {};
 
-   } else {
 
-     debugUniformMap = command.uniformMap;
 
-   }
 
-   if (
 
-     defined(debugUniformMap.debugShowCommandsColor) ||
 
-     defined(debugUniformMap.debugShowFrustumsColor)
 
-   ) {
 
-     return debugUniformMap;
 
-   }
 
-   debugUniformMap.debugShowCommandsColor = function () {
 
-     if (!scene.debugShowCommands) {
 
-       return Color.WHITE;
 
-     }
 
-     if (!defined(command._debugColor)) {
 
-       command._debugColor = Color.fromRandom();
 
-     }
 
-     return command._debugColor;
 
-   };
 
-   debugUniformMap.debugShowFrustumsColor = function () {
 
-     if (!scene.debugShowFrustums) {
 
-       return Color.WHITE;
 
-     }
 
-     // Support up to three frustums.  If a command overlaps all
 
-     // three, it's code is not changed.
 
-     scratchFrustumColor.red =
 
-       command.debugOverlappingFrustums & (1 << 0) ? 1.0 : 0.0;
 
-     scratchFrustumColor.green =
 
-       command.debugOverlappingFrustums & (1 << 1) ? 1.0 : 0.0;
 
-     scratchFrustumColor.blue =
 
-       command.debugOverlappingFrustums & (1 << 2) ? 1.0 : 0.0;
 
-     scratchFrustumColor.alpha = 1.0;
 
-     return scratchFrustumColor;
 
-   };
 
-   return debugUniformMap;
 
- }
 
- const scratchShowFrustumCommand = new DrawCommand();
 
- DebugInspector.prototype.executeDebugShowFrustumsCommand = function (
 
-   scene,
 
-   command,
 
-   passState
 
- ) {
 
-   // create debug command
 
-   const shaderProgramId = command.shaderProgram.id;
 
-   let debugShaderProgram = this._cachedShowFrustumsShaders[shaderProgramId];
 
-   if (!defined(debugShaderProgram)) {
 
-     debugShaderProgram = createDebugShowFrustumsShaderProgram(
 
-       scene,
 
-       command.shaderProgram
 
-     );
 
-     this._cachedShowFrustumsShaders[shaderProgramId] = debugShaderProgram;
 
-   }
 
-   const debugCommand = DrawCommand.shallowClone(
 
-     command,
 
-     scratchShowFrustumCommand
 
-   );
 
-   debugCommand.shaderProgram = debugShaderProgram;
 
-   debugCommand.uniformMap = createDebugShowFrustumsUniformMap(scene, command);
 
-   debugCommand.execute(scene.context, passState);
 
- };
 
- export default DebugInspector;
 
 
  |