mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 21:43:03 +02:00
Merge pull request #11708 from samcake/blue
Expose the Render api to the tablet js context and update render engine tool
This commit is contained in:
commit
f958829d00
8 changed files with 404 additions and 264 deletions
|
@ -222,6 +222,7 @@ void Web3DOverlay::setupQmlSurface() {
|
||||||
_webSurface->getSurfaceContext()->setContextProperty("SoundCache", DependencyManager::get<SoundCache>().data());
|
_webSurface->getSurfaceContext()->setContextProperty("SoundCache", DependencyManager::get<SoundCache>().data());
|
||||||
_webSurface->getSurfaceContext()->setContextProperty("MenuInterface", MenuScriptingInterface::getInstance());
|
_webSurface->getSurfaceContext()->setContextProperty("MenuInterface", MenuScriptingInterface::getInstance());
|
||||||
_webSurface->getSurfaceContext()->setContextProperty("Settings", SettingsScriptingInterface::getInstance());
|
_webSurface->getSurfaceContext()->setContextProperty("Settings", SettingsScriptingInterface::getInstance());
|
||||||
|
_webSurface->getSurfaceContext()->setContextProperty("Render", AbstractViewStateInterface::instance()->getRenderEngine()->getConfiguration().get());
|
||||||
_webSurface->getSurfaceContext()->setContextProperty("Controller", DependencyManager::get<controller::ScriptingInterface>().data());
|
_webSurface->getSurfaceContext()->setContextProperty("Controller", DependencyManager::get<controller::ScriptingInterface>().data());
|
||||||
_webSurface->getSurfaceContext()->setContextProperty("Web3DOverlay", this);
|
_webSurface->getSurfaceContext()->setContextProperty("Web3DOverlay", this);
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,11 @@ EntityRendererPointer EntityTreeRenderer::renderableForEntityId(const EntityItem
|
||||||
|
|
||||||
render::ItemID EntityTreeRenderer::renderableIdForEntityId(const EntityItemID& id) const {
|
render::ItemID EntityTreeRenderer::renderableIdForEntityId(const EntityItemID& id) const {
|
||||||
auto renderable = renderableForEntityId(id);
|
auto renderable = renderableForEntityId(id);
|
||||||
return renderable ? renderable->getRenderItemID() : render::Item::INVALID_ITEM_ID;
|
if (renderable) {
|
||||||
|
return renderable->getRenderItemID();
|
||||||
|
} else {
|
||||||
|
return render::Item::INVALID_ITEM_ID;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int EntityTreeRenderer::_entitiesScriptEngineCount = 0;
|
int EntityTreeRenderer::_entitiesScriptEngineCount = 0;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
//
|
//
|
||||||
// ConfigSlider.qml
|
// ConfigSlider.qml
|
||||||
// examples/utilities/tools/render
|
|
||||||
//
|
//
|
||||||
// Created by Zach Pomerantz on 2/8/2016
|
// Created by Zach Pomerantz on 2/8/2016
|
||||||
// Copyright 2016 High Fidelity, Inc.
|
// Copyright 2016 High Fidelity, Inc.
|
||||||
|
@ -8,12 +7,21 @@
|
||||||
// Distributed under the Apache License, Version 2.0.
|
// Distributed under the Apache License, Version 2.0.
|
||||||
// See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
//
|
//
|
||||||
import QtQuick 2.5
|
|
||||||
import QtQuick.Controls 1.4
|
import QtQuick 2.7
|
||||||
|
import QtQuick.Controls 1.4 as Original
|
||||||
|
import QtQuick.Controls.Styles 1.4
|
||||||
|
|
||||||
|
import "qrc:///qml/styles-uit"
|
||||||
|
import "qrc:///qml/controls-uit" as HifiControls
|
||||||
|
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
|
HifiConstants { id: hifi }
|
||||||
id: root
|
id: root
|
||||||
width: 400
|
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
height: 24
|
height: 24
|
||||||
property bool integral: false
|
property bool integral: false
|
||||||
property var config
|
property var config
|
||||||
|
@ -28,22 +36,21 @@ Item {
|
||||||
bindingControl.when = true;
|
bindingControl.when = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
HifiControls.Label {
|
||||||
id: labelControl
|
id: labelControl
|
||||||
text: root.label
|
text: root.label
|
||||||
|
enabled: true
|
||||||
anchors.left: root.left
|
anchors.left: root.left
|
||||||
anchors.leftMargin: 8
|
anchors.right: root.horizontalCenter
|
||||||
anchors.top: root.top
|
anchors.verticalCenter: root.verticalCenter
|
||||||
anchors.topMargin: 7
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
HifiControls.Label {
|
||||||
id: labelValue
|
id: labelValue
|
||||||
text: sliderControl.value.toFixed(root.integral ? 0 : 2)
|
text: sliderControl.value.toFixed(root.integral ? 0 : 2)
|
||||||
anchors.left: root.left
|
anchors.right: root.right
|
||||||
anchors.leftMargin: 200
|
anchors.bottom: root.bottom
|
||||||
anchors.top: root.top
|
anchors.bottomMargin: 0
|
||||||
anchors.topMargin: 15
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Binding {
|
Binding {
|
||||||
|
@ -54,14 +61,13 @@ Item {
|
||||||
when: false
|
when: false
|
||||||
}
|
}
|
||||||
|
|
||||||
Slider {
|
HifiControls.Slider {
|
||||||
id: sliderControl
|
id: sliderControl
|
||||||
stepSize: root.integral ? 1.0 : 0.0
|
stepSize: root.integral ? 1.0 : 0.0
|
||||||
width: root.width-130
|
anchors.left: root.horizontalCenter
|
||||||
height: 20
|
|
||||||
anchors.right: root.right
|
anchors.right: root.right
|
||||||
anchors.rightMargin: 8
|
anchors.rightMargin: 0
|
||||||
anchors.top: root.top
|
anchors.top: root.top
|
||||||
anchors.topMargin: 3
|
anchors.topMargin: 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
//
|
|
||||||
// debugDeferredLighting.js
|
|
||||||
//
|
|
||||||
// Created by Sam Gateau on 6/6/2016
|
|
||||||
// Copyright 2016 High Fidelity, Inc.
|
|
||||||
//
|
|
||||||
// Distributed under the Apache License, Version 2.0.
|
|
||||||
// See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html
|
|
||||||
//
|
|
||||||
|
|
||||||
// Set up the qml ui
|
|
||||||
var qml = Script.resolvePath('deferredLighting.qml');
|
|
||||||
var window = new OverlayWindow({
|
|
||||||
title: 'Lighting',
|
|
||||||
source: qml,
|
|
||||||
width: 400, height:400,
|
|
||||||
});
|
|
||||||
window.setPosition(Window.innerWidth - 420, 50);
|
|
||||||
window.closed.connect(function() { Script.stop(); });
|
|
||||||
|
|
||||||
|
|
||||||
var DDB = Render.RenderDeferredTask.DebugDeferredBuffer;
|
|
||||||
DDB.enabled = true;
|
|
||||||
DDB.mode = 0;
|
|
||||||
|
|
||||||
// Debug buffer sizing
|
|
||||||
var resizing = false;
|
|
||||||
Controller.mousePressEvent.connect(function (e) {
|
|
||||||
if (shouldStartResizing(e.x)) {
|
|
||||||
resizing = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Controller.mouseReleaseEvent.connect(function() { resizing = false; });
|
|
||||||
Controller.mouseMoveEvent.connect(function (e) { resizing && setDebugBufferSize(e.x); });
|
|
||||||
Script.scriptEnding.connect(function () { DDB.enabled = false; });
|
|
||||||
|
|
||||||
function shouldStartResizing(eventX) {
|
|
||||||
var x = Math.abs(eventX - Window.innerWidth * (1.0 + DDB.size.x) / 2.0);
|
|
||||||
var mode = DDB.mode;
|
|
||||||
return mode !== 0 && x < 20;
|
|
||||||
}
|
|
||||||
|
|
||||||
function setDebugBufferSize(x) {
|
|
||||||
x = (2.0 * (x / Window.innerWidth) - 1.0); // scale
|
|
||||||
x = Math.min(Math.max(-1, x), 1); // clamp
|
|
||||||
DDB.size = { x: x, y: -1, z: 1, w: 1 };
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -7,215 +7,268 @@
|
||||||
// Distributed under the Apache License, Version 2.0.
|
// Distributed under the Apache License, Version 2.0.
|
||||||
// See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
//
|
//
|
||||||
import QtQuick 2.5
|
import QtQuick 2.7
|
||||||
import QtQuick.Controls 1.4
|
import QtQuick.Controls 1.4
|
||||||
import "configSlider"
|
import QtQuick.Layouts 1.3
|
||||||
|
|
||||||
Column {
|
import "qrc:///qml/styles-uit"
|
||||||
spacing: 8
|
import "qrc:///qml/controls-uit" as HifiControls
|
||||||
property var mainViewTask: Render.getConfig("RenderMainView")
|
import "configSlider"
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
HifiConstants { id: hifi;}
|
||||||
|
id: render;
|
||||||
|
anchors.margins: hifi.dimensions.contentMargin.x
|
||||||
|
|
||||||
Row {
|
color: hifi.colors.baseGray;
|
||||||
spacing: 8
|
property var mainViewTask: Render.getConfig("RenderMainView")
|
||||||
Column {
|
|
||||||
spacing: 10
|
|
||||||
Repeater {
|
|
||||||
model: [
|
|
||||||
"Unlit:LightingModel:enableUnlit",
|
|
||||||
"Emissive:LightingModel:enableEmissive",
|
|
||||||
"Lightmap:LightingModel:enableLightmap",
|
|
||||||
"Background:LightingModel:enableBackground",
|
|
||||||
"ssao:AmbientOcclusion:enabled",
|
|
||||||
"Textures:LightingModel:enableMaterialTexturing"
|
|
||||||
]
|
|
||||||
CheckBox {
|
|
||||||
text: modelData.split(":")[0]
|
|
||||||
checked: mainViewTask.getConfig(modelData.split(":")[1])[modelData.split(":")[2]]
|
|
||||||
onCheckedChanged: { mainViewTask.getConfig(modelData.split(":")[1])[modelData.split(":")[2]] = checked }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Column {
|
|
||||||
spacing: 10
|
|
||||||
Repeater {
|
|
||||||
model: [
|
|
||||||
"Obscurance:LightingModel:enableObscurance",
|
|
||||||
"Scattering:LightingModel:enableScattering",
|
|
||||||
"Diffuse:LightingModel:enableDiffuse",
|
|
||||||
"Specular:LightingModel:enableSpecular",
|
|
||||||
"Albedo:LightingModel:enableAlbedo",
|
|
||||||
"Wireframe:LightingModel:enableWireframe"
|
|
||||||
]
|
|
||||||
CheckBox {
|
|
||||||
text: modelData.split(":")[0]
|
|
||||||
checked: mainViewTask.getConfig(modelData.split(":")[1])[modelData.split(":")[2]]
|
|
||||||
onCheckedChanged: { mainViewTask.getConfig(modelData.split(":")[1])[modelData.split(":")[2]] = checked }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Column {
|
|
||||||
spacing: 10
|
|
||||||
Repeater {
|
|
||||||
model: [
|
|
||||||
"Ambient:LightingModel:enableAmbientLight",
|
|
||||||
"Directional:LightingModel:enableDirectionalLight",
|
|
||||||
"Point:LightingModel:enablePointLight",
|
|
||||||
"Spot:LightingModel:enableSpotLight",
|
|
||||||
"Light Contour:LightingModel:showLightContour",
|
|
||||||
"Zone Stack:DrawZoneStack:enabled",
|
|
||||||
"Shadow:RenderShadowTask:enabled"
|
|
||||||
]
|
|
||||||
CheckBox {
|
|
||||||
text: modelData.split(":")[0]
|
|
||||||
checked: mainViewTask.getConfig(modelData.split(":")[1])[modelData.split(":")[2]]
|
|
||||||
onCheckedChanged: { mainViewTask.getConfig(modelData.split(":")[1])[modelData.split(":")[2]] = checked }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Column {
|
Column {
|
||||||
spacing: 10
|
spacing: 5
|
||||||
Repeater {
|
anchors.left: parent.left
|
||||||
model: [ "Tone Mapping Exposure:ToneMapping:exposure:5.0:-5.0"
|
anchors.right: parent.right
|
||||||
]
|
anchors.margins: hifi.dimensions.contentMargin.x
|
||||||
ConfigSlider {
|
//padding: hifi.dimensions.contentMargin.x
|
||||||
label: qsTr(modelData.split(":")[0])
|
HifiControls.Label {
|
||||||
integral: false
|
text: "Shading"
|
||||||
config: mainViewTask.getConfig(modelData.split(":")[1])
|
}
|
||||||
property: modelData.split(":")[2]
|
Row {
|
||||||
max: modelData.split(":")[3]
|
anchors.left: parent.left
|
||||||
min: modelData.split(":")[4]
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
spacing: 20
|
||||||
|
Column {
|
||||||
|
spacing: 10
|
||||||
|
// padding: 10
|
||||||
|
Repeater {
|
||||||
|
model: [
|
||||||
|
"Unlit:LightingModel:enableUnlit",
|
||||||
|
"Emissive:LightingModel:enableEmissive",
|
||||||
|
"Lightmap:LightingModel:enableLightmap",
|
||||||
|
"Background:LightingModel:enableBackground",
|
||||||
|
"ssao:AmbientOcclusion:enabled",
|
||||||
|
"Textures:LightingModel:enableMaterialTexturing"
|
||||||
|
]
|
||||||
|
HifiControls.CheckBox {
|
||||||
|
boxSize: 20
|
||||||
|
text: modelData.split(":")[0]
|
||||||
|
checked: render.mainViewTask.getConfig(modelData.split(":")[1])[modelData.split(":")[2]]
|
||||||
|
onCheckedChanged: { render.mainViewTask.getConfig(modelData.split(":")[1])[modelData.split(":")[2]] = checked }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Column {
|
||||||
|
spacing: 10
|
||||||
|
Repeater {
|
||||||
|
model: [
|
||||||
|
"Obscurance:LightingModel:enableObscurance",
|
||||||
|
"Scattering:LightingModel:enableScattering",
|
||||||
|
"Diffuse:LightingModel:enableDiffuse",
|
||||||
|
"Specular:LightingModel:enableSpecular",
|
||||||
|
"Albedo:LightingModel:enableAlbedo",
|
||||||
|
"Wireframe:LightingModel:enableWireframe"
|
||||||
|
]
|
||||||
|
HifiControls.CheckBox {
|
||||||
|
boxSize: 20
|
||||||
|
text: modelData.split(":")[0]
|
||||||
|
checked: render.mainViewTask.getConfig(modelData.split(":")[1])[modelData.split(":")[2]]
|
||||||
|
onCheckedChanged: { render.mainViewTask.getConfig(modelData.split(":")[1])[modelData.split(":")[2]] = checked }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Column {
|
||||||
|
spacing: 10
|
||||||
|
Repeater {
|
||||||
|
model: [
|
||||||
|
"Ambient:LightingModel:enableAmbientLight",
|
||||||
|
"Directional:LightingModel:enableDirectionalLight",
|
||||||
|
"Point:LightingModel:enablePointLight",
|
||||||
|
"Spot:LightingModel:enableSpotLight",
|
||||||
|
"Light Contour:LightingModel:showLightContour",
|
||||||
|
"Zone Stack:DrawZoneStack:enabled",
|
||||||
|
"Shadow:RenderShadowTask:enabled"
|
||||||
|
]
|
||||||
|
HifiControls.CheckBox {
|
||||||
|
boxSize: 20
|
||||||
|
text: modelData.split(":")[0]
|
||||||
|
checked: render.mainViewTask.getConfig(modelData.split(":")[1])[modelData.split(":")[2]]
|
||||||
|
onCheckedChanged: { render.mainViewTask.getConfig(modelData.split(":")[1])[modelData.split(":")[2]] = checked }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Separator {}
|
||||||
|
Column {
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
spacing: 10
|
||||||
|
Repeater {
|
||||||
|
model: [ "Tone Mapping Exposure:ToneMapping:exposure:5.0:-5.0"
|
||||||
|
]
|
||||||
|
ConfigSlider {
|
||||||
|
label: qsTr(modelData.split(":")[0])
|
||||||
|
integral: false
|
||||||
|
config: render.mainViewTask.getConfig(modelData.split(":")[1])
|
||||||
|
property: modelData.split(":")[2]
|
||||||
|
max: modelData.split(":")[3]
|
||||||
|
min: modelData.split(":")[4]
|
||||||
|
|
||||||
Row {
|
anchors.left: parent.left
|
||||||
Label {
|
anchors.right: parent.right
|
||||||
text: "Tone Mapping Curve"
|
}
|
||||||
anchors.left: root.left
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ComboBox {
|
Item {
|
||||||
anchors.right: root.right
|
height: childrenRect.height
|
||||||
currentIndex: 1
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
HifiControls.Label {
|
||||||
|
text: "Tone Mapping Curve"
|
||||||
|
anchors.left: parent.left
|
||||||
|
}
|
||||||
|
|
||||||
|
HifiControls.ComboBox {
|
||||||
|
anchors.right: parent.right
|
||||||
|
currentIndex: 1
|
||||||
|
model: ListModel {
|
||||||
|
id: cbItems
|
||||||
|
ListElement { text: "RGB"; color: "Yellow" }
|
||||||
|
ListElement { text: "SRGB"; color: "Green" }
|
||||||
|
ListElement { text: "Reinhard"; color: "Yellow" }
|
||||||
|
ListElement { text: "Filmic"; color: "White" }
|
||||||
|
}
|
||||||
|
width: 200
|
||||||
|
onCurrentIndexChanged: { render.mainViewTask.getConfig("ToneMapping")["curve"] = currentIndex }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Separator {}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
height: childrenRect.height
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
id: framebuffer
|
||||||
|
|
||||||
|
HifiControls.Label {
|
||||||
|
text: "Debug Framebuffer"
|
||||||
|
anchors.left: parent.left
|
||||||
|
}
|
||||||
|
|
||||||
|
property var config: render.mainViewTask.getConfig("DebugDeferredBuffer")
|
||||||
|
|
||||||
|
function setDebugMode(mode) {
|
||||||
|
framebuffer.config.enabled = (mode != 0);
|
||||||
|
framebuffer.config.mode = mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
HifiControls.ComboBox {
|
||||||
|
anchors.right: parent.right
|
||||||
|
currentIndex: 0
|
||||||
model: ListModel {
|
model: ListModel {
|
||||||
id: cbItems
|
id: cbItemsFramebuffer
|
||||||
ListElement { text: "RGB"; color: "Yellow" }
|
ListElement { text: "Off"; color: "Yellow" }
|
||||||
ListElement { text: "SRGB"; color: "Green" }
|
ListElement { text: "Depth"; color: "Green" }
|
||||||
ListElement { text: "Reinhard"; color: "Yellow" }
|
ListElement { text: "Albedo"; color: "Yellow" }
|
||||||
ListElement { text: "Filmic"; color: "White" }
|
ListElement { text: "Normal"; color: "White" }
|
||||||
|
ListElement { text: "Roughness"; color: "White" }
|
||||||
|
ListElement { text: "Metallic"; color: "White" }
|
||||||
|
ListElement { text: "Emissive"; color: "White" }
|
||||||
|
ListElement { text: "Unlit"; color: "White" }
|
||||||
|
ListElement { text: "Occlusion"; color: "White" }
|
||||||
|
ListElement { text: "Lightmap"; color: "White" }
|
||||||
|
ListElement { text: "Scattering"; color: "White" }
|
||||||
|
ListElement { text: "Lighting"; color: "White" }
|
||||||
|
ListElement { text: "Shadow"; color: "White" }
|
||||||
|
ListElement { text: "Linear Depth"; color: "White" }
|
||||||
|
ListElement { text: "Half Linear Depth"; color: "White" }
|
||||||
|
ListElement { text: "Half Normal"; color: "White" }
|
||||||
|
ListElement { text: "Mid Curvature"; color: "White" }
|
||||||
|
ListElement { text: "Mid Normal"; color: "White" }
|
||||||
|
ListElement { text: "Low Curvature"; color: "White" }
|
||||||
|
ListElement { text: "Low Normal"; color: "White" }
|
||||||
|
ListElement { text: "Curvature Occlusion"; color: "White" }
|
||||||
|
ListElement { text: "Debug Scattering"; color: "White" }
|
||||||
|
ListElement { text: "Ambient Occlusion"; color: "White" }
|
||||||
|
ListElement { text: "Ambient Occlusion Blurred"; color: "White" }
|
||||||
|
ListElement { text: "Custom"; color: "White" }
|
||||||
}
|
}
|
||||||
width: 200
|
width: 200
|
||||||
onCurrentIndexChanged: { mainViewTask.getConfig("ToneMapping")["curve"] = currentIndex }
|
onCurrentIndexChanged: { framebuffer.setDebugMode(currentIndex) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Separator {}
|
||||||
|
Row {
|
||||||
|
spacing: 10
|
||||||
|
Column {
|
||||||
|
spacing: 10
|
||||||
|
|
||||||
|
HifiControls.CheckBox {
|
||||||
|
boxSize: 20
|
||||||
|
text: "Opaques"
|
||||||
|
checked: render.mainViewTask.getConfig("DrawOpaqueBounds")["enabled"]
|
||||||
|
onCheckedChanged: { render.mainViewTask.getConfig("DrawOpaqueBounds")["enabled"] = checked }
|
||||||
|
}
|
||||||
|
HifiControls.CheckBox {
|
||||||
|
boxSize: 20
|
||||||
|
text: "Transparents"
|
||||||
|
checked: render.mainViewTask.getConfig("DrawTransparentBounds")["enabled"]
|
||||||
|
onCheckedChanged: { render.mainViewTask.getConfig("DrawTransparentBounds")["enabled"] = checked }
|
||||||
|
}
|
||||||
|
HifiControls.CheckBox {
|
||||||
|
boxSize: 20
|
||||||
|
text: "Opaques in Front"
|
||||||
|
checked: render.mainViewTask.getConfig("DrawOverlayInFrontOpaqueBounds")["enabled"]
|
||||||
|
onCheckedChanged: { render.mainViewTask.getConfig("DrawOverlayInFrontOpaqueBounds")["enabled"] = checked }
|
||||||
|
}
|
||||||
|
HifiControls.CheckBox {
|
||||||
|
boxSize: 20
|
||||||
|
text: "Transparents in Front"
|
||||||
|
checked: render.mainViewTask.getConfig("DrawOverlayInFrontTransparentBounds")["enabled"]
|
||||||
|
onCheckedChanged: { render.mainViewTask.getConfig("DrawOverlayInFrontTransparentBounds")["enabled"] = checked }
|
||||||
|
}
|
||||||
|
HifiControls.CheckBox {
|
||||||
|
boxSize: 20
|
||||||
|
text: "Opaques in HUD"
|
||||||
|
checked: render.mainViewTask.getConfig("DrawOverlayHUDOpaqueBounds")["enabled"]
|
||||||
|
onCheckedChanged: { render.mainViewTask.getConfig("DrawOverlayHUDOpaqueBounds")["enabled"] = checked }
|
||||||
|
}
|
||||||
|
HifiControls.CheckBox {
|
||||||
|
boxSize: 20
|
||||||
|
text: "Transparents in HUD"
|
||||||
|
checked: render.mainViewTask.getConfig("DrawOverlayHUDTransparentBounds")["enabled"]
|
||||||
|
onCheckedChanged: { render.mainViewTask.getConfig("DrawOverlayHUDTransparentBounds")["enabled"] = checked }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Column {
|
||||||
|
spacing: 10
|
||||||
|
HifiControls.CheckBox {
|
||||||
|
boxSize: 20
|
||||||
|
text: "Metas"
|
||||||
|
checked: render.mainViewTask.getConfig("DrawMetaBounds")["enabled"]
|
||||||
|
onCheckedChanged: { render.mainViewTask.getConfig("DrawMetaBounds")["enabled"] = checked }
|
||||||
|
}
|
||||||
|
HifiControls.CheckBox {
|
||||||
|
boxSize: 20
|
||||||
|
text: "Lights"
|
||||||
|
checked: render.mainViewTask.getConfig("DrawLightBounds")["enabled"]
|
||||||
|
onCheckedChanged: { render.mainViewTask.getConfig("DrawLightBounds")["enabled"] = checked; }
|
||||||
|
}
|
||||||
|
HifiControls.CheckBox {
|
||||||
|
boxSize: 20
|
||||||
|
text: "Zones"
|
||||||
|
checked: render.mainViewTask.getConfig("DrawZones")["enabled"]
|
||||||
|
onCheckedChanged: { render.mainViewTask.getConfig("ZoneRenderer")["enabled"] = checked; render.mainViewTask.getConfig("DrawZones")["enabled"] = checked; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Row {
|
//}
|
||||||
id: framebuffer
|
|
||||||
spacing: 10
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: "Debug Framebuffer"
|
|
||||||
anchors.left: root.left
|
|
||||||
}
|
|
||||||
|
|
||||||
property var config: mainViewTask.getConfig("DebugDeferredBuffer")
|
|
||||||
|
|
||||||
function setDebugMode(mode) {
|
|
||||||
framebuffer.config.enabled = (mode != 0);
|
|
||||||
framebuffer.config.mode = mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
ComboBox {
|
|
||||||
anchors.right: root.right
|
|
||||||
currentIndex: 0
|
|
||||||
model: ListModel {
|
|
||||||
id: cbItemsFramebuffer
|
|
||||||
ListElement { text: "Off"; color: "Yellow" }
|
|
||||||
ListElement { text: "Depth"; color: "Green" }
|
|
||||||
ListElement { text: "Albedo"; color: "Yellow" }
|
|
||||||
ListElement { text: "Normal"; color: "White" }
|
|
||||||
ListElement { text: "Roughness"; color: "White" }
|
|
||||||
ListElement { text: "Metallic"; color: "White" }
|
|
||||||
ListElement { text: "Emissive"; color: "White" }
|
|
||||||
ListElement { text: "Unlit"; color: "White" }
|
|
||||||
ListElement { text: "Occlusion"; color: "White" }
|
|
||||||
ListElement { text: "Lightmap"; color: "White" }
|
|
||||||
ListElement { text: "Scattering"; color: "White" }
|
|
||||||
ListElement { text: "Lighting"; color: "White" }
|
|
||||||
ListElement { text: "Shadow"; color: "White" }
|
|
||||||
ListElement { text: "Linear Depth"; color: "White" }
|
|
||||||
ListElement { text: "Half Linear Depth"; color: "White" }
|
|
||||||
ListElement { text: "Half Normal"; color: "White" }
|
|
||||||
ListElement { text: "Mid Curvature"; color: "White" }
|
|
||||||
ListElement { text: "Mid Normal"; color: "White" }
|
|
||||||
ListElement { text: "Low Curvature"; color: "White" }
|
|
||||||
ListElement { text: "Low Normal"; color: "White" }
|
|
||||||
ListElement { text: "Curvature Occlusion"; color: "White" }
|
|
||||||
ListElement { text: "Debug Scattering"; color: "White" }
|
|
||||||
ListElement { text: "Ambient Occlusion"; color: "White" }
|
|
||||||
ListElement { text: "Ambient Occlusion Blurred"; color: "White" }
|
|
||||||
ListElement { text: "Custom"; color: "White" }
|
|
||||||
}
|
|
||||||
width: 200
|
|
||||||
onCurrentIndexChanged: { framebuffer.setDebugMode(currentIndex) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Row {
|
|
||||||
Column {
|
|
||||||
|
|
||||||
CheckBox {
|
|
||||||
text: "Opaques"
|
|
||||||
checked: mainViewTask.getConfig("DrawOpaqueBounds")["enabled"]
|
|
||||||
onCheckedChanged: { mainViewTask.getConfig("DrawOpaqueBounds")["enabled"] = checked }
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
text: "Transparents"
|
|
||||||
checked: mainViewTask.getConfig("DrawTransparentBounds")["enabled"]
|
|
||||||
onCheckedChanged: { mainViewTask.getConfig("DrawTransparentBounds")["enabled"] = checked }
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
text: "Opaques in Front"
|
|
||||||
checked: mainViewTask.getConfig("DrawOverlayInFrontOpaqueBounds")["enabled"]
|
|
||||||
onCheckedChanged: { mainViewTask.getConfig("DrawOverlayInFrontOpaqueBounds")["enabled"] = checked }
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
text: "Transparents in Front"
|
|
||||||
checked: mainViewTask.getConfig("DrawOverlayInFrontTransparentBounds")["enabled"]
|
|
||||||
onCheckedChanged: { mainViewTask.getConfig("DrawOverlayInFrontTransparentBounds")["enabled"] = checked }
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
text: "Opaques in HUD"
|
|
||||||
checked: mainViewTask.getConfig("DrawOverlayHUDOpaqueBounds")["enabled"]
|
|
||||||
onCheckedChanged: { mainViewTask.getConfig("DrawOverlayHUDOpaqueBounds")["enabled"] = checked }
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
text: "Transparents in HUD"
|
|
||||||
checked: mainViewTask.getConfig("DrawOverlayHUDTransparentBounds")["enabled"]
|
|
||||||
onCheckedChanged: { mainViewTask.getConfig("DrawOverlayHUDTransparentBounds")["enabled"] = checked }
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Column {
|
|
||||||
CheckBox {
|
|
||||||
text: "Metas"
|
|
||||||
checked: mainViewTask.getConfig("DrawMetaBounds")["enabled"]
|
|
||||||
onCheckedChanged: { mainViewTask.getConfig("DrawMetaBounds")["enabled"] = checked }
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
text: "Lights"
|
|
||||||
checked: mainViewTask.getConfig("DrawLightBounds")["enabled"]
|
|
||||||
onCheckedChanged: { mainViewTask.getConfig("DrawLightBounds")["enabled"] = checked; }
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
text: "Zones"
|
|
||||||
checked: mainViewTask.getConfig("DrawZones")["enabled"]
|
|
||||||
onCheckedChanged: { mainViewTask.getConfig("ZoneRenderer")["enabled"] = checked; mainViewTask.getConfig("DrawZones")["enabled"] = checked; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
102
scripts/developer/utilities/render/luci.js
Normal file
102
scripts/developer/utilities/render/luci.js
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
//
|
||||||
|
// Luci.js
|
||||||
|
// tablet-engine app
|
||||||
|
//
|
||||||
|
// Copyright 2017 High Fidelity, Inc.
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var TABLET_BUTTON_NAME = "LUCI";
|
||||||
|
var QMLAPP_URL = Script.resolvePath("./deferredLighting.qml");
|
||||||
|
var ICON_URL = Script.resolvePath("../../../system/assets/images/luci-i.svg");
|
||||||
|
var ACTIVE_ICON_URL = Script.resolvePath("../../../system/assets/images/luci-a.svg");
|
||||||
|
|
||||||
|
|
||||||
|
var onLuciScreen = false;
|
||||||
|
|
||||||
|
function onClicked() {
|
||||||
|
if (onLuciScreen) {
|
||||||
|
tablet.gotoHomeScreen();
|
||||||
|
} else {
|
||||||
|
tablet.loadQMLSource(QMLAPP_URL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
|
||||||
|
var button = tablet.addButton({
|
||||||
|
text: TABLET_BUTTON_NAME,
|
||||||
|
icon: ICON_URL,
|
||||||
|
activeIcon: ACTIVE_ICON_URL,
|
||||||
|
sortOrder: 1
|
||||||
|
});
|
||||||
|
|
||||||
|
var hasEventBridge = false;
|
||||||
|
|
||||||
|
function wireEventBridge(on) {
|
||||||
|
if (!tablet) {
|
||||||
|
print("Warning in wireEventBridge(): 'tablet' undefined!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (on) {
|
||||||
|
if (!hasEventBridge) {
|
||||||
|
tablet.fromQml.connect(fromQml);
|
||||||
|
hasEventBridge = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (hasEventBridge) {
|
||||||
|
tablet.fromQml.disconnect(fromQml);
|
||||||
|
hasEventBridge = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function onScreenChanged(type, url) {
|
||||||
|
if (url === QMLAPP_URL) {
|
||||||
|
onLuciScreen = true;
|
||||||
|
} else {
|
||||||
|
onLuciScreen = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.editProperties({isActive: onLuciScreen});
|
||||||
|
wireEventBridge(onLuciScreen);
|
||||||
|
}
|
||||||
|
|
||||||
|
function fromQml(message) {
|
||||||
|
}
|
||||||
|
|
||||||
|
button.clicked.connect(onClicked);
|
||||||
|
tablet.screenChanged.connect(onScreenChanged);
|
||||||
|
|
||||||
|
var moveDebugCursor = false;
|
||||||
|
Controller.mousePressEvent.connect(function (e) {
|
||||||
|
if (e.isMiddleButton) {
|
||||||
|
moveDebugCursor = true;
|
||||||
|
setDebugCursor(e.x, e.y);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Controller.mouseReleaseEvent.connect(function() { moveDebugCursor = false; });
|
||||||
|
Controller.mouseMoveEvent.connect(function (e) { if (moveDebugCursor) setDebugCursor(e.x, e.y); });
|
||||||
|
|
||||||
|
|
||||||
|
Script.scriptEnding.connect(function () {
|
||||||
|
if (onLuciScreen) {
|
||||||
|
tablet.gotoHomeScreen();
|
||||||
|
}
|
||||||
|
button.clicked.disconnect(onClicked);
|
||||||
|
tablet.screenChanged.disconnect(onScreenChanged);
|
||||||
|
tablet.removeButton(button);
|
||||||
|
});
|
||||||
|
|
||||||
|
function setDebugCursor(x, y) {
|
||||||
|
nx = (x / Window.innerWidth);
|
||||||
|
ny = 1.0 - ((y) / (Window.innerHeight - 32));
|
||||||
|
|
||||||
|
Render.getConfig("RenderMainView").getConfig("Antialiasing").debugCursorTexcoord = { x: nx, y: ny };
|
||||||
|
}
|
||||||
|
|
||||||
|
}());
|
10
scripts/system/assets/images/luci-a.svg
Normal file
10
scripts/system/assets/images/luci-a.svg
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
|
||||||
|
<path d="M18.5,36.5c-6.8-2.2-6.8-11.8-0.1-14.1l12.1-4.1c-2.6-2.4-6.1-3.8-9.9-3.8c-8.2,0-14.8,6.6-14.8,14.8
|
||||||
|
c0,8.2,6.6,14.8,14.8,14.8c3.7,0,7.1-1.4,9.7-3.7L18.5,36.5z"/>
|
||||||
|
<path d="M31.9,17.9c-0.5,0.2-0.9,0.3-1.3,0.5c2.9,2.7,4.8,6.6,4.8,10.9c0,4.4-1.9,8.3-4.9,11c0.5,0.2,1,0.5,1.6,0.7l5.9,2.4
|
||||||
|
c3.1,1,6.2-1.3,6.2-4.5V13.2L31.9,17.9z"/>
|
||||||
|
<circle cx="40" cy="6.6" r="3.7"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 721 B |
13
scripts/system/assets/images/luci-i.svg
Normal file
13
scripts/system/assets/images/luci-i.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#FFFFFF;}
|
||||||
|
</style>
|
||||||
|
<path class="st0" d="M18.5,36.5c-6.8-2.2-6.8-11.8-0.1-14.1l12.1-4.1c-2.6-2.4-6.1-3.8-9.9-3.8c-8.2,0-14.8,6.6-14.8,14.8
|
||||||
|
c0,8.2,6.6,14.8,14.8,14.8c3.7,0,7.1-1.4,9.7-3.7L18.5,36.5z"/>
|
||||||
|
<path class="st0" d="M31.9,17.9c-0.5,0.2-0.9,0.3-1.3,0.5c2.9,2.7,4.8,6.6,4.8,10.9c0,4.4-1.9,8.3-4.9,11c0.5,0.2,1,0.5,1.6,0.7
|
||||||
|
l5.9,2.4c3.1,1,6.2-1.3,6.2-4.5V13.2L31.9,17.9z"/>
|
||||||
|
<circle class="st0" cx="40" cy="6.6" r="3.7"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 811 B |
Loading…
Reference in a new issue