Merge branch 'master' of github.com:highfidelity/hifi into wall

This commit is contained in:
Sam Gateau 2019-06-19 16:53:04 -07:00
commit 8f04eaae1d
44 changed files with 268 additions and 149 deletions

View file

@ -127,7 +127,8 @@ void DomainGatekeeper::processConnectRequestPacket(QSharedPointer<ReceivedMessag
<< "and machine fingerprint" << nodeConnection.machineFingerprint << "and machine fingerprint" << nodeConnection.machineFingerprint
<< "user" << username << "user" << username
<< "reason" << QString(nodeConnection.connectReason ? "SilentDomainDisconnect" : "Connect") << "reason" << QString(nodeConnection.connectReason ? "SilentDomainDisconnect" : "Connect")
<< "previous connection uptime" << nodeConnection.previousConnectionUpTime/USECS_PER_MSEC << "msec"; << "previous connection uptime" << nodeConnection.previousConnectionUpTime/USECS_PER_MSEC << "msec"
<< "sysinfo" << nodeConnection.SystemInfo;
// signal that we just connected a node so the DomainServer can get it a list // signal that we just connected a node so the DomainServer can get it a list
// and broadcast its presence right away // and broadcast its presence right away

View file

@ -36,6 +36,9 @@ NodeConnectionData NodeConnectionData::fromDataStream(QDataStream& dataStream, c
// now the machine fingerprint // now the machine fingerprint
dataStream >> newHeader.machineFingerprint; dataStream >> newHeader.machineFingerprint;
// and the operating system type
dataStream >> newHeader.SystemInfo;
dataStream >> newHeader.connectReason; dataStream >> newHeader.connectReason;
dataStream >> newHeader.previousConnectionUpTime; dataStream >> newHeader.previousConnectionUpTime;

View file

@ -31,9 +31,9 @@ public:
QString placeName; QString placeName;
QString hardwareAddress; QString hardwareAddress;
QUuid machineFingerprint; QUuid machineFingerprint;
QString SystemInfo;
quint32 connectReason; quint32 connectReason;
quint64 previousConnectionUpTime; quint64 previousConnectionUpTime;
QByteArray protocolVersion; QByteArray protocolVersion;
}; };

View file

@ -0,0 +1,25 @@
module controls
Button 1.0 Button.qml
ButtonAwesome 1.0 ButtonAwesome.qml
CheckBox 1.0 CheckBox.qml
ComboBox 1.0 ComboBox.qml
FlickableWebViewCore 1.0 FlickableWebViewCore.qml
FontAwesome 1.0 FontAwesome.qml
Player 1.0 Player.qml
RadioButton 1.0 RadioButton.qml
Slider 1.0 Slider.qml
Spacer 1.0 Spacer.qml
SpinBox 1.0 SpinBox.qml
TabletWebButton 1.0 TabletWebButton.qml
TabletWebScreen 1.0 TabletWebScreen.qml
TabletWebView 1.0 TabletWebView.qml
Text 1.0 Text.qml
TextAndSlider 1.0 TextAndSlider.qml
TextAndSpinBox 1.0 TextAndSpinBox.qml
TextArea 1.0 TextArea.qml
TextEdit 1.0 TextEdit.qml
TextField 1.0 TextField.qml
TextHeader 1.0 TextHeader.qml
TextInput 1.0 TextInput.qml
TextInputAndButton 1.0 TextInputAndButton.qml
WebView 1.0 WebView.qml

View file

@ -0,0 +1,18 @@
module dialogs
AboutDialog 1.0 AboutDialog.qml
AdvancedPreferencesDialog 1.0 AdvancedPreferencesDialog.qml
AudioBuffers 1.0 AudioBuffers.qml
AvatarPreferencesDialog 1.0 AvatarPreferencesDialog.qml
GeneralPreferencesDialog 1.0 GeneralPreferencesDialog.qml
LodPreferencesDialog 1.0 LodPreferencesDialog.qml
ModelBrowserDialog 1.0 ModelBrowserDialog.qml
NetworkingPreferencesDialog 1.0 NetworkingPreferencesDialog.qml
RunningScripts 1.0 RunningScripts.qml
TabletAboutDialog 1.0 TabletAboutDialog.qml
TabletAssetServer 1.0 TabletAssetServer.qml
TabletDCDialog 1.0 TabletDCDialog.qml
TabletDebugWindow 1.0 TabletDebugWindow.qml
TabletEntityStatistics 1.0 TabletEntityStatistics.qml
TabletEntityStatisticsItem 1.0 TabletEntityStatisticsItem.qml
TabletLODTools 1.0 TabletLODTools.qml
TabletRunningScripts 1.0 TabletRunningScripts.qml

View file

@ -0,0 +1,4 @@
module toolbars
StateImage 1.0 StateImage.qml
Toolbar 1.0 Toolbar.qml
ToolbarButton 1.0 ToolbarButton.qml

View file

@ -267,7 +267,7 @@ class MyAvatar : public Avatar {
* @property {number} analogPlusWalkSpeed - The walk speed of your avatar for the "AnalogPlus" control scheme. * @property {number} analogPlusWalkSpeed - The walk speed of your avatar for the "AnalogPlus" control scheme.
* <p><strong>Warning:</strong> Setting this value also sets the value of <code>analogPlusSprintSpeed</code> to twice * <p><strong>Warning:</strong> Setting this value also sets the value of <code>analogPlusSprintSpeed</code> to twice
* the value.</p> * the value.</p>
* @property {number} analogPlusSprintSpeed - The sprint speed of your avatar for the "AnalogPlus" control scheme. * @property {number} analogPlusSprintSpeed - The sprint (run) speed of your avatar for the "AnalogPlus" control scheme.
* @property {MyAvatar.SitStandModelType} userRecenterModel - Controls avatar leaning and recentering behavior. * @property {MyAvatar.SitStandModelType} userRecenterModel - Controls avatar leaning and recentering behavior.
* @property {number} isInSittingState - <code>true</code> if your avatar is sitting (avatar leaning is disabled, * @property {number} isInSittingState - <code>true</code> if your avatar is sitting (avatar leaning is disabled,
* recenntering is enabled), <code>false</code> if it is standing (avatar leaning is enabled, and avatar recenters if it * recenntering is enabled), <code>false</code> if it is standing (avatar leaning is enabled, and avatar recenters if it
@ -2198,33 +2198,35 @@ signals:
void audioListenerModeChanged(); void audioListenerModeChanged();
/**jsdoc /**jsdoc
* Notifies when the analogPlusWalkSpeed value is changed. * Triggered when the walk speed set for the "AnalogPlus" control scheme changes.
* @function MyAvatar.analogPlusWalkSpeedChanged * @function MyAvatar.analogPlusWalkSpeedChanged
* @param {float} value - the new avatar walk speed * @param {number} speed - The new walk speed set for the "AnalogPlus" control scheme.
* @returns {Signal} * @returns {Signal}
*/ */
void analogPlusWalkSpeedChanged(float value); void analogPlusWalkSpeedChanged(float value);
/**jsdoc /**jsdoc
* Notifies when the analogPlusSprintSpeed value is changed. * Triggered when the sprint (run) speed set for the "AnalogPlus" control scheme changes.
* @function MyAvatar.analogPlusSprintSpeedChanged * @function MyAvatar.analogPlusSprintSpeedChanged
* @param {float} value - the new avatar sprint speed * @param {number} speed - The new sprint speed set for the "AnalogPlus" control scheme.
* @returns {Signal} * @returns {Signal}
*/ */
void analogPlusSprintSpeedChanged(float value); void analogPlusSprintSpeedChanged(float value);
/**jsdoc /**jsdoc
* Notifies when the sprintSpeed value is changed. * Triggered when the sprint (run) speed set for the current control scheme (see
* {@link MyAvatar.getControlScheme|getControlScheme}) changes.
* @function MyAvatar.sprintSpeedChanged * @function MyAvatar.sprintSpeedChanged
* @param {float} value - the new avatar sprint speed * @param {number} speed -The new sprint speed set for the current control scheme.
* @returns {Signal} * @returns {Signal}
*/ */
void sprintSpeedChanged(float value); void sprintSpeedChanged(float value);
/**jsdoc /**jsdoc
* Notifies when the walkBackwardSpeed value is changed. * Triggered when the walk backward speed set for the current control scheme (see
* {@link MyAvatar.getControlScheme|getControlScheme}) changes.
* @function MyAvatar.walkBackwardSpeedChanged * @function MyAvatar.walkBackwardSpeedChanged
* @param {float} value - the new avatar walk backward speed * @param {number} speed - The new walk backward speed set for the current control scheme.
* @returns {Signal} * @returns {Signal}
*/ */
void walkBackwardSpeedChanged(float value); void walkBackwardSpeedChanged(float value);

View file

@ -109,6 +109,21 @@ bool Basic2DWindowOpenGLDisplayPlugin::internalActivate() {
return Parent::internalActivate(); return Parent::internalActivate();
} }
gpu::PipelinePointer Basic2DWindowOpenGLDisplayPlugin::getCompositeScenePipeline() {
#if defined(Q_OS_ANDROID)
return _linearToSRGBPipeline;
#endif
return _SRGBToLinearPipeline;
}
gpu::Element Basic2DWindowOpenGLDisplayPlugin::getCompositeFBColorSpace() {
#if defined(Q_OS_ANDROID)
return gpu::Element::COLOR_SRGBA_32;
#endif
return gpu::Element::COLOR_RGBA_32;
}
void Basic2DWindowOpenGLDisplayPlugin::compositeExtra() { void Basic2DWindowOpenGLDisplayPlugin::compositeExtra() {
#if defined(Q_OS_ANDROID) #if defined(Q_OS_ANDROID)
auto& virtualPadManager = VirtualPad::Manager::instance(); auto& virtualPadManager = VirtualPad::Manager::instance();

View file

@ -37,6 +37,9 @@ public:
virtual void pluginUpdate() override {}; virtual void pluginUpdate() override {};
virtual gpu::PipelinePointer getCompositeScenePipeline() override;
virtual gpu::Element getCompositeFBColorSpace() override;
protected: protected:
mutable bool _isThrottled = false; mutable bool _isThrottled = false;

View file

@ -48,12 +48,16 @@
#include "CompositorHelper.h" #include "CompositorHelper.h"
#include "Logging.h" #include "Logging.h"
#include "RefreshRateController.h" #include "RefreshRateController.h"
using namespace shader::gpu::program;
extern QThread* RENDER_THREAD; extern QThread* RENDER_THREAD;
class PresentThread : public QThread, public Dependency { class PresentThread : public QThread, public Dependency {
using Mutex = std::mutex; using Mutex = std::mutex;
using Condition = std::condition_variable; using Condition = std::condition_variable;
using Lock = std::unique_lock<Mutex>; using Lock = std::unique_lock<Mutex>;
public: public:
PresentThread() { PresentThread() {
@ -380,57 +384,45 @@ void OpenGLDisplayPlugin::customizeContext() {
} }
} }
if (!_presentPipeline) { if (!_drawTexturePipeline) {
gpu::StatePointer blendState = gpu::StatePointer(new gpu::State()); gpu::StatePointer blendState = gpu::StatePointer(new gpu::State());
blendState->setDepthTest(gpu::State::DepthTest(false)); blendState->setDepthTest(gpu::State::DepthTest(false));
blendState->setBlendFunction(true, blendState->setBlendFunction(true,
gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::INV_SRC_ALPHA, gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD,
gpu::State::FACTOR_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE); gpu::State::INV_SRC_ALPHA,
gpu::State::FACTOR_ALPHA, gpu::State::BLEND_OP_ADD,
gpu::State::ONE);
gpu::StatePointer scissorState = gpu::StatePointer(new gpu::State()); gpu::StatePointer scissorState = gpu::StatePointer(new gpu::State());
scissorState->setDepthTest(gpu::State::DepthTest(false)); scissorState->setDepthTest(gpu::State::DepthTest(false));
scissorState->setScissorEnable(true); scissorState->setScissorEnable(true);
{ _drawTexturePipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTexture), scissorState);
#ifdef Q_OS_ANDROID
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTextureGammaLinearToSRGB); _linearToSRGBPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTextureGammaLinearToSRGB), scissorState);
#else
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTexture); _SRGBToLinearPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTextureGammaSRGBToLinear), scissorState);
#endif
_simplePipeline = gpu::Pipeline::create(program, scissorState); _hudPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTexture), blendState);
}
{ _mirrorHUDPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTextureMirroredX), blendState);
#ifdef Q_OS_ANDROID
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTextureGammaLinearToSRGB); _cursorPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTransformedTexture), blendState);
#else
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTextureGammaSRGBToLinear);
#endif
_presentPipeline = gpu::Pipeline::create(program, scissorState);
} }
{
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTexture);
_hudPipeline = gpu::Pipeline::create(program, blendState);
}
{
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTextureMirroredX);
_mirrorHUDPipeline = gpu::Pipeline::create(program, blendState);
}
{
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTransformedTexture);
_cursorPipeline = gpu::Pipeline::create(program, blendState);
}
}
updateCompositeFramebuffer(); updateCompositeFramebuffer();
} }
void OpenGLDisplayPlugin::uncustomizeContext() { void OpenGLDisplayPlugin::uncustomizeContext() {
_presentPipeline.reset();
_cursorPipeline.reset(); _drawTexturePipeline.reset();
_linearToSRGBPipeline.reset();
_SRGBToLinearPipeline.reset();
_hudPipeline.reset(); _hudPipeline.reset();
_mirrorHUDPipeline.reset(); _mirrorHUDPipeline.reset();
_cursorPipeline.reset();
_compositeFramebuffer.reset(); _compositeFramebuffer.reset();
withPresentThreadLock([&] { withPresentThreadLock([&] {
_currentFrame.reset(); _currentFrame.reset();
_lastFrame = nullptr; _lastFrame = nullptr;
@ -535,11 +527,9 @@ void OpenGLDisplayPlugin::renderFromTexture(gpu::Batch& batch, const gpu::Textur
batch.setStateScissorRect(scissor); batch.setStateScissorRect(scissor);
batch.setViewportTransform(viewport); batch.setViewportTransform(viewport);
batch.setResourceTexture(0, texture); batch.setResourceTexture(0, texture);
#ifndef USE_GLES
batch.setPipeline(_presentPipeline); batch.setPipeline(_drawTexturePipeline);
#else
batch.setPipeline(_simplePipeline);
#endif
batch.draw(gpu::TRIANGLE_STRIP, 4); batch.draw(gpu::TRIANGLE_STRIP, 4);
if (copyFbo) { if (copyFbo) {
gpu::Vec4i copyFboRect(0, 0, copyFbo->getWidth(), copyFbo->getHeight()); gpu::Vec4i copyFboRect(0, 0, copyFbo->getWidth(), copyFbo->getHeight());
@ -644,6 +634,11 @@ void OpenGLDisplayPlugin::compositePointer() {
}); });
} }
// Overridden by Basic2DWindowDisplayPlugin and OculusDisplayPlugin
gpu::PipelinePointer OpenGLDisplayPlugin::getCompositeScenePipeline() {
return _drawTexturePipeline;
}
void OpenGLDisplayPlugin::compositeScene() { void OpenGLDisplayPlugin::compositeScene() {
render([&](gpu::Batch& batch) { render([&](gpu::Batch& batch) {
batch.enableStereo(false); batch.enableStereo(false);
@ -652,7 +647,7 @@ void OpenGLDisplayPlugin::compositeScene() {
batch.setStateScissorRect(ivec4(uvec2(), _compositeFramebuffer->getSize())); batch.setStateScissorRect(ivec4(uvec2(), _compositeFramebuffer->getSize()));
batch.resetViewTransform(); batch.resetViewTransform();
batch.setProjectionTransform(mat4()); batch.setProjectionTransform(mat4());
batch.setPipeline(_simplePipeline); batch.setPipeline(getCompositeScenePipeline());
batch.setResourceTexture(0, _currentFrame->framebuffer->getRenderBuffer(0)); batch.setResourceTexture(0, _currentFrame->framebuffer->getRenderBuffer(0));
batch.draw(gpu::TRIANGLE_STRIP, 4); batch.draw(gpu::TRIANGLE_STRIP, 4);
}); });
@ -924,11 +919,17 @@ void OpenGLDisplayPlugin::render(std::function<void(gpu::Batch& batch)> f) {
OpenGLDisplayPlugin::~OpenGLDisplayPlugin() { OpenGLDisplayPlugin::~OpenGLDisplayPlugin() {
} }
// Added this to allow desktop composite framebuffer to be RGBA while mobile is SRGBA
// Overridden by Basic2DWindowDisplayPlugin
// FIXME: Eventually it would be ideal to have both framebuffers be of the same type
gpu::Element OpenGLDisplayPlugin::getCompositeFBColorSpace() {
return gpu::Element::COLOR_RGBA_32;
}
void OpenGLDisplayPlugin::updateCompositeFramebuffer() { void OpenGLDisplayPlugin::updateCompositeFramebuffer() {
auto renderSize = glm::uvec2(getRecommendedRenderSize()); auto renderSize = glm::uvec2(getRecommendedRenderSize());
if (!_compositeFramebuffer || _compositeFramebuffer->getSize() != renderSize) { if (!_compositeFramebuffer || _compositeFramebuffer->getSize() != renderSize) {
_compositeFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("OpenGLDisplayPlugin::composite", gpu::Element::COLOR_RGBA_32, renderSize.x, renderSize.y)); _compositeFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("OpenGLDisplayPlugin::composite", getCompositeFBColorSpace(), renderSize.x, renderSize.y));
// _compositeFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("OpenGLDisplayPlugin::composite", gpu::Element::COLOR_SRGBA_32, renderSize.x, renderSize.y));
} }
} }

View file

@ -106,6 +106,9 @@ protected:
virtual void compositePointer(); virtual void compositePointer();
virtual void compositeExtra() {}; virtual void compositeExtra() {};
virtual gpu::PipelinePointer getCompositeScenePipeline();
virtual gpu::Element getCompositeFBColorSpace();
// These functions must only be called on the presentation thread // These functions must only be called on the presentation thread
virtual void customizeContext(); virtual void customizeContext();
virtual void uncustomizeContext(); virtual void uncustomizeContext();
@ -149,9 +152,11 @@ protected:
gpu::PipelinePointer _hudPipeline; gpu::PipelinePointer _hudPipeline;
gpu::PipelinePointer _mirrorHUDPipeline; gpu::PipelinePointer _mirrorHUDPipeline;
gpu::ShaderPointer _mirrorHUDPS; gpu::ShaderPointer _mirrorHUDPS;
gpu::PipelinePointer _simplePipeline; gpu::PipelinePointer _drawTexturePipeline;
gpu::PipelinePointer _presentPipeline; gpu::PipelinePointer _linearToSRGBPipeline;
gpu::PipelinePointer _SRGBToLinearPipeline;
gpu::PipelinePointer _cursorPipeline; gpu::PipelinePointer _cursorPipeline;
gpu::TexturePointer _displayTexture{}; gpu::TexturePointer _displayTexture{};
float _compositeHUDAlpha { 1.0f }; float _compositeHUDAlpha { 1.0f };

View file

@ -418,6 +418,20 @@ void NodeList::sendDomainServerCheckIn() {
auto accountManager = DependencyManager::get<AccountManager>(); auto accountManager = DependencyManager::get<AccountManager>();
packetStream << FingerprintUtils::getMachineFingerprint(); packetStream << FingerprintUtils::getMachineFingerprint();
QString systemInfo;
#if defined Q_OS_WIN
systemInfo = "OS:Windows";
#elif defined Q_OS_OSX
systemInfo = "OS:OSX";
#elif defined Q_OS_LINUX
systemInfo = "OS:Linux";
#elif defined Q_OS_ANDROID
systemInfo = "OS:Android";
#else
systemInfo = "OS:Unknown";
#endif
packetStream << systemInfo;
packetStream << _connectReason; packetStream << _connectReason;
if (_nodeDisconnectTimestamp < _nodeConnectTimestamp) { if (_nodeDisconnectTimestamp < _nodeConnectTimestamp) {

View file

@ -72,7 +72,7 @@ PacketVersion versionForPacketType(PacketType packetType) {
return static_cast<PacketVersion>(DomainConnectionDeniedVersion::IncludesExtraInfo); return static_cast<PacketVersion>(DomainConnectionDeniedVersion::IncludesExtraInfo);
case PacketType::DomainConnectRequest: case PacketType::DomainConnectRequest:
return static_cast<PacketVersion>(DomainConnectRequestVersion::HasReason); return static_cast<PacketVersion>(DomainConnectRequestVersion::HasSystemInfo);
case PacketType::DomainServerAddedNode: case PacketType::DomainServerAddedNode:
return static_cast<PacketVersion>(DomainServerAddedNodeVersion::PermissionsGrid); return static_cast<PacketVersion>(DomainServerAddedNodeVersion::PermissionsGrid);

View file

@ -346,7 +346,8 @@ enum class DomainConnectRequestVersion : PacketVersion {
HasMachineFingerprint, HasMachineFingerprint,
AlwaysHasMachineFingerprint, AlwaysHasMachineFingerprint,
HasTimestamp, HasTimestamp,
HasReason HasReason,
HasSystemInfo
}; };
enum class DomainConnectionDeniedVersion : PacketVersion { enum class DomainConnectionDeniedVersion : PacketVersion {

View file

@ -122,22 +122,22 @@ void PickManager::update() {
// FIXME: give each type its own expiry // FIXME: give each type its own expiry
// Each type will update at least one pick, regardless of the expiry // Each type will update at least one pick, regardless of the expiry
{ {
PROFILE_RANGE(picks, "StylusPicks"); PROFILE_RANGE_EX(picks, "StylusPicks", 0xffff0000, (uint64_t)_totalPickCounts[PickQuery::Stylus]);
PerformanceTimer perfTimer("StylusPicks"); PerformanceTimer perfTimer("StylusPicks");
_updatedPickCounts[PickQuery::Stylus] = _stylusPickCacheOptimizer.update(cachedPicks[PickQuery::Stylus], _nextPickToUpdate[PickQuery::Stylus], expiry, false); _updatedPickCounts[PickQuery::Stylus] = _stylusPickCacheOptimizer.update(cachedPicks[PickQuery::Stylus], _nextPickToUpdate[PickQuery::Stylus], expiry, false);
} }
{ {
PROFILE_RANGE(picks, "RayPicks"); PROFILE_RANGE_EX(picks, "RayPicks", 0xffff0000, (uint64_t)_totalPickCounts[PickQuery::Ray]);
PerformanceTimer perfTimer("RayPicks"); PerformanceTimer perfTimer("RayPicks");
_updatedPickCounts[PickQuery::Ray] = _rayPickCacheOptimizer.update(cachedPicks[PickQuery::Ray], _nextPickToUpdate[PickQuery::Ray], expiry, shouldPickHUD); _updatedPickCounts[PickQuery::Ray] = _rayPickCacheOptimizer.update(cachedPicks[PickQuery::Ray], _nextPickToUpdate[PickQuery::Ray], expiry, shouldPickHUD);
} }
{ {
PROFILE_RANGE(picks, "ParabolaPick"); PROFILE_RANGE_EX(picks, "ParabolaPicks", 0xffff0000, (uint64_t)_totalPickCounts[PickQuery::Parabola]);
PerformanceTimer perfTimer("ParabolaPick"); PerformanceTimer perfTimer("ParabolaPicks");
_updatedPickCounts[PickQuery::Parabola] = _parabolaPickCacheOptimizer.update(cachedPicks[PickQuery::Parabola], _nextPickToUpdate[PickQuery::Parabola], expiry, shouldPickHUD); _updatedPickCounts[PickQuery::Parabola] = _parabolaPickCacheOptimizer.update(cachedPicks[PickQuery::Parabola], _nextPickToUpdate[PickQuery::Parabola], expiry, shouldPickHUD);
} }
{ {
PROFILE_RANGE(picks, "CollisoinPicks"); PROFILE_RANGE_EX(picks, "CollisionPicks", 0xffff0000, (uint64_t)_totalPickCounts[PickQuery::Collision]);
PerformanceTimer perfTimer("CollisionPicks"); PerformanceTimer perfTimer("CollisionPicks");
_updatedPickCounts[PickQuery::Collision] = _collisionPickCacheOptimizer.update(cachedPicks[PickQuery::Collision], _nextPickToUpdate[PickQuery::Collision], expiry, false); _updatedPickCounts[PickQuery::Collision] = _collisionPickCacheOptimizer.update(cachedPicks[PickQuery::Collision], _nextPickToUpdate[PickQuery::Collision], expiry, false);
} }

View file

@ -17,6 +17,7 @@
#include <QtQml/QQmlEngine> #include <QtQml/QQmlEngine>
#include <QtQml/QQmlContext> #include <QtQml/QQmlContext>
#include <QQuickView> #include <QQuickView>
#include <gl/GLHelpers.h>
#include <PathUtils.h> #include <PathUtils.h>
@ -28,6 +29,7 @@ DockWidget::DockWidget(const QString& title, QWidget* parent) : QDockWidget(titl
auto offscreenUi = DependencyManager::get<OffscreenUi>(); auto offscreenUi = DependencyManager::get<OffscreenUi>();
auto qmlEngine = offscreenUi->getSurfaceContext()->engine(); auto qmlEngine = offscreenUi->getSurfaceContext()->engine();
_quickView = std::shared_ptr<QQuickView>(new QQuickView(qmlEngine, nullptr), quickViewDeleter); _quickView = std::shared_ptr<QQuickView>(new QQuickView(qmlEngine, nullptr), quickViewDeleter);
_quickView->setFormat(getDefaultOpenGLSurfaceFormat());
QWidget* widget = QWidget::createWindowContainer(_quickView.get()); QWidget* widget = QWidget::createWindowContainer(_quickView.get());
setWidget(widget); setWidget(widget);
QWidget* headerWidget = new QWidget(); QWidget* headerWidget = new QWidget();

View file

@ -124,6 +124,10 @@ void OculusDisplayPlugin::uncustomizeContext() {
Parent::uncustomizeContext(); Parent::uncustomizeContext();
} }
gpu::PipelinePointer OculusDisplayPlugin::getCompositeScenePipeline() {
return _SRGBToLinearPipeline;
}
static const uint64_t FRAME_BUDGET = (11 * USECS_PER_MSEC); static const uint64_t FRAME_BUDGET = (11 * USECS_PER_MSEC);
static const uint64_t FRAME_OVER_BUDGET = (15 * USECS_PER_MSEC); static const uint64_t FRAME_OVER_BUDGET = (15 * USECS_PER_MSEC);
@ -163,7 +167,7 @@ void OculusDisplayPlugin::hmdPresent() {
batch.setStateScissorRect(ivec4(uvec2(), _outputFramebuffer->getSize())); batch.setStateScissorRect(ivec4(uvec2(), _outputFramebuffer->getSize()));
batch.resetViewTransform(); batch.resetViewTransform();
batch.setProjectionTransform(mat4()); batch.setProjectionTransform(mat4());
batch.setPipeline(_presentPipeline); batch.setPipeline(_drawTexturePipeline);
batch.setResourceTexture(0, _compositeFramebuffer->getRenderBuffer(0)); batch.setResourceTexture(0, _compositeFramebuffer->getRenderBuffer(0));
batch.draw(gpu::TRIANGLE_STRIP, 4); batch.draw(gpu::TRIANGLE_STRIP, 4);
}); });

View file

@ -34,6 +34,8 @@ protected:
void uncustomizeContext() override; void uncustomizeContext() override;
void cycleDebugOutput() override; void cycleDebugOutput() override;
virtual gpu::PipelinePointer getCompositeScenePipeline() override;
private: private:
static const char* NAME; static const char* NAME;
ovrTextureSwapChain _textureSwapChain; ovrTextureSwapChain _textureSwapChain;

View file

@ -9,16 +9,17 @@
// //
// Helps manage the list of avatars added to the nametag list // Helps manage the list of avatars added to the nametag list
// //
var EntityMaker = Script.require('./entityMaker.js');
var EntityMaker = Script.require('./entityMaker.js?' + Date.now()); var entityProps = Script.require('./defaultLocalEntityProps.js');
var entityProps = Script.require('./defaultLocalEntityProps.js?' + Date.now()); var textHelper = new (Script.require('./textHelper.js'));
var textHelper = new (Script.require('./textHelper.js?' + Date.now()));
var X = 0; var X = 0;
var Y = 1; var Y = 1;
var Z = 2; var Z = 2;
var HALF = 0.5; var HALF = 0.5;
var CLEAR_ENTITY_EDIT_PROPS = true; var CLEAR_ENTITY_EDIT_PROPS = true;
var MILISECONDS_IN_SECOND = 1000; var MILISECONDS_IN_SECOND = 1000;
var SECONDS_IN_MINUTE = 60;
var ALWAYS_ON_MAX_LIFETIME_IN_SECONDS = 20 * SECONDS_IN_MINUTE; // Delete after 20 minutes in case a nametag is hanging around in on mode
// ************************************* // *************************************
// START UTILTY // START UTILTY
@ -58,8 +59,6 @@ var distanceScaler = DISTANCE_SCALER_ON;
var userScaler = 1.0; var userScaler = 1.0;
var DEFAULT_LINE_HEIGHT = entityProps.lineHeight; var DEFAULT_LINE_HEIGHT = entityProps.lineHeight;
function calculateInitialProperties(uuid) { function calculateInitialProperties(uuid) {
var avatar = _this.avatars[uuid];
var adjustedScaler = null; var adjustedScaler = null;
var distance = null; var distance = null;
var dimensions = null; var dimensions = null;
@ -97,19 +96,6 @@ function calculateInitialProperties(uuid) {
} }
// Used in alwaysOn mode to show or hide if they reached the max radius
function showHide(uuid, type) {
var avatar = _this.avatars[uuid];
var nametag = avatar.nametag;
if (type === "show") {
nametag.show();
} else {
nametag.hide();
}
}
// Go through the selected avatar list and see if any of the avatars need a redraw // Go through the selected avatar list and see if any of the avatars need a redraw
function checkAllSelectedForRedraw() { function checkAllSelectedForRedraw() {
for (var avatar in _this.selectedAvatars) { for (var avatar in _this.selectedAvatars) {
@ -168,6 +154,18 @@ function getDistance(uuid, checkAvatar, shouldSave) {
} }
// Quick check for distance from avatar
function quickDistanceCheckForNonSelectedAvatars(uuid) {
var source = MyAvatar.position;
var target = AvatarManager.getAvatar(uuid).position;
var avatarDistance = Vec3.distance(target, source);
return avatarDistance;
}
// Check to see if we need to toggle our interval check because we went to 0 avatars // Check to see if we need to toggle our interval check because we went to 0 avatars
// or if we got our first avatar in the select list // or if we got our first avatar in the select list
function shouldToggleInterval() { function shouldToggleInterval() {
@ -197,7 +195,9 @@ function toggleInterval() {
} }
// handle turning the peristenet mode on // Handle checking to see if we should add or delete nametags in persistent mode
var alwaysOnAvatarDistanceCheck = false;
var DISTANCE_CHECK_INTERVAL_MS = 1000;
function handleAlwaysOnMode(shouldTurnOnAlwaysOnMode) { function handleAlwaysOnMode(shouldTurnOnAlwaysOnMode) {
_this.reset(); _this.reset();
if (shouldTurnOnAlwaysOnMode) { if (shouldTurnOnAlwaysOnMode) {
@ -205,9 +205,23 @@ function handleAlwaysOnMode(shouldTurnOnAlwaysOnMode) {
.getAvatarIdentifiers() .getAvatarIdentifiers()
.forEach(function (avatar) { .forEach(function (avatar) {
if (avatar) { if (avatar) {
var avatarDistance = quickDistanceCheckForNonSelectedAvatars(avatar);
if (avatarDistance < MAX_RADIUS_IGNORE_METERS) {
add(avatar); add(avatar);
} }
}
}); });
maybeClearAlwaysOnAvatarDistanceCheck();
alwaysOnAvatarDistanceCheck = Script.setInterval(maybeAddOrRemoveIntervalCheck, DISTANCE_CHECK_INTERVAL_MS);
}
}
// Check to see if we need to clear the distance check in persistent mode
function maybeClearAlwaysOnAvatarDistanceCheck() {
if (alwaysOnAvatarDistanceCheck) {
Script.clearInterval(alwaysOnAvatarDistanceCheck);
alwaysOnAvatarDistanceCheck = false;
} }
} }
@ -313,12 +327,6 @@ function makeNameTag(uuid) {
var nameTagPosition = jointInObjectFrame.y + scaledDimenionsYHalf + ABOVE_HEAD_OFFSET; var nameTagPosition = jointInObjectFrame.y + scaledDimenionsYHalf + ABOVE_HEAD_OFFSET;
var localPosition = [0, nameTagPosition, 0]; var localPosition = [0, nameTagPosition, 0];
var visible = true;
if (avatarNametagMode === "alwaysOn") {
var currentDistance = getDistance(uuid, CHECK_AVATAR, false);
visible = currentDistance > MAX_RADIUS_IGNORE_METERS ? false : true;
}
nametag nametag
.add("leftMargin", lineHeight * LEFT_MARGIN_SCALER) .add("leftMargin", lineHeight * LEFT_MARGIN_SCALER)
.add("rightMargin", lineHeight * RIGHT_MARGIN_SCALER) .add("rightMargin", lineHeight * RIGHT_MARGIN_SCALER)
@ -328,7 +336,6 @@ function makeNameTag(uuid) {
.add("dimensions", scaledDimensions) .add("dimensions", scaledDimensions)
.add("parentID", parentID) .add("parentID", parentID)
.add("localPosition", localPosition) .add("localPosition", localPosition)
.add("visible", visible)
.create(CLEAR_ENTITY_EDIT_PROPS); .create(CLEAR_ENTITY_EDIT_PROPS);
Script.setTimeout(function () { Script.setTimeout(function () {
@ -341,33 +348,45 @@ function makeNameTag(uuid) {
var MAX_RADIUS_IGNORE_METERS = 22; var MAX_RADIUS_IGNORE_METERS = 22;
var MAX_ON_MODE_DISTANCE = 35; var MAX_ON_MODE_DISTANCE = 35;
var CHECK_AVATAR = true; var CHECK_AVATAR = true;
var MIN_DISTANCE = 0.2; var MIN_DISTANCE_FOR_REDRAW_METERS = 0.1;
function maybeRedraw(uuid) { function maybeRedraw(uuid) {
var avatar = _this.avatars[uuid]; var avatar = _this.avatars[uuid];
getAvatarData(uuid); getAvatarData(uuid);
getDistance(uuid); getDistance(uuid);
var avatarDistance = getDistance(uuid, CHECK_AVATAR, false); var distanceDelta = Math.abs(avatar.currentDistance - avatar.previousDistance);
if (avatarNametagMode === "alwaysOn" && avatarDistance > MAX_RADIUS_IGNORE_METERS) {
showHide(uuid, "hide");
}
if (avatarNametagMode === "alwaysOn" && avatarDistance < MAX_RADIUS_IGNORE_METERS) {
showHide(uuid, "show");
}
var name = getCorrectName(uuid); var name = getCorrectName(uuid);
if (avatar.previousName !== name) { if (avatar.previousName !== name) {
updateName(uuid, name); updateName(uuid, name);
} else { } else if (distanceDelta > MIN_DISTANCE_FOR_REDRAW_METERS) {
redraw(uuid); redraw(uuid);
} }
}
// Check to see if we need to add or remove this avatar during always on mode
function maybeAddOrRemoveIntervalCheck() {
AvatarManager
.getAvatarIdentifiers()
.forEach(function (avatar) {
if (avatar) {
var avatarDistance = quickDistanceCheckForNonSelectedAvatars(avatar);
if (avatar && avatarNametagMode === "alwaysOn" && !(avatar in _this.avatars) && avatarDistance < MAX_RADIUS_IGNORE_METERS) {
add(avatar);
return;
}
if (avatarDistance > MAX_RADIUS_IGNORE_METERS) {
maybeRemove(avatar);
}
}
});
} }
// Handle redrawing if needed // Handle redrawing if needed
var MIN_DISTANCE = 0.1;
function redraw(uuid) { function redraw(uuid) {
var avatar = _this.avatars[uuid]; var avatar = _this.avatars[uuid];
@ -447,7 +466,7 @@ function add(uuid) {
_this.selectedAvatars[uuid] = true; _this.selectedAvatars[uuid] = true;
if (avatarNametagMode === "alwaysOn") { if (avatarNametagMode === "alwaysOn") {
entityProps.lifetime = -1; entityProps.lifetime = ALWAYS_ON_MAX_LIFETIME_IN_SECONDS;
} else { } else {
entityProps.lifetime = DEFAULT_LIFETIME; entityProps.lifetime = DEFAULT_LIFETIME;
} }
@ -521,16 +540,20 @@ function removeNametag(uuid) {
// #region API // #region API
// Create the manager and hook up username signal // Create the manager.
function create() { function create() {
if (avatarNametagMode === "alwaysOn") {
handleAvatarNametagMode("alwaysOn");
}
return _this; return _this;
} }
// Destory the manager and disconnect from username signal // Destroy the manager
function destroy() { function destroy() {
_this.reset(); _this.reset();
return _this; return _this;
} }
@ -601,7 +624,9 @@ function maybeRemove(uuid) {
// Check to see if we need to add this user to our list // Check to see if we need to add this user to our list
function maybeAdd(uuid) { function maybeAdd(uuid) {
if (uuid && avatarNametagMode === "alwaysOn" && !(uuid in _this.avatars)) { var avatarDistance = quickDistanceCheckForNonSelectedAvatars(uuid);
if (uuid && avatarNametagMode === "alwaysOn" && !(uuid in _this.avatars) && avatarDistance < MAX_RADIUS_IGNORE_METERS) {
add(uuid); add(uuid);
} }
} }
@ -628,6 +653,7 @@ function reset() {
removeAllNametags(); removeAllNametags();
_this.avatars = {}; _this.avatars = {};
shouldToggleInterval(); shouldToggleInterval();
maybeClearAlwaysOnAvatarDistanceCheck();
return _this; return _this;
} }

View file

@ -8,8 +8,8 @@
// //
// Click on someone to get a nametag for them // Click on someone to get a nametag for them
// //
var PickRayController = Script.require('./resources/modules/pickRayController.js?' + Date.now()); var PickRayController = Script.require('./resources/modules/pickRayController.js');
var NameTagListManager = Script.require('./resources/modules/nameTagListManager.js?' + Date.now()); var NameTagListManager = Script.require('./resources/modules/nameTagListManager.js');
var pickRayController = new PickRayController(); var pickRayController = new PickRayController();
var nameTagListManager = new NameTagListManager(); var nameTagListManager = new NameTagListManager();
@ -31,6 +31,7 @@ function selectAvatar(uuid, intersection) {
// Handles reset of list if you change domains // Handles reset of list if you change domains
function onDomainChange() { function onDomainChange() {
nameTagListManager.reset(); nameTagListManager.reset();
nameTagListManager.handleAvatarNametagMode(avatarNametagMode);
} }

View file

@ -1,8 +1,8 @@
import QtQuick 2.7 import QtQuick 2.7
import QtQuick.Controls 2.2 import QtQuick.Controls 2.2
import QtWebChannel 1.0 import QtWebChannel 1.0
import "../../controls" import controls 1.0
import "../toolbars" import hifi.toolbars 1.0
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
import controlsUit 1.0 as HifiControls import controlsUit 1.0 as HifiControls
import stylesUit 1.0 import stylesUit 1.0

View file

@ -1,8 +1,8 @@
import QtQuick 2.7 import QtQuick 2.7
import QtQuick.Controls 2.2 import QtQuick.Controls 2.2
import QtWebChannel 1.0 import QtWebChannel 1.0
import "../../controls" import controls 1.0
import "../toolbars" import hifi.toolbars 1.0
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
import controlsUit 1.0 as HifiControls import controlsUit 1.0 as HifiControls
import stylesUit 1.0 import stylesUit 1.0
@ -72,7 +72,7 @@ TabBar {
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/94-model-01.svg" icon: "create-icons/94-model-01.svg"
text: "MODEL" text: "MODEL"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -84,7 +84,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/21-cube-01.svg" icon: "create-icons/21-cube-01.svg"
text: "SHAPE" text: "SHAPE"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -96,7 +96,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/24-light-01.svg" icon: "create-icons/24-light-01.svg"
text: "LIGHT" text: "LIGHT"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -108,7 +108,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/20-text-01.svg" icon: "create-icons/20-text-01.svg"
text: "TEXT" text: "TEXT"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -120,7 +120,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/image.svg" icon: "create-icons/image.svg"
text: "IMAGE" text: "IMAGE"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -132,7 +132,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/25-web-1-01.svg" icon: "create-icons/25-web-1-01.svg"
text: "WEB" text: "WEB"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -144,7 +144,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/23-zone-01.svg" icon: "create-icons/23-zone-01.svg"
text: "ZONE" text: "ZONE"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -156,7 +156,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/90-particles-01.svg" icon: "create-icons/90-particles-01.svg"
text: "PARTICLE" text: "PARTICLE"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -168,7 +168,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/126-material-01.svg" icon: "create-icons/126-material-01.svg"
text: "MATERIAL" text: "MATERIAL"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({

View file

@ -37,7 +37,7 @@ StackView {
} }
function pushSource(path) { function pushSource(path) {
var item = Qt.createComponent(Qt.resolvedUrl("../../" + path)); var item = Qt.createComponent(Qt.resolvedUrl(path));
editRoot.push(item, itemProperties, editRoot.push(item, itemProperties,
StackView.Immediate); StackView.Immediate);
editRoot.currentItem.sendToScript.connect(editRoot.sendToScript); editRoot.currentItem.sendToScript.connect(editRoot.sendToScript);

View file

@ -1,8 +1,8 @@
import QtQuick 2.7 import QtQuick 2.7
import QtQuick.Controls 2.2 import QtQuick.Controls 2.2
import QtWebChannel 1.0 import QtWebChannel 1.0
import "../../controls" import controls 1.0
import "../toolbars" import hifi.toolbars 1.0
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
import controlsUit 1.0 as HifiControls import controlsUit 1.0 as HifiControls
import stylesUit 1.0 import stylesUit 1.0
@ -78,7 +78,7 @@ TabBar {
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/94-model-01.svg" icon: "create-icons/94-model-01.svg"
text: "MODEL" text: "MODEL"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -90,7 +90,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/21-cube-01.svg" icon: "create-icons/21-cube-01.svg"
text: "SHAPE" text: "SHAPE"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -102,7 +102,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/24-light-01.svg" icon: "create-icons/24-light-01.svg"
text: "LIGHT" text: "LIGHT"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -114,7 +114,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/20-text-01.svg" icon: "create-icons/20-text-01.svg"
text: "TEXT" text: "TEXT"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -126,7 +126,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/image.svg" icon: "create-icons/image.svg"
text: "IMAGE" text: "IMAGE"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -138,7 +138,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/25-web-1-01.svg" icon: "create-icons/25-web-1-01.svg"
text: "WEB" text: "WEB"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -150,7 +150,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/23-zone-01.svg" icon: "create-icons/23-zone-01.svg"
text: "ZONE" text: "ZONE"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -162,7 +162,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/90-particles-01.svg" icon: "create-icons/90-particles-01.svg"
text: "PARTICLE" text: "PARTICLE"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({
@ -174,7 +174,7 @@ TabBar {
} }
NewEntityButton { NewEntityButton {
icon: "icons/create-icons/126-material-01.svg" icon: "create-icons/126-material-01.svg"
text: "MATERIAL" text: "MATERIAL"
onClicked: { onClicked: {
editRoot.sendToScript({ editRoot.sendToScript({

View file

@ -6,7 +6,7 @@ Item {
id: newEntityButton id: newEntityButton
property var uuid; property var uuid;
property string text: "ENTITY" property string text: "ENTITY"
property string icon: "icons/edit-icon.svg" property string icon: Path.resources + "icons/edit-icon.svg"
property string activeText: newEntityButton.text property string activeText: newEntityButton.text
property string activeIcon: newEntityButton.icon property string activeIcon: newEntityButton.icon
property bool isActive: false property bool isActive: false
@ -47,14 +47,6 @@ Item {
anchors.topMargin: 0 anchors.topMargin: 0
} }
function urlHelper(src) {
if (src.match(/\bhttp/)) {
return src;
} else {
return "../../../" + src;
}
}
Rectangle { Rectangle {
id: buttonOutline id: buttonOutline
color: "#00000000" color: "#00000000"
@ -96,7 +88,7 @@ Item {
anchors.bottomMargin: 5 anchors.bottomMargin: 5
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
fillMode: Image.Stretch fillMode: Image.Stretch
source: newEntityButton.urlHelper(newEntityButton.icon) source: newEntityButton.icon
} }
ColorOverlay { ColorOverlay {

View file

@ -15,7 +15,7 @@ import QtQuick.Dialogs 1.2 as OriginalDialogs
import stylesUit 1.0 import stylesUit 1.0
import controlsUit 1.0 import controlsUit 1.0
import "../dialogs" import dialogs 1.0
Rectangle { Rectangle {
id: newMaterialDialog id: newMaterialDialog

View file

@ -14,7 +14,7 @@ import QtQuick.Dialogs 1.2 as OriginalDialogs
import stylesUit 1.0 import stylesUit 1.0
import controlsUit 1.0 import controlsUit 1.0
import "../dialogs" import dialogs 1.0
Rectangle { Rectangle {
id: newModelDialog id: newModelDialog

View file

Before

Width:  |  Height:  |  Size: 717 B

After

Width:  |  Height:  |  Size: 717 B

View file

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 2 KiB

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View file

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View file

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -45,7 +45,7 @@ var MAX_DEFAULT_ENTITY_LIST_HEIGHT = 942;
var DEFAULT_IMAGE = "https://hifi-content.s3.amazonaws.com/DomainContent/production/no-image.jpg"; var DEFAULT_IMAGE = "https://hifi-content.s3.amazonaws.com/DomainContent/production/no-image.jpg";
var createToolsWindow = new CreateWindow( var createToolsWindow = new CreateWindow(
Script.resourcesPath() + "qml/hifi/tablet/EditTools.qml", Script.resolvePath("create/EditTools.qml"),
'Create Tools', 'Create Tools',
'com.highfidelity.create.createToolsWindow', 'com.highfidelity.create.createToolsWindow',
function () { function () {
@ -812,7 +812,7 @@ var toolBar = (function () {
tablet.screenChanged.connect(function (type, url) { tablet.screenChanged.connect(function (type, url) {
var isGoingToHomescreenOnDesktop = (!shouldUseEditTabletApp() && var isGoingToHomescreenOnDesktop = (!shouldUseEditTabletApp() &&
(url === 'hifi/tablet/TabletHome.qml' || url === '')); (url === 'hifi/tablet/TabletHome.qml' || url === ''));
if (isActive && (type !== "QML" || url !== "hifi/tablet/Edit.qml") && !isGoingToHomescreenOnDesktop) { if (isActive && (type !== "QML" || url !== Script.resolvePath("create/Edit.qml")) && !isGoingToHomescreenOnDesktop) {
that.setActive(false); that.setActive(false);
} }
}); });
@ -841,10 +841,10 @@ var toolBar = (function () {
if (shouldUseEditTabletApp()) { if (shouldUseEditTabletApp()) {
// tablet version of new-model dialog // tablet version of new-model dialog
var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
tablet.pushOntoStack("hifi/tablet/New" + entityType + "Dialog.qml"); tablet.pushOntoStack(Script.resolvePath("create/New" + entityType + "Dialog.qml"));
} else { } else {
closeExistingDialogWindow(); closeExistingDialogWindow();
var qmlPath = Script.resourcesPath() + "qml/hifi/tablet/New" + entityType + "Window.qml"; var qmlPath = Script.resolvePath("create/New" + entityType + "Window.qml");
var DIALOG_WINDOW_SIZE = { x: 500, y: 300 }; var DIALOG_WINDOW_SIZE = { x: 500, y: 300 };
dialogWindow = Desktop.createWindow(qmlPath, { dialogWindow = Desktop.createWindow(qmlPath, {
title: "New " + entityType + " Entity", title: "New " + entityType + " Entity",
@ -965,7 +965,7 @@ var toolBar = (function () {
Controller.disableMapping(CONTROLLER_MAPPING_NAME); Controller.disableMapping(CONTROLLER_MAPPING_NAME);
} else { } else {
if (shouldUseEditTabletApp()) { if (shouldUseEditTabletApp()) {
tablet.loadQMLSource("hifi/tablet/Edit.qml", true); tablet.loadQMLSource(Script.resolvePath("create/Edit.qml"), true);
} else { } else {
// make other apps inactive while in desktop mode // make other apps inactive while in desktop mode
tablet.gotoHomeScreen(); tablet.gotoHomeScreen();

View file

@ -37,7 +37,7 @@ EntityListTool = function(shouldUseEditTabletApp) {
var ENTITY_LIST_WIDTH = 495; var ENTITY_LIST_WIDTH = 495;
var MAX_DEFAULT_CREATE_TOOLS_HEIGHT = 778; var MAX_DEFAULT_CREATE_TOOLS_HEIGHT = 778;
var entityListWindow = new CreateWindow( var entityListWindow = new CreateWindow(
Script.resolvePath("EditEntityList.qml"), Script.resolvePath("../create/EditEntityList.qml"),
'Entity List', 'Entity List',
'com.highfidelity.create.entityListWindow', 'com.highfidelity.create.entityListWindow',
function () { function () {