|
@@ -17,6 +17,7 @@ package h3d.scene.pbr;
|
|
|
Debug slides
|
|
|
*/
|
|
|
var Debug = "Debug";
|
|
|
+ var Performance = "Performance";
|
|
|
}
|
|
|
|
|
|
@:enum abstract SkyMode(String) {
|
|
@@ -66,6 +67,7 @@ class Renderer extends h3d.scene.Renderer {
|
|
|
var pbrProps = new h3d.shader.pbr.PropsImport();
|
|
|
var enableFXAA = true;
|
|
|
var currentStep : h3d.impl.RendererFX.Step;
|
|
|
+ var performance = new h3d.pass.ScreenFx(new h3d.shader.pbr.PerformanceViewer());
|
|
|
|
|
|
var textures = {
|
|
|
albedo : (null:h3d.mat.Texture),
|
|
@@ -235,6 +237,26 @@ class Renderer extends h3d.scene.Renderer {
|
|
|
}
|
|
|
|
|
|
begin(Lighting);
|
|
|
+ if ( displayMode == Performance ) {
|
|
|
+ var content;
|
|
|
+ try {
|
|
|
+ content = hxd.res.Loader.currentInstance.load("props.json").toText();
|
|
|
+ } catch ( e : Dynamic ) {
|
|
|
+ throw "Missing props.json";
|
|
|
+ }
|
|
|
+ var obj = try haxe.Json.parse(content) catch( e : Dynamic ) throw "Failed to parse props.json";
|
|
|
+ var ls = hxd.impl.Api.downcast(getLightSystem(), h3d.scene.pbr.LightSystem);
|
|
|
+ var s = new h3d.shader.pbr.Light.Performance();
|
|
|
+
|
|
|
+ s.maxLights = Std.parseInt(Reflect.field(obj, "performance.maxLights"));
|
|
|
+ var gradient = Reflect.field(obj, "performance.lightGradient");
|
|
|
+ try {
|
|
|
+ performance.shader.gradient = hxd.res.Loader.currentInstance.load(gradient).toTexture();
|
|
|
+ } catch ( e : Dynamic ) {
|
|
|
+ throw "Missing performance.lightGradient in props.json";
|
|
|
+ }
|
|
|
+ ls.lightingShaders.push(s);
|
|
|
+ }
|
|
|
var lpass = screenLightPass;
|
|
|
if( lpass == null ) {
|
|
|
lpass = new h3d.pass.ScreenFx(new h3d.shader.ScreenShader());
|
|
@@ -256,6 +278,11 @@ class Renderer extends h3d.scene.Renderer {
|
|
|
pbrProps.isScreen = false;
|
|
|
draw(pbrLightPass.name);
|
|
|
|
|
|
+ if ( displayMode == Performance ) {
|
|
|
+ end();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
mark("Indirect Lighting");
|
|
|
if( !renderLightProbes() && env != null && env.power > 0.0 ) {
|
|
|
pbrProps.isScreen = true;
|
|
@@ -387,7 +414,9 @@ class Renderer extends h3d.scene.Renderer {
|
|
|
|
|
|
function beginPbr() {
|
|
|
var props : RenderProps = props;
|
|
|
-
|
|
|
+ if ( displayMode == Performance ) {
|
|
|
+ performance.shader.gradient = hrt.impl.TextureType.Utils.getTextureFromValue(props.performanceGradient);
|
|
|
+ }
|
|
|
// reset tonemap shaders
|
|
|
var s = @:privateAccess tonemap.pass.shaders;
|
|
|
while( s != null ) {
|
|
@@ -630,6 +659,15 @@ class Renderer extends h3d.scene.Renderer {
|
|
|
hxd.Window.getInstance().addEventTarget(onEvent);
|
|
|
}
|
|
|
#if editor
|
|
|
+ renderPass(defaultPass, get("overlay"), backToFront);
|
|
|
+ renderPass(defaultPass, get("ui"), backToFront);
|
|
|
+ #end
|
|
|
+ case Performance:
|
|
|
+ var hdr = ctx.getGlobal("hdrMap");
|
|
|
+ performance.shader.hdrMap = hdr;
|
|
|
+ performance.render();
|
|
|
+ #if editor
|
|
|
+ renderPass(defaultPass, get("overlay"), backToFront);
|
|
|
renderPass(defaultPass, get("ui"), backToFront);
|
|
|
#end
|
|
|
}
|
|
@@ -705,6 +743,7 @@ class Renderer extends h3d.scene.Renderer {
|
|
|
<option value="MatCap">MatCap</option>
|
|
|
<option value="Debug">Debug</option>
|
|
|
<option value="Distortion">Distortion</option>
|
|
|
+ <option value="Performance">Performance</option>
|
|
|
</select>
|
|
|
</dd>
|
|
|
|