-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathRenderTargetInspector.js
35 lines (35 loc) · 18.4 KB
/
RenderTargetInspector.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var $jscomp={scope:{}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX="jscomp_symbol_";
$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.symbolCounter_=0;$jscomp.Symbol=function(a){return $jscomp.SYMBOL_PREFIX+(a||"")+$jscomp.symbolCounter_++};
$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var a=$jscomp.global.Symbol.iterator;a||(a=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&$jscomp.defineProperty(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(a){var b=0;return $jscomp.iteratorPrototype(function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}})};
$jscomp.iteratorPrototype=function(a){$jscomp.initSymbolIterator();a={next:a};a[$jscomp.global.Symbol.iterator]=function(){return this};return a};$jscomp.makeIterator=function(a){$jscomp.initSymbolIterator();var b=a[Symbol.iterator];return b?b.call(a):$jscomp.arrayIterator(a)};
$jscomp.polyfill=function(a,b,c,e){if(b){c=$jscomp.global;a=a.split(".");for(e=0;e<a.length-1;e++){var h=a[e];h in c||(c[h]={});c=c[h]}a=a[a.length-1];e=c[a];b=b(e);b!=e&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};$jscomp.polyfill("Math.sign",function(a){return a?a:function(a){a=Number(a);return 0===a||isNaN(a)?a:0<a?1:-1}},"es6-impl","es3");
function RenderTargetInspector(a,b,c){function e(a,b,c){b=b.split(" ");b=$jscomp.makeIterator(b);for(var d=b.next();!d.done;d=b.next())a.addEventListener(d.value,c)}function h(a){k.innerHTML=a;a=k.children[0];k.removeChild(a);return a}function f(a){var b=d.viewerCanvas,c=b.width,b=b.height;a.project(d.viewerCamera);a.x=c/2*a.x+c/2;a.y=b/2*a.y+b/2}b=void 0===b?256:b;c=void 0===c?"left":c;if(this.__proto__.constructor!==RenderTargetInspector)return RenderTargetInspector.instance=new RenderTargetInspector(a,
b,c),RenderTargetInspector.instance;var d=this,k=document.createElement("div");this.size=b;this.renderer=a;this.views=[];this.currentView=null;this.scene=new THREE.Scene;this.camera=new THREE.OrthographicCamera(-1,1,1,-1,0,1);this.material=new THREE.ShaderMaterial({uniforms:{map:{value:null},size:{value:new THREE.Vector2}},defines:{MAP_TYPE:0},vertexShader:"\n\t\t\t\t\tuniform float ratio;\n\t\t\t\t\tvarying vec2 vUv;\n\t\t\t\t\t\n\t\t\t\t\tvoid main () {\n\t\t\t\t\t\tvUv = vec2 (uv.x, 1.0 - uv.y);\n\t\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4 (position, 1.0);\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t",
fragmentShader:"\n\t\t\t\t\tuniform sampler2D map;\n\t\t\t\t\tuniform vec2 size;\n\t\t\t\t\tvarying vec2 vUv;\n\t\t\t\t\t\n\t\t\t\t\tfloat unpack_depth (const in vec4 rgba_depth) {\n\t\t\t\t\t\tconst vec4 bit_shift = vec4 (1.0 / (256.0 * 256.0 * 256.0), 1.0 / (256.0 * 256.0), 1.0 / 256.0, 1.0);\n\t\t\t\t\t\tfloat depth = dot (rgba_depth, bit_shift);\n\t\t\t\t\t\t\n\t\t\t\t\t\treturn depth;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvoid main () {\n\t\t\t\t\t\n\t\t\t\t\t\t#if ( MAP_TYPE == 0 )\n\t\t\t\t\t\t\tgl_FragColor = texture2D (map, ( floor( vUv * size ) + 0.5 ) / size );\n\t\t\t\t\t\t#elif ( MAP_TYPE == 1 )\n\t\t\t\t\t\t\tvec4 rgbaDepth = texture2D ( map, vUv );\n\t\t\t\t\t\t\tfloat fDepth = unpack_depth ( rgbaDepth );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tgl_FragColor = vec4 (vec3 (fDepth), 1.0);\n\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\n\t\t\t\t\t\t//FRAGMENT\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t"});
this.quad=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),this.material);this.scene.add(this.quad);this.viewerCamera=new THREE.OrthographicCamera(-1,1,1,-1,0,1);this.viewerScene=new THREE.Scene;this.viewerQuad=this.quad.clone();this.viewerBackground=this.quad.clone();this.viewerScene.add(this.viewerBackground,this.viewerQuad);this.viewerBackground.frustumCulled=!1;this.viewerBackground.material=new THREE.ShaderMaterial({uniforms:{uResolution:{value:new THREE.Vector2}},vertexShader:"\n\t\t\t\t\tuniform float ratio;\n\t\t\t\t\tvarying vec2 vUv;\n\t\t\t\t\t\n\t\t\t\t\tvoid main () {\n\t\t\t\t\t\tvUv = vec2 (uv.x, 1.0 - uv.y);\n\t\t\t\t\t\tvec3 offset = position;\n\t\t\t\t\t\toffset.z = 0.5;\n\t\t\t\t\t\tgl_Position = vec4( offset , 1.0);\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t",
fragmentShader:"\n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tuniform vec2 uResolution;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\tvec4 checker(in float u, in float v)\n\t\t\t\t{\n\t\t\t\t\n\t\t\t\t\tu = u * 2.0 - 1.0;\n\t\t\t\t\tv = v * 2.0 - 1.0;\n\t\t\t\t\t\n\t\t\t\t vec2 s = vec2( uResolution / 40.0 );\n\t\t\t\t \n\t\t\t\t float fmodResult = mod(floor(s.x * u) + floor(s.y * v), 2.0);\n\t\t\t\t float fin = max(sign(fmodResult), 0.85) * 0.75;\n\t\t\t\t return vec4(fin, fin, fin, 1.0);\n\t\t\t\t}\n\t\t\t\t \n\t\t\t\t void main() {\n\t\t\t\t \n\t\t\t\t\t\tgl_FragColor = checker(vUv.x, vUv.y);\n\t\t\t\t }\n\t\t\t\t"});
a=this.domElement=h('\n\t\t<div id="renderTargetHelper">\n\t\t\t<div style="display:flex;">\n\t\t\t\t<div style="display:flex; flex-direction:column; padding:.25em;">\n\t\t\t\t\t<div uid="toggleSide" data-side="left" title="Dock left">🠈</div>\n\t\t\t\t\t<div uid="toggleSide" data-side="right" title="Dock right">🠊</div>\n\t\t\t\t\t<div uid="toggleSide" data-side="top" title="Dock top">🠉</div>\n\t\t\t\t\t<div uid="toggleSide" data-side="bottom" title="Dock bottom">🠋</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div style="overflow:auto;flex-grow: 1;">\n\t\t\t\t<div id="renderTargetHelperList" style=" display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); padding:.5em; grid-gap: 4px;"></div>\n\t\t\t</div>\n\t\t</div>\n\t\t');
a.setAttribute("style",this.defaultStyle);e(a,"mouseup touchend",function(a){switch(a.target.getAttribute("uid")){case "toggleSide":d.dock(a.target.getAttribute("data-side"));break;case "overlay":var b="true"===a.target.getAttribute("data-active")?!1:!0;d.transparent=b;d.dock();a.target.style.color=b?"#7390f5":"initial";a.target.setAttribute("data-active",b?"true":"false");break;case "toImage":(a=d.getByID(a.target.parentNode.parentNode.parentNode.id))&&d.open(a);break;default:(a=d.getByID(a.target.id))&&
d.show(a)}});this.listElement=a.querySelector("#renderTargetHelperList");a=this.viewerElement=h('\n\t\t\t<div id="renderTargetHelperViewer">\n\t\t\t\t<div style="position:absolute;">\n\t\t\t\t\t<div style="position:absolute; top:0px; left:0px; right:0px; background-color:#2b2b2dbf; padding:4px; z-index:1;"></div>\n\t\t\t\t\t<div style="position:absolute; bottom:0px; left:0px; margin:10px; background-color:#2b2b2dbf; padding:4px; z-index:1;"></div>\n\t\t\t\t\t<canvas style="user-select: none;"></canvas>\n\t\t\t\t</div>\n\t\t\t\t<div id="scrollbar" style="pointer-events:none; overflow:scroll; position:absolute; left:0px; top:0px; bottom:0px; right:0px;"><div style="visibility:none;"></div></div>\n\t\t\t</div>\n\t\t');
var g=new THREE.Matrix4;this.viewerContainer=a.children[0];this.viewerLabel=this.viewerContainer.children[0];this.viewerSample=this.viewerContainer.children[1];this.viewerCanvas=this.viewerContainer.children[2];this.viewerBar=a.children[1].children[0];this.viewerScroll=this.viewerBar.parentNode;var l=new THREE.Vector2,n=new THREE.Vector2,m=new THREE.Vector2,p=new THREE.Vector2,r=new THREE.Vector3,q=new THREE.Vector3,v=new THREE.Plane,x=new THREE.Vector3,t=new THREE.Raycaster,u=new THREE.Vector3,w=
new THREE.Vector3;v.normal.set(0,0,1);e(this.viewerCanvas,"mouseup touchend mousedown touchstart mousemove touchmove DOMMouseScroll mousewheel",function(){function a(){u.set(-1,-1,0).applyMatrix4(d.viewerQuad.matrixWorld);w.set(1,1,0).applyMatrix4(d.viewerQuad.matrixWorld);f(u);f(w);var a=d.viewerBar.style,b=d.viewerCanvas.height;d.viewerBar.parentNode.scrollLeft=Math.max(-u.x,0);d.viewerBar.parentNode.scrollTop=Math.max(b+u.y,0);a.width=Math.max(w.x-u.x,0)+"px";a.height=Math.max(w.y-u.y,0)+"px"}
function b(){q.copy(r);g.getInverse(d.viewerQuad.matrixWorld);q.applyMatrix4(g);q.x=Math.floor((.5*q.x+.5)*c.width);q.y=Math.floor((1-(.5*q.y+.5))*c.height);0<=q.x&&q.x<c.width&&0<=q.y&&q.y<c.height&&(d.getSample(c,q.x,q.y,h),d.viewerSample.innerHTML=q.x+1+" : "+(q.y+1)+"<br/>r: "+h[0]+"<br/>g: "+h[1]+"<br/>b: "+h[2]+"<br/>a: "+h[3])}var c,e=!1,k=!1,h=[0,0,0,0];return function(f){c=d.currentView;var g=d.viewerCanvas,h=g.width,g=g.height;p.set(f.offsetX,f.offsetY);m.copy(p);m.x=m.x/h*2-1;m.y=2*(1-
m.y/g)-1;t.setFromCamera(m,d.viewerCamera);t.ray.intersectPlane(v,r);switch(f.type){case "contextmenu":return f.preventDefault(),f.stopPropagation(),!1;case "DOMMouseScroll":f.wheelDelta=f.detail;case "mousewheel":h=d.zoomPercent;h+=h/6*Math.sign(f.wheelDelta);x.copy(r);d.updateCamera(h);t.setFromCamera(m,d.viewerCamera);t.ray.intersectPlane(v,r);l.copy(r).sub(x);d.offset.sub(l);d.viewerCamera.position.set(d.offset.x,d.offset.y,0);d.viewerCamera.updateMatrixWorld(!0);a();break;case "mousemove":case "touchmove":e?
(l.copy(r).sub(n),d.offset.sub(l),d.viewerCamera.position.set(d.offset.x,d.offset.y,0),d.viewerCamera.updateMatrixWorld(!0),t.setFromCamera(m,d.viewerCamera),t.ray.intersectPlane(v,r),n.copy(r),a()):k&&b();break;case "mousedown":case "touchstart":"renderTargetHelperViewer"===f.target.id?d.show(null):f.which===d.which.left?(k=!0,b()):(d.viewerCanvas.cursor="grab",e=!0,n.copy(r));break;case "mouseup":case "touchend":k=!1,e&&(e=!1,d.viewerCanvas.cursor="default")}}}());this.ctx=this.viewerCanvas.getContext("2d");
this.ctx.imageSmoothingEnabled=!1;this.offset=new THREE.Vector2;this.listen=e;this.createElement=h;document.body.appendChild(this.domElement);this.dock(c)}RenderTargetInspector.instance=null;RenderTargetInspector.update=function(){RenderTargetInspector.instance&&RenderTargetInspector.instance.update()};var $jscomp$compprop1={},$jscomp$compprop2={};
RenderTargetInspector.prototype={constructor:RenderTargetInspector,_vec2:new THREE.Vector2,decoding:{"default":0,depth:1},which:{none:0,left:1,middle:2,right:3},strides:($jscomp$compprop1[THREE.AlphaFormat]=1,$jscomp$compprop1[THREE.RedFormat]=1,$jscomp$compprop1[THREE.RGFormat]=2,$jscomp$compprop1[THREE.RGBFormat]=3,$jscomp$compprop1[THREE.RGBAFormat]=4,$jscomp$compprop1),types:($jscomp$compprop2[THREE.UnsignedByteType]=Uint8Array,$jscomp$compprop2[THREE.FloatType]=Float32Array,$jscomp$compprop2),
defaultStyle:'display:flex; position:absolute; color:white; background-color: #00000075; z-index: 10000;font-family: "Courier New";',dock:function(a){this.side=a=a||this.side;var b=this.defaultStyle;switch(a){case "top":b+="left:0px; top:0px; right:0px;";break;case "right":b+="right:0px; top:0px; bottom:0px;";break;case "bottom":b+="right:0px; left:0px; bottom:0px;";break;case "left":b+="top:0px; left:0px; bottom:0px;";break;default:b+="top:0px; left:0px; right:0px; bottom:0px;"}this.domElement.setAttribute("style",
b+"flex-direction:row;")},zoom:1,zoomPercent:100,updateCamera:function(a){a=a||this.zoomPercent;var b=this.viewerCanvas,c=this.viewerCamera,e=b.width/2,h=b.height/2,f=this.zoom,d;d=10*Math.floor(1/f*200/10);d=Math.max(a||d,10);f=d/100;f=1/f*2;this.zoom=1/f*2;c.left=-e*f/2;c.right=e*f/2;c.top=h*f/2;c.bottom=-h*f/2;c.updateProjectionMatrix();this.viewerBackground.material.uniforms.uResolution.value.set(b.width,b.height);this.zoomPercent=d},show:function(a){if(this.currentView=a)if(this.viewerLabel.textContent=
a.name+" ("+a.width+"x"+a.height+")",!this.popup){var b=this,c=this.viewerCanvas;a=c.width=Math.floor(document.body.clientWidth-.3*document.body.clientWidth);var e=c.height=Math.floor(document.body.clientHeight-.3*document.body.clientHeight),h=this.popup=window.open("","printwindow","directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width="+a+",height="+e),f=h.document;f.open();f.write('<head>\n\t\t\t\t\t<title>Texture Inspector</title>\n\t\t\t\t\t<style>\n\t\t\t\t\t\tbody {\n\t\t\t\t\t\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\t\t\t\t\t\tbackground-color: #545454;\n\t\t\t\t\t\t\tcolor: white;\n\t\t\t\t\t\t\tflex-direction:column;\n\t\t\t\t\t\t\talign-items:center;\n\t\t\t\t\t\t\tjustify-content:center;\n\t\t\t\t\t\t\tflex-grow:1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t::-webkit-scrollbar {\n\t\t\t\t\t\t width: 10px;\n\t\t\t\t\t\t height: 10px;\n\t\t\t\t\t\t background: transparent;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t::-webkit-scrollbar-track {\n\t\t\t\t\t\t background: transparent;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t::-webkit-scrollbar-thumb {\n\t\t\t\t\t\t background: #a5a5a5;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t::-webkit-scrollbar-corner,\n\t\t\t\t\t\t::-webkit-scrollbar-thumb:window-inactive {\n\t\t\t\t\t\t background: #a5a5a5;\n\t\t\t\t\t\t}\n\t\t\t\t\t</style>\t\n\t\t\t\t\t</head><body style="margin: 0; overflow: hidden;"></body>');
f.close();window.addEventListener("beforeunload",function(){h.close()});this.listen(h,"resize contextmenu beforeunload",function(a){switch(a.type){case "beforeunload":b.popup=null;f.body.removeChild(b.viewerElement);b.show(null);break;case "contextmenu":return a.preventDefault(),a.stopPropagation(),!1;case "resize":c.width=h.innerWidth-10,c.height=h.innerHeight-10,b.updateCamera(),b.update(!1)}});f.body.appendChild(this.viewerElement)}this.dock()},add:function(a,b,c){c=c||{};if(a instanceof Array){a=
$jscomp.makeIterator(a);for(var e=a.next();!e.done;e=a.next())this.add(e.value,b,c)}else{b=b||a.name;var e=this.createElement('\n\t\t\t\t<div>\n\t\t\t\t\t<div style="display:flex;">\n\t\t\t\t\t\t<div style="padding:2px;"></div>\n\t\t\t\t\t\t<div style="display:flex; flex-grow:1; justify-content:flex-end;">\n\t\t\t\t\t\t\t<div uid="toImage" title="To image" style="padding:2px">◳</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<canvas></canvas>\n\t\t\t\t</div>\n\t\t\t\t'),h="renderView"+
this.views.length,f=e.children[1],d=f.getContext("2d"),k=f.style,g=this.size;d.font=.1*g+"px Arial";d.imageSmoothingEnabled=!1;f.id=h;f.width=g;f.height=g;e.id=h;e.style.display="table";e.children[0].children[0].textContent=b;k.width=g+"px";k.height=g+"px";k.border="1px solid #2b2b2d";this.listElement.appendChild(e);k=this.material;void 0!==c&&(k=k.clone(),k.needsUpdate=!0,void 0!==c.type&&(k.defines.MAP_TYPE=this.decoding[c.type]),c.onBeforeCompile&&(k.onBeforeCompile=c.onBeforeCompile,k.needsUpdate=
!0));this.views.push({id:h,name:b,material:k,div:e,ctx:d,canvas:f,target:a,options:c})}},remove:function(a){var b=this.getByTarget(a);if(b.target===a){a=b.div;var c=b.material;b.div=null;b.ctx=null;b.material=null;a.parentNode.removeChild(a);a.outerHTML="";c!==this.material&&c.dispose();b=this.views.indexOf(b);-1<b&&this.views.splice(b,1)}return-1},getByTarget:function(a){for(var b=0,c=this.views.length;b<c;b++){var e=this.views[b];if(e.target===a)return e}},getByID:function(a){for(var b=$jscomp.makeIterator(this.views),
c=b.next();!c.done;c=b.next())if(c=c.value,c.id===a)return c},getTexture:function(a){if(a.isWebGLRenderTarget)return a.texture;if(a.isTexture)return a;if(a.value)return a.value},getTarget:function(a){return void 0!==a.target.isLight?a.target.shadow.map:a.target},allocateBuffer:function(a,b,c){b=b||a.image.width;c=c||a.image.height;return new this.types[a.type](b*c*this.strides[a.format])},getSample:function(){var a=new THREE.Vector4(.99609375/256*65536,.99609375/256*256,.99609375/256,1),b=new THREE.Vector4;
return function(c,e,h,f){var d=this.getTarget(c),k=0,g,l;if(d.isWebGLRenderTarget)c.buffer||(c.buffer=this.allocateBuffer(d.texture,d.width,d.height)),l=c.buffer,g=this.strides[d.texture.format],this.renderer.readRenderTargetPixels(d,e,h,1,1,l);else{g=void 0!==d.value?d.value:d;if(!g||!g.isDataTexture)return!1;k=(e+h*g.image.width)*this.strides[g.format];l=g.image.data;g=this.strides[g.format]}for(e=0;e<g;e++)f[e]=l[k+e];"depth"===c.options.type&&(b.fromArray(f),f[0]=b.dot(a),f[1]=f[2]=f[3]=0);return!0}}(),
open:function(a){this.toBlob(a,function(b){var c=document.createElement("a");document.body.appendChild(c);c.style="display: none";b=URL.createObjectURL(b);c.href=b;c.download=a.name;c.click();document.body.removeChild(c);URL.revokeObjectURL(b)})},toBlob:function(a,b){var c=this.renderer,e=this._vec2,h=e.x,f=e.y;c.getSize(e);var d=c.autoClear;c.autoClear=!1;c.setRenderTarget(null);var k=a.ctx,g=a.material,l=this.getTarget(a),n=l?this.getTexture(l):null,m=0,p=0;l.isWebGLRenderTarget?(m=l.width,p=l.height):
n.image&&n.image.width&&n.image.height&&(m=n.image.width,p=n.image.height);l=!1;if(m>h||p>f)h=Math.max(m,h),f=Math.max(p,f),l=!0,c.setSize(h,f);c.setViewport(0,0,m,p);c.setScissor(0,0,m,p);this.quad.material=g;g.uniforms.map.value=n;c.render(this.scene,this.camera);a.canvas.width=m;a.canvas.height=p;k.clearRect(0,0,m,p);k.drawImage(c.domElement,0,f-p,m,p,0,0,m,p);a.canvas.toBlob(b);a.canvas.width=this.size;a.canvas.height=this.size;c.setViewport(0,0,e.x,e.y);c.setScissor(0,0,e.x,e.y);c.autoClear=
d;l&&c.setSize(e.x,e.y)},update:function(a){var b=this.renderer,c=this._vec2;b.getSize(c);var e=b.autoClear,h=b.getRenderTarget();b.autoClear=!1;b.setRenderTarget(null);b.setViewport(0,0,this.size,this.size);b.setScissor(0,0,this.size,this.size);if(!1!==a){a=0;for(var f=this.views.length;a<f;a++){var d=this.views[a],k=d,g=k.ctx,k=k.material,l=this.getTarget(d),n=l?this.getTexture(l):null;n?(l.isWebGLRenderTarget?(d.width=l.width,d.height=l.height,d.ready=!0):n.image&&n.image.width&&n.image.height?
(d.width=n.image.width,d.height=n.image.height,d.ready=!0):d.ready=!1,this.quad.material=k,k.uniforms.map.value=n,k.uniforms.size.value.set(d.width,d.height),b.render(this.scene,this.camera),g.clearRect(0,0,this.size,this.size),g.drawImage(b.domElement,0,c.y-this.size,this.size,this.size,0,0,this.size,this.size)):(d.ready=!1,g.clearRect(0,0,this.size,this.size),g.fillStyle="gray",g.fillRect(0,0,this.size,this.size),g.fillStyle="red",g.fillText("N/A",10,10))}}this.currentView&&(a=this.viewerCamera,
f=this.currentView,g=this.viewerCanvas,d=g.width,g=g.height,k=(k=this.getTarget(f))?this.getTexture(k):null,b.setViewport(0,0,d,g),b.setScissor(0,0,d,g),l=Math.min(d,g),this.viewerQuad.scale.set(l,l,1),this.viewerQuad.material=f.material,f.material.uniforms.map.value=k,b.setRenderTarget(null),b.clear(),b.render(this.viewerScene,a),this.ctx.clearRect(0,0,d,g),this.ctx.drawImage(b.domElement,0,c.y-g,d,g,0,0,d,g));b.setViewport(0,0,c.x,c.y);b.setScissor(0,0,c.x,c.y);b.setRenderTarget(h);b.autoClear=
e}};THREE.RenderTargetInspector=RenderTargetInspector;