mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 04:44:11 +02:00
Rework the qml for brevity
This commit is contained in:
parent
9c5881345a
commit
3bace3cdbb
9 changed files with 136 additions and 375 deletions
|
@ -1,102 +0,0 @@
|
|||
//
|
||||
// AO.qml
|
||||
// examples/utilities/tools/render
|
||||
//
|
||||
// Created by Zach Pomerantz on 2/8/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
|
||||
//
|
||||
import QtQuick 2.5
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
Item {
|
||||
width: 200
|
||||
height: 200
|
||||
property QtObject config: Render.getConfig("AmbientOcclusion")
|
||||
|
||||
// TODO: Enable the gpuTimer when it is fixed in cpp
|
||||
// Timer {
|
||||
// interval: 500
|
||||
// running: true
|
||||
// repeat: true
|
||||
// onTriggered: { parent.timer.text = config.gpuTime.toFixed(2) }
|
||||
// }
|
||||
// Label { id: timer; x: 140 }
|
||||
|
||||
Label { text: qsTr("Ambient Occlusion") }
|
||||
|
||||
CheckBox {
|
||||
y: 1 * 25
|
||||
text: qsTr("Dithering")
|
||||
partiallyCheckedEnabled: false
|
||||
checked: parent.config.ditheringEnabled
|
||||
onCheckedChanged: { parent.config.ditheringEnabled = checked }
|
||||
}
|
||||
|
||||
ConfigSlider {
|
||||
y: 2 * 25
|
||||
config: parent.config
|
||||
prop: "resolutionLevel"
|
||||
label: qsTr("Resolution Level")
|
||||
min: 0; max: 4
|
||||
}
|
||||
ConfigSlider {
|
||||
y: 3 * 25
|
||||
config: parent.config
|
||||
prop: "obscuranceLevel"
|
||||
label: qsTr("Obscurance Level")
|
||||
min: 0; max: 1
|
||||
}
|
||||
ConfigSlider {
|
||||
y: 4 * 25
|
||||
config: parent.config
|
||||
prop: "radius"
|
||||
label: qsTr("Radius")
|
||||
min: 0; max: 2
|
||||
}
|
||||
ConfigSlider {
|
||||
y: 5 * 25
|
||||
config: parent.config
|
||||
prop: "numSamples"
|
||||
label: qsTr("Samples")
|
||||
min: 0; max: 32
|
||||
}
|
||||
ConfigSlider {
|
||||
y: 6 * 25
|
||||
config: parent.config
|
||||
prop: "numSpiralTurns"
|
||||
label: qsTr("Spiral Turns")
|
||||
min: 0; max: 30
|
||||
}
|
||||
ConfigSlider {
|
||||
y: 7 * 25
|
||||
config: parent.config
|
||||
prop: "falloffBias"
|
||||
label: qsTr("Falloff Bias")
|
||||
min: 0; max: 0.2
|
||||
}
|
||||
ConfigSlider {
|
||||
y: 8 * 25
|
||||
config: parent.config
|
||||
prop: "edgeSharpness"
|
||||
label: qsTr("Edge Sharpness")
|
||||
min: 0; max: 1
|
||||
}
|
||||
ConfigSlider {
|
||||
y: 9 * 25
|
||||
config: parent.config
|
||||
prop: "blurRadius"
|
||||
label: qsTr("Blur Radius")
|
||||
min: 0; max: 6
|
||||
}
|
||||
ConfigSlider {
|
||||
y: 10 * 25
|
||||
config: parent.config
|
||||
prop: "blurDeviation"
|
||||
label: qsTr("Blur Deviation")
|
||||
min: 0; max: 3
|
||||
}
|
||||
}
|
||||
|
|
@ -1,99 +0,0 @@
|
|||
//
|
||||
// Buffer.qml
|
||||
// examples/utilities/tools/render
|
||||
//
|
||||
// Created by Zach Pomerantz on 2/8/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
|
||||
//
|
||||
import QtQuick 2.5
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
Item {
|
||||
width: 200
|
||||
height: 270
|
||||
|
||||
Label {
|
||||
text: qsTr("Debug Buffer")
|
||||
}
|
||||
|
||||
ExclusiveGroup { id: buffer }
|
||||
|
||||
function setDebugMode(mode) {
|
||||
var debug = Render.getConfig("DebugDeferredBuffer");
|
||||
console.log(mode);
|
||||
debug.enabled = (mode != 0);
|
||||
debug.mode = mode;
|
||||
}
|
||||
|
||||
RadioButton {
|
||||
x: 8; y: 19 + 0 * 23
|
||||
text: qsTr("Off")
|
||||
exclusiveGroup: buffer
|
||||
checked: true
|
||||
onCheckedChanged: { if (checked) { setDebugMode(0) } }
|
||||
}
|
||||
RadioButton {
|
||||
x: 8; y: 19 + 1 * 23
|
||||
text: qsTr("Diffuse")
|
||||
exclusiveGroup: buffer
|
||||
onCheckedChanged: { if (checked) { setDebugMode(1) } }
|
||||
}
|
||||
RadioButton {
|
||||
x: 8; y: 19 + 2 * 23
|
||||
text: qsTr("Metallic")
|
||||
exclusiveGroup: buffer
|
||||
onCheckedChanged: { if (checked) { setDebugMode(2) } }
|
||||
}
|
||||
RadioButton {
|
||||
x: 8; y: 19 + 3 * 23
|
||||
text: qsTr("Roughness")
|
||||
exclusiveGroup: buffer
|
||||
onCheckedChanged: { if (checked) { setDebugMode(3) } }
|
||||
}
|
||||
RadioButton {
|
||||
x: 8; y: 19 + 4 * 23
|
||||
text: qsTr("Normal")
|
||||
exclusiveGroup: buffer
|
||||
onCheckedChanged: { if (checked) { setDebugMode(4) } }
|
||||
}
|
||||
RadioButton {
|
||||
x: 8; y: 19 + 5 * 23
|
||||
text: qsTr("Depth")
|
||||
exclusiveGroup: buffer
|
||||
onCheckedChanged: { if (checked) { setDebugMode(5) } }
|
||||
}
|
||||
RadioButton {
|
||||
x: 8; y: 19 + 6 * 23
|
||||
text: qsTr("Lighting")
|
||||
exclusiveGroup: buffer
|
||||
onCheckedChanged: { if (checked) { setDebugMode(6) } }
|
||||
}
|
||||
RadioButton {
|
||||
x: 8; y: 19 + 7 * 23
|
||||
text: qsTr("Shadow")
|
||||
exclusiveGroup: buffer
|
||||
onCheckedChanged: { if (checked) { setDebugMode(7) } }
|
||||
}
|
||||
RadioButton {
|
||||
x: 8; y: 19 + 8 * 23
|
||||
text: qsTr("Pyramid Depth")
|
||||
exclusiveGroup: buffer
|
||||
onCheckedChanged: { if (checked) { setDebugMode(8) } }
|
||||
}
|
||||
RadioButton {
|
||||
x: 8; y: 19 + 9 * 23
|
||||
text: qsTr("Ambient Occlusion")
|
||||
exclusiveGroup: buffer
|
||||
onCheckedChanged: { if (checked) { setDebugMode(9) } }
|
||||
}
|
||||
RadioButton {
|
||||
x: 8; y: 19 + 10 * 23
|
||||
text: qsTr("Custom Shader")
|
||||
exclusiveGroup: buffer
|
||||
onCheckedChanged: { if (checked) { setDebugMode(10) } }
|
||||
}
|
||||
}
|
||||
|
|
@ -12,47 +12,55 @@ import QtQuick 2.5
|
|||
import QtQuick.Controls 1.4
|
||||
|
||||
Item {
|
||||
id: root
|
||||
width: 400
|
||||
height: 24
|
||||
property string label
|
||||
property QtObject config
|
||||
property string prop
|
||||
property real min: 0.0
|
||||
property real max: 1.0
|
||||
property bool integral: false
|
||||
property var config
|
||||
property string property
|
||||
property alias label: labelControl.text
|
||||
property alias min: sliderControl.minimumValue
|
||||
property alias max: sliderControl.maximumValue
|
||||
|
||||
function init() {
|
||||
stat.text = config[prop].toFixed(2);
|
||||
slider.value = (config[prop] - min) / (max - min);
|
||||
}
|
||||
Component.onCompleted: init()
|
||||
|
||||
function update() {
|
||||
var val = min + (max - min) * slider.value;
|
||||
stat.text = val.toFixed(2);
|
||||
config[prop] = val;
|
||||
Component.onCompleted: {
|
||||
// Binding favors qml value, so set it first
|
||||
sliderControl.value = root.config[root.property];
|
||||
bindingControl.when = true;
|
||||
}
|
||||
|
||||
Label {
|
||||
text: parent.label
|
||||
y: 7
|
||||
anchors.left: parent.left
|
||||
id: labelControl
|
||||
text: root.label
|
||||
anchors.left: root.left
|
||||
anchors.leftMargin: 8
|
||||
anchors.top: root.top
|
||||
anchors.topMargin: 7
|
||||
}
|
||||
|
||||
Label {
|
||||
id: stat
|
||||
y: 7
|
||||
anchors.left: parent.left
|
||||
text: sliderControl.value.toFixed(root.integral ? 0 : 2)
|
||||
anchors.left: root.left
|
||||
anchors.leftMargin: 140
|
||||
anchors.top: root.top
|
||||
anchors.topMargin: 7
|
||||
}
|
||||
|
||||
Binding {
|
||||
id: bindingControl
|
||||
target: root.config
|
||||
property: root.property
|
||||
value: sliderControl.value
|
||||
when: false
|
||||
}
|
||||
|
||||
Slider {
|
||||
id: slider
|
||||
y: 3
|
||||
id: sliderControl
|
||||
stepSize: root.integral ? 1.0 : 0.0
|
||||
width: 192
|
||||
height: 20
|
||||
onValueChanged: parent.update()
|
||||
anchors.right: parent.right
|
||||
anchors.right: root.right
|
||||
anchors.rightMargin: 8
|
||||
anchors.top: root.top
|
||||
anchors.topMargin: 3
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
//
|
||||
// ItemsSlider.qml
|
||||
// examples/utilities/tools/render
|
||||
//
|
||||
// Created by Zach Pomerantz on 2/8/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
|
||||
//
|
||||
import QtQuick 2.5
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
Item {
|
||||
width: 400
|
||||
height: 24
|
||||
property string label
|
||||
property QtObject config
|
||||
|
||||
function update() {
|
||||
var val = slider.value;
|
||||
var max = config.numDrawn;
|
||||
var drawn = Math.round(val * max);
|
||||
stat.text = drawn + " / " + max;
|
||||
config.maxDrawn = (val == 1.0 ? -1 : drawn);
|
||||
}
|
||||
|
||||
Timer {
|
||||
interval: 500
|
||||
running: true
|
||||
repeat: true
|
||||
onTriggered: parent.update()
|
||||
}
|
||||
|
||||
Label {
|
||||
text: parent.label
|
||||
y: 7
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 8
|
||||
}
|
||||
|
||||
Label {
|
||||
id: stat
|
||||
y: 7
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 108
|
||||
}
|
||||
|
||||
Slider {
|
||||
id: slider
|
||||
y: 3
|
||||
width: 192
|
||||
height: 20
|
||||
value: 1.0
|
||||
onValueChanged: update()
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 8
|
||||
}
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
//
|
||||
// Tone.qml
|
||||
// examples/utilities/tools/render
|
||||
//
|
||||
// Created by Zach Pomerantz on 2/8/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
|
||||
//
|
||||
import QtQuick 2.5
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
Item {
|
||||
width: 400
|
||||
height: 24
|
||||
property string label: qsTr("Tone Mapping Exposure")
|
||||
|
||||
function update() {
|
||||
var val = (slider.value - 0.5) * 20;
|
||||
stat.text = val.toFixed(2);
|
||||
Render.getConfig("ToneMapping").exposure = val;
|
||||
}
|
||||
|
||||
Label {
|
||||
text: parent.label
|
||||
y: 7
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 8
|
||||
}
|
||||
|
||||
Label {
|
||||
id: stat
|
||||
y: 7
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 150
|
||||
}
|
||||
|
||||
Slider {
|
||||
id: slider
|
||||
y: 3
|
||||
width: 192
|
||||
height: 20
|
||||
value: Render.getConfig("ToneMapping").exposure
|
||||
onValueChanged: parent.update()
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 8
|
||||
}
|
||||
}
|
|
@ -11,8 +11,12 @@
|
|||
|
||||
oldConfig = Render.toJSON();
|
||||
Render.RenderShadowTask.enabled = true;
|
||||
Render.RenderDeferredTask.AmbientOcclusion.enabled = true;
|
||||
Render.RenderDeferredTask.DebugDeferredBuffer.enabled = false;
|
||||
var RDT = Render.RenderDeferredTask;
|
||||
RDT.AmbientOcclusion.enabled = true;
|
||||
RDT.DebugDeferredBuffer.enabled = false;
|
||||
["DrawOpaqueDeferred", "DrawTransparentDeferred", "DrawOverlay3DOpaque", "DrawOverlay3DTransparent"]
|
||||
.map(function(name) { return RDT[name]; })
|
||||
.forEach(function(job) { job.maxDrawn = job.numDrawn; });
|
||||
|
||||
// Set up the qml ui
|
||||
var qml = Script.resolvePath('main.qml');
|
||||
|
|
|
@ -11,54 +11,100 @@
|
|||
import QtQuick 2.5
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
Item {
|
||||
// Items
|
||||
ItemsSlider {
|
||||
y: 0 * 25
|
||||
label: qsTr("Opaque")
|
||||
config: Render.getConfig("DrawOpaqueDeferred")
|
||||
}
|
||||
ItemsSlider {
|
||||
y: 1 * 25
|
||||
label: qsTr("Transparent")
|
||||
config: Render.getConfig("DrawTransparentDeferred")
|
||||
}
|
||||
ItemsSlider {
|
||||
y: 2 * 25
|
||||
label: qsTr("Overlay3D")
|
||||
config: Render.getConfig("DrawOverlay3D")
|
||||
Column {
|
||||
spacing: 8
|
||||
|
||||
Repeater {
|
||||
model: [ "Opaque:DrawOpaqueDeferred", "Transparent:DrawTransparentDeferred",
|
||||
"Opaque Overlays:DrawOverlay3DOpaque", "Transparent Overlays:DrawOverlay3DTransparent" ]
|
||||
ConfigSlider {
|
||||
label: qsTr(modelData.split(":")[0])
|
||||
integral: true
|
||||
config: Render.getConfig(modelData.split(":")[1])
|
||||
property: "maxDrawn"
|
||||
max: config.numDrawn
|
||||
}
|
||||
}
|
||||
|
||||
// Draw status
|
||||
Item {
|
||||
y: 100
|
||||
|
||||
Row {
|
||||
CheckBox {
|
||||
text: qsTr("Display Status")
|
||||
partiallyCheckedEnabled: false
|
||||
onCheckedChanged: { Render.getConfig("DrawStatus").showDisplay = checked }
|
||||
}
|
||||
CheckBox {
|
||||
x: 200
|
||||
text: qsTr("Network/Physics Status")
|
||||
partiallyCheckedEnabled: false
|
||||
onCheckedChanged: { Render.getConfig("DrawStatus").showNetwork = checked }
|
||||
}
|
||||
}
|
||||
|
||||
// Tone mapping
|
||||
ConfigSlider {
|
||||
y: 125
|
||||
config: Render.getConfig("ToneMapping")
|
||||
prop: "exposure"
|
||||
label: qsTr("Tone Mapping Exposure")
|
||||
config: Render.getConfig("ToneMapping")
|
||||
property: "exposure"
|
||||
min: -10; max: 10
|
||||
}
|
||||
|
||||
// Ambient occlusion
|
||||
AO { y: 175 }
|
||||
Column {
|
||||
id: ambientOcclusion
|
||||
property var config: Render.getConfig("AmbientOcclusion")
|
||||
|
||||
// Debug buffer
|
||||
Buffer { y: 475 }
|
||||
Label { text: qsTr("Ambient Occlusion") }
|
||||
// TODO: Add gpuTimer
|
||||
CheckBox { text: qsTr("Dithering"); checked: ambientOcclusion.config.ditheringEnabled }
|
||||
Repeater {
|
||||
model: [
|
||||
"Resolution Level:resolutionLevel:4",
|
||||
"Obscurance Level:obscuranceLevel:1",
|
||||
"Radius:radius:2",
|
||||
"Falloff Bias:falloffBias:0.2",
|
||||
"Edge Sharpness:edgeSharpness:1",
|
||||
"Blur Radius:blurRadius:6",
|
||||
"Blur Deviation:blurDeviation:3"
|
||||
]
|
||||
ConfigSlider {
|
||||
label: qsTr(modelData.split(":")[0])
|
||||
config: ambientOcclusion.config
|
||||
property: modelData.split(":")[1]
|
||||
max: modelData.split(":")[2]
|
||||
}
|
||||
}
|
||||
Repeater {
|
||||
model: [
|
||||
"Samples:numSamples:32",
|
||||
"Spiral Turns:numSpiralTurns:30:"
|
||||
]
|
||||
ConfigSlider {
|
||||
label: qsTr(modelData.split(":")[0])
|
||||
integral: true
|
||||
config: ambientOcclusion.config
|
||||
property: modelData.split(":")[1]
|
||||
max: modelData.split(":")[2]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
id: debug
|
||||
property var config: Render.getConfig("DebugDeferredBuffer")
|
||||
|
||||
function setDebugMode(mode) {
|
||||
debug.config.enabled = (mode != 0);
|
||||
debug.config.mode = mode;
|
||||
}
|
||||
|
||||
Label { text: qsTr("Debug Buffer") }
|
||||
ExclusiveGroup { id: bufferGroup }
|
||||
Repeater {
|
||||
model: [
|
||||
"Off", "Diffuse", "Metallic", "Roughness", "Normal", "Depth",
|
||||
"Lighting", "Shadow", "Pyramid Depth", "Ambient Occlusion", "Custom Shader"
|
||||
]
|
||||
RadioButton {
|
||||
text: qsTr(modelData)
|
||||
exclusiveGroup: bufferGroup
|
||||
checked: index == 0
|
||||
onCheckedChanged: if (checked) debug.setDebugMode(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -142,7 +142,8 @@ void DrawDeferred::run(const SceneContextPointer& sceneContext, const RenderCont
|
|||
batch.setStateScissorRect(args->_viewport);
|
||||
args->_batch = &batch;
|
||||
|
||||
config->numDrawn = (int)inItems.size();
|
||||
config->setNumDrawn((int)inItems.size());
|
||||
emit config->numDrawnChanged();
|
||||
|
||||
glm::mat4 projMat;
|
||||
Transform viewMat;
|
||||
|
@ -179,7 +180,8 @@ void DrawOverlay3D::run(const SceneContextPointer& sceneContext, const RenderCon
|
|||
inItems.emplace_back(id);
|
||||
}
|
||||
}
|
||||
config->numItems = (int)inItems.size();
|
||||
config->setNumDrawn((int)inItems.size());
|
||||
emit config->numDrawnChanged();
|
||||
|
||||
if (!inItems.empty()) {
|
||||
RenderArgs* args = renderContext->args;
|
||||
|
|
|
@ -40,15 +40,20 @@ public:
|
|||
|
||||
class DrawConfig : public render::Job::Config {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(int numDrawn READ getNumDrawn)
|
||||
Q_PROPERTY(int numDrawn READ getNumDrawn NOTIFY numDrawnChanged)
|
||||
Q_PROPERTY(int maxDrawn MEMBER maxDrawn NOTIFY dirty)
|
||||
public:
|
||||
int getNumDrawn() { return numDrawn; }
|
||||
void setNumDrawn(int num) { numDrawn = num; emit numDrawnChanged(); }
|
||||
|
||||
int numDrawn{ 0 };
|
||||
int maxDrawn{ -1 };
|
||||
|
||||
signals:
|
||||
void numDrawnChanged();
|
||||
void dirty();
|
||||
|
||||
protected:
|
||||
int numDrawn{ 0 };
|
||||
};
|
||||
|
||||
class DrawDeferred {
|
||||
|
@ -86,15 +91,20 @@ public:
|
|||
|
||||
class DrawOverlay3DConfig : public render::Job::Config {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(int numItems READ getNumItems)
|
||||
Q_PROPERTY(int numDrawn READ getNumDrawn NOTIFY numDrawnChanged)
|
||||
Q_PROPERTY(int maxDrawn MEMBER maxDrawn NOTIFY dirty)
|
||||
public:
|
||||
int getNumItems() { return numItems; }
|
||||
int getNumDrawn() { return numDrawn; }
|
||||
void setNumDrawn(int num) { numDrawn = num; emit numDrawnChanged(); }
|
||||
|
||||
int numItems{ 0 };
|
||||
int maxDrawn{ -1 };
|
||||
|
||||
signals:
|
||||
void numDrawnChanged();
|
||||
void dirty();
|
||||
|
||||
protected:
|
||||
int numDrawn{ 0 };
|
||||
};
|
||||
|
||||
class DrawOverlay3D {
|
||||
|
|
Loading…
Reference in a new issue