From a8a3c677ade9f20934889383947c18170153860d Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 2 Jun 2015 12:00:57 -0700 Subject: [PATCH 1/6] Darken address bar hint text so that it's better visible on the DK2 --- interface/resources/qml/styles/HifiConstants.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/styles/HifiConstants.qml b/interface/resources/qml/styles/HifiConstants.qml index 702a396afb..5b2a475699 100644 --- a/interface/resources/qml/styles/HifiConstants.qml +++ b/interface/resources/qml/styles/HifiConstants.qml @@ -18,7 +18,7 @@ Item { readonly property color background: sysPalette.dark readonly property color text: sysPalette.text readonly property color disabledText: "gray" - readonly property color hintText: sysPalette.dark + readonly property color hintText: "gray" // A bit darker than sysPalette.dark so that it is visible on the DK2 readonly property color light: sysPalette.light readonly property alias activeWindow: activeWindow readonly property alias inactiveWindow: inactiveWindow From ec1cb72dd595dc344e3ec9a6ac7b3b86717398ef Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 2 Jun 2015 14:48:11 -0700 Subject: [PATCH 2/6] Rework QML font sizing to be more consistent across platforms --- interface/resources/qml/AddressBarDialog.qml | 1 - interface/resources/qml/controls/SpinBox.qml | 2 +- interface/resources/qml/controls/Text.qml | 2 +- interface/resources/qml/controls/TextArea.qml | 2 +- interface/resources/qml/controls/TextEdit.qml | 2 +- interface/resources/qml/controls/TextHeader.qml | 2 +- interface/resources/qml/controls/TextInput.qml | 4 ++-- interface/resources/qml/styles/HifiConstants.qml | 6 +++--- 8 files changed, 10 insertions(+), 11 deletions(-) diff --git a/interface/resources/qml/AddressBarDialog.qml b/interface/resources/qml/AddressBarDialog.qml index 3893c26f3c..f38a740b22 100644 --- a/interface/resources/qml/AddressBarDialog.qml +++ b/interface/resources/qml/AddressBarDialog.qml @@ -58,7 +58,6 @@ Item { } - font.pointSize: 15 helperText: "Go to: place, @user, /path, network address" onAccepted: { diff --git a/interface/resources/qml/controls/SpinBox.qml b/interface/resources/qml/controls/SpinBox.qml index 7e44b9e4a3..1acba57409 100644 --- a/interface/resources/qml/controls/SpinBox.qml +++ b/interface/resources/qml/controls/SpinBox.qml @@ -9,7 +9,7 @@ Original.SpinBox { style: SpinBoxStyle { HifiConstants { id: hifi } font.family: hifi.fonts.fontFamily - font.pointSize: hifi.fonts.fontSize + font.pixelSize: hifi.fonts.pixelSize } } diff --git a/interface/resources/qml/controls/Text.qml b/interface/resources/qml/controls/Text.qml index 4f82f2d9e4..b7bd90d257 100644 --- a/interface/resources/qml/controls/Text.qml +++ b/interface/resources/qml/controls/Text.qml @@ -4,6 +4,6 @@ import "../styles" Original.Text { HifiConstants { id: hifi } font.family: hifi.fonts.fontFamily - font.pointSize: hifi.fonts.fontSize + font.pixelSize: hifi.fonts.pixelSize } diff --git a/interface/resources/qml/controls/TextArea.qml b/interface/resources/qml/controls/TextArea.qml index a86e76620a..6d8978c210 100644 --- a/interface/resources/qml/controls/TextArea.qml +++ b/interface/resources/qml/controls/TextArea.qml @@ -4,6 +4,6 @@ import "../styles" Original.TextArea { HifiConstants { id: hifi } font.family: hifi.fonts.fontFamily - font.pointSize: hifi.fonts.fontSize + font.pixelSize: hifi.fonts.pixelSize } diff --git a/interface/resources/qml/controls/TextEdit.qml b/interface/resources/qml/controls/TextEdit.qml index b59b20a3d6..4999c2bf5b 100644 --- a/interface/resources/qml/controls/TextEdit.qml +++ b/interface/resources/qml/controls/TextEdit.qml @@ -4,6 +4,6 @@ import "../styles" Original.TextEdit { HifiConstants { id: hifi } font.family: hifi.fonts.fontFamily - font.pointSize: hifi.fonts.fontSize + font.pixelSize: hifi.fonts.pixelSize } diff --git a/interface/resources/qml/controls/TextHeader.qml b/interface/resources/qml/controls/TextHeader.qml index 9ce1da4ac2..c52553331b 100644 --- a/interface/resources/qml/controls/TextHeader.qml +++ b/interface/resources/qml/controls/TextHeader.qml @@ -4,6 +4,6 @@ import "../styles" Text { HifiConstants { id: hifi } color: hifi.colors.hifiBlue - font.pointSize: hifi.fonts.headerPointSize + font.pixelSize: hifi.fonts.headerPixelSize font.bold: true } diff --git a/interface/resources/qml/controls/TextInput.qml b/interface/resources/qml/controls/TextInput.qml index d533c67bd6..b7ca6d2c1b 100644 --- a/interface/resources/qml/controls/TextInput.qml +++ b/interface/resources/qml/controls/TextInput.qml @@ -11,7 +11,7 @@ Original.TextInput { color: hifi.colors.text verticalAlignment: Original.TextInput.AlignVCenter font.family: hifi.fonts.fontFamily - font.pointSize: hifi.fonts.fontSize + font.pixelSize: hifi.fonts.pixelSize /* Original.Rectangle { @@ -23,7 +23,7 @@ Original.TextInput { */ Text { anchors.fill: parent - font.pointSize: parent.font.pointSize + font.pixelSize: parent.font.pixelSize font.family: parent.font.family verticalAlignment: parent.verticalAlignment horizontalAlignment: parent.horizontalAlignment diff --git a/interface/resources/qml/styles/HifiConstants.qml b/interface/resources/qml/styles/HifiConstants.qml index 5b2a475699..fa556f2083 100644 --- a/interface/resources/qml/styles/HifiConstants.qml +++ b/interface/resources/qml/styles/HifiConstants.qml @@ -36,9 +36,9 @@ Item { QtObject { id: fonts - readonly property real headerPointSize: 24 - readonly property string fontFamily: "Helvetica" - readonly property real fontSize: 18 + readonly property string fontFamily: "Arial" // Available on both Windows and OSX + readonly property real pixelSize: 22 // Logical pixel size; works on Windows and OSX at varying physical DPIs + readonly property real headerPixelSize: 32 } QtObject { From 878227ab8b729f9413989492bdc8b7c74a0a6520 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 2 Jun 2015 16:33:09 -0700 Subject: [PATCH 3/6] Increase address bar dialog size Including font size, just for this dialog. --- interface/resources/qml/AddressBarDialog.qml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/AddressBarDialog.qml b/interface/resources/qml/AddressBarDialog.qml index f38a740b22..91e05d020d 100644 --- a/interface/resources/qml/AddressBarDialog.qml +++ b/interface/resources/qml/AddressBarDialog.qml @@ -22,6 +22,7 @@ Item { property int animationDuration: hifi.effects.fadeInDuration property bool destroyOnInvisible: false + property real scale: 1.25 // Make this dialog a little larger than normal implicitWidth: addressBarDialog.implicitWidth implicitHeight: addressBarDialog.implicitHeight @@ -41,9 +42,9 @@ Item { id: backgroundImage source: "../images/address-bar.svg" - width: 576 - height: 80 - property int inputAreaHeight: 56 // Height of the background's input area + width: 576 * root.scale + height: 80 * root.scale + property int inputAreaHeight: 56.0 * root.scale // Height of the background's input area property int inputAreaStep: (height - inputAreaHeight) / 2 TextInput { @@ -58,6 +59,8 @@ Item { } + font.pixelSize: hifi.fonts.pixelSize * root.scale + helperText: "Go to: place, @user, /path, network address" onAccepted: { From b8f3c42712854d8d2cb7918e3069a999950f03eb Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Wed, 3 Jun 2015 09:03:04 -0700 Subject: [PATCH 4/6] Update renderWorldBox to use batches --- interface/src/Application.cpp | 2 +- interface/src/Util.cpp | 50 ++++++++++++++++------------------- interface/src/Util.h | 4 ++- 3 files changed, 27 insertions(+), 29 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 76feb77076..8845768aaa 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3190,7 +3190,7 @@ namespace render { template <> void payloadRender(const WorldBoxRenderData::Pointer& stuff, RenderArgs* args) { if (args->_renderMode != CAMERA_MODE_MIRROR && Menu::getInstance()->isOptionChecked(MenuOption::Stats)) { PerformanceTimer perfTimer("worldBox"); - renderWorldBox(); + renderWorldBox(args); // FIXME: there's currently a bug in the new render engine, if this origin dot is rendered out of view it will // screw up the state of textures on models so they all end up rendering in the incorrect tint/color/texture diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index c07c2877e8..44ee38187c 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -33,9 +33,9 @@ using namespace std; -void renderWorldBox() { - return; +void renderWorldBox(RenderArgs* renderArgs) { auto geometryCache = DependencyManager::get(); + auto batch = renderArgs->_batch; // Show edge of world glm::vec3 red(1.0f, 0.0f, 0.0f); @@ -43,36 +43,32 @@ void renderWorldBox() { glm::vec3 blue(0.0f, 0.0f, 1.0f); glm::vec3 grey(0.5f, 0.5f, 0.5f); - glDisable(GL_LIGHTING); - glLineWidth(1.0); - geometryCache->renderLine(glm::vec3(0, 0, 0), glm::vec3(TREE_SCALE, 0, 0), red); - geometryCache->renderLine(glm::vec3(0, 0, 0), glm::vec3(0, TREE_SCALE, 0), green); - geometryCache->renderLine(glm::vec3(0, 0, 0), glm::vec3(0, 0, TREE_SCALE), blue); - geometryCache->renderLine(glm::vec3(0, 0, TREE_SCALE), glm::vec3(TREE_SCALE, 0, TREE_SCALE), grey); - geometryCache->renderLine(glm::vec3(TREE_SCALE, 0, TREE_SCALE), glm::vec3(TREE_SCALE, 0, 0), grey); - + geometryCache->renderLine(*batch, glm::vec3(0, 0, 0), glm::vec3(TREE_SCALE, 0, 0), red); + geometryCache->renderLine(*batch, glm::vec3(0, 0, 0), glm::vec3(0, TREE_SCALE, 0), green); + geometryCache->renderLine(*batch, glm::vec3(0, 0, 0), glm::vec3(0, 0, TREE_SCALE), blue); + geometryCache->renderLine(*batch, glm::vec3(0, 0, TREE_SCALE), glm::vec3(TREE_SCALE, 0, TREE_SCALE), grey); + geometryCache->renderLine(*batch, glm::vec3(TREE_SCALE, 0, TREE_SCALE), glm::vec3(TREE_SCALE, 0, 0), grey); // Draw meter markers along the 3 axis to help with measuring things const float MARKER_DISTANCE = 1.0f; const float MARKER_RADIUS = 0.05f; - glEnable(GL_LIGHTING); - glPushMatrix(); - glTranslatef(MARKER_DISTANCE, 0, 0); - geometryCache->renderSphere(MARKER_RADIUS, 10, 10, red); - glPopMatrix(); - glPushMatrix(); - glTranslatef(0, MARKER_DISTANCE, 0); - geometryCache->renderSphere(MARKER_RADIUS, 10, 10, green); - glPopMatrix(); - glPushMatrix(); - glTranslatef(0, 0, MARKER_DISTANCE); - geometryCache->renderSphere(MARKER_RADIUS, 10, 10, blue); - glPopMatrix(); - glPushMatrix(); - glTranslatef(MARKER_DISTANCE, 0, MARKER_DISTANCE); - geometryCache->renderSphere(MARKER_RADIUS, 10, 10, grey); - glPopMatrix(); + Transform transform; + transform.setTranslation(glm::vec3(MARKER_DISTANCE, 0, 0)); + batch->setModelTransform(transform); + geometryCache->renderSphere(*batch, MARKER_RADIUS, 10, 10, red); + + transform.setTranslation(glm::vec3(0, MARKER_DISTANCE, 0)); + batch->setModelTransform(transform); + geometryCache->renderSphere(*batch, MARKER_RADIUS, 10, 10, green); + + transform.setTranslation(glm::vec3(0, 0, MARKER_DISTANCE)); + batch->setModelTransform(transform); + geometryCache->renderSphere(*batch, MARKER_RADIUS, 10, 10, blue); + + transform.setTranslation(glm::vec3(MARKER_DISTANCE, 0, MARKER_DISTANCE)); + batch->setModelTransform(transform); + geometryCache->renderSphere(*batch, MARKER_RADIUS, 10, 10, grey); } // Return a random vector of average length 1 diff --git a/interface/src/Util.h b/interface/src/Util.h index 419b776706..a4a1595d6b 100644 --- a/interface/src/Util.h +++ b/interface/src/Util.h @@ -16,10 +16,12 @@ #include #include +#include "RenderArgs.h" + float randFloat(); const glm::vec3 randVector(); -void renderWorldBox(); +void renderWorldBox(RenderArgs* renderArgs); int widthText(float scale, int mono, char const* string); void drawText(int x, int y, float scale, float radians, int mono, From b339aa683a1447ffdd341177c19f4e1133f36954 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Wed, 3 Jun 2015 11:25:45 -0700 Subject: [PATCH 5/6] adding caps for opaque and transparent draw jobs and the ui in js so we can debug the rendered items --- examples/utilities/tools/renderEngineDebug.js | 12 +++++++++ interface/src/Application.cpp | 3 +++ libraries/render/src/render/DrawTask.cpp | 26 ++++++++++++++----- libraries/render/src/render/DrawTask.h | 2 +- libraries/render/src/render/Engine.h | 2 ++ .../src/SceneScriptingInterface.h | 8 ++++++ 6 files changed, 45 insertions(+), 8 deletions(-) diff --git a/examples/utilities/tools/renderEngineDebug.js b/examples/utilities/tools/renderEngineDebug.js index 9b4a60977e..3893b8b90e 100755 --- a/examples/utilities/tools/renderEngineDebug.js +++ b/examples/utilities/tools/renderEngineDebug.js @@ -42,6 +42,12 @@ panel.newSlider("Num Drawn Opaques", 0, 1000, function(value) { return (value); } ); +panel.newSlider("Max Drawn Opaques", -1, 1000, + function(value) { Scene.setEngineMaxDrawnOpaqueItems(value); }, + function() { return Scene.getEngineMaxDrawnOpaqueItems(); }, + function(value) { return (value); } +); + panel.newCheckbox("Enable Cull Transparent", function(value) { Scene.setEngineCullTransparent((value != 0)); }, function() { return Scene.doEngineCullTransparent(); }, @@ -72,6 +78,12 @@ panel.newSlider("Num Drawn Transparents", 0, 1000, function(value) { return (value); } ); +panel.newSlider("Max Drawn Transparents", -1, 1000, + function(value) { Scene.setEngineMaxDrawnTransparentItems(value); }, + function() { return Scene.getEngineMaxDrawnTransparentItems(); }, + function(value) { return (value); } +); + var tickTackPeriod = 500; function updateCounters() { diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 76feb77076..92fbd856bf 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3505,6 +3505,9 @@ void Application::displaySide(RenderArgs* renderArgs, Camera& theCamera, bool se renderContext._sortTransparent = sceneInterface->doEngineSortTransparent(); renderContext._renderTransparent = sceneInterface->doEngineRenderTransparent(); + renderContext._maxDrawnOpaqueItems = sceneInterface->getEngineMaxDrawnOpaqueItems(); + renderContext._maxDrawnTransparentItems = sceneInterface->getEngineMaxDrawnTransparentItems(); + renderArgs->_shouldRender = LODManager::shouldRender; renderContext.args = renderArgs; diff --git a/libraries/render/src/render/DrawTask.cpp b/libraries/render/src/render/DrawTask.cpp index dd57a71fcf..71cc86e198 100755 --- a/libraries/render/src/render/DrawTask.cpp +++ b/libraries/render/src/render/DrawTask.cpp @@ -154,14 +154,26 @@ void render::depthSortItems(const SceneContextPointer& sceneContext, const Rende } } -void render::renderItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDs& inItems) { +void render::renderItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDs& inItems, int maxDrawnItems) { PerformanceTimer perfTimer("renderItems"); auto& scene = sceneContext->_scene; RenderArgs* args = renderContext->args; // render - for (auto id : inItems) { - auto item = scene->getItem(id); - item.render(args); + if ((maxDrawnItems < 0) || (maxDrawnItems > inItems.size()) { + for (auto id : inItems) { + auto item = scene->getItem(id); + item.render(args); + } + } else { + int numItems = 0; + for (auto id : inItems) { + auto item = scene->getItem(id); + item.render(args); + numItems++; + if (numItems >= maxDrawnItems) { + return; + } + } } } @@ -262,7 +274,7 @@ template <> void render::jobRun(const DrawOpaque& job, const SceneContextPointer batch._glDrawBuffers(bufferCount, buffers); } - renderItems(sceneContext, renderContext, renderedItems); + renderItems(sceneContext, renderContext, renderedItems, renderContext->_maxDrawnOpaqueItems); args->_context->render((*args->_batch)); args->_batch = nullptr; @@ -329,7 +341,7 @@ template <> void render::jobRun(const DrawTransparent& job, const SceneContextPo args->_alphaThreshold = MOSTLY_OPAQUE_THRESHOLD; } - renderItems(sceneContext, renderContext, renderedItems); + renderItems(sceneContext, renderContext, renderedItems, renderContext->_maxDrawnTransparentItems); { GLenum buffers[3]; @@ -340,7 +352,7 @@ template <> void render::jobRun(const DrawTransparent& job, const SceneContextPo } - renderItems(sceneContext, renderContext, renderedItems); + renderItems(sceneContext, renderContext, renderedItems, renderContext->_maxDrawnTransparentItems); args->_context->render((*args->_batch)); args->_batch = nullptr; diff --git a/libraries/render/src/render/DrawTask.h b/libraries/render/src/render/DrawTask.h index 9572a68bf0..9f8efa2869 100755 --- a/libraries/render/src/render/DrawTask.h +++ b/libraries/render/src/render/DrawTask.h @@ -59,7 +59,7 @@ typedef std::vector Jobs; void cullItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDs& inItems, ItemIDs& outITems); void depthSortItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, bool frontToBack, const ItemIDs& inItems, ItemIDs& outITems); -void renderItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDs& inItems); +void renderItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDs& inItems, int maxDrawnItems = -1); class DrawOpaque { diff --git a/libraries/render/src/render/Engine.h b/libraries/render/src/render/Engine.h index dbd193af29..121d6458e9 100644 --- a/libraries/render/src/render/Engine.h +++ b/libraries/render/src/render/Engine.h @@ -39,9 +39,11 @@ public: int _numFeedOpaqueItems = 0; int _numDrawnOpaqueItems = 0; + int _maxDrawnOpaqueItems = -1; int _numFeedTransparentItems = 0; int _numDrawnTransparentItems = 0; + int _maxDrawnTransparentItems = -1; RenderContext() {} }; diff --git a/libraries/script-engine/src/SceneScriptingInterface.h b/libraries/script-engine/src/SceneScriptingInterface.h index b6dc4110c0..543f55a971 100644 --- a/libraries/script-engine/src/SceneScriptingInterface.h +++ b/libraries/script-engine/src/SceneScriptingInterface.h @@ -96,6 +96,10 @@ public: void setEngineFeedTransparentItems(int count) { _numFeedTransparentItems = count; } Q_INVOKABLE int getEngineNumFeedTransparentItems() { return _numFeedTransparentItems; } + Q_INVOKABLE void setEngineMaxDrawnOpaqueItems(int count) { _maxDrawnOpaqueItems = count; } + Q_INVOKABLE int getEngineMaxDrawnOpaqueItems() { return _maxDrawnOpaqueItems; } + Q_INVOKABLE void setEngineMaxDrawnTransparentItems(int count) { _maxDrawnTransparentItems = count; } + Q_INVOKABLE int getEngineMaxDrawnTransparentItems() { return _maxDrawnTransparentItems; } signals: void shouldRenderAvatarsChanged(bool shouldRenderAvatars); @@ -120,6 +124,10 @@ protected: int _numDrawnOpaqueItems = 0; int _numFeedTransparentItems = 0; int _numDrawnTransparentItems = 0; + + int _maxDrawnOpaqueItems = -1; + int _maxDrawnTransparentItems = -1; + }; #endif // hifi_SceneScriptingInterface_h From 730d455095396bd9b784a269846a4fd3923d2971 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Wed, 3 Jun 2015 11:35:37 -0700 Subject: [PATCH 6/6] adding a debug tool --- libraries/render/src/render/DrawTask.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/render/src/render/DrawTask.cpp b/libraries/render/src/render/DrawTask.cpp index 71cc86e198..ce1ab37808 100755 --- a/libraries/render/src/render/DrawTask.cpp +++ b/libraries/render/src/render/DrawTask.cpp @@ -159,7 +159,7 @@ void render::renderItems(const SceneContextPointer& sceneContext, const RenderCo auto& scene = sceneContext->_scene; RenderArgs* args = renderContext->args; // render - if ((maxDrawnItems < 0) || (maxDrawnItems > inItems.size()) { + if ((maxDrawnItems < 0) || (maxDrawnItems > inItems.size())) { for (auto id : inItems) { auto item = scene->getItem(id); item.render(args);