Merge branch 'master' of github.com:highfidelity/hifi into fix-camera-update

This commit is contained in:
Dante Ruiz 2018-02-07 10:39:23 -08:00
commit a03cfb835d
64 changed files with 479 additions and 278 deletions

View file

@ -138,12 +138,15 @@ def scribeLocalFile='scribe' + EXEC_SUFFIX
def scribeFile='scribe_linux_x86_64' def scribeFile='scribe_linux_x86_64'
def scribeChecksum='c98678d9726bd8bbf1bab792acf3ff6c' def scribeChecksum='c98678d9726bd8bbf1bab792acf3ff6c'
def scribeVersion='onfeBkJWcJiTwiGOyZPVBjlyhoYQ4Axn'
if (Os.isFamily(Os.FAMILY_MAC)) { if (Os.isFamily(Os.FAMILY_MAC)) {
scribeFile = 'scribe_osx_x86_64' scribeFile = 'scribe_osx_x86_64'
scribeChecksum='a137ad62c1bf7cca739da219544a9a16' scribeChecksum='a137ad62c1bf7cca739da219544a9a16'
scribeVersion='kU.Aq512HVe65uRnkFEWQEqeQfaYF2c0'
} else if (Os.isFamily(Os.FAMILY_WINDOWS)) { } else if (Os.isFamily(Os.FAMILY_WINDOWS)) {
scribeFile = 'scribe_win32_x86_64.exe' scribeFile = 'scribe_win32_x86_64.exe'
scribeChecksum='75c2ce9ed45d17de375e3988bfaba816' scribeChecksum='75c2ce9ed45d17de375e3988bfaba816'
scribeVersion='24TfWFh1FBY.t6i_LdzAXZYeQOtmQNZp'
} }
def options = [ def options = [
@ -398,7 +401,7 @@ task copyDependencies(dependsOn: [ extractDependencies ]) {
} }
task downloadScribe(type: Download) { task downloadScribe(type: Download) {
src baseUrl + scribeFile src baseUrl + scribeFile + '?versionId=' + scribeVersion
dest new File(baseFolder, scribeLocalFile) dest new File(baseFolder, scribeLocalFile)
onlyIfNewer true onlyIfNewer true
} }

View file

@ -1,6 +1,6 @@
set(TARGET_NAME assignment-client) set(TARGET_NAME assignment-client)
setup_hifi_project(Core Gui Network Script Quick Widgets WebSockets) setup_hifi_project(Core Gui Network Script Quick WebSockets)
# Fix up the rpath so macdeployqt works # Fix up the rpath so macdeployqt works
if (APPLE) if (APPLE)

View file

@ -17,9 +17,9 @@ if (ANDROID)
set(BUILD_SHARED_LIBS ON) set(BUILD_SHARED_LIBS ON)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${ANDROID_APK_OUTPUT_DIR}/libs/${ANDROID_ABI}") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${ANDROID_APK_OUTPUT_DIR}/libs/${ANDROID_ABI}")
setup_hifi_library(Gui Widgets AndroidExtras) setup_hifi_library(Gui AndroidExtras)
else () else ()
setup_hifi_project(Gui Widgets) setup_hifi_project(Gui)
endif () endif ()
include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS})

View file

@ -78,7 +78,7 @@ endif ()
find_package( find_package(
Qt5 COMPONENTS Qt5 COMPONENTS
Gui Multimedia Network OpenGL Qml Quick Script Svg Gui Widgets Multimedia Network Qml Quick Script Svg
${PLATFORM_QT_COMPONENTS} ${PLATFORM_QT_COMPONENTS}
WebChannel WebSockets WebChannel WebSockets
) )
@ -269,7 +269,7 @@ endif ()
target_link_libraries( target_link_libraries(
${TARGET_NAME} ${TARGET_NAME}
Qt5::Gui Qt5::Network Qt5::Multimedia Qt5::OpenGL Qt5::Gui Qt5::Network Qt5::Multimedia Qt5::Widgets
Qt5::Qml Qt5::Quick Qt5::Script Qt5::Svg Qt5::Qml Qt5::Quick Qt5::Script Qt5::Svg
Qt5::WebChannel Qt5::WebChannel
${PLATFORM_QT_LIBRARIES} ${PLATFORM_QT_LIBRARIES}

View file

@ -19,21 +19,30 @@ import "../../../controls-uit" as HifiControlsUit
import "../../../controls" as HifiControls import "../../../controls" as HifiControls
import "../wallet" as HifiWallet import "../wallet" as HifiWallet
// references XXX from root context
Rectangle { Rectangle {
HifiConstants { id: hifi; } HifiConstants { id: hifi; }
id: root; id: root;
property string marketplaceUrl; property string marketplaceUrl: "";
property string certificateId; property string certificateId: "";
property string itemName: "--"; property string itemName: "--";
property string itemOwner: "--"; property string itemOwner: "--";
property string itemEdition: "--"; property string itemEdition: "--";
property string dateOfPurchase: "--"; property string dateOfPurchase: "--";
property string itemCost: "--";
property string certTitleTextColor: hifi.colors.darkGray;
property string certTextColor: hifi.colors.white;
property string infoTextColor: hifi.colors.blueAccent;
// 0 means replace none
// 4 means replace all but "Item Edition"
// 5 means replace all 5 replaceable fields
property int certInfoReplaceMode: 5;
property bool isLightbox: false; property bool isLightbox: false;
property bool isMyCert: false; property bool isMyCert: false;
property bool isCertificateInvalid: false; property bool useGoldCert: true;
property bool certificateInfoPending: true;
property int certificateStatus: 0;
property bool certificateStatusPending: true;
// Style // Style
color: hifi.colors.faintGray; color: hifi.colors.faintGray;
Connections { Connections {
@ -45,71 +54,130 @@ Rectangle {
} else { } else {
root.marketplaceUrl = result.data.marketplace_item_url; root.marketplaceUrl = result.data.marketplace_item_url;
root.isMyCert = result.isMyCert ? result.isMyCert : false; root.isMyCert = result.isMyCert ? result.isMyCert : false;
root.itemOwner = root.isCertificateInvalid ? "--" : (root.isMyCert ? Account.username :
"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022"); if (root.certInfoReplaceMode > 3) {
root.itemEdition = root.isCertificateInvalid ? "Uncertified Copy" : root.itemName = result.data.marketplace_item_name;
(result.data.edition_number + "/" + (result.data.limited_run === -1 ? "\u221e" : result.data.limited_run)); // "\u2022" is the Unicode character 'BULLET' - it's what's used in password fields on the web, etc
root.dateOfPurchase = root.isCertificateInvalid ? "" : getFormattedDate(result.data.transfer_created_at * 1000); root.itemOwner = root.isMyCert ? Account.username :
root.itemName = result.data.marketplace_item_name; "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
root.dateOfPurchase = root.isMyCert ? getFormattedDate(result.data.transfer_created_at * 1000) : "Undisclosed";
root.itemCost = (root.isMyCert && result.data.cost !== undefined) ? result.data.cost : "Undisclosed";
}
if (root.certInfoReplaceMode > 4) {
root.itemEdition = result.data.edition_number + "/" + (result.data.limited_run === -1 ? "\u221e" : result.data.limited_run);
}
if (root.certificateStatus === 4) { // CERTIFICATE_STATUS_OWNER_VERIFICATION_FAILED
if (root.isMyCert) {
errorText.text = "This item is an uncertified copy of an item you purchased.";
} else {
errorText.text = "The person who placed this item doesn't own it.";
}
}
if (result.data.invalid_reason || result.data.transfer_status[0] === "failed") { if (result.data.invalid_reason || result.data.transfer_status[0] === "failed") {
titleBarText.text = "Invalid Certificate"; root.useGoldCert = false;
titleBarText.color = hifi.colors.redHighlight; root.certTitleTextColor = hifi.colors.redHighlight;
root.certTextColor = hifi.colors.redHighlight;
root.infoTextColor = hifi.colors.redHighlight;
titleBarText.text = "Certificate\nNo Longer Valid";
popText.text = ""; popText.text = "";
showInMarketplaceButton.visible = false;
// "Edition" text previously set above in this function
// "Owner" text previously set above in this function
// "Purchase Date" text previously set above in this function
// "Purchase Price" text previously set above in this function
if (result.data.invalid_reason) { if (result.data.invalid_reason) {
errorText.text = result.data.invalid_reason; errorText.text = result.data.invalid_reason;
} }
} else if (result.data.transfer_status[0] === "pending") { } else if (result.data.transfer_status[0] === "pending") {
root.useGoldCert = false;
root.certTitleTextColor = hifi.colors.redHighlight;
root.certTextColor = hifi.colors.redHighlight;
root.infoTextColor = hifi.colors.redHighlight;
titleBarText.text = "Certificate Pending"; titleBarText.text = "Certificate Pending";
popText.text = "";
showInMarketplaceButton.visible = true;
// "Edition" text previously set above in this function
// "Owner" text previously set above in this function
// "Purchase Date" text previously set above in this function
// "Purchase Price" text previously set above in this function
errorText.text = "The status of this item is still pending confirmation. If the purchase is not confirmed, " + errorText.text = "The status of this item is still pending confirmation. If the purchase is not confirmed, " +
"this entity will be cleaned up by the domain."; "this entity will be cleaned up by the domain.";
errorText.color = hifi.colors.baseGray;
} }
} }
root.certificateInfoPending = false;
} }
onUpdateCertificateStatus: { onUpdateCertificateStatus: {
if (certStatus === 1) { // CERTIFICATE_STATUS_VERIFICATION_SUCCESS root.certificateStatus = certStatus;
// NOP if (root.certificateStatus === 1) { // CERTIFICATE_STATUS_VERIFICATION_SUCCESS
} else if (certStatus === 2) { // CERTIFICATE_STATUS_VERIFICATION_TIMEOUT root.useGoldCert = true;
root.isCertificateInvalid = true; root.certTitleTextColor = hifi.colors.darkGray;
errorText.text = "Verification of this certificate timed out."; root.certTextColor = hifi.colors.white;
errorText.color = hifi.colors.redHighlight; root.infoTextColor = hifi.colors.blueAccent;
} else if (certStatus === 3) { // CERTIFICATE_STATUS_STATIC_VERIFICATION_FAILED titleBarText.text = "Certificate";
root.isCertificateInvalid = true; popText.text = "PROOF OF PROVENANCE";
titleBarText.text = "Invalid Certificate"; showInMarketplaceButton.visible = true;
titleBarText.color = hifi.colors.redHighlight; root.certInfoReplaceMode = 5;
// "Item Name" text will be set in "onCertificateInfoResult()"
// "Edition" text will be set in "onCertificateInfoResult()"
// "Owner" text will be set in "onCertificateInfoResult()"
// "Purchase Date" text will be set in "onCertificateInfoResult()"
// "Purchase Price" text will be set in "onCertificateInfoResult()"
errorText.text = "";
} else if (root.certificateStatus === 2) { // CERTIFICATE_STATUS_VERIFICATION_TIMEOUT
root.useGoldCert = false;
root.certTitleTextColor = hifi.colors.redHighlight;
root.certTextColor = hifi.colors.redHighlight;
root.infoTextColor = hifi.colors.redHighlight;
titleBarText.text = "Request Timed Out";
popText.text = ""; popText.text = "";
showInMarketplaceButton.visible = false;
root.certInfoReplaceMode = 0;
root.itemName = "";
root.itemEdition = "";
root.itemOwner = ""; root.itemOwner = "";
dateOfPurchaseHeader.text = "";
root.dateOfPurchase = ""; root.dateOfPurchase = "";
root.itemEdition = "Uncertified Copy"; root.itemCost = "";
errorText.text = "Your request to inspect this item timed out. Please try again later.";
} else if (root.certificateStatus === 3) { // CERTIFICATE_STATUS_STATIC_VERIFICATION_FAILED
root.useGoldCert = false;
root.certTitleTextColor = hifi.colors.redHighlight;
root.certTextColor = hifi.colors.redHighlight;
root.infoTextColor = hifi.colors.redHighlight;
titleBarText.text = "Certificate\nNo Longer Valid";
popText.text = "";
showInMarketplaceButton.visible = true;
root.certInfoReplaceMode = 5;
// "Item Name" text will be set in "onCertificateInfoResult()"
// "Edition" text will be set in "onCertificateInfoResult()"
// "Owner" text will be set in "onCertificateInfoResult()"
// "Purchase Date" text will be set in "onCertificateInfoResult()"
// "Purchase Price" text will be set in "onCertificateInfoResult()"
errorText.text = "The information associated with this item has been modified and it no longer matches the original certified item."; errorText.text = "The information associated with this item has been modified and it no longer matches the original certified item.";
errorText.color = hifi.colors.baseGray; } else if (root.certificateStatus === 4) { // CERTIFICATE_STATUS_OWNER_VERIFICATION_FAILED
} else if (certStatus === 4) { // CERTIFICATE_STATUS_OWNER_VERIFICATION_FAILED root.useGoldCert = false;
root.isCertificateInvalid = true; root.certTitleTextColor = hifi.colors.redHighlight;
root.certTextColor = hifi.colors.redHighlight;
root.infoTextColor = hifi.colors.redHighlight;
titleBarText.text = "Invalid Certificate"; titleBarText.text = "Invalid Certificate";
titleBarText.color = hifi.colors.redHighlight;
popText.text = ""; popText.text = "";
root.itemOwner = ""; showInMarketplaceButton.visible = true;
dateOfPurchaseHeader.text = ""; root.certInfoReplaceMode = 4;
root.dateOfPurchase = ""; // "Item Name" text will be set in "onCertificateInfoResult()"
root.itemEdition = "Uncertified Copy"; root.itemEdition = "Uncertified Copy"
// "Owner" text will be set in "onCertificateInfoResult()"
errorText.text = "The avatar who rezzed this item doesn't own it."; // "Purchase Date" text will be set in "onCertificateInfoResult()"
errorText.color = hifi.colors.baseGray; // "Purchase Price" text will be set in "onCertificateInfoResult()"
// "Error Text" text will be set in "onCertificateInfoResult()"
} else { } else {
console.log("Unknown certificate status received from ledger signal!"); console.log("Unknown certificate status received from ledger signal!");
} }
}
} root.certificateStatusPending = false;
// We've gotten cert status - we are GO on getting the cert info
onCertificateIdChanged: { Commerce.certificateInfo(root.certificateId);
if (certificateId !== "") {
Commerce.certificateInfo(certificateId);
} }
} }
@ -122,9 +190,35 @@ Rectangle {
hoverEnabled: true; hoverEnabled: true;
} }
Image { Rectangle {
id: loadingOverlay;
z: 998;
visible: root.certificateInfoPending || root.certificateStatusPending;
anchors.fill: parent; anchors.fill: parent;
source: "images/cert-bg.jpg"; color: Qt.rgba(0.0, 0.0, 0.0, 0.7);
// This object is always used in a popup or full-screen Wallet section.
// This MouseArea is used to prevent a user from being
// able to click on a button/mouseArea underneath the popup/section.
MouseArea {
anchors.fill: parent;
propagateComposedEvents: false;
}
AnimatedImage {
source: "../common/images/loader.gif"
width: 96;
height: width;
anchors.verticalCenter: parent.verticalCenter;
anchors.horizontalCenter: parent.horizontalCenter;
}
}
Image {
id: backgroundImage;
anchors.fill: parent;
source: root.useGoldCert ? "images/cert-bg-gold-split.png" : "images/nocert-bg-split.png";
} }
// Title text // Title text
@ -137,16 +231,17 @@ Rectangle {
anchors.top: parent.top; anchors.top: parent.top;
anchors.topMargin: 40; anchors.topMargin: 40;
anchors.left: parent.left; anchors.left: parent.left;
anchors.leftMargin: 45; anchors.leftMargin: 36;
anchors.right: parent.right; anchors.right: parent.right;
anchors.rightMargin: 8;
height: paintedHeight; height: paintedHeight;
// Style // Style
color: hifi.colors.darkGray; color: root.certTitleTextColor;
wrapMode: Text.WordWrap;
} }
// Title text // Title text
RalewayRegular { RalewayRegular {
id: popText; id: popText;
text: "Proof of Provenance";
// Text size // Text size
size: 16; size: 16;
// Anchors // Anchors
@ -154,9 +249,38 @@ Rectangle {
anchors.topMargin: 4; anchors.topMargin: 4;
anchors.left: titleBarText.left; anchors.left: titleBarText.left;
anchors.right: titleBarText.right; anchors.right: titleBarText.right;
height: paintedHeight; height: text === "" ? 0 : paintedHeight;
// Style // Style
color: hifi.colors.darkGray; color: root.certTitleTextColor;
}
// "Close" button
HiFiGlyphs {
id: closeGlyphButton;
text: hifi.glyphs.close;
color: hifi.colors.white;
size: 26;
anchors.top: parent.top;
anchors.topMargin: 10;
anchors.right: parent.right;
anchors.rightMargin: 10;
MouseArea {
anchors.fill: parent;
hoverEnabled: true;
onEntered: {
parent.text = hifi.glyphs.closeInverted;
}
onExited: {
parent.text = hifi.glyphs.close;
}
onClicked: {
if (root.isLightbox) {
root.visible = false;
} else {
sendToScript({method: 'inspectionCertificate_closeClicked', closeGoesToPurchases: root.closeGoesToPurchases});
}
}
}
} }
// //
@ -164,11 +288,13 @@ Rectangle {
// //
Item { Item {
id: certificateContainer; id: certificateContainer;
anchors.top: popText.bottom; anchors.top: titleBarText.top;
anchors.topMargin: 30; anchors.topMargin: 110;
anchors.bottom: buttonsContainer.top; anchors.bottom: infoContainer.top;
anchors.left: parent.left; anchors.left: parent.left;
anchors.leftMargin: titleBarText.anchors.leftMargin;
anchors.right: parent.right; anchors.right: parent.right;
anchors.rightMargin: 24;
RalewayRegular { RalewayRegular {
id: itemNameHeader; id: itemNameHeader;
@ -178,9 +304,7 @@ Rectangle {
// Anchors // Anchors
anchors.top: parent.top; anchors.top: parent.top;
anchors.left: parent.left; anchors.left: parent.left;
anchors.leftMargin: 45;
anchors.right: parent.right; anchors.right: parent.right;
anchors.rightMargin: 16;
height: paintedHeight; height: paintedHeight;
// Style // Style
color: hifi.colors.darkGray; color: hifi.colors.darkGray;
@ -197,79 +321,30 @@ Rectangle {
anchors.right: itemNameHeader.right; anchors.right: itemNameHeader.right;
height: paintedHeight; height: paintedHeight;
// Style // Style
color: hifi.colors.white; color: root.certTextColor;
elide: Text.ElideRight; elide: Text.ElideRight;
MouseArea { MouseArea {
enabled: showInMarketplaceButton.visible;
anchors.fill: parent; anchors.fill: parent;
hoverEnabled: enabled; hoverEnabled: enabled;
onClicked: { onClicked: {
sendToScript({method: 'inspectionCertificate_showInMarketplaceClicked', marketplaceUrl: root.marketplaceUrl}); sendToScript({method: 'inspectionCertificate_showInMarketplaceClicked', marketplaceUrl: root.marketplaceUrl});
} }
onEntered: itemName.color = hifi.colors.blueHighlight; onEntered: itemName.color = hifi.colors.blueHighlight;
onExited: itemName.color = hifi.colors.white; onExited: itemName.color = root.certTextColor;
} }
} }
RalewayRegular {
id: ownedByHeader;
text: "OWNER";
// Text size
size: 16;
// Anchors
anchors.top: itemName.bottom;
anchors.topMargin: 28;
anchors.left: parent.left;
anchors.leftMargin: 45;
anchors.right: parent.right;
anchors.rightMargin: 16;
height: paintedHeight;
// Style
color: hifi.colors.darkGray;
}
RalewayRegular {
id: ownedBy;
text: root.itemOwner;
// Text size
size: 22;
// Anchors
anchors.top: ownedByHeader.bottom;
anchors.topMargin: 8;
anchors.left: ownedByHeader.left;
height: paintedHeight;
// Style
color: hifi.colors.white;
elide: Text.ElideRight;
}
AnonymousProRegular {
id: isMyCertText;
visible: root.isMyCert && !root.isCertificateInvalid;
text: "(Private)";
size: 18;
// Anchors
anchors.top: ownedBy.top;
anchors.topMargin: 4;
anchors.bottom: ownedBy.bottom;
anchors.left: ownedBy.right;
anchors.leftMargin: 6;
anchors.right: ownedByHeader.right;
// Style
color: hifi.colors.white;
elide: Text.ElideRight;
verticalAlignment: Text.AlignVCenter;
}
RalewayRegular { RalewayRegular {
id: editionHeader; id: editionHeader;
text: "EDITION"; text: "EDITION";
// Text size // Text size
size: 16; size: 16;
// Anchors // Anchors
anchors.top: ownedBy.bottom; anchors.top: itemName.bottom;
anchors.topMargin: 28; anchors.topMargin: 28;
anchors.left: parent.left; anchors.left: parent.left;
anchors.leftMargin: 45;
anchors.right: parent.right; anchors.right: parent.right;
anchors.rightMargin: 16;
height: paintedHeight; height: paintedHeight;
// Style // Style
color: hifi.colors.darkGray; color: hifi.colors.darkGray;
@ -286,21 +361,117 @@ Rectangle {
anchors.right: editionHeader.right; anchors.right: editionHeader.right;
height: paintedHeight; height: paintedHeight;
// Style // Style
color: hifi.colors.white; color: root.certTextColor;
}
// "Show In Marketplace" button
HifiControlsUit.Button {
id: showInMarketplaceButton;
enabled: root.marketplaceUrl;
color: hifi.buttons.blue;
colorScheme: hifi.colorSchemes.light;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 48;
anchors.right: parent.right;
width: 200;
height: 40;
text: "View In Market"
onClicked: {
sendToScript({method: 'inspectionCertificate_showInMarketplaceClicked', marketplaceUrl: root.marketplaceUrl});
}
}
}
//
// "CERTIFICATE" END
//
//
// "INFO CONTAINER" START
//
Item {
id: infoContainer;
anchors.bottom: parent.bottom;
anchors.left: parent.left;
anchors.leftMargin: titleBarText.anchors.leftMargin;
anchors.right: parent.right;
anchors.rightMargin: 24;
height: root.useGoldCert ? 220 : 372;
RalewayRegular {
id: errorText;
visible: !root.useGoldCert;
// Text size
size: 20;
// Anchors
anchors.top: parent.top;
anchors.topMargin: 36;
anchors.left: parent.left;
anchors.right: parent.right;
height: 116;
// Style
wrapMode: Text.WordWrap;
color: hifi.colors.baseGray;
verticalAlignment: Text.AlignTop;
}
RalewayRegular {
id: ownedByHeader;
text: "OWNER";
// Text size
size: 16;
// Anchors
anchors.top: errorText.visible ? errorText.bottom : parent.top;
anchors.topMargin: 28;
anchors.left: parent.left;
anchors.right: parent.right;
height: paintedHeight;
// Style
color: hifi.colors.darkGray;
}
RalewayRegular {
id: ownedBy;
text: root.itemOwner;
// Text size
size: 22;
// Anchors
anchors.top: ownedByHeader.bottom;
anchors.topMargin: 8;
anchors.left: ownedByHeader.left;
height: paintedHeight;
// Style
color: root.infoTextColor;
elide: Text.ElideRight;
}
AnonymousProRegular {
id: isMyCertText;
visible: root.isMyCert && ownedBy.text !== "--" && ownedBy.text !== "";
text: "(Private)";
size: 18;
// Anchors
anchors.top: ownedBy.top;
anchors.topMargin: 4;
anchors.bottom: ownedBy.bottom;
anchors.left: ownedBy.right;
anchors.leftMargin: 6;
anchors.right: ownedByHeader.right;
// Style
color: root.infoTextColor;
elide: Text.ElideRight;
verticalAlignment: Text.AlignVCenter;
} }
RalewayRegular { RalewayRegular {
id: dateOfPurchaseHeader; id: dateOfPurchaseHeader;
text: "DATE OF PURCHASE"; text: "PURCHASE DATE";
// Text size // Text size
size: 16; size: 16;
// Anchors // Anchors
anchors.top: edition.bottom; anchors.top: ownedBy.bottom;
anchors.topMargin: 28; anchors.topMargin: 28;
anchors.left: parent.left; anchors.left: parent.left;
anchors.leftMargin: 45; anchors.right: parent.horizontalCenter;
anchors.right: parent.right; anchors.rightMargin: 8;
anchors.rightMargin: 16;
height: paintedHeight; height: paintedHeight;
// Style // Style
color: hifi.colors.darkGray; color: hifi.colors.darkGray;
@ -317,73 +488,58 @@ Rectangle {
anchors.right: dateOfPurchaseHeader.right; anchors.right: dateOfPurchaseHeader.right;
height: paintedHeight; height: paintedHeight;
// Style // Style
color: hifi.colors.white; color: root.infoTextColor;
} }
RalewayRegular { RalewayRegular {
id: errorText; id: priceHeader;
text: "PURCHASE PRICE";
// Text size // Text size
size: 20; size: 16;
// Anchors // Anchors
anchors.top: dateOfPurchase.bottom; anchors.top: ownedBy.bottom;
anchors.topMargin: 36; anchors.topMargin: 28;
anchors.left: dateOfPurchase.left; anchors.left: parent.horizontalCenter;
anchors.right: dateOfPurchase.right;
anchors.bottom: parent.bottom;
// Style
wrapMode: Text.WordWrap;
color: hifi.colors.redHighlight;
verticalAlignment: Text.AlignTop;
}
}
//
// "CERTIFICATE" END
//
Item {
id: buttonsContainer;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 30;
anchors.left: parent.left;
anchors.right: parent.right;
height: 50;
// "Cancel" button
HifiControlsUit.Button {
color: hifi.buttons.noneBorderlessWhite;
colorScheme: hifi.colorSchemes.light;
anchors.top: parent.top;
anchors.left: parent.left;
anchors.leftMargin: 30;
width: parent.width/2 - 50;
height: 50;
text: "close";
onClicked: {
if (root.isLightbox) {
root.visible = false;
} else {
sendToScript({method: 'inspectionCertificate_closeClicked', closeGoesToPurchases: root.closeGoesToPurchases});
}
}
}
// "Show In Marketplace" button
HifiControlsUit.Button {
id: showInMarketplaceButton;
enabled: root.marketplaceUrl;
color: hifi.buttons.blue;
colorScheme: hifi.colorSchemes.light;
anchors.top: parent.top;
anchors.right: parent.right; anchors.right: parent.right;
anchors.rightMargin: 30; height: paintedHeight;
width: parent.width/2 - 50; // Style
height: 50; color: hifi.colors.darkGray;
text: "View In Market" }
onClicked: { HiFiGlyphs {
sendToScript({method: 'inspectionCertificate_showInMarketplaceClicked', marketplaceUrl: root.marketplaceUrl}); id: hfcGlyph;
} visible: priceText.text !== "Undisclosed" && priceText.text !== "";
text: hifi.glyphs.hfc;
// Size
size: 24;
// Anchors
anchors.top: priceHeader.bottom;
anchors.topMargin: 8;
anchors.left: priceHeader.left;
width: visible ? paintedWidth + 6 : 0;
height: 40;
// Style
color: root.infoTextColor;
verticalAlignment: Text.AlignTop;
horizontalAlignment: Text.AlignLeft;
}
AnonymousProRegular {
id: priceText;
text: root.itemCost;
// Text size
size: 18;
// Anchors
anchors.top: priceHeader.bottom;
anchors.topMargin: 8;
anchors.left: hfcGlyph.right;
anchors.right: priceHeader.right;
height: paintedHeight;
// Style
color: root.infoTextColor;
} }
} }
//
// "INFO CONTAINER" END
//
// //
// FUNCTION DEFINITIONS START // FUNCTION DEFINITIONS START
@ -404,19 +560,11 @@ Rectangle {
function fromScript(message) { function fromScript(message) {
switch (message.method) { switch (message.method) {
case 'inspectionCertificate_setCertificateId': case 'inspectionCertificate_setCertificateId':
resetCert(false);
root.certificateId = message.certificateId; root.certificateId = message.certificateId;
break; break;
case 'inspectionCertificate_resetCert': case 'inspectionCertificate_resetCert':
titleBarText.text = "Certificate"; resetCert(true);
popText.text = "PROOF OF PURCHASE";
root.certificateId = "";
root.itemName = "--";
root.itemOwner = "--";
root.itemEdition = "--";
root.dateOfPurchase = "--";
root.marketplaceUrl = "";
root.isMyCert = false;
errorText.text = "";
break; break;
default: default:
console.log('Unrecognized message from marketplaces.js:', JSON.stringify(message)); console.log('Unrecognized message from marketplaces.js:', JSON.stringify(message));
@ -424,7 +572,33 @@ Rectangle {
} }
signal sendToScript(var message); signal sendToScript(var message);
function resetCert(alsoResetCertID) {
if (alsoResetCertID) {
root.certificateId = "";
}
root.certInfoReplaceMode = 5;
root.certificateInfoPending = true;
root.certificateStatusPending = true;
root.useGoldCert = true;
root.certTitleTextColor = hifi.colors.darkGray;
root.certTextColor = hifi.colors.white;
root.infoTextColor = hifi.colors.blueAccent;
titleBarText.text = "Certificate";
popText.text = "";
root.itemName = "--";
root.itemOwner = "--";
root.itemEdition = "--";
root.dateOfPurchase = "--";
root.marketplaceUrl = "";
root.itemCost = "--";
root.isMyCert = false;
errorText.text = "";
}
function getFormattedDate(timestamp) { function getFormattedDate(timestamp) {
if (timestamp === "--") {
return "--";
}
function addLeadingZero(n) { function addLeadingZero(n) {
return n < 10 ? '0' + n : '' + n; return n < 10 ? '0' + n : '' + n;
} }
@ -449,7 +623,7 @@ Rectangle {
var min = addLeadingZero(a.getMinutes()); var min = addLeadingZero(a.getMinutes());
var sec = addLeadingZero(a.getSeconds()); var sec = addLeadingZero(a.getSeconds());
return year + '-' + month + '-' + day + '<br>' + drawnHour + ':' + min + amOrPm; return year + '-' + month + '-' + day + ' ' + drawnHour + ':' + min + amOrPm;
} }
// //
// FUNCTION DEFINITIONS END // FUNCTION DEFINITIONS END

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -1115,7 +1115,7 @@ Item {
AnimatedImage { AnimatedImage {
id: sendingMoneyImage; id: sendingMoneyImage;
source: "./images/loader.gif" source: "../../common/images/loader.gif"
width: 96; width: 96;
height: width; height: width;
anchors.verticalCenter: parent.verticalCenter; anchors.verticalCenter: parent.verticalCenter;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

View file

@ -1,6 +1,6 @@
set(TARGET_NAME avatars-renderer) set(TARGET_NAME avatars-renderer)
AUTOSCRIBE_SHADER_LIB(gpu graphics render render-utils) AUTOSCRIBE_SHADER_LIB(gpu graphics render render-utils)
setup_hifi_library(Widgets Network Script) setup_hifi_library(Network Script)
link_hifi_libraries(shared gpu graphics animation model-networking script-engine render render-utils image trackers entities-renderer) link_hifi_libraries(shared gpu graphics animation model-networking script-engine render render-utils image trackers entities-renderer)
include_hifi_library_headers(avatars) include_hifi_library_headers(avatars)
include_hifi_library_headers(networking) include_hifi_library_headers(networking)

View file

@ -1,6 +1,6 @@
set(TARGET_NAME display-plugins) set(TARGET_NAME display-plugins)
AUTOSCRIBE_SHADER_LIB(gpu display-plugins) AUTOSCRIBE_SHADER_LIB(gpu display-plugins)
setup_hifi_library(OpenGL) setup_hifi_library(Gui)
link_hifi_libraries(shared plugins ui-plugins gl ui render-utils ${PLATFORM_GL_BACKEND}) link_hifi_libraries(shared plugins ui-plugins gl ui render-utils ${PLATFORM_GL_BACKEND})
include_hifi_library_headers(gpu) include_hifi_library_headers(gpu)
include_hifi_library_headers(model-networking) include_hifi_library_headers(model-networking)

View file

@ -1,6 +1,6 @@
set(TARGET_NAME entities-renderer) set(TARGET_NAME entities-renderer)
AUTOSCRIBE_SHADER_LIB(gpu graphics procedural render render-utils) AUTOSCRIBE_SHADER_LIB(gpu graphics procedural render render-utils)
setup_hifi_library(Widgets Network Script) setup_hifi_library(Network Script)
link_hifi_libraries(shared gpu procedural graphics model-networking script-engine render render-utils image ui pointers) link_hifi_libraries(shared gpu procedural graphics model-networking script-engine render render-utils image ui pointers)
include_hifi_library_headers(networking) include_hifi_library_headers(networking)
include_hifi_library_headers(gl) include_hifi_library_headers(gl)

View file

@ -165,7 +165,7 @@ public:
PolyVoxEntityRenderer(const EntityItemPointer& entity); PolyVoxEntityRenderer(const EntityItemPointer& entity);
protected: protected:
virtual ItemKey getKey() override { return ItemKey::Builder::opaqueShape(); } virtual ItemKey getKey() override { return ItemKey::Builder::opaqueShape().withTagBits(render::ItemKey::TAG_BITS_0 | render::ItemKey::TAG_BITS_1); }
virtual ShapeKey getShapeKey() override; virtual ShapeKey getShapeKey() override;
virtual bool needsRenderUpdateFromTypedEntity(const TypedEntityPointer& entity) const override; virtual bool needsRenderUpdateFromTypedEntity(const TypedEntityPointer& entity) const override;
virtual void doRenderUpdateSynchronousTyped(const ScenePointer& scene, Transaction& transaction, const TypedEntityPointer& entity) override; virtual void doRenderUpdateSynchronousTyped(const ScenePointer& scene, Transaction& transaction, const TypedEntityPointer& entity) override;

View file

@ -241,7 +241,7 @@ void ZoneEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scen
} }
#endif #endif
updateKeyZoneItemFromEntity(); updateKeyZoneItemFromEntity(entity);
if (keyLightChanged) { if (keyLightChanged) {
updateKeySunFromEntity(entity); updateKeySunFromEntity(entity);
@ -329,7 +329,7 @@ void ZoneEntityRenderer::updateKeySunFromEntity(const TypedEntityPointer& entity
// Set the keylight // Set the keylight
sunLight->setColor(ColorUtils::toVec3(_keyLightProperties.getColor())); sunLight->setColor(ColorUtils::toVec3(_keyLightProperties.getColor()));
sunLight->setIntensity(_keyLightProperties.getIntensity()); sunLight->setIntensity(_keyLightProperties.getIntensity());
sunLight->setDirection(_keyLightProperties.getDirection()); sunLight->setDirection(entity->getTransform().getRotation() * _keyLightProperties.getDirection());
} }
void ZoneEntityRenderer::updateAmbientLightFromEntity(const TypedEntityPointer& entity) { void ZoneEntityRenderer::updateAmbientLightFromEntity(const TypedEntityPointer& entity) {
@ -349,6 +349,8 @@ void ZoneEntityRenderer::updateAmbientLightFromEntity(const TypedEntityPointer&
} else { } else {
setAmbientURL(_ambientLightProperties.getAmbientURL()); setAmbientURL(_ambientLightProperties.getAmbientURL());
} }
ambientLight->setTransform(entity->getTransform().getInverseMatrix());
} }
void ZoneEntityRenderer::updateHazeFromEntity(const TypedEntityPointer& entity) { void ZoneEntityRenderer::updateHazeFromEntity(const TypedEntityPointer& entity) {
@ -378,7 +380,7 @@ void ZoneEntityRenderer::updateHazeFromEntity(const TypedEntityPointer& entity)
haze->setHazeKeyLightRangeFactor(graphics::Haze::convertHazeRangeToHazeRangeFactor(_hazeProperties.getHazeKeyLightRange())); haze->setHazeKeyLightRangeFactor(graphics::Haze::convertHazeRangeToHazeRangeFactor(_hazeProperties.getHazeKeyLightRange()));
haze->setHazeKeyLightAltitudeFactor(graphics::Haze::convertHazeAltitudeToHazeAltitudeFactor(_hazeProperties.getHazeKeyLightAltitude())); haze->setHazeKeyLightAltitudeFactor(graphics::Haze::convertHazeAltitudeToHazeAltitudeFactor(_hazeProperties.getHazeKeyLightAltitude()));
haze->setZoneTransform(entity->getTransform().getMatrix()); haze->setTransform(entity->getTransform().getMatrix());
} }
void ZoneEntityRenderer::updateKeyBackgroundFromEntity(const TypedEntityPointer& entity) { void ZoneEntityRenderer::updateKeyBackgroundFromEntity(const TypedEntityPointer& entity) {
@ -390,7 +392,10 @@ void ZoneEntityRenderer::updateKeyBackgroundFromEntity(const TypedEntityPointer&
setSkyboxURL(_skyboxProperties.getURL()); setSkyboxURL(_skyboxProperties.getURL());
} }
void ZoneEntityRenderer::updateKeyZoneItemFromEntity() { void ZoneEntityRenderer::updateKeyZoneItemFromEntity(const TypedEntityPointer& entity) {
// Update rotation values
editSkybox()->setOrientation(entity->getTransform().getRotation());
/* TODO: Implement the sun model behavior / Keep this code here for reference, this is how we /* TODO: Implement the sun model behavior / Keep this code here for reference, this is how we
{ {
// Set the stage // Set the stage

View file

@ -45,7 +45,7 @@ protected:
virtual void doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) override; virtual void doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) override;
private: private:
void updateKeyZoneItemFromEntity(); void updateKeyZoneItemFromEntity(const TypedEntityPointer& entity);
void updateKeySunFromEntity(const TypedEntityPointer& entity); void updateKeySunFromEntity(const TypedEntityPointer& entity);
void updateAmbientLightFromEntity(const TypedEntityPointer& entity); void updateAmbientLightFromEntity(const TypedEntityPointer& entity);
void updateHazeFromEntity(const TypedEntityPointer& entity); void updateHazeFromEntity(const TypedEntityPointer& entity);

View file

@ -1,5 +1,5 @@
set(TARGET_NAME gl) set(TARGET_NAME gl)
setup_hifi_library(OpenGL Qml Quick) setup_hifi_library(Gui Widgets Qml Quick)
link_hifi_libraries(shared) link_hifi_libraries(shared)
target_opengl() target_opengl()

View file

@ -1,5 +1,5 @@
set(TARGET_NAME gpu-gles) set(TARGET_NAME gpu-gles)
setup_hifi_library(Concurrent) setup_hifi_library(Gui Concurrent)
link_hifi_libraries(shared gl gpu) link_hifi_libraries(shared gl gpu)
GroupSources("src") GroupSources("src")
target_opengl() target_opengl()

View file

@ -182,11 +182,11 @@ void Haze::setHazeBackgroundBlend(const float hazeBackgroundBlend) {
} }
} }
void Haze::setZoneTransform(const glm::mat4& zoneTransform) { void Haze::setTransform(const glm::mat4& transform) {
auto& params = _hazeParametersBuffer.get<Parameters>(); auto& params = _hazeParametersBuffer.get<Parameters>();
if (params.zoneTransform == zoneTransform) { if (params.transform != transform) {
_hazeParametersBuffer.edit<Parameters>().zoneTransform = zoneTransform; _hazeParametersBuffer.edit<Parameters>().transform = transform;
} }
} }

View file

@ -92,7 +92,7 @@ namespace graphics {
void setHazeBackgroundBlend(const float hazeBackgroundBlend); void setHazeBackgroundBlend(const float hazeBackgroundBlend);
void setZoneTransform(const glm::mat4& zoneTransform); void setTransform(const glm::mat4& transform);
using UniformBufferView = gpu::BufferView; using UniformBufferView = gpu::BufferView;
UniformBufferView getHazeParametersBuffer() const { return _hazeParametersBuffer; } UniformBufferView getHazeParametersBuffer() const { return _hazeParametersBuffer; }
@ -113,7 +113,7 @@ namespace graphics {
// bit 2 - set to activate directional light attenuation mode // bit 2 - set to activate directional light attenuation mode
// bit 3 - set to blend between blend-in and blend-out colours // bit 3 - set to blend between blend-in and blend-out colours
glm::mat4 zoneTransform; glm::mat4 transform;
// Amount of background (skybox) to display, overriding the haze effect for the background // Amount of background (skybox) to display, overriding the haze effect for the background
float hazeBackgroundBlend{ INITIAL_HAZE_BACKGROUND_BLEND }; float hazeBackgroundBlend{ INITIAL_HAZE_BACKGROUND_BLEND };

View file

@ -158,3 +158,9 @@ void Light::setAmbientMapNumMips(uint16_t numMips) {
_ambientSchemaBuffer.edit().mapNumMips = (float)numMips; _ambientSchemaBuffer.edit().mapNumMips = (float)numMips;
} }
void Light::setTransform(const glm::mat4& transform) {
if (_ambientSchemaBuffer.edit().transform != transform) {
_ambientSchemaBuffer.edit().transform = transform;
}
}

View file

@ -149,6 +149,8 @@ public:
void setAmbientMapNumMips(uint16_t numMips); void setAmbientMapNumMips(uint16_t numMips);
uint16_t getAmbientMapNumMips() const { return (uint16_t) _ambientSchemaBuffer->mapNumMips; } uint16_t getAmbientMapNumMips() const { return (uint16_t) _ambientSchemaBuffer->mapNumMips; }
void setTransform(const glm::mat4& transform);
// Light Schema // Light Schema
class LightSchema { class LightSchema {
public: public:
@ -162,7 +164,9 @@ public:
float mapNumMips { 0.0f }; float mapNumMips { 0.0f };
float spare1; float spare1;
float spare2; float spare2;
gpu::SphericalHarmonics ambientSphere; gpu::SphericalHarmonics ambientSphere;
glm::mat4 transform;
}; };
using LightSchemaBuffer = gpu::StructBuffer<LightSchema>; using LightSchemaBuffer = gpu::StructBuffer<LightSchema>;

View file

@ -34,7 +34,9 @@ vec3 getLightIrradiance(Light l) { return lightIrradiance_getIrradiance(l.irradi
// Light Ambient // Light Ambient
struct LightAmbient { struct LightAmbient {
vec4 _ambient; vec4 _ambient;
SphericalHarmonics _ambientSphere; SphericalHarmonics _ambientSphere;
mat4 transform;
}; };
SphericalHarmonics getLightAmbientSphere(LightAmbient l) { return l._ambientSphere; } SphericalHarmonics getLightAmbientSphere(LightAmbient l) { return l._ambientSphere; }

View file

@ -37,6 +37,12 @@ void Skybox::setCubemap(const gpu::TexturePointer& cubemap) {
} }
} }
void Skybox::setOrientation(const glm::quat& orientation) {
// The zone rotations need to be negated
_orientation = orientation;
_orientation.w = -_orientation.w;
}
void Skybox::updateSchemaBuffer() const { void Skybox::updateSchemaBuffer() const {
auto blend = 0.0f; auto blend = 0.0f;
if (getCubemap() && getCubemap()->isDefined()) { if (getCubemap() && getCubemap()->isDefined()) {
@ -115,6 +121,10 @@ void Skybox::render(gpu::Batch& batch, const ViewFrustum& viewFrustum, const Sky
Transform viewTransform; Transform viewTransform;
viewFrustum.evalViewTransform(viewTransform); viewFrustum.evalViewTransform(viewTransform);
// Orientate view transform to be relative to zone
viewTransform.setRotation(skybox.getOrientation() * viewTransform.getRotation());
batch.setProjectionTransform(projMat); batch.setProjectionTransform(projMat);
batch.setViewTransform(viewTransform); batch.setViewTransform(viewTransform);
batch.setModelTransform(Transform()); // only for Mac batch.setModelTransform(Transform()); // only for Mac

View file

@ -37,6 +37,9 @@ public:
void setCubemap(const gpu::TexturePointer& cubemap); void setCubemap(const gpu::TexturePointer& cubemap);
const gpu::TexturePointer& getCubemap() const { return _cubemap; } const gpu::TexturePointer& getCubemap() const { return _cubemap; }
void setOrientation(const glm::quat& orientation);
const glm::quat getOrientation() const { return _orientation; }
virtual bool empty() { return _empty; } virtual bool empty() { return _empty; }
virtual void clear(); virtual void clear();
@ -61,6 +64,8 @@ protected:
mutable gpu::BufferView _schemaBuffer; mutable gpu::BufferView _schemaBuffer;
gpu::TexturePointer _cubemap; gpu::TexturePointer _cubemap;
glm::quat _orientation;
bool _empty{ true }; bool _empty{ true };
}; };
typedef std::shared_ptr<Skybox> SkyboxPointer; typedef std::shared_ptr<Skybox> SkyboxPointer;

View file

@ -9,7 +9,7 @@
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
// //
#include <QApplication> #include <QGuiApplication>
#include <QClipboard> #include <QClipboard>
#include <QDebug> #include <QDebug>
#include <QJsonDocument> #include <QJsonDocument>
@ -764,7 +764,7 @@ void AddressManager::copyAddress() {
} }
// assume that the address is being copied because the user wants a shareable address // assume that the address is being copied because the user wants a shareable address
QApplication::clipboard()->setText(currentShareableAddress().toString()); QGuiApplication::clipboard()->setText(currentShareableAddress().toString());
} }
void AddressManager::copyPath() { void AddressManager::copyPath() {
@ -773,7 +773,7 @@ void AddressManager::copyPath() {
return; return;
} }
QApplication::clipboard()->setText(currentPath()); QGuiApplication::clipboard()->setText(currentPath());
} }
QString AddressManager::getDomainID() const { QString AddressManager::getDomainID() const {

View file

@ -38,7 +38,7 @@ PacketVersion versionForPacketType(PacketType packetType) {
case PacketType::AvatarData: case PacketType::AvatarData:
case PacketType::BulkAvatarData: case PacketType::BulkAvatarData:
case PacketType::KillAvatar: case PacketType::KillAvatar:
return static_cast<PacketVersion>(AvatarMixerPacketVersion::AvatarJointDefaultPoseFlags); return static_cast<PacketVersion>(AvatarMixerPacketVersion::FBXReaderNodeReparenting);
case PacketType::MessagesData: case PacketType::MessagesData:
return static_cast<PacketVersion>(MessageDataVersion::TextOrBinaryData); return static_cast<PacketVersion>(MessageDataVersion::TextOrBinaryData);
case PacketType::ICEServerHeartbeat: case PacketType::ICEServerHeartbeat:

View file

@ -128,15 +128,13 @@ bool ObjectActionTractor::prepareForTractorUpdate(btScalar deltaTimeStep) {
position /= linearTractorCount; position /= linearTractorCount;
if (_positionalTargetSet) { if (_positionalTargetSet) {
_lastPositionTarget = _positionalTarget; _lastPositionTarget = _positionalTarget;
} else { _positionalTarget = position;
_lastPositionTarget = position; if (deltaTimeStep > EPSILON) {
} // blend the new velocity with the old (low-pass filter)
_positionalTarget = position; glm::vec3 newVelocity = (1.0f / deltaTimeStep) * (_positionalTarget - _lastPositionTarget);
if (deltaTimeStep > EPSILON) { const float blend = 0.25f;
// blend the new velocity with the old (low-pass filter) _linearVelocityTarget = (1.0f - blend) * _linearVelocityTarget + blend * newVelocity;
glm::vec3 newVelocity = (1.0f / deltaTimeStep) * (position - _lastPositionTarget); }
const float blend = 0.25f;
_linearVelocityTarget = (1.0f - blend) * _linearVelocityTarget + blend * newVelocity;
} }
_positionalTargetSet = true; _positionalTargetSet = true;
_active = true; _active = true;

View file

@ -1,4 +1,4 @@
set(TARGET_NAME plugins) set(TARGET_NAME plugins)
setup_hifi_library(OpenGL) setup_hifi_library(Gui)
link_hifi_libraries(shared networking) link_hifi_libraries(shared networking)
include_hifi_library_headers(gpu) include_hifi_library_headers(gpu)

View file

@ -2,7 +2,7 @@ set(TARGET_NAME render-utils)
AUTOSCRIBE_SHADER_LIB(gpu graphics render) AUTOSCRIBE_SHADER_LIB(gpu graphics render)
# pull in the resources.qrc file # pull in the resources.qrc file
qt5_add_resources(QT_RESOURCES_FILE "${CMAKE_CURRENT_SOURCE_DIR}/res/fonts/fonts.qrc") qt5_add_resources(QT_RESOURCES_FILE "${CMAKE_CURRENT_SOURCE_DIR}/res/fonts/fonts.qrc")
setup_hifi_library(Widgets OpenGL Network Qml Quick Script) setup_hifi_library(Gui Network Qml Quick Script)
link_hifi_libraries(shared ktx gpu graphics model-networking render animation fbx image procedural) link_hifi_libraries(shared ktx gpu graphics model-networking render animation fbx image procedural)
include_hifi_library_headers(networking) include_hifi_library_headers(networking)
include_hifi_library_headers(octree) include_hifi_library_headers(octree)

View file

@ -26,7 +26,7 @@ struct HazeParams {
vec3 colorModulationFactor; vec3 colorModulationFactor;
int hazeMode; int hazeMode;
mat4 zoneTransform; mat4 transform;
float backgroundBlend; float backgroundBlend;
float hazeRangeFactor; float hazeRangeFactor;

View file

@ -5,9 +5,6 @@
// //
// Distributed under the Apache License, Version 2.0. // Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
<@func declareSkyboxMap()@> <@func declareSkyboxMap()@>
// declareSkyboxMap // declareSkyboxMap
@ -15,7 +12,6 @@ uniform samplerCube skyboxMap;
vec4 evalSkyboxLight(vec3 direction, float lod) { vec4 evalSkyboxLight(vec3 direction, float lod) {
// textureQueryLevels is not available until #430, so we require explicit lod // textureQueryLevels is not available until #430, so we require explicit lod
// float mipmapLevel = lod * textureQueryLevels(skyboxMap);
float filterLod = textureQueryLod(skyboxMap, direction).x; float filterLod = textureQueryLod(skyboxMap, direction).x;
// Keep texture filtering LOD as limit to prevent aliasing on specular reflection // Keep texture filtering LOD as limit to prevent aliasing on specular reflection
lod = max(lod, filterLod); lod = max(lod, filterLod);
@ -28,15 +24,13 @@ vec4 evalSkyboxLight(vec3 direction, float lod) {
vec3 fresnelSchlickAmbient(vec3 fresnelColor, float ndotd, float gloss) { vec3 fresnelSchlickAmbient(vec3 fresnelColor, float ndotd, float gloss) {
float f = pow(1.0 - ndotd, 5.0); float f = pow(1.0 - ndotd, 5.0);
return fresnelColor + (max(vec3(gloss), fresnelColor) - fresnelColor) * f; return fresnelColor + (max(vec3(gloss), fresnelColor) - fresnelColor) * f;
// return fresnelColor + (vec3(1.0) - fresnelColor) * f;
} }
<@if supportAmbientMap@> <@if supportAmbientMap@>
<$declareSkyboxMap()$> <$declareSkyboxMap()$>
<@endif@> <@endif@>
vec3 evalAmbientSpecularIrradiance(LightAmbient ambient, SurfaceData surface) { vec3 evalAmbientSpecularIrradiance(LightAmbient ambient, SurfaceData surface, vec3 lightDir) {
vec3 lightDir = -reflect(surface.eyeDir, surface.normal);
vec3 specularLight; vec3 specularLight;
<@if supportIfAmbientMapElseAmbientSphere@> <@if supportIfAmbientMapElseAmbientSphere@>
if (getLightHasAmbientMap(ambient)) if (getLightHasAmbientMap(ambient))
@ -80,14 +74,21 @@ void evalLightingAmbient(out vec3 diffuse, out vec3 specular, LightAmbient ambie
<@endif@> <@endif@>
) { ) {
// Fresnel // Rotate surface normal and eye direction
vec3 ambientSpaceSurfaceNormal = (ambient.transform * vec4(surface.normal, 0.0)).xyz;
vec3 ambientSpaceSurfaceEyeDir = (ambient.transform * vec4(surface.eyeDir, 0.0)).xyz;
<@if supportScattering@>
vec3 ambientSpaceLowNormalCurvature = (ambient.transform * lowNormalCurvature).xyz;
<@endif@>
vec3 ambientFresnel = fresnelSchlickAmbient(fresnelF0, surface.ndotv, 1.0-surface.roughness); vec3 ambientFresnel = fresnelSchlickAmbient(fresnelF0, surface.ndotv, 1.0-surface.roughness);
// Diffuse from ambient diffuse = (1.0 - metallic) * (vec3(1.0) - ambientFresnel) *
diffuse = (1.0 - metallic) * (vec3(1.0) - ambientFresnel) * sphericalHarmonics_evalSphericalLight(getLightAmbientSphere(ambient), surface.normal).xyz; sphericalHarmonics_evalSphericalLight(getLightAmbientSphere(ambient), ambientSpaceSurfaceNormal).xyz;
// Specular highlight from ambient // Specular highlight from ambient
specular = evalAmbientSpecularIrradiance(ambient, surface) * ambientFresnel; vec3 ambientSpaceLightDir = -reflect(ambientSpaceSurfaceEyeDir, ambientSpaceSurfaceNormal);
specular = evalAmbientSpecularIrradiance(ambient, surface, ambientSpaceLightDir) * ambientFresnel;
<@if supportScattering@> <@if supportScattering@>
if (scattering * isScatteringEnabled() > 0.0) { if (scattering * isScatteringEnabled() > 0.0) {
@ -98,7 +99,7 @@ void evalLightingAmbient(out vec3 diffuse, out vec3 specular, LightAmbient ambie
obscurance = min(obscurance, ambientOcclusion); obscurance = min(obscurance, ambientOcclusion);
// Diffuse from ambient // Diffuse from ambient
diffuse = sphericalHarmonics_evalSphericalLight(getLightAmbientSphere(ambient), lowNormalCurvature.xyz).xyz; diffuse = sphericalHarmonics_evalSphericalLight(getLightAmbientSphere(ambient), ambientSpaceLowNormalCurvature).xyz;
// Scattering ambient specular is the same as non scattering for now // Scattering ambient specular is the same as non scattering for now
// TODO: we should use the same specular answer as for direct lighting // TODO: we should use the same specular answer as for direct lighting

View file

@ -1,25 +1,18 @@
<@include gpu/Config.slh@> <@include gpu/Config.slh@>
<$VERSION_HEADER$> <$VERSION_HEADER$>
// Generated on <$_SCRIBE_DATE$> // Generated on <$_SCRIBE_DATE$>
//
// model_translucent_fade.frag // model_translucent_fade.frag
// fragment shader
//
// Created by Olivier Prat on 06/05/17. // Created by Olivier Prat on 06/05/17.
// Copyright 2017 High Fidelity, Inc. // Copyright 2017 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0. // Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE
//
<@include graphics/Material.slh@> <@include graphics/Material.slh@>
<@include DeferredGlobalLight.slh@> <@include DeferredGlobalLight.slh@>
<$declareEvalGlobalLightingAlphaBlendedWithHaze()$> <$declareEvalGlobalLightingAlphaBlendedWithHaze()$>
<@include LightLocal.slh@> <@include LightLocal.slh@>
<@include gpu/Transform.slh@> <@include gpu/Transform.slh@>
<$declareStandardCameraTransform()$> <$declareStandardCameraTransform()$>

View file

@ -1,4 +1,5 @@
set(TARGET_NAME script-engine) set(TARGET_NAME script-engine)
# FIXME Move undo scripting interface to application and remove Widgets
setup_hifi_library(Gui Network Script ScriptTools WebSockets Widgets) setup_hifi_library(Gui Network Script ScriptTools WebSockets Widgets)
target_zlib() target_zlib()

View file

@ -1,7 +1,7 @@
set(TARGET_NAME shared) set(TARGET_NAME shared)
# TODO: there isn't really a good reason to have Script linked here - let's get what is requiring it out (RegisteredMetaTypes.cpp) # TODO: there isn't really a good reason to have Script linked here - let's get what is requiring it out (RegisteredMetaTypes.cpp)
setup_hifi_library(Gui Network Script Widgets) setup_hifi_library(Gui Network Script)
if (WIN32) if (WIN32)
target_link_libraries(${TARGET_NAME} Wbemuuid.lib) target_link_libraries(${TARGET_NAME} Wbemuuid.lib)

View file

@ -9,7 +9,6 @@
#include "EyeTracker.h" #include "EyeTracker.h"
#include <QFuture> #include <QFuture>
#include <QMessageBox>
#include <QtConcurrent/QtConcurrentRun> #include <QtConcurrent/QtConcurrentRun>
#include <SharedUtil.h> #include <SharedUtil.h>

View file

@ -1,4 +1,4 @@
set(TARGET_NAME ui-plugins) set(TARGET_NAME ui-plugins)
setup_hifi_library(OpenGL) setup_hifi_library(Gui)
link_hifi_libraries(shared plugins ui) link_hifi_libraries(shared plugins ui)
include_hifi_library_headers(gpu) include_hifi_library_headers(gpu)

View file

@ -1,5 +1,5 @@
set(TARGET_NAME ui) set(TARGET_NAME ui)
setup_hifi_library(OpenGL Multimedia Network Qml Quick Script WebChannel WebSockets XmlPatterns ${PLATFORM_QT_COMPONENTS}) setup_hifi_library(Widgets Multimedia Network Qml Quick Script WebChannel WebSockets XmlPatterns ${PLATFORM_QT_COMPONENTS})
link_hifi_libraries(shared networking gl audio audio-client plugins pointers) link_hifi_libraries(shared networking gl audio audio-client plugins pointers)
include_hifi_library_headers(controllers) include_hifi_library_headers(controllers)

View file

@ -9,12 +9,11 @@
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
// //
#include <qapplication.h> #include "HiFiCodec.h"
#include <AudioCodec.h> #include <AudioCodec.h>
#include <AudioConstants.h> #include <AudioConstants.h>
#include "HiFiCodec.h"
const char* HiFiCodec::NAME { "hifiAC" }; const char* HiFiCodec::NAME { "hifiAC" };

View file

@ -10,7 +10,7 @@ if (WIN32)
find_package(KINECT) find_package(KINECT)
if (KINECT_FOUND) if (KINECT_FOUND)
set(TARGET_NAME hifiKinect) set(TARGET_NAME hifiKinect)
setup_hifi_plugin(Script Qml Widgets) setup_hifi_plugin(Qml)
link_hifi_libraries(shared controllers ui plugins input-plugins display-plugins) link_hifi_libraries(shared controllers ui plugins input-plugins display-plugins)
# need to setup appropriate externals... # need to setup appropriate externals...

View file

@ -9,7 +9,7 @@
find_package(LEAPMOTION) find_package(LEAPMOTION)
if (LEAPMOTION_FOUND) if (LEAPMOTION_FOUND)
set(TARGET_NAME hifiLeapMotion) set(TARGET_NAME hifiLeapMotion)
setup_hifi_plugin(Script Qml Widgets) setup_hifi_plugin(Qml)
link_hifi_libraries(shared controllers ui plugins input-plugins) link_hifi_libraries(shared controllers ui plugins input-plugins)
target_leapmotion() target_leapmotion()
endif() endif()

View file

@ -9,7 +9,7 @@
if (APPLE OR WIN32) if (APPLE OR WIN32)
set(TARGET_NAME hifiNeuron) set(TARGET_NAME hifiNeuron)
setup_hifi_plugin(Script Qml Widgets) setup_hifi_plugin(Qml)
link_hifi_libraries(shared controllers ui plugins input-plugins) link_hifi_libraries(shared controllers ui plugins input-plugins)
target_neuron() target_neuron()

View file

@ -7,6 +7,6 @@
# #
set(TARGET_NAME hifiSdl2) set(TARGET_NAME hifiSdl2)
setup_hifi_plugin(Script Qml Widgets) setup_hifi_plugin(Qml)
link_hifi_libraries(shared controllers ui plugins input-plugins script-engine) link_hifi_libraries(shared controllers ui plugins input-plugins script-engine)
target_sdl2() target_sdl2()

View file

@ -9,14 +9,15 @@
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
// //
#include <qapplication.h> #include "SDL2Manager.h"
#include <QtCore/QCoreApplication>
#include <controllers/UserInputMapper.h> #include <controllers/UserInputMapper.h>
#include <PerfStat.h> #include <PerfStat.h>
#include <Preferences.h> #include <Preferences.h>
#include <SettingHandle.h> #include <SettingHandle.h>
#include "SDL2Manager.h"
static_assert( static_assert(
(int)controller::A == (int)SDL_CONTROLLER_BUTTON_A && (int)controller::A == (int)SDL_CONTROLLER_BUTTON_A &&

View file

@ -12,7 +12,7 @@
# the msvcr100 runtime support, the plugin will not load. # the msvcr100 runtime support, the plugin will not load.
if (NOT ANDROID) if (NOT ANDROID)
set(TARGET_NAME hifiSixense) set(TARGET_NAME hifiSixense)
setup_hifi_plugin(Script Qml Widgets) setup_hifi_plugin(Qml)
link_hifi_libraries(shared controllers ui plugins ui-plugins input-plugins) link_hifi_libraries(shared controllers ui plugins ui-plugins input-plugins)
target_sixense() target_sixense()
if (WIN32) if (WIN32)

View file

@ -10,7 +10,7 @@ if(WIN32)
set(TARGET_NAME hifiSpacemouse) set(TARGET_NAME hifiSpacemouse)
find_package(3DCONNEXIONCLIENT) find_package(3DCONNEXIONCLIENT)
if (3DCONNEXIONCLIENT_FOUND) if (3DCONNEXIONCLIENT_FOUND)
setup_hifi_plugin(Script Qml Widgets) setup_hifi_plugin(Qml)
link_hifi_libraries(shared networking controllers ui plugins input-plugins) link_hifi_libraries(shared networking controllers ui plugins input-plugins)
target_include_directories(${TARGET_NAME} PUBLIC ${3DCONNEXIONCLIENT_INCLUDE_DIRS}) target_include_directories(${TARGET_NAME} PUBLIC ${3DCONNEXIONCLIENT_INCLUDE_DIRS})
target_link_libraries(${TARGET_NAME} ${3DCONNEXIONCLIENT_LIBRARIES}) target_link_libraries(${TARGET_NAME} ${3DCONNEXIONCLIENT_LIBRARIES})

View file

@ -10,7 +10,7 @@ if (WIN32 AND (NOT USE_GLES))
# we're using static GLEW, so define GLEW_STATIC # we're using static GLEW, so define GLEW_STATIC
add_definitions(-DGLEW_STATIC) add_definitions(-DGLEW_STATIC)
set(TARGET_NAME openvr) set(TARGET_NAME openvr)
setup_hifi_plugin(OpenGL Script Qml Widgets Multimedia) setup_hifi_plugin(Gui Qml Multimedia)
link_hifi_libraries(shared gl networking controllers ui link_hifi_libraries(shared gl networking controllers ui
plugins display-plugins ui-plugins input-plugins script-engine plugins display-plugins ui-plugins input-plugins script-engine
audio-client render-utils graphics gpu render model-networking fbx ktx image procedural ${PLATFORM_GL_BACKEND}) audio-client render-utils graphics gpu render model-networking fbx ktx image procedural ${PLATFORM_GL_BACKEND})

View file

@ -9,7 +9,7 @@
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
// //
#include <qapplication.h> #include <QtCore/QCoreApplication>
#include <PerfStat.h> #include <PerfStat.h>

View file

@ -411,7 +411,7 @@ Script.include("/~/system/libraries/controllers.js");
var data = parseJSON(props.userData); var data = parseJSON(props.userData);
if (data !== undefined && data.seat !== undefined) { if (data !== undefined && data.seat !== undefined) {
var avatarUuid = Uuid.fromString(data.seat.user); var avatarUuid = Uuid.fromString(data.seat.user);
if (Uuid.isNull(avatarUuid) || !AvatarList.getAvatar(avatarUuid)) { if (Uuid.isNull(avatarUuid) || !AvatarList.getAvatar(avatarUuid).sessionUUID) {
return TARGET.SEAT; return TARGET.SEAT;
} else { } else {
return TARGET.INVALID; return TARGET.INVALID;

View file

@ -1,7 +1,7 @@
set(TARGET_NAME gpu-test) set(TARGET_NAME gpu-test)
AUTOSCRIBE_SHADER_LIB(gpu graphics render-utils) AUTOSCRIBE_SHADER_LIB(gpu graphics render-utils)
# This is not a testcase -- just set it up as a regular hifi project # This is not a testcase -- just set it up as a regular hifi project
setup_hifi_project(Quick Gui OpenGL Script Widgets) setup_hifi_project(Quick Gui Script)
setup_memory_debugger() setup_memory_debugger()
set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/")
link_hifi_libraries( link_hifi_libraries(

View file

@ -8,7 +8,7 @@ endif()
setup_memory_debugger() setup_memory_debugger()
# This is not a testcase -- just set it up as a regular hifi project # This is not a testcase -- just set it up as a regular hifi project
setup_hifi_project(Quick Gui OpenGL) setup_hifi_project(Quick Gui)
set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/")
# link in the shared libraries # link in the shared libraries

View file

@ -8,7 +8,7 @@ endif()
setup_memory_debugger() setup_memory_debugger()
# This is not a testcase -- just set it up as a regular hifi project # This is not a testcase -- just set it up as a regular hifi project
setup_hifi_project(Quick Gui OpenGL) setup_hifi_project(Quick Gui)
set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/")
# link in the shared libraries # link in the shared libraries

View file

@ -2,7 +2,7 @@
set(TARGET_NAME render-utils-test) set(TARGET_NAME render-utils-test)
# This is not a testcase -- just set it up as a regular hifi project # This is not a testcase -- just set it up as a regular hifi project
setup_hifi_project(Quick Gui OpenGL) setup_hifi_project(Quick Gui)
set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/")
setup_memory_debugger() setup_memory_debugger()

View file

@ -2,7 +2,7 @@
set(TARGET_NAME shaders-test) set(TARGET_NAME shaders-test)
# This is not a testcase -- just set it up as a regular hifi project # This is not a testcase -- just set it up as a regular hifi project
setup_hifi_project(Quick Gui OpenGL) setup_hifi_project(Quick Gui)
set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/")
setup_memory_debugger() setup_memory_debugger()

View file

@ -1,4 +1,4 @@
set(TARGET_NAME ac-client) set(TARGET_NAME ac-client)
setup_hifi_project(Core Widgets) setup_hifi_project(Core)
setup_memory_debugger() setup_memory_debugger()
link_hifi_libraries(shared networking) link_hifi_libraries(shared networking)

View file

@ -13,7 +13,7 @@
#ifndef hifi_ACClientApp_h #ifndef hifi_ACClientApp_h
#define hifi_ACClientApp_h #define hifi_ACClientApp_h
#include <QApplication> #include <QCoreApplication>
#include <udt/Constants.h> #include <udt/Constants.h>
#include <udt/Socket.h> #include <udt/Socket.h>
#include <ReceivedMessage.h> #include <ReceivedMessage.h>

View file

@ -1,4 +1,4 @@
set(TARGET_NAME atp-client) set(TARGET_NAME atp-client)
setup_hifi_project(Core Widgets) setup_hifi_project(Core)
setup_memory_debugger() setup_memory_debugger()
link_hifi_libraries(shared networking) link_hifi_libraries(shared networking)

View file

@ -13,7 +13,7 @@
#ifndef hifi_ATPClientApp_h #ifndef hifi_ATPClientApp_h
#define hifi_ATPClientApp_h #define hifi_ATPClientApp_h
#include <QApplication> #include <QCoreApplication>
#include <udt/Constants.h> #include <udt/Constants.h>
#include <udt/Socket.h> #include <udt/Socket.h>
#include <ReceivedMessage.h> #include <ReceivedMessage.h>

View file

@ -1,4 +1,4 @@
set(TARGET_NAME ice-client) set(TARGET_NAME ice-client)
setup_hifi_project(Core Widgets) setup_hifi_project(Core)
setup_memory_debugger() setup_memory_debugger()
link_hifi_libraries(shared networking) link_hifi_libraries(shared networking)

View file

@ -13,7 +13,7 @@
#ifndef hifi_ICEClientApp_h #ifndef hifi_ICEClientApp_h
#define hifi_ICEClientApp_h #define hifi_ICEClientApp_h
#include <QApplication> #include <QCoreApplication>
#include <udt/Constants.h> #include <udt/Constants.h>
#include <udt/Socket.h> #include <udt/Socket.h>
#include <ReceivedMessage.h> #include <ReceivedMessage.h>

View file

@ -1,5 +1,5 @@
set(TARGET_NAME skeleton-dump) set(TARGET_NAME skeleton-dump)
setup_hifi_project(Core Widgets) setup_hifi_project(Core)
setup_memory_debugger() setup_memory_debugger()
link_hifi_libraries(shared fbx graphics gpu gl animation) link_hifi_libraries(shared fbx graphics gpu gl animation)

View file

@ -12,7 +12,7 @@
#ifndef hifi_SkeletonDumpApp_h #ifndef hifi_SkeletonDumpApp_h
#define hifi_SkeletonDumpApp_h #define hifi_SkeletonDumpApp_h
#include <QApplication> #include <QCoreApplication>
class SkeletonDumpApp : public QCoreApplication { class SkeletonDumpApp : public QCoreApplication {
Q_OBJECT Q_OBJECT

View file

@ -1,5 +1,5 @@
set(TARGET_NAME vhacd-util) set(TARGET_NAME vhacd-util)
setup_hifi_project(Core Widgets) setup_hifi_project(Core)
link_hifi_libraries(shared fbx graphics gpu gl) link_hifi_libraries(shared fbx graphics gpu gl)
add_dependency_external_projects(vhacd) add_dependency_external_projects(vhacd)

View file

@ -13,7 +13,7 @@
#ifndef hifi_VHACDUtilApp_h #ifndef hifi_VHACDUtilApp_h
#define hifi_VHACDUtilApp_h #define hifi_VHACDUtilApp_h
#include <QApplication> #include <QCoreApplication>
#include <FBXReader.h> #include <FBXReader.h>