mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-04 06:24:41 +02:00
Merge branch 'master' of https://github.com/highfidelity/hifi
This commit is contained in:
commit
67e42148ef
51 changed files with 525 additions and 296 deletions
|
@ -139,6 +139,7 @@ option(BUILD_MANUAL_TESTS "Build manual tests" ${BUILD_MANUAL_TESTS_OPTION})
|
||||||
option(BUILD_TOOLS "Build tools" ${BUILD_TOOLS_OPTION})
|
option(BUILD_TOOLS "Build tools" ${BUILD_TOOLS_OPTION})
|
||||||
option(BUILD_INSTALLER "Build installer" ${BUILD_INSTALLER_OPTION})
|
option(BUILD_INSTALLER "Build installer" ${BUILD_INSTALLER_OPTION})
|
||||||
option(USE_GLES "Use OpenGL ES" ${GLES_OPTION})
|
option(USE_GLES "Use OpenGL ES" ${GLES_OPTION})
|
||||||
|
option(USE_KHR_ROBUSTNESS "Use KHR_robustness" OFF)
|
||||||
option(DISABLE_QML "Disable QML" ${DISABLE_QML_OPTION})
|
option(DISABLE_QML "Disable QML" ${DISABLE_QML_OPTION})
|
||||||
option(DISABLE_KTX_CACHE "Disable KTX Cache" OFF)
|
option(DISABLE_KTX_CACHE "Disable KTX Cache" OFF)
|
||||||
option(
|
option(
|
||||||
|
@ -149,6 +150,10 @@ option(
|
||||||
|
|
||||||
set(PLATFORM_QT_GL OpenGL)
|
set(PLATFORM_QT_GL OpenGL)
|
||||||
|
|
||||||
|
if (USE_KHR_ROBUSTNESS)
|
||||||
|
add_definitions(-DUSE_KHR_ROBUSTNESS)
|
||||||
|
endif()
|
||||||
|
|
||||||
if (USE_GLES)
|
if (USE_GLES)
|
||||||
add_definitions(-DUSE_GLES)
|
add_definitions(-DUSE_GLES)
|
||||||
add_definitions(-DGPU_POINTER_STORAGE_SHARED)
|
add_definitions(-DGPU_POINTER_STORAGE_SHARED)
|
||||||
|
|
|
@ -53,6 +53,9 @@ Item {
|
||||||
StatText {
|
StatText {
|
||||||
text: root.recenterText
|
text: root.recenterText
|
||||||
}
|
}
|
||||||
|
StatText {
|
||||||
|
text: root.overrideJointText
|
||||||
|
}
|
||||||
StatText {
|
StatText {
|
||||||
text: "Anim Vars:--------------------------------------------------------------------------------"
|
text: "Anim Vars:--------------------------------------------------------------------------------"
|
||||||
}
|
}
|
||||||
|
@ -98,6 +101,9 @@ Item {
|
||||||
StatText {
|
StatText {
|
||||||
text: root.sittingText
|
text: root.sittingText
|
||||||
}
|
}
|
||||||
|
StatText {
|
||||||
|
text: root.flowText
|
||||||
|
}
|
||||||
StatText {
|
StatText {
|
||||||
text: "State Machines:---------------------------------------------------------------------------"
|
text: "State Machines:---------------------------------------------------------------------------"
|
||||||
}
|
}
|
||||||
|
@ -131,6 +137,9 @@ Item {
|
||||||
StatText {
|
StatText {
|
||||||
text: root.walkingText
|
text: root.walkingText
|
||||||
}
|
}
|
||||||
|
StatText {
|
||||||
|
text: root.networkGraphText
|
||||||
|
}
|
||||||
StatText {
|
StatText {
|
||||||
text: "Alpha Values:--------------------------------------------------------------------------"
|
text: "Alpha Values:--------------------------------------------------------------------------"
|
||||||
}
|
}
|
||||||
|
|
|
@ -2934,8 +2934,10 @@ void Application::initializeGL() {
|
||||||
|
|
||||||
#if !defined(DISABLE_QML)
|
#if !defined(DISABLE_QML)
|
||||||
QStringList chromiumFlags;
|
QStringList chromiumFlags;
|
||||||
|
// HACK: re-expose mic and camera to prevent crash on domain-change in chromium's media::FakeAudioInputStream::ReadAudioFromSource()
|
||||||
// Bug 21993: disable microphone and camera input
|
// Bug 21993: disable microphone and camera input
|
||||||
chromiumFlags << "--use-fake-device-for-media-stream";
|
//chromiumFlags << "--use-fake-device-for-media-stream";
|
||||||
|
|
||||||
// Disable signed distance field font rendering on ATI/AMD GPUs, due to
|
// Disable signed distance field font rendering on ATI/AMD GPUs, due to
|
||||||
// https://highfidelity.manuscript.com/f/cases/13677/Text-showing-up-white-on-Marketplace-app
|
// https://highfidelity.manuscript.com/f/cases/13677/Text-showing-up-white-on-Marketplace-app
|
||||||
std::string vendor{ (const char*)glGetString(GL_VENDOR) };
|
std::string vendor{ (const char*)glGetString(GL_VENDOR) };
|
||||||
|
|
|
@ -6100,6 +6100,30 @@ QVariantList MyAvatar::getCollidingFlowJoints() {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int MyAvatar::getOverrideJointCount() const {
|
||||||
|
if (_skeletonModel) {
|
||||||
|
return _skeletonModel->getRig().getOverrideJointCount();
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MyAvatar::getFlowActive() const {
|
||||||
|
if (_skeletonModel) {
|
||||||
|
return _skeletonModel->getRig().getFlowActive();
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MyAvatar::getNetworkGraphActive() const {
|
||||||
|
if (_skeletonModel) {
|
||||||
|
return _skeletonModel->getRig().getNetworkGraphActive();
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MyAvatar::initFlowFromFST() {
|
void MyAvatar::initFlowFromFST() {
|
||||||
if (_skeletonModel->isLoaded()) {
|
if (_skeletonModel->isLoaded()) {
|
||||||
auto &flowData = _skeletonModel->getHFMModel().flowData;
|
auto &flowData = _skeletonModel->getHFMModel().flowData;
|
||||||
|
|
|
@ -1835,6 +1835,10 @@ public:
|
||||||
*/
|
*/
|
||||||
Q_INVOKABLE QVariantList getCollidingFlowJoints();
|
Q_INVOKABLE QVariantList getCollidingFlowJoints();
|
||||||
|
|
||||||
|
int getOverrideJointCount() const;
|
||||||
|
bool getFlowActive() const;
|
||||||
|
bool getNetworkGraphActive() const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
/**jsdoc
|
/**jsdoc
|
||||||
|
|
|
@ -192,7 +192,7 @@ QString PlatformInfoScriptingInterface::getDisplay(int index) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QString PlatformInfoScriptingInterface::getMemory() {
|
QString PlatformInfoScriptingInterface::getMemory() {
|
||||||
auto desc = platform::getMemory(0);
|
auto desc = platform::getMemory();
|
||||||
return QString(desc.dump().c_str());
|
return QString(desc.dump().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,6 +201,10 @@ QString PlatformInfoScriptingInterface::getComputer() {
|
||||||
return QString(desc.dump().c_str());
|
return QString(desc.dump().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString PlatformInfoScriptingInterface::getPlatform() {
|
||||||
|
auto desc = platform::getAll();
|
||||||
|
return QString(desc.dump().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
PlatformInfoScriptingInterface::PlatformTier PlatformInfoScriptingInterface::getTierProfiled() {
|
PlatformInfoScriptingInterface::PlatformTier PlatformInfoScriptingInterface::getTierProfiled() {
|
||||||
return (PlatformInfoScriptingInterface::PlatformTier) platform::Profiler::profilePlatform();
|
return (PlatformInfoScriptingInterface::PlatformTier) platform::Profiler::profilePlatform();
|
||||||
|
|
|
@ -51,6 +51,8 @@ public slots:
|
||||||
* Gets the operating system type.
|
* Gets the operating system type.
|
||||||
* @function PlatformInfo.getOperatingSystemType
|
* @function PlatformInfo.getOperatingSystemType
|
||||||
* @returns {string} <code>"WINDOWS"</code>, <code>"MACOS"</code>, or <code>"UNKNOWN"</code>.
|
* @returns {string} <code>"WINDOWS"</code>, <code>"MACOS"</code>, or <code>"UNKNOWN"</code>.
|
||||||
|
* @deprecated This function is deprecated and will be removed.
|
||||||
|
* use getComputer()["OS"] instead
|
||||||
*/
|
*/
|
||||||
QString getOperatingSystemType();
|
QString getOperatingSystemType();
|
||||||
|
|
||||||
|
@ -61,6 +63,10 @@ public slots:
|
||||||
* @example <caption>Report the CPU being used.</caption>
|
* @example <caption>Report the CPU being used.</caption>
|
||||||
* print("CPU: " + PlatformInfo.getCPUBrand());
|
* print("CPU: " + PlatformInfo.getCPUBrand());
|
||||||
* // Example: Intel(R) Core(TM) i7-7820HK CPU @ 2.90GHz
|
* // Example: Intel(R) Core(TM) i7-7820HK CPU @ 2.90GHz
|
||||||
|
* @deprecated This function is deprecated and will be removed.
|
||||||
|
* use getNumCPUs() to know the number of CPUs in the hardware, at least one is expected
|
||||||
|
* use getCPU(0)["vendor"] to get the brand of the vendor
|
||||||
|
* use getCPU(0)["model"] to get the model name of the cpu
|
||||||
*/
|
*/
|
||||||
QString getCPUBrand();
|
QString getCPUBrand();
|
||||||
|
|
||||||
|
@ -68,6 +74,8 @@ public slots:
|
||||||
* Gets the number of logical CPU cores.
|
* Gets the number of logical CPU cores.
|
||||||
* @function PlatformInfo.getNumLogicalCores
|
* @function PlatformInfo.getNumLogicalCores
|
||||||
* @returns {number} The number of logical CPU cores.
|
* @returns {number} The number of logical CPU cores.
|
||||||
|
* @deprecated This function is deprecated and will be removed.
|
||||||
|
* use getCPU(0)["numCores"] instead
|
||||||
*/
|
*/
|
||||||
unsigned int getNumLogicalCores();
|
unsigned int getNumLogicalCores();
|
||||||
|
|
||||||
|
@ -75,6 +83,8 @@ public slots:
|
||||||
* Returns the total system memory in megabytes.
|
* Returns the total system memory in megabytes.
|
||||||
* @function PlatformInfo.getTotalSystemMemoryMB
|
* @function PlatformInfo.getTotalSystemMemoryMB
|
||||||
* @returns {number} The total system memory in megabytes.
|
* @returns {number} The total system memory in megabytes.
|
||||||
|
* @deprecated This function is deprecated and will be removed.
|
||||||
|
* use getMemory()["memTotal"] instead
|
||||||
*/
|
*/
|
||||||
int getTotalSystemMemoryMB();
|
int getTotalSystemMemoryMB();
|
||||||
|
|
||||||
|
@ -82,6 +92,10 @@ public slots:
|
||||||
* Gets the graphics card type.
|
* Gets the graphics card type.
|
||||||
* @function PlatformInfo.getGraphicsCardType
|
* @function PlatformInfo.getGraphicsCardType
|
||||||
* @returns {string} The graphics card type.
|
* @returns {string} The graphics card type.
|
||||||
|
* @deprecated This function is deprecated and will be removed.
|
||||||
|
* use getNumGPUs() to know the number of GPUs in the hardware, at least one is expected
|
||||||
|
* use getGPU(0)["vendor"] to get the brand of the vendor
|
||||||
|
* use getGPU(0)["model"] to get the model name of the gpu
|
||||||
*/
|
*/
|
||||||
QString getGraphicsCardType();
|
QString getGraphicsCardType();
|
||||||
|
|
||||||
|
@ -141,7 +155,7 @@ public slots:
|
||||||
/**jsdoc
|
/**jsdoc
|
||||||
* Get the description of the GPU at the index parameter
|
* Get the description of the GPU at the index parameter
|
||||||
* expected fields are:
|
* expected fields are:
|
||||||
* - gpuVendor...
|
* - vendor, model...
|
||||||
* @param index The index of the GPU of the platform
|
* @param index The index of the GPU of the platform
|
||||||
* @function PlatformInfo.getGPU
|
* @function PlatformInfo.getGPU
|
||||||
* @returns {string} The GPU description json field
|
* @returns {string} The GPU description json field
|
||||||
|
@ -183,6 +197,14 @@ public slots:
|
||||||
*/
|
*/
|
||||||
QString getComputer();
|
QString getComputer();
|
||||||
|
|
||||||
|
/**jsdoc
|
||||||
|
* Get the complete description of the Platform as an aggregated Json
|
||||||
|
* The expected object description is:
|
||||||
|
* { "computer": {...}, "memory": {...}, "cpus": [{...}, ...], "gpus": [{...}, ...], "displays": [{...}, ...] }
|
||||||
|
* @function PlatformInfo.getPlatform
|
||||||
|
* @returns {string} The Platform description json field
|
||||||
|
*/
|
||||||
|
QString getPlatform();
|
||||||
|
|
||||||
/**jsdoc
|
/**jsdoc
|
||||||
* Get the Platform TIer profiled on startup of the Computer
|
* Get the Platform TIer profiled on startup of the Computer
|
||||||
|
|
|
@ -94,6 +94,21 @@ void AnimStats::updateStats(bool force) {
|
||||||
}
|
}
|
||||||
emit walkingTextChanged();
|
emit walkingTextChanged();
|
||||||
|
|
||||||
|
// print current overrideJointText
|
||||||
|
int overrideJointCount = myAvatar->getOverrideJointCount();
|
||||||
|
_overrideJointText = QString("Override Joint Count: %1").arg(overrideJointCount);
|
||||||
|
emit overrideJointTextChanged();
|
||||||
|
|
||||||
|
// print current flowText
|
||||||
|
bool flowActive = myAvatar->getFlowActive();
|
||||||
|
_flowText = QString("Flow: %1").arg(flowActive ? "enabled" : "disabled");
|
||||||
|
emit flowTextChanged();
|
||||||
|
|
||||||
|
// print current networkGraphText
|
||||||
|
bool networkGraphActive = myAvatar->getNetworkGraphActive();
|
||||||
|
_networkGraphText = QString("Network Graph: %1").arg(networkGraphActive ? "enabled" : "disabled");
|
||||||
|
emit networkGraphTextChanged();
|
||||||
|
|
||||||
// update animation debug alpha values
|
// update animation debug alpha values
|
||||||
QStringList newAnimAlphaValues;
|
QStringList newAnimAlphaValues;
|
||||||
qint64 now = usecTimestampNow();
|
qint64 now = usecTimestampNow();
|
||||||
|
|
|
@ -25,6 +25,9 @@ class AnimStats : public QQuickItem {
|
||||||
Q_PROPERTY(QString recenterText READ recenterText NOTIFY recenterTextChanged)
|
Q_PROPERTY(QString recenterText READ recenterText NOTIFY recenterTextChanged)
|
||||||
Q_PROPERTY(QString sittingText READ sittingText NOTIFY sittingTextChanged)
|
Q_PROPERTY(QString sittingText READ sittingText NOTIFY sittingTextChanged)
|
||||||
Q_PROPERTY(QString walkingText READ walkingText NOTIFY walkingTextChanged)
|
Q_PROPERTY(QString walkingText READ walkingText NOTIFY walkingTextChanged)
|
||||||
|
Q_PROPERTY(QString overrideJointText READ overrideJointText NOTIFY overrideJointTextChanged)
|
||||||
|
Q_PROPERTY(QString flowText READ flowText NOTIFY flowTextChanged)
|
||||||
|
Q_PROPERTY(QString networkGraphText READ networkGraphText NOTIFY networkGraphTextChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static AnimStats* getInstance();
|
static AnimStats* getInstance();
|
||||||
|
@ -43,6 +46,9 @@ public:
|
||||||
QString recenterText() const { return _recenterText; }
|
QString recenterText() const { return _recenterText; }
|
||||||
QString sittingText() const { return _sittingText; }
|
QString sittingText() const { return _sittingText; }
|
||||||
QString walkingText() const { return _walkingText; }
|
QString walkingText() const { return _walkingText; }
|
||||||
|
QString overrideJointText() const { return _overrideJointText; }
|
||||||
|
QString flowText() const { return _flowText; }
|
||||||
|
QString networkGraphText() const { return _networkGraphText; }
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void forceUpdateStats() { updateStats(true); }
|
void forceUpdateStats() { updateStats(true); }
|
||||||
|
@ -58,6 +64,9 @@ signals:
|
||||||
void recenterTextChanged();
|
void recenterTextChanged();
|
||||||
void sittingTextChanged();
|
void sittingTextChanged();
|
||||||
void walkingTextChanged();
|
void walkingTextChanged();
|
||||||
|
void overrideJointTextChanged();
|
||||||
|
void flowTextChanged();
|
||||||
|
void networkGraphTextChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QStringList _animAlphaValues;
|
QStringList _animAlphaValues;
|
||||||
|
@ -76,6 +85,9 @@ private:
|
||||||
QString _recenterText;
|
QString _recenterText;
|
||||||
QString _sittingText;
|
QString _sittingText;
|
||||||
QString _walkingText;
|
QString _walkingText;
|
||||||
|
QString _overrideJointText;
|
||||||
|
QString _flowText;
|
||||||
|
QString _networkGraphText;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_AnimStats_h
|
#endif // hifi_AnimStats_h
|
||||||
|
|
|
@ -14,13 +14,23 @@
|
||||||
NSURLSession* session = [NSURLSession sharedSession];
|
NSURLSession* session = [NSURLSession sharedSession];
|
||||||
NSURLSessionDataTask* dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
NSURLSessionDataTask* dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
||||||
|
|
||||||
|
|
||||||
|
NSLog(@"Latest Build Request error: %@", error);
|
||||||
|
NSLog(@"Latest Build Request Data: %@", data);
|
||||||
|
NSHTTPURLResponse *ne = (NSHTTPURLResponse *)response;
|
||||||
|
NSLog(@"Latest Build Request Response: %ld", [ne statusCode]);
|
||||||
Launcher* sharedLauncher = [Launcher sharedLauncher];
|
Launcher* sharedLauncher = [Launcher sharedLauncher];
|
||||||
NSLog(@"credentials request finished");
|
|
||||||
NSMutableData* webData = [NSMutableData data];
|
NSMutableData* webData = [NSMutableData data];
|
||||||
[webData appendData:data];
|
[webData appendData:data];
|
||||||
NSString* jsonString = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[data length] encoding:NSUTF8StringEncoding];
|
NSString* jsonString = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[data length] encoding:NSUTF8StringEncoding];
|
||||||
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
|
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
|
||||||
id json = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
|
NSLog(@"Latest Build Request -> json string: %@", jsonString);
|
||||||
|
NSError *jsonError = nil;
|
||||||
|
id json = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&jsonError];
|
||||||
|
|
||||||
|
if (jsonError) {
|
||||||
|
NSLog(@"Latest Build request: Failed to convert Json to data");
|
||||||
|
}
|
||||||
|
|
||||||
NSFileManager* fileManager = [NSFileManager defaultManager];
|
NSFileManager* fileManager = [NSFileManager defaultManager];
|
||||||
NSArray *values = [json valueForKey:@"results"];
|
NSArray *values = [json valueForKey:@"results"];
|
||||||
|
@ -37,10 +47,15 @@
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
Settings* settings = [Settings sharedSettings];
|
Settings* settings = [Settings sharedSettings];
|
||||||
NSInteger currentVersion = [settings latestBuildVersion];
|
NSInteger currentVersion = [settings latestBuildVersion];
|
||||||
|
NSLog(@"Latest Build Request -> does build directory exist: %@", appDirectoryExist ? @"TRUE" : @"FALSE");
|
||||||
|
NSLog(@"Latest Build Request -> current version: %ld", currentVersion);
|
||||||
|
NSLog(@"Latest Build Request -> latest version: %ld", buildNumber.integerValue);
|
||||||
|
NSLog(@"Latest Build Request -> mac url: %@", macInstallerUrl);
|
||||||
BOOL latestVersionAvailable = (currentVersion != buildNumber.integerValue);
|
BOOL latestVersionAvailable = (currentVersion != buildNumber.integerValue);
|
||||||
[[Settings sharedSettings] buildVersion:buildNumber.integerValue];
|
[[Settings sharedSettings] buildVersion:buildNumber.integerValue];
|
||||||
|
|
||||||
BOOL shouldDownloadInterface = (latestVersionAvailable || !appDirectoryExist);
|
BOOL shouldDownloadInterface = (latestVersionAvailable || !appDirectoryExist);
|
||||||
|
NSLog(@"Latest Build Request -> SHOULD DOWNLOAD: %@", shouldDownloadInterface ? @"TRUE" : @"FALSE");
|
||||||
[sharedLauncher shouldDownloadLatestBuild:shouldDownloadInterface :macInstallerUrl];
|
[sharedLauncher shouldDownloadLatestBuild:shouldDownloadInterface :macInstallerUrl];
|
||||||
});
|
});
|
||||||
}];
|
}];
|
||||||
|
|
|
@ -213,6 +213,9 @@ BOOL CLauncherDlg::getHQInfo(const CString& orgname) {
|
||||||
CString lowerOrgName = orgname;
|
CString lowerOrgName = orgname;
|
||||||
lowerOrgName.MakeLower();
|
lowerOrgName.MakeLower();
|
||||||
LauncherUtils::hMac256(lowerOrgName, LAUNCHER_HMAC_SECRET, hash);
|
LauncherUtils::hMac256(lowerOrgName, LAUNCHER_HMAC_SECRET, hash);
|
||||||
|
CString msg;
|
||||||
|
msg.Format(_T("Calculated hash: \"%s\" => \"%s\""), lowerOrgName, hash);
|
||||||
|
theApp._manager.addToLog(msg);
|
||||||
return theApp._manager.readOrganizationJSON(hash) == LauncherUtils::ResponseError::NoError;
|
return theApp._manager.readOrganizationJSON(hash) == LauncherUtils::ResponseError::NoError;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -427,6 +427,11 @@ BOOL LauncherManager::extractApplication() {
|
||||||
LauncherUtils::cStringToStd(installPath), [&](int type, int size) {
|
LauncherUtils::cStringToStd(installPath), [&](int type, int size) {
|
||||||
onZipExtracted((ZipType)type, size);
|
onZipExtracted((ZipType)type, size);
|
||||||
});
|
});
|
||||||
|
if (success) {
|
||||||
|
addToLog(_T("Created thread for unzipping application."));
|
||||||
|
} else {
|
||||||
|
addToLog(_T("Failed to create thread for unzipping application."));
|
||||||
|
}
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -449,6 +454,11 @@ BOOL LauncherManager::installContent() {
|
||||||
LauncherUtils::cStringToStd(contentPath), [&](int type, int size) {
|
LauncherUtils::cStringToStd(contentPath), [&](int type, int size) {
|
||||||
onZipExtracted((ZipType)type, size);
|
onZipExtracted((ZipType)type, size);
|
||||||
});
|
});
|
||||||
|
if (success) {
|
||||||
|
addToLog(_T("Created thread for unzipping content."));
|
||||||
|
} else {
|
||||||
|
addToLog(_T("Failed to create thread for unzipping content."));
|
||||||
|
}
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
#pragma comment(lib, "winhttp")
|
#pragma comment(lib, "winhttp")
|
||||||
|
|
||||||
|
#include "LauncherApp.h"
|
||||||
#include "LauncherUtils.h"
|
#include "LauncherUtils.h"
|
||||||
|
|
||||||
CString LauncherUtils::urlEncodeString(const CString& url) {
|
CString LauncherUtils::urlEncodeString(const CString& url) {
|
||||||
|
@ -230,14 +231,24 @@ uint64_t LauncherUtils::extractZip(const std::string& zipFile, const std::string
|
||||||
|
|
||||||
auto status = mz_zip_reader_init_file(&zip_archive, zipFile.c_str(), 0);
|
auto status = mz_zip_reader_init_file(&zip_archive, zipFile.c_str(), 0);
|
||||||
|
|
||||||
|
{
|
||||||
|
CString msg;
|
||||||
|
msg.Format(_T("Reading zip file %s, extracting to %s"), CString(zipFile.c_str()), CString(path.c_str()));
|
||||||
|
theApp._manager.addToLog(msg);
|
||||||
|
}
|
||||||
|
|
||||||
if (!status) return 0;
|
if (!status) return 0;
|
||||||
int fileCount = (int)mz_zip_reader_get_num_files(&zip_archive);
|
int fileCount = (int)mz_zip_reader_get_num_files(&zip_archive);
|
||||||
if (fileCount == 0) {
|
if (fileCount == 0) {
|
||||||
|
theApp._manager.addToLog(_T("Zip archive has a file count of 0"));
|
||||||
|
|
||||||
mz_zip_reader_end(&zip_archive);
|
mz_zip_reader_end(&zip_archive);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
mz_zip_archive_file_stat file_stat;
|
mz_zip_archive_file_stat file_stat;
|
||||||
if (!mz_zip_reader_file_stat(&zip_archive, 0, &file_stat)) {
|
if (!mz_zip_reader_file_stat(&zip_archive, 0, &file_stat)) {
|
||||||
|
theApp._manager.addToLog(_T("Zip archive cannot be stat'd"));
|
||||||
|
|
||||||
mz_zip_reader_end(&zip_archive);
|
mz_zip_reader_end(&zip_archive);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -263,6 +274,12 @@ uint64_t LauncherUtils::extractZip(const std::string& zipFile, const std::string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
CString msg;
|
||||||
|
msg.Format(_T("Done unzipping archive, total size: %llu"), totalSize);
|
||||||
|
theApp._manager.addToLog(msg);
|
||||||
|
}
|
||||||
|
|
||||||
// Close the archive, freeing any resources it was using
|
// Close the archive, freeing any resources it was using
|
||||||
mz_zip_reader_end(&zip_archive);
|
mz_zip_reader_end(&zip_archive);
|
||||||
return totalSize;
|
return totalSize;
|
||||||
|
|
|
@ -2025,6 +2025,9 @@ void Rig::updateFromControllerParameters(const ControllerParameters& params, flo
|
||||||
if (params.isTalking) {
|
if (params.isTalking) {
|
||||||
if (_talkIdleInterpTime < 1.0f) {
|
if (_talkIdleInterpTime < 1.0f) {
|
||||||
_talkIdleInterpTime += dt / TOTAL_EASE_IN_TIME;
|
_talkIdleInterpTime += dt / TOTAL_EASE_IN_TIME;
|
||||||
|
if (_talkIdleInterpTime > 1.0f) {
|
||||||
|
_talkIdleInterpTime = 1.0f;
|
||||||
|
}
|
||||||
float easeOutInValue = _talkIdleInterpTime < 0.5f ? 4.0f * powf(_talkIdleInterpTime, 3.0f) : 4.0f * powf((_talkIdleInterpTime - 1.0f), 3.0f) + 1.0f;
|
float easeOutInValue = _talkIdleInterpTime < 0.5f ? 4.0f * powf(_talkIdleInterpTime, 3.0f) : 4.0f * powf((_talkIdleInterpTime - 1.0f), 3.0f) + 1.0f;
|
||||||
_animVars.set("idleOverlayAlpha", easeOutInValue);
|
_animVars.set("idleOverlayAlpha", easeOutInValue);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2033,6 +2036,9 @@ void Rig::updateFromControllerParameters(const ControllerParameters& params, flo
|
||||||
} else {
|
} else {
|
||||||
if (_talkIdleInterpTime < 1.0f) {
|
if (_talkIdleInterpTime < 1.0f) {
|
||||||
_talkIdleInterpTime += dt / TOTAL_EASE_OUT_TIME;
|
_talkIdleInterpTime += dt / TOTAL_EASE_OUT_TIME;
|
||||||
|
if (_talkIdleInterpTime > 1.0f) {
|
||||||
|
_talkIdleInterpTime = 1.0f;
|
||||||
|
}
|
||||||
float easeOutInValue = _talkIdleInterpTime < 0.5f ? 4.0f * powf(_talkIdleInterpTime, 3.0f) : 4.0f * powf((_talkIdleInterpTime - 1.0f), 3.0f) + 1.0f;
|
float easeOutInValue = _talkIdleInterpTime < 0.5f ? 4.0f * powf(_talkIdleInterpTime, 3.0f) : 4.0f * powf((_talkIdleInterpTime - 1.0f), 3.0f) + 1.0f;
|
||||||
float talkAlpha = 1.0f - easeOutInValue;
|
float talkAlpha = 1.0f - easeOutInValue;
|
||||||
_animVars.set("idleOverlayAlpha", talkAlpha);
|
_animVars.set("idleOverlayAlpha", talkAlpha);
|
||||||
|
@ -2287,6 +2293,24 @@ void Rig::buildAbsoluteRigPoses(const AnimPoseVec& relativePoses, AnimPoseVec& a
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Rig::getOverrideJointCount() const {
|
||||||
|
int count = 0;
|
||||||
|
for (size_t i = 0; i < _internalPoseSet._overrideFlags.size(); i++) {
|
||||||
|
if (_internalPoseSet._overrideFlags[i]) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Rig::getFlowActive() const {
|
||||||
|
return _internalFlow.getActive();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Rig::getNetworkGraphActive() const {
|
||||||
|
return _sendNetworkNode;
|
||||||
|
}
|
||||||
|
|
||||||
glm::mat4 Rig::getJointTransform(int jointIndex) const {
|
glm::mat4 Rig::getJointTransform(int jointIndex) const {
|
||||||
static const glm::mat4 IDENTITY;
|
static const glm::mat4 IDENTITY;
|
||||||
if (isIndexValid(jointIndex)) {
|
if (isIndexValid(jointIndex)) {
|
||||||
|
|
|
@ -246,6 +246,10 @@ public:
|
||||||
float getUnscaledEyeHeight() const;
|
float getUnscaledEyeHeight() const;
|
||||||
void buildAbsoluteRigPoses(const AnimPoseVec& relativePoses, AnimPoseVec& absolutePosesOut) const;
|
void buildAbsoluteRigPoses(const AnimPoseVec& relativePoses, AnimPoseVec& absolutePosesOut) const;
|
||||||
|
|
||||||
|
int getOverrideJointCount() const;
|
||||||
|
bool getFlowActive() const;
|
||||||
|
bool getNetworkGraphActive() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void onLoadComplete();
|
void onLoadComplete();
|
||||||
|
|
||||||
|
|
|
@ -593,9 +593,10 @@ std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> OpenGL
|
||||||
hudEyeViewports[eye] = eyeViewport(eye);
|
hudEyeViewports[eye] = eyeViewport(eye);
|
||||||
});
|
});
|
||||||
return [=](gpu::Batch& batch, const gpu::TexturePointer& hudTexture, bool mirror) {
|
return [=](gpu::Batch& batch, const gpu::TexturePointer& hudTexture, bool mirror) {
|
||||||
if (hudPipeline && hudTexture) {
|
auto pipeline = mirror ? hudMirrorPipeline : hudPipeline;
|
||||||
|
if (pipeline && hudTexture) {
|
||||||
batch.enableStereo(false);
|
batch.enableStereo(false);
|
||||||
batch.setPipeline(mirror ? hudMirrorPipeline : hudPipeline);
|
batch.setPipeline(pipeline);
|
||||||
batch.setResourceTexture(0, hudTexture);
|
batch.setResourceTexture(0, hudTexture);
|
||||||
if (hudStereo) {
|
if (hudStereo) {
|
||||||
for_each_eye([&](Eye eye) {
|
for_each_eye([&](Eye eye) {
|
||||||
|
@ -661,17 +662,6 @@ void OpenGLDisplayPlugin::compositeLayers() {
|
||||||
compositeScene();
|
compositeScene();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HIFI_ENABLE_NSIGHT_DEBUG
|
|
||||||
if (false) // do not draw the HUD if running nsight debug
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
PROFILE_RANGE_EX(render_detail, "handleHUDBatch", 0xff0077ff, (uint64_t)presentCount())
|
|
||||||
auto hudOperator = getHUDOperator();
|
|
||||||
withPresentThreadLock([&] {
|
|
||||||
_hudOperator = hudOperator;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
PROFILE_RANGE_EX(render_detail, "compositeExtra", 0xff0077ff, (uint64_t)presentCount())
|
PROFILE_RANGE_EX(render_detail, "compositeExtra", 0xff0077ff, (uint64_t)presentCount())
|
||||||
compositeExtra();
|
compositeExtra();
|
||||||
|
|
|
@ -86,6 +86,8 @@ public:
|
||||||
|
|
||||||
void copyTextureToQuickFramebuffer(NetworkTexturePointer source, QOpenGLFramebufferObject* target, GLsync* fenceSync) override;
|
void copyTextureToQuickFramebuffer(NetworkTexturePointer source, QOpenGLFramebufferObject* target, GLsync* fenceSync) override;
|
||||||
|
|
||||||
|
virtual std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> getHUDOperator() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class PresentThread;
|
friend class PresentThread;
|
||||||
|
|
||||||
|
@ -102,7 +104,6 @@ protected:
|
||||||
virtual QThread::Priority getPresentPriority() { return QThread::HighPriority; }
|
virtual QThread::Priority getPresentPriority() { return QThread::HighPriority; }
|
||||||
virtual void compositeLayers();
|
virtual void compositeLayers();
|
||||||
virtual void compositeScene();
|
virtual void compositeScene();
|
||||||
virtual std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> getHUDOperator();
|
|
||||||
virtual void compositePointer();
|
virtual void compositePointer();
|
||||||
virtual void compositeExtra() {};
|
virtual void compositeExtra() {};
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
//
|
//
|
||||||
// Created by Bradley Austin Davis on 2016/02/15
|
// Created by Bradley Austin Davis on 2016/02/15
|
||||||
// Copyright 2016 High Fidelity, Inc.
|
// Copyright 2016 High Fidelity, Inc.
|
||||||
//
|
//
|
||||||
|
@ -402,11 +402,7 @@ void HmdDisplayPlugin::HUDRenderer::build() {
|
||||||
format->setAttribute(gpu::Stream::POSITION, gpu::Stream::POSITION, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ), 0);
|
format->setAttribute(gpu::Stream::POSITION, gpu::Stream::POSITION, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ), 0);
|
||||||
format->setAttribute(gpu::Stream::TEXCOORD, gpu::Stream::TEXCOORD, gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV));
|
format->setAttribute(gpu::Stream::TEXCOORD, gpu::Stream::TEXCOORD, gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::UV));
|
||||||
uniformsBuffer = std::make_shared<gpu::Buffer>(sizeof(Uniforms), nullptr);
|
uniformsBuffer = std::make_shared<gpu::Buffer>(sizeof(Uniforms), nullptr);
|
||||||
updatePipeline();
|
|
||||||
}
|
|
||||||
|
|
||||||
void HmdDisplayPlugin::HUDRenderer::updatePipeline() {
|
|
||||||
if (!pipeline) {
|
|
||||||
auto program = gpu::Shader::createProgram(shader::render_utils::program::hmd_ui);
|
auto program = gpu::Shader::createProgram(shader::render_utils::program::hmd_ui);
|
||||||
gpu::StatePointer state = gpu::StatePointer(new gpu::State());
|
gpu::StatePointer state = gpu::StatePointer(new gpu::State());
|
||||||
state->setDepthTest(gpu::State::DepthTest(true, true, gpu::LESS_EQUAL));
|
state->setDepthTest(gpu::State::DepthTest(true, true, gpu::LESS_EQUAL));
|
||||||
|
@ -416,11 +412,8 @@ void HmdDisplayPlugin::HUDRenderer::updatePipeline() {
|
||||||
|
|
||||||
pipeline = gpu::Pipeline::create(program, state);
|
pipeline = gpu::Pipeline::create(program, state);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> HmdDisplayPlugin::HUDRenderer::render(HmdDisplayPlugin& plugin) {
|
|
||||||
updatePipeline();
|
|
||||||
|
|
||||||
|
std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> HmdDisplayPlugin::HUDRenderer::render() {
|
||||||
auto hudPipeline = pipeline;
|
auto hudPipeline = pipeline;
|
||||||
auto hudFormat = format;
|
auto hudFormat = format;
|
||||||
auto hudVertices = vertices;
|
auto hudVertices = vertices;
|
||||||
|
@ -479,7 +472,7 @@ void HmdDisplayPlugin::compositePointer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> HmdDisplayPlugin::getHUDOperator() {
|
std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> HmdDisplayPlugin::getHUDOperator() {
|
||||||
return _hudRenderer.render(*this);
|
return _hudRenderer.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
HmdDisplayPlugin::~HmdDisplayPlugin() {
|
HmdDisplayPlugin::~HmdDisplayPlugin() {
|
||||||
|
|
|
@ -48,6 +48,7 @@ public:
|
||||||
|
|
||||||
void pluginUpdate() override {};
|
void pluginUpdate() override {};
|
||||||
|
|
||||||
|
std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> getHUDOperator() override;
|
||||||
virtual StencilMaskMode getStencilMaskMode() const override { return StencilMaskMode::PAINT; }
|
virtual StencilMaskMode getStencilMaskMode() const override { return StencilMaskMode::PAINT; }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
@ -62,7 +63,6 @@ protected:
|
||||||
|
|
||||||
bool internalActivate() override;
|
bool internalActivate() override;
|
||||||
void internalDeactivate() override;
|
void internalDeactivate() override;
|
||||||
std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> getHUDOperator() override;
|
|
||||||
void compositePointer() override;
|
void compositePointer() override;
|
||||||
void internalPresent() override;
|
void internalPresent() override;
|
||||||
void customizeContext() override;
|
void customizeContext() override;
|
||||||
|
@ -105,7 +105,7 @@ private:
|
||||||
gpu::BufferPointer vertices;
|
gpu::BufferPointer vertices;
|
||||||
gpu::BufferPointer indices;
|
gpu::BufferPointer indices;
|
||||||
uint32_t indexCount { 0 };
|
uint32_t indexCount { 0 };
|
||||||
gpu::PipelinePointer pipeline;
|
gpu::PipelinePointer pipeline { nullptr };
|
||||||
|
|
||||||
gpu::BufferPointer uniformsBuffer;
|
gpu::BufferPointer uniformsBuffer;
|
||||||
|
|
||||||
|
@ -123,7 +123,6 @@ private:
|
||||||
static const int VERTEX_STRIDE { sizeof(Vertex) };
|
static const int VERTEX_STRIDE { sizeof(Vertex) };
|
||||||
|
|
||||||
void build();
|
void build();
|
||||||
void updatePipeline();
|
std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> render();
|
||||||
std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> render(HmdDisplayPlugin& plugin);
|
|
||||||
} _hudRenderer;
|
} _hudRenderer;
|
||||||
};
|
};
|
||||||
|
|
|
@ -256,18 +256,28 @@ void EntityTreeRenderer::clear() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// reset the engine
|
// reset the engine
|
||||||
if (_wantScripts && !_shuttingDown) {
|
auto scene = _viewState->getMain3DScene();
|
||||||
|
if (_shuttingDown) {
|
||||||
|
if (scene) {
|
||||||
|
render::Transaction transaction;
|
||||||
|
for (const auto& entry : _entitiesInScene) {
|
||||||
|
const auto& renderer = entry.second;
|
||||||
|
renderer->removeFromScene(scene, transaction);
|
||||||
|
}
|
||||||
|
scene->enqueueTransaction(transaction);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (_wantScripts) {
|
||||||
resetEntitiesScriptEngine();
|
resetEntitiesScriptEngine();
|
||||||
}
|
}
|
||||||
// remove all entities from the scene
|
|
||||||
auto scene = _viewState->getMain3DScene();
|
|
||||||
if (scene) {
|
if (scene) {
|
||||||
for (const auto& entry : _entitiesInScene) {
|
for (const auto& entry : _entitiesInScene) {
|
||||||
const auto& renderer = entry.second;
|
const auto& renderer = entry.second;
|
||||||
fadeOutRenderable(renderer);
|
fadeOutRenderable(renderer);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qCWarning(entitiesrenderer) << "EntitityTreeRenderer::clear(), Unexpected null scene, possibly during application shutdown";
|
qCWarning(entitiesrenderer) << "EntitityTreeRenderer::clear(), Unexpected null scene";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_entitiesInScene.clear();
|
_entitiesInScene.clear();
|
||||||
_renderablesToUpdate.clear();
|
_renderablesToUpdate.clear();
|
||||||
|
@ -1056,10 +1066,14 @@ void EntityTreeRenderer::fadeOutRenderable(const EntityRendererPointer& renderab
|
||||||
render::Transaction transaction;
|
render::Transaction transaction;
|
||||||
auto scene = _viewState->getMain3DScene();
|
auto scene = _viewState->getMain3DScene();
|
||||||
|
|
||||||
transaction.setTransitionFinishedOperator(renderable->getRenderItemID(), [scene, renderable]() {
|
EntityRendererWeakPointer weakRenderable = renderable;
|
||||||
|
transaction.setTransitionFinishedOperator(renderable->getRenderItemID(), [scene, weakRenderable]() {
|
||||||
|
auto renderable = weakRenderable.lock();
|
||||||
|
if (renderable) {
|
||||||
render::Transaction transaction;
|
render::Transaction transaction;
|
||||||
renderable->removeFromScene(scene, transaction);
|
renderable->removeFromScene(scene, transaction);
|
||||||
scene->enqueueTransaction(transaction);
|
scene->enqueueTransaction(transaction);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
scene->enqueueTransaction(transaction);
|
scene->enqueueTransaction(transaction);
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "RenderableWebEntityItem.h"
|
#include "RenderableWebEntityItem.h"
|
||||||
|
#include <atomic>
|
||||||
|
|
||||||
#include <QtCore/QTimer>
|
#include <QtCore/QTimer>
|
||||||
#include <QtGui/QOpenGLContext>
|
#include <QtGui/QOpenGLContext>
|
||||||
|
@ -46,7 +47,7 @@ static uint64_t MAX_NO_RENDER_INTERVAL = 30 * USECS_PER_SECOND;
|
||||||
static uint8_t YOUTUBE_MAX_FPS = 30;
|
static uint8_t YOUTUBE_MAX_FPS = 30;
|
||||||
|
|
||||||
// Don't allow more than 20 concurrent web views
|
// Don't allow more than 20 concurrent web views
|
||||||
static uint32_t _currentWebCount { 0 };
|
static std::atomic<uint32_t> _currentWebCount(0);
|
||||||
static const uint32_t MAX_CONCURRENT_WEB_VIEWS = 20;
|
static const uint32_t MAX_CONCURRENT_WEB_VIEWS = 20;
|
||||||
|
|
||||||
static QTouchDevice _touchDevice;
|
static QTouchDevice _touchDevice;
|
||||||
|
@ -356,16 +357,15 @@ void WebEntityRenderer::buildWebSurface(const EntityItemPointer& entity, const Q
|
||||||
|
|
||||||
void WebEntityRenderer::destroyWebSurface() {
|
void WebEntityRenderer::destroyWebSurface() {
|
||||||
QSharedPointer<OffscreenQmlSurface> webSurface;
|
QSharedPointer<OffscreenQmlSurface> webSurface;
|
||||||
ContentType contentType = ContentType::NoContent;
|
|
||||||
withWriteLock([&] {
|
withWriteLock([&] {
|
||||||
webSurface.swap(_webSurface);
|
webSurface.swap(_webSurface);
|
||||||
_contentType = contentType;
|
_contentType = ContentType::NoContent;
|
||||||
});
|
|
||||||
|
|
||||||
if (webSurface) {
|
if (webSurface) {
|
||||||
--_currentWebCount;
|
--_currentWebCount;
|
||||||
WebEntityRenderer::releaseWebSurface(webSurface, _cachedWebSurface, _connections);
|
WebEntityRenderer::releaseWebSurface(webSurface, _cachedWebSurface, _connections);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::vec2 WebEntityRenderer::getWindowSize(const TypedEntityPointer& entity) const {
|
glm::vec2 WebEntityRenderer::getWindowSize(const TypedEntityPointer& entity) const {
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
#include "GLHelpers.h"
|
#include "GLHelpers.h"
|
||||||
#include "QOpenGLContextWrapper.h"
|
#include "QOpenGLContextWrapper.h"
|
||||||
|
|
||||||
|
#if defined(GL_CUSTOM_CONTEXT)
|
||||||
|
#include <QtPlatformHeaders/QWGLNativeContext>
|
||||||
|
#endif
|
||||||
|
|
||||||
using namespace gl;
|
using namespace gl;
|
||||||
|
|
||||||
#if defined(GL_CUSTOM_CONTEXT)
|
#if defined(GL_CUSTOM_CONTEXT)
|
||||||
|
@ -42,7 +46,10 @@ std::atomic<size_t> Context::_totalSwapchainMemoryUsage { 0 };
|
||||||
size_t Context::getSwapchainMemoryUsage() { return _totalSwapchainMemoryUsage.load(); }
|
size_t Context::getSwapchainMemoryUsage() { return _totalSwapchainMemoryUsage.load(); }
|
||||||
|
|
||||||
size_t Context::evalSurfaceMemoryUsage(uint32_t width, uint32_t height, uint32_t pixelSize) {
|
size_t Context::evalSurfaceMemoryUsage(uint32_t width, uint32_t height, uint32_t pixelSize) {
|
||||||
return width * height * pixelSize;
|
size_t result = width;
|
||||||
|
result *= height;
|
||||||
|
result *= pixelSize;
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Context::updateSwapchainMemoryUsage(size_t prevSize, size_t newSize) {
|
void Context::updateSwapchainMemoryUsage(size_t prevSize, size_t newSize) {
|
||||||
|
@ -176,6 +183,7 @@ static void setupPixelFormatSimple(HDC hdc) {
|
||||||
#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126
|
#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126
|
||||||
|
|
||||||
// Context create flag bits
|
// Context create flag bits
|
||||||
|
#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
|
||||||
#define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001
|
#define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001
|
||||||
#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
|
#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
|
||||||
#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004
|
#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004
|
||||||
|
@ -305,11 +313,18 @@ void Context::create(QOpenGLContext* shareContext) {
|
||||||
#else
|
#else
|
||||||
contextAttribs.push_back(WGL_CONTEXT_CORE_PROFILE_BIT_ARB);
|
contextAttribs.push_back(WGL_CONTEXT_CORE_PROFILE_BIT_ARB);
|
||||||
#endif
|
#endif
|
||||||
contextAttribs.push_back(WGL_CONTEXT_FLAGS_ARB);
|
{
|
||||||
|
int contextFlags = 0;
|
||||||
if (enableDebugLogger()) {
|
if (enableDebugLogger()) {
|
||||||
contextAttribs.push_back(WGL_CONTEXT_DEBUG_BIT_ARB);
|
contextFlags |= WGL_CONTEXT_DEBUG_BIT_ARB;
|
||||||
} else {
|
}
|
||||||
contextAttribs.push_back(0);
|
#ifdef USE_KHR_ROBUSTNESS
|
||||||
|
contextFlags |= WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB;
|
||||||
|
#endif
|
||||||
|
if (contextFlags != 0) {
|
||||||
|
contextAttribs.push_back(WGL_CONTEXT_FLAGS_ARB);
|
||||||
|
contextAttribs.push_back(contextFlags);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
contextAttribs.push_back(0);
|
contextAttribs.push_back(0);
|
||||||
HGLRC shareHglrc = nullptr;
|
HGLRC shareHglrc = nullptr;
|
||||||
|
|
|
@ -23,7 +23,7 @@ class QOpenGLContext;
|
||||||
class QThread;
|
class QThread;
|
||||||
class QOpenGLDebugMessage;
|
class QOpenGLDebugMessage;
|
||||||
|
|
||||||
#if defined(Q_OS_WIN) && defined(USE_GLES)
|
#if defined(Q_OS_WIN) && (defined(USE_GLES) || defined(USE_KHR_ROBUSTNESS))
|
||||||
//#if defined(Q_OS_WIN)
|
//#if defined(Q_OS_WIN)
|
||||||
#define GL_CUSTOM_CONTEXT
|
#define GL_CUSTOM_CONTEXT
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -309,20 +309,28 @@ void PhysicalEntitySimulation::buildMotionStatesForEntitiesThatNeedThem() {
|
||||||
SetOfEntities::iterator entityItr = _entitiesToAddToPhysics.begin();
|
SetOfEntities::iterator entityItr = _entitiesToAddToPhysics.begin();
|
||||||
while (entityItr != _entitiesToAddToPhysics.end()) {
|
while (entityItr != _entitiesToAddToPhysics.end()) {
|
||||||
EntityItemPointer entity = (*entityItr);
|
EntityItemPointer entity = (*entityItr);
|
||||||
assert(!entity->getPhysicsInfo());
|
|
||||||
if (entity->isDead()) {
|
if (entity->isDead()) {
|
||||||
prepareEntityForDelete(entity);
|
prepareEntityForDelete(entity);
|
||||||
entityItr = _entitiesToAddToPhysics.erase(entityItr);
|
entityItr = _entitiesToAddToPhysics.erase(entityItr);
|
||||||
} else if (!entity->shouldBePhysical()) {
|
continue;
|
||||||
// this entity should no longer be on _entitiesToAddToPhysics
|
}
|
||||||
|
if (entity->getPhysicsInfo()) {
|
||||||
entityItr = _entitiesToAddToPhysics.erase(entityItr);
|
entityItr = _entitiesToAddToPhysics.erase(entityItr);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!entity->shouldBePhysical()) {
|
||||||
|
// this entity should no longer be on _entitiesToAddToPhysics
|
||||||
if (entity->isMovingRelativeToParent()) {
|
if (entity->isMovingRelativeToParent()) {
|
||||||
SetOfEntities::iterator itr = _simpleKinematicEntities.find(entity);
|
SetOfEntities::iterator itr = _simpleKinematicEntities.find(entity);
|
||||||
if (itr == _simpleKinematicEntities.end()) {
|
if (itr == _simpleKinematicEntities.end()) {
|
||||||
_simpleKinematicEntities.insert(entity);
|
_simpleKinematicEntities.insert(entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (entity->isReadyToComputeShape()) {
|
entityItr = _entitiesToAddToPhysics.erase(entityItr);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entity->isReadyToComputeShape()) {
|
||||||
ShapeRequest shapeRequest(entity);
|
ShapeRequest shapeRequest(entity);
|
||||||
ShapeRequests::iterator requestItr = _shapeRequests.find(shapeRequest);
|
ShapeRequests::iterator requestItr = _shapeRequests.find(shapeRequest);
|
||||||
if (requestItr == _shapeRequests.end()) {
|
if (requestItr == _shapeRequests.end()) {
|
||||||
|
@ -332,18 +340,7 @@ void PhysicalEntitySimulation::buildMotionStatesForEntitiesThatNeedThem() {
|
||||||
uint32_t requestCount = ObjectMotionState::getShapeManager()->getWorkRequestCount();
|
uint32_t requestCount = ObjectMotionState::getShapeManager()->getWorkRequestCount();
|
||||||
btCollisionShape* shape = const_cast<btCollisionShape*>(ObjectMotionState::getShapeManager()->getShape(shapeInfo));
|
btCollisionShape* shape = const_cast<btCollisionShape*>(ObjectMotionState::getShapeManager()->getShape(shapeInfo));
|
||||||
if (shape) {
|
if (shape) {
|
||||||
EntityMotionState* motionState = static_cast<EntityMotionState*>(entity->getPhysicsInfo());
|
|
||||||
if (!motionState) {
|
|
||||||
buildMotionState(shape, entity);
|
buildMotionState(shape, entity);
|
||||||
} else {
|
|
||||||
// Is it possible to fall in here?
|
|
||||||
// entity shouldn't be on _entitiesToAddToPhysics list if it already has a motionState.
|
|
||||||
// but just in case...
|
|
||||||
motionState->setShape(shape);
|
|
||||||
motionState->setRegion(_space->getRegion(entity->getSpaceIndex()));
|
|
||||||
_physicalObjects.insert(motionState);
|
|
||||||
_incomingChanges.insert(motionState);
|
|
||||||
}
|
|
||||||
} else if (requestCount != ObjectMotionState::getShapeManager()->getWorkRequestCount()) {
|
} else if (requestCount != ObjectMotionState::getShapeManager()->getWorkRequestCount()) {
|
||||||
// shape doesn't exist but a new worker has been spawned to build it --> add to shapeRequests and wait
|
// shape doesn't exist but a new worker has been spawned to build it --> add to shapeRequests and wait
|
||||||
shapeRequest.shapeHash = shapeInfo.getHash();
|
shapeRequest.shapeHash = shapeInfo.getHash();
|
||||||
|
@ -354,6 +351,7 @@ void PhysicalEntitySimulation::buildMotionStatesForEntitiesThatNeedThem() {
|
||||||
}
|
}
|
||||||
entityItr = _entitiesToAddToPhysics.erase(entityItr);
|
entityItr = _entitiesToAddToPhysics.erase(entityItr);
|
||||||
} else {
|
} else {
|
||||||
|
// skip for later
|
||||||
++entityItr;
|
++entityItr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,7 +181,7 @@ void ThreadSafeDynamicsWorld::drawConnectedSpheres(btIDebugDraw* drawer, btScala
|
||||||
btVector3 xAxis = direction.cross(btVector3(0.0f, 1.0f, 0.0f));
|
btVector3 xAxis = direction.cross(btVector3(0.0f, 1.0f, 0.0f));
|
||||||
xAxis = xAxis.length() < EPSILON ? btVector3(1.0f, 0.0f, 0.0f) : xAxis.normalize();
|
xAxis = xAxis.length() < EPSILON ? btVector3(1.0f, 0.0f, 0.0f) : xAxis.normalize();
|
||||||
btVector3 zAxis = xAxis.cross(btVector3(0.0f, 1.0f, 0.0f));
|
btVector3 zAxis = xAxis.cross(btVector3(0.0f, 1.0f, 0.0f));
|
||||||
zAxis = (direction.normalize().getY() < EPSILON) ? btVector3(0.0f, 1.0f, 0.0f) : zAxis.normalize();
|
zAxis = (direction.length2() < EPSILON || direction.normalize().getY() < EPSILON) ? btVector3(0.0f, 1.0f, 0.0f) : zAxis.normalize();
|
||||||
float fullCircle = 2.0f * PI;
|
float fullCircle = 2.0f * PI;
|
||||||
for (float i = 0; i < fullCircle; i += stepRadians) {
|
for (float i = 0; i < fullCircle; i += stepRadians) {
|
||||||
float x1 = btSin(btScalar(i)) * radius1;
|
float x1 = btSin(btScalar(i)) * radius1;
|
||||||
|
|
|
@ -28,11 +28,12 @@ json getGPU(int index);
|
||||||
int getNumDisplays();
|
int getNumDisplays();
|
||||||
json getDisplay(int index);
|
json getDisplay(int index);
|
||||||
|
|
||||||
int getNumMemories();
|
json getMemory();
|
||||||
json getMemory(int index);
|
|
||||||
|
|
||||||
json getComputer();
|
json getComputer();
|
||||||
|
|
||||||
|
json getAll();
|
||||||
|
|
||||||
} // namespace platform
|
} // namespace platform
|
||||||
|
|
||||||
#endif // hifi_platform_h
|
#endif // hifi_platform_h
|
||||||
|
|
|
@ -9,6 +9,9 @@
|
||||||
#define hifi_platform_PlatformKeys_h
|
#define hifi_platform_PlatformKeys_h
|
||||||
|
|
||||||
namespace platform { namespace keys{
|
namespace platform { namespace keys{
|
||||||
|
// "UNKNOWN"
|
||||||
|
extern const char* UNKNOWN;
|
||||||
|
|
||||||
namespace cpu {
|
namespace cpu {
|
||||||
extern const char* vendor;
|
extern const char* vendor;
|
||||||
extern const char* vendor_Intel;
|
extern const char* vendor_Intel;
|
||||||
|
@ -36,8 +39,9 @@ namespace platform { namespace keys{
|
||||||
extern const char* coordsTop;
|
extern const char* coordsTop;
|
||||||
extern const char* coordsBottom;
|
extern const char* coordsBottom;
|
||||||
}
|
}
|
||||||
|
namespace memory {
|
||||||
extern const char* memTotal;
|
extern const char* memTotal;
|
||||||
|
}
|
||||||
namespace computer {
|
namespace computer {
|
||||||
extern const char* OS;
|
extern const char* OS;
|
||||||
extern const char* OS_WINDOWS;
|
extern const char* OS_WINDOWS;
|
||||||
|
@ -45,6 +49,8 @@ namespace platform { namespace keys{
|
||||||
extern const char* OS_LINUX;
|
extern const char* OS_LINUX;
|
||||||
extern const char* OS_ANDROID;
|
extern const char* OS_ANDROID;
|
||||||
|
|
||||||
|
extern const char* OSVersion;
|
||||||
|
|
||||||
extern const char* vendor;
|
extern const char* vendor;
|
||||||
extern const char* vendor_Apple;
|
extern const char* vendor_Apple;
|
||||||
|
|
||||||
|
@ -52,6 +58,14 @@ namespace platform { namespace keys{
|
||||||
|
|
||||||
extern const char* profileTier;
|
extern const char* profileTier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Keys for categories used in json returned by getAll()
|
||||||
|
extern const char* CPUS;
|
||||||
|
extern const char* GPUS;
|
||||||
|
extern const char* DISPLAYS;
|
||||||
|
extern const char* MEMORY;
|
||||||
|
extern const char* COMPUTER;
|
||||||
|
|
||||||
} } // namespace plaform::keys
|
} } // namespace plaform::keys
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -9,39 +9,45 @@
|
||||||
#include "AndroidPlatform.h"
|
#include "AndroidPlatform.h"
|
||||||
#include "../PlatformKeys.h"
|
#include "../PlatformKeys.h"
|
||||||
#include <GPUIdent.h>
|
#include <GPUIdent.h>
|
||||||
|
#include <QSysInfo>
|
||||||
|
|
||||||
using namespace platform;
|
using namespace platform;
|
||||||
|
|
||||||
void AndroidInstance::enumerateCpu() {
|
void AndroidInstance::enumerateCpus() {
|
||||||
json cpu;
|
json cpu;
|
||||||
cpu[keys::cpu::vendor] = "";
|
cpu[keys::cpu::vendor] = "";
|
||||||
cpu[keys::cpu::model] = "";
|
cpu[keys::cpu::model] = "";
|
||||||
cpu[keys::cpu::clockSpeed] = "";
|
cpu[keys::cpu::clockSpeed] = "";
|
||||||
cpu[keys::cpu::numCores] = 0;
|
cpu[keys::cpu::numCores] = 0;
|
||||||
_cpu.push_back(cpu);
|
|
||||||
|
_cpus.push_back(cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidInstance::enumerateGpu() {
|
void AndroidInstance::enumerateGpus() {
|
||||||
GPUIdent* ident = GPUIdent::getInstance();
|
GPUIdent* ident = GPUIdent::getInstance();
|
||||||
json gpu = {};
|
json gpu = {};
|
||||||
gpu[keys::gpu::vendor] = ident->getName().toUtf8().constData();
|
|
||||||
gpu[keys::gpu::model] = ident->getName().toUtf8().constData();
|
gpu[keys::gpu::model] = ident->getName().toUtf8().constData();
|
||||||
|
gpu[keys::gpu::vendor] = findGPUVendorInDescription(gpu[keys::gpu::model].get<std::string>());
|
||||||
gpu[keys::gpu::videoMemory] = ident->getMemory();
|
gpu[keys::gpu::videoMemory] = ident->getMemory();
|
||||||
gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData();
|
gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData();
|
||||||
|
|
||||||
_gpu.push_back(gpu);
|
_gpus.push_back(gpu);
|
||||||
_display = ident->getOutput();
|
_displays = ident->getOutput();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidInstance::enumerateMemory() {
|
void AndroidInstance::enumerateMemory() {
|
||||||
json ram = {};
|
json ram = {};
|
||||||
ram[keys::memTotal]=0;
|
ram[keys::memory::memTotal]=0;
|
||||||
_memory.push_back(ram);
|
_memory = ram;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidInstance::enumerateComputer(){
|
void AndroidInstance::enumerateComputer(){
|
||||||
_computer[keys::computer::OS] = keys::computer::OS_ANDROID;
|
_computer[keys::computer::OS] = keys::computer::OS_ANDROID;
|
||||||
_computer[keys::computer::vendor] = "";
|
_computer[keys::computer::vendor] = "";
|
||||||
_computer[keys::computer::model] = "";
|
_computer[keys::computer::model] = "";
|
||||||
|
|
||||||
|
auto sysInfo = QSysInfo();
|
||||||
|
|
||||||
|
_computer[keys::computer::OSVersion] = sysInfo.kernelVersion().toStdString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,9 @@ namespace platform {
|
||||||
class AndroidInstance : public Instance {
|
class AndroidInstance : public Instance {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void enumerateCpu() override;
|
void enumerateCpus() override;
|
||||||
|
void enumerateGpus() override;
|
||||||
void enumerateMemory() override;
|
void enumerateMemory() override;
|
||||||
void enumerateGpu() override;
|
|
||||||
void enumerateComputer() override;
|
void enumerateComputer() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -13,36 +13,37 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <CPUIdent.h>
|
#include <CPUIdent.h>
|
||||||
#include <GPUIdent.h>
|
#include <GPUIdent.h>
|
||||||
|
#include <QSysInfo>
|
||||||
|
|
||||||
using namespace platform;
|
using namespace platform;
|
||||||
|
|
||||||
void LinuxInstance::enumerateCpu() {
|
void LinuxInstance::enumerateCpus() {
|
||||||
json cpu = {};
|
json cpu = {};
|
||||||
|
|
||||||
cpu[keys::cpu::vendor] = CPUIdent::Vendor();
|
cpu[keys::cpu::vendor] = CPUIdent::Vendor();
|
||||||
cpu[keys::cpu::model] = CPUIdent::Brand();
|
cpu[keys::cpu::model] = CPUIdent::Brand();
|
||||||
cpu[keys::cpu::numCores] = std::thread::hardware_concurrency();
|
cpu[keys::cpu::numCores] = std::thread::hardware_concurrency();
|
||||||
|
|
||||||
_cpu.push_back(cpu);
|
_cpus.push_back(cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LinuxInstance::enumerateGpu() {
|
void LinuxInstance::enumerateGpus() {
|
||||||
GPUIdent* ident = GPUIdent::getInstance();
|
GPUIdent* ident = GPUIdent::getInstance();
|
||||||
json gpu = {};
|
json gpu = {};
|
||||||
gpu[keys::gpu::vendor] = ident->getName().toUtf8().constData();
|
|
||||||
gpu[keys::gpu::model] = ident->getName().toUtf8().constData();
|
gpu[keys::gpu::model] = ident->getName().toUtf8().constData();
|
||||||
|
gpu[keys::gpu::vendor] = findGPUVendorInDescription(gpu[keys::gpu::model].get<std::string>());
|
||||||
gpu[keys::gpu::videoMemory] = ident->getMemory();
|
gpu[keys::gpu::videoMemory] = ident->getMemory();
|
||||||
gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData();
|
gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData();
|
||||||
|
|
||||||
_gpu.push_back(gpu);
|
_gpus.push_back(gpu);
|
||||||
_display = ident->getOutput();
|
_displays = ident->getOutput();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LinuxInstance::enumerateMemory() {
|
void LinuxInstance::enumerateMemory() {
|
||||||
json ram = {};
|
json ram = {};
|
||||||
ram[keys::memTotal]=0;
|
ram[keys::memory::memTotal]=0;
|
||||||
|
|
||||||
_memory.push_back(ram);
|
_memory = ram;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LinuxInstance::enumerateComputer(){
|
void LinuxInstance::enumerateComputer(){
|
||||||
|
@ -50,5 +51,9 @@ void LinuxInstance::enumerateComputer(){
|
||||||
_computer[keys::computer::OS] = keys::computer::OS_LINUX;
|
_computer[keys::computer::OS] = keys::computer::OS_LINUX;
|
||||||
_computer[keys::computer::vendor] = "";
|
_computer[keys::computer::vendor] = "";
|
||||||
_computer[keys::computer::model] = "";
|
_computer[keys::computer::model] = "";
|
||||||
|
|
||||||
|
auto sysInfo = QSysInfo();
|
||||||
|
|
||||||
|
_computer[keys::computer::OSVersion] = sysInfo.kernelVersion().toStdString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,9 @@ namespace platform {
|
||||||
class LinuxInstance : public Instance {
|
class LinuxInstance : public Instance {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void enumerateCpu() override;
|
void enumerateCpus() override;
|
||||||
|
void enumerateGpus() override;
|
||||||
void enumerateMemory() override;
|
void enumerateMemory() override;
|
||||||
void enumerateGpu() override;
|
|
||||||
void enumerateComputer() override;
|
void enumerateComputer() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -21,32 +21,33 @@
|
||||||
|
|
||||||
#include <CoreFoundation/CoreFoundation.h>
|
#include <CoreFoundation/CoreFoundation.h>
|
||||||
#include <ApplicationServices/ApplicationServices.h>
|
#include <ApplicationServices/ApplicationServices.h>
|
||||||
|
#include <QSysInfo>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
using namespace platform;
|
using namespace platform;
|
||||||
|
|
||||||
void MACOSInstance::enumerateCpu() {
|
void MACOSInstance::enumerateCpus() {
|
||||||
json cpu = {};
|
json cpu = {};
|
||||||
|
|
||||||
cpu[keys::cpu::vendor] = CPUIdent::Vendor();
|
cpu[keys::cpu::vendor] = CPUIdent::Vendor();
|
||||||
cpu[keys::cpu::model] = CPUIdent::Brand();
|
cpu[keys::cpu::model] = CPUIdent::Brand();
|
||||||
cpu[keys::cpu::numCores] = std::thread::hardware_concurrency();
|
cpu[keys::cpu::numCores] = std::thread::hardware_concurrency();
|
||||||
|
|
||||||
_cpu.push_back(cpu);
|
_cpus.push_back(cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MACOSInstance::enumerateGpu() {
|
void MACOSInstance::enumerateGpus() {
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
|
|
||||||
GPUIdent* ident = GPUIdent::getInstance();
|
GPUIdent* ident = GPUIdent::getInstance();
|
||||||
json gpu = {};
|
json gpu = {};
|
||||||
|
|
||||||
gpu[keys::gpu::vendor] = ident->getName().toUtf8().constData();
|
|
||||||
gpu[keys::gpu::model] = ident->getName().toUtf8().constData();
|
gpu[keys::gpu::model] = ident->getName().toUtf8().constData();
|
||||||
|
gpu[keys::gpu::vendor] = findGPUVendorInDescription(gpu[keys::gpu::model].get<std::string>());
|
||||||
gpu[keys::gpu::videoMemory] = ident->getMemory();
|
gpu[keys::gpu::videoMemory] = ident->getMemory();
|
||||||
gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData();
|
gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData();
|
||||||
|
|
||||||
_gpu.push_back(gpu);
|
_gpus.push_back(gpu);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -101,7 +102,7 @@ void MACOSInstance::enumerateDisplays() {
|
||||||
display["modeWidth"] = displayModeWidth;
|
display["modeWidth"] = displayModeWidth;
|
||||||
display["modeHeight"] = displayModeHeight;
|
display["modeHeight"] = displayModeHeight;
|
||||||
|
|
||||||
_display.push_back(display);
|
_displays.push_back(display);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,9 +112,9 @@ void MACOSInstance::enumerateMemory() {
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
long pages = sysconf(_SC_PHYS_PAGES);
|
long pages = sysconf(_SC_PHYS_PAGES);
|
||||||
long page_size = sysconf(_SC_PAGE_SIZE);
|
long page_size = sysconf(_SC_PAGE_SIZE);
|
||||||
ram[keys::memTotal] = pages * page_size;
|
ram[keys::memory::memTotal] = pages * page_size;
|
||||||
#endif
|
#endif
|
||||||
_memory.push_back(ram);
|
_memory = ram;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MACOSInstance::enumerateComputer(){
|
void MACOSInstance::enumerateComputer(){
|
||||||
|
@ -133,5 +134,9 @@ void MACOSInstance::enumerateComputer(){
|
||||||
free(model);
|
free(model);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
auto sysInfo = QSysInfo();
|
||||||
|
|
||||||
|
_computer[keys::computer::OSVersion] = sysInfo.kernelVersion().toStdString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,10 +15,10 @@ namespace platform {
|
||||||
class MACOSInstance : public Instance {
|
class MACOSInstance : public Instance {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void enumerateCpu() override;
|
void enumerateCpus() override;
|
||||||
void enumerateMemory() override;
|
void enumerateGpus() override;
|
||||||
void enumerateGpu() override;
|
|
||||||
void enumerateDisplays() override;
|
void enumerateDisplays() override;
|
||||||
|
void enumerateMemory() override;
|
||||||
void enumerateComputer() override;
|
void enumerateComputer() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
#include "../PlatformKeys.h"
|
#include "../PlatformKeys.h"
|
||||||
|
|
||||||
namespace platform { namespace keys {
|
namespace platform { namespace keys {
|
||||||
|
const char* UNKNOWN = "UNKNOWN";
|
||||||
|
|
||||||
namespace cpu {
|
namespace cpu {
|
||||||
const char* vendor = "vendor";
|
const char* vendor = "vendor";
|
||||||
const char* vendor_Intel = "Intel";
|
const char* vendor_Intel = "Intel";
|
||||||
|
@ -38,8 +40,9 @@ namespace platform { namespace keys {
|
||||||
const char* coordsTop = "coordinatestop";
|
const char* coordsTop = "coordinatestop";
|
||||||
const char* coordsBottom = "coordinatesbottom";
|
const char* coordsBottom = "coordinatesbottom";
|
||||||
}
|
}
|
||||||
|
namespace memory {
|
||||||
const char* memTotal = "memTotal";
|
const char* memTotal = "memTotal";
|
||||||
|
}
|
||||||
namespace computer {
|
namespace computer {
|
||||||
const char* OS = "OS";
|
const char* OS = "OS";
|
||||||
const char* OS_WINDOWS = "WINDOWS";
|
const char* OS_WINDOWS = "WINDOWS";
|
||||||
|
@ -47,6 +50,8 @@ namespace platform { namespace keys {
|
||||||
const char* OS_LINUX = "LINUX";
|
const char* OS_LINUX = "LINUX";
|
||||||
const char* OS_ANDROID = "ANDROID";
|
const char* OS_ANDROID = "ANDROID";
|
||||||
|
|
||||||
|
const char* OSVersion = "OSVersion";
|
||||||
|
|
||||||
const char* vendor = "vendor";
|
const char* vendor = "vendor";
|
||||||
const char* vendor_Apple = "Apple";
|
const char* vendor_Apple = "Apple";
|
||||||
|
|
||||||
|
@ -54,6 +59,12 @@ namespace platform { namespace keys {
|
||||||
|
|
||||||
const char* profileTier = "profileTier";
|
const char* profileTier = "profileTier";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* CPUS = "cpus";
|
||||||
|
const char* GPUS = "gpus";
|
||||||
|
const char* DISPLAYS = "displays";
|
||||||
|
const char* MEMORY = "memory";
|
||||||
|
const char* COMPUTER = "computer";
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#include <qglobal.h>
|
#include <qglobal.h>
|
||||||
|
@ -117,14 +128,14 @@ json platform::getDisplay(int index) {
|
||||||
return _instance->getDisplay(index);
|
return _instance->getDisplay(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
int platform::getNumMemories() {
|
json platform::getMemory() {
|
||||||
return _instance->getNumMemories();
|
return _instance->getMemory();
|
||||||
}
|
|
||||||
|
|
||||||
json platform::getMemory(int index) {
|
|
||||||
return _instance->getMemory(index);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
json platform::getComputer() {
|
json platform::getComputer() {
|
||||||
return _instance->getComputer();
|
return _instance->getComputer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
json platform::getAll() {
|
||||||
|
return _instance->getAll();
|
||||||
|
}
|
||||||
|
|
|
@ -16,10 +16,10 @@ using namespace platform;
|
||||||
|
|
||||||
bool Instance::enumeratePlatform() {
|
bool Instance::enumeratePlatform() {
|
||||||
enumerateComputer();
|
enumerateComputer();
|
||||||
enumerateCpu();
|
|
||||||
enumerateGpu();
|
|
||||||
enumerateDisplays();
|
|
||||||
enumerateMemory();
|
enumerateMemory();
|
||||||
|
enumerateCpus();
|
||||||
|
enumerateGpus();
|
||||||
|
enumerateDisplays();
|
||||||
|
|
||||||
// And profile the platform and put the tier in "computer"
|
// And profile the platform and put the tier in "computer"
|
||||||
_computer[keys::computer::profileTier] = Profiler::TierNames[Profiler::profilePlatform()];
|
_computer[keys::computer::profileTier] = Profiler::TierNames[Profiler::profilePlatform()];
|
||||||
|
@ -28,55 +28,42 @@ bool Instance::enumeratePlatform() {
|
||||||
}
|
}
|
||||||
|
|
||||||
json Instance::getCPU(int index) {
|
json Instance::getCPU(int index) {
|
||||||
assert(index <(int) _cpu.size());
|
assert(index <(int) _cpus.size());
|
||||||
if (index >= (int)_cpu.size())
|
if (index >= (int)_cpus.size())
|
||||||
return json();
|
return json();
|
||||||
|
|
||||||
return _cpu.at(index);
|
return _cpus.at(index);
|
||||||
}
|
|
||||||
|
|
||||||
//These are ripe for template.. will work on that next
|
|
||||||
json Instance::getMemory(int index) {
|
|
||||||
assert(index <(int) _memory.size());
|
|
||||||
if(index >= (int)_memory.size())
|
|
||||||
return json();
|
|
||||||
|
|
||||||
return _memory.at(index);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
json Instance::getGPU(int index) {
|
json Instance::getGPU(int index) {
|
||||||
assert(index <(int) _gpu.size());
|
assert(index <(int) _gpus.size());
|
||||||
|
|
||||||
if (index >=(int) _gpu.size())
|
if (index >=(int) _gpus.size())
|
||||||
return json();
|
return json();
|
||||||
|
|
||||||
return _gpu.at(index);
|
return _gpus.at(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
json Instance::getDisplay(int index) {
|
json Instance::getDisplay(int index) {
|
||||||
assert(index <(int) _display.size());
|
assert(index <(int) _displays.size());
|
||||||
|
|
||||||
if (index >=(int) _display.size())
|
if (index >=(int) _displays.size())
|
||||||
return json();
|
return json();
|
||||||
|
|
||||||
return _display.at(index);
|
return _displays.at(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
Instance::~Instance() {
|
Instance::~Instance() {
|
||||||
if (_cpu.size() > 0) {
|
if (_cpus.size() > 0) {
|
||||||
_cpu.clear();
|
_cpus.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_memory.size() > 0) {
|
if (_gpus.size() > 0) {
|
||||||
_memory.clear();
|
_gpus.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_gpu.size() > 0) {
|
if (_displays.size() > 0) {
|
||||||
_gpu.clear();
|
_displays.clear();
|
||||||
}
|
|
||||||
|
|
||||||
if (_display.size() > 0) {
|
|
||||||
_display.clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,17 +93,53 @@ json Instance::listAllKeys() {
|
||||||
keys::display::coordsTop,
|
keys::display::coordsTop,
|
||||||
keys::display::coordsBottom,
|
keys::display::coordsBottom,
|
||||||
|
|
||||||
keys::memTotal,
|
keys::memory::memTotal,
|
||||||
|
|
||||||
keys::computer::OS,
|
keys::computer::OS,
|
||||||
keys::computer::OS_WINDOWS,
|
keys::computer::OS_WINDOWS,
|
||||||
keys::computer::OS_MACOS,
|
keys::computer::OS_MACOS,
|
||||||
keys::computer::OS_LINUX,
|
keys::computer::OS_LINUX,
|
||||||
keys::computer::OS_ANDROID,
|
keys::computer::OS_ANDROID,
|
||||||
|
keys::computer::OSVersion,
|
||||||
keys::computer::vendor,
|
keys::computer::vendor,
|
||||||
keys::computer::vendor_Apple,
|
keys::computer::vendor_Apple,
|
||||||
keys::computer::model,
|
keys::computer::model,
|
||||||
keys::computer::profileTier
|
keys::computer::profileTier,
|
||||||
|
|
||||||
|
keys::CPUS,
|
||||||
|
keys::GPUS,
|
||||||
|
keys::DISPLAYS,
|
||||||
|
keys::MEMORY,
|
||||||
|
keys::COMPUTER,
|
||||||
}});
|
}});
|
||||||
return allKeys;
|
return allKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* Instance::findGPUVendorInDescription(const std::string& description) {
|
||||||
|
// intel integrated graphics
|
||||||
|
if (description.find(keys::gpu::vendor_Intel) != std::string::npos) {
|
||||||
|
return keys::gpu::vendor_Intel;
|
||||||
|
}
|
||||||
|
// AMD gpu
|
||||||
|
else if ((description.find(keys::gpu::vendor_AMD) != std::string::npos) || (description.find("Radeon") != std::string::npos)) {
|
||||||
|
return keys::gpu::vendor_AMD;
|
||||||
|
}
|
||||||
|
// NVIDIA gpu
|
||||||
|
else if (description.find(keys::gpu::vendor_NVIDIA) != std::string::npos) {
|
||||||
|
return keys::gpu::vendor_NVIDIA;
|
||||||
|
} else {
|
||||||
|
return keys::UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
json Instance::getAll() {
|
||||||
|
json all = {};
|
||||||
|
|
||||||
|
all[keys::COMPUTER] = _computer;
|
||||||
|
all[keys::MEMORY] = _memory;
|
||||||
|
all[keys::CPUS] = _cpus;
|
||||||
|
all[keys::GPUS] = _gpus;
|
||||||
|
all[keys::DISPLAYS] = _displays;
|
||||||
|
|
||||||
|
return all;
|
||||||
|
}
|
||||||
|
|
|
@ -19,36 +19,39 @@ class Instance {
|
||||||
public:
|
public:
|
||||||
bool virtual enumeratePlatform();
|
bool virtual enumeratePlatform();
|
||||||
|
|
||||||
int getNumCPUs() { return (int)_cpu.size(); }
|
int getNumCPUs() { return (int)_cpus.size(); }
|
||||||
json getCPU(int index);
|
json getCPU(int index);
|
||||||
|
|
||||||
int getNumGPUs() { return (int)_gpu.size(); }
|
int getNumGPUs() { return (int)_gpus.size(); }
|
||||||
json getGPU(int index);
|
json getGPU(int index);
|
||||||
|
|
||||||
int getNumMemories() { return (int)_memory.size(); }
|
int getNumDisplays() { return (int)_displays.size(); }
|
||||||
json getMemory(int index);
|
|
||||||
|
|
||||||
int getNumDisplays() { return (int)_display.size(); }
|
|
||||||
json getDisplay(int index);
|
json getDisplay(int index);
|
||||||
|
|
||||||
|
json getMemory() { return _memory; }
|
||||||
|
|
||||||
json getComputer() { return _computer; }
|
json getComputer() { return _computer; }
|
||||||
|
|
||||||
void virtual enumerateCpu()=0;
|
json getAll();
|
||||||
void virtual enumerateMemory()=0;
|
|
||||||
void virtual enumerateGpu()=0;
|
void virtual enumerateCpus()=0;
|
||||||
|
void virtual enumerateGpus()=0;
|
||||||
void virtual enumerateDisplays() {}
|
void virtual enumerateDisplays() {}
|
||||||
|
void virtual enumerateMemory() = 0;
|
||||||
void virtual enumerateComputer()=0;
|
void virtual enumerateComputer()=0;
|
||||||
|
|
||||||
virtual ~Instance();
|
virtual ~Instance();
|
||||||
|
|
||||||
static json listAllKeys();
|
static json listAllKeys();
|
||||||
|
|
||||||
|
// Helper function to filter the vendor name out of the description of a GPU
|
||||||
|
static const char* findGPUVendorInDescription(const std::string& description);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::vector<json> _cpu;
|
std::vector<json> _cpus;
|
||||||
std::vector<json> _memory;
|
std::vector<json> _gpus;
|
||||||
std::vector<json> _gpu;
|
std::vector<json> _displays;
|
||||||
std::vector<json> _display;
|
json _memory;
|
||||||
json _computer;
|
json _computer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -16,32 +16,33 @@
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
#include <QSysInfo>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
using namespace platform;
|
using namespace platform;
|
||||||
|
|
||||||
void WINInstance::enumerateCpu() {
|
void WINInstance::enumerateCpus() {
|
||||||
json cpu = {};
|
json cpu = {};
|
||||||
|
|
||||||
cpu[keys::cpu::vendor] = CPUIdent::Vendor();
|
cpu[keys::cpu::vendor] = CPUIdent::Vendor();
|
||||||
cpu[keys::cpu::model] = CPUIdent::Brand();
|
cpu[keys::cpu::model] = CPUIdent::Brand();
|
||||||
cpu[keys::cpu::numCores] = std::thread::hardware_concurrency();
|
cpu[keys::cpu::numCores] = std::thread::hardware_concurrency();
|
||||||
|
|
||||||
_cpu.push_back(cpu);
|
_cpus.push_back(cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WINInstance::enumerateGpu() {
|
void WINInstance::enumerateGpus() {
|
||||||
|
|
||||||
GPUIdent* ident = GPUIdent::getInstance();
|
GPUIdent* ident = GPUIdent::getInstance();
|
||||||
|
|
||||||
json gpu = {};
|
json gpu = {};
|
||||||
gpu[keys::gpu::vendor] = ident->getName().toUtf8().constData();
|
|
||||||
gpu[keys::gpu::model] = ident->getName().toUtf8().constData();
|
gpu[keys::gpu::model] = ident->getName().toUtf8().constData();
|
||||||
|
gpu[keys::gpu::vendor] = findGPUVendorInDescription(gpu[keys::gpu::model].get<std::string>());
|
||||||
gpu[keys::gpu::videoMemory] = ident->getMemory();
|
gpu[keys::gpu::videoMemory] = ident->getMemory();
|
||||||
gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData();
|
gpu[keys::gpu::driver] = ident->getDriver().toUtf8().constData();
|
||||||
|
|
||||||
_gpu.push_back(gpu);
|
_gpus.push_back(gpu);
|
||||||
_display = ident->getOutput();
|
_displays = ident->getOutput();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WINInstance::enumerateMemory() {
|
void WINInstance::enumerateMemory() {
|
||||||
|
@ -52,9 +53,9 @@ void WINInstance::enumerateMemory() {
|
||||||
statex.dwLength = sizeof(statex);
|
statex.dwLength = sizeof(statex);
|
||||||
GlobalMemoryStatusEx(&statex);
|
GlobalMemoryStatusEx(&statex);
|
||||||
int totalRam = statex.ullTotalPhys / 1024 / 1024;
|
int totalRam = statex.ullTotalPhys / 1024 / 1024;
|
||||||
ram[platform::keys::memTotal] = totalRam;
|
ram[platform::keys::memory::memTotal] = totalRam;
|
||||||
#endif
|
#endif
|
||||||
_memory.push_back(ram);
|
_memory = ram;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WINInstance::enumerateComputer(){
|
void WINInstance::enumerateComputer(){
|
||||||
|
@ -62,5 +63,8 @@ void WINInstance::enumerateComputer(){
|
||||||
_computer[keys::computer::vendor] = "";
|
_computer[keys::computer::vendor] = "";
|
||||||
_computer[keys::computer::model] = "";
|
_computer[keys::computer::model] = "";
|
||||||
|
|
||||||
|
auto sysInfo = QSysInfo();
|
||||||
|
|
||||||
|
_computer[keys::computer::OSVersion] = sysInfo.kernelVersion().toStdString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,9 @@ namespace platform {
|
||||||
class WINInstance : public Instance {
|
class WINInstance : public Instance {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void enumerateCpu() override;
|
void enumerateCpus() override;
|
||||||
|
void enumerateGpus() override;
|
||||||
void enumerateMemory() override;
|
void enumerateMemory() override;
|
||||||
void enumerateGpu() override;
|
|
||||||
void enumerateComputer () override;
|
void enumerateComputer () override;
|
||||||
};
|
};
|
||||||
} // namespace platform
|
} // namespace platform
|
||||||
|
|
|
@ -35,15 +35,6 @@ void DisplayPlugin::waitForPresent() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> DisplayPlugin::getHUDOperator() {
|
|
||||||
std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> hudOperator;
|
|
||||||
{
|
|
||||||
QMutexLocker locker(&_presentMutex);
|
|
||||||
hudOperator = _hudOperator;
|
|
||||||
}
|
|
||||||
return hudOperator;
|
|
||||||
}
|
|
||||||
|
|
||||||
glm::mat4 HmdDisplay::getEyeToHeadTransform(Eye eye) const {
|
glm::mat4 HmdDisplay::getEyeToHeadTransform(Eye eye) const {
|
||||||
static const glm::mat4 xform;
|
static const glm::mat4 xform;
|
||||||
return xform;
|
return xform;
|
||||||
|
|
|
@ -213,13 +213,12 @@ public:
|
||||||
void waitForPresent();
|
void waitForPresent();
|
||||||
float getAveragePresentTime() { return _movingAveragePresent.average / (float)USECS_PER_MSEC; } // in msec
|
float getAveragePresentTime() { return _movingAveragePresent.average / (float)USECS_PER_MSEC; } // in msec
|
||||||
|
|
||||||
std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> getHUDOperator();
|
|
||||||
|
|
||||||
static const QString& MENU_PATH();
|
static const QString& MENU_PATH();
|
||||||
|
|
||||||
// for updating plugin-related commands. Mimics the input plugin.
|
// for updating plugin-related commands. Mimics the input plugin.
|
||||||
virtual void pluginUpdate() = 0;
|
virtual void pluginUpdate() = 0;
|
||||||
|
|
||||||
|
virtual std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> getHUDOperator() { return nullptr; }
|
||||||
virtual StencilMaskMode getStencilMaskMode() const { return StencilMaskMode::NONE; }
|
virtual StencilMaskMode getStencilMaskMode() const { return StencilMaskMode::NONE; }
|
||||||
using StencilMaskMeshOperator = std::function<void(gpu::Batch&)>;
|
using StencilMaskMeshOperator = std::function<void(gpu::Batch&)>;
|
||||||
virtual StencilMaskMeshOperator getStencilMaskMeshOperator() { return nullptr; }
|
virtual StencilMaskMeshOperator getStencilMaskMeshOperator() { return nullptr; }
|
||||||
|
@ -234,8 +233,6 @@ protected:
|
||||||
|
|
||||||
gpu::ContextPointer _gpuContext;
|
gpu::ContextPointer _gpuContext;
|
||||||
|
|
||||||
std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> _hudOperator { std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)>() };
|
|
||||||
|
|
||||||
MovingAverage<float, 10> _movingAveragePresent;
|
MovingAverage<float, 10> _movingAveragePresent;
|
||||||
|
|
||||||
float _renderResolutionScale { 1.0f };
|
float _renderResolutionScale { 1.0f };
|
||||||
|
|
|
@ -49,8 +49,8 @@ bool RenderEventHandler::event(QEvent* e) {
|
||||||
return QObject::event(e);
|
return QObject::event(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderEventHandler::RenderEventHandler(SharedObject* shared, QThread* targetThread)
|
RenderEventHandler::RenderEventHandler(SharedObject* shared, QThread* targetThread) :
|
||||||
: _shared(shared) {
|
_shared(shared) {
|
||||||
// Create the GL canvas in the same thread as the share canvas
|
// Create the GL canvas in the same thread as the share canvas
|
||||||
if (!_canvas.create(SharedObject::getSharedContext())) {
|
if (!_canvas.create(SharedObject::getSharedContext())) {
|
||||||
qFatal("Unable to create new offscreen GL context");
|
qFatal("Unable to create new offscreen GL context");
|
||||||
|
@ -136,7 +136,8 @@ void RenderEventHandler::qmlRender(bool sceneGraphSync) {
|
||||||
|
|
||||||
resize();
|
resize();
|
||||||
|
|
||||||
{
|
|
||||||
|
if (_currentSize != QSize()) {
|
||||||
PROFILE_RANGE(render_qml_gl, "render");
|
PROFILE_RANGE(render_qml_gl, "render");
|
||||||
GLuint texture = SharedObject::getTextureCache().acquireTexture(_currentSize);
|
GLuint texture = SharedObject::getTextureCache().acquireTexture(_currentSize);
|
||||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, _fbo);
|
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, _fbo);
|
||||||
|
@ -146,7 +147,7 @@ void RenderEventHandler::qmlRender(bool sceneGraphSync) {
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
} else {
|
} else {
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
_shared->_quickWindow->setRenderTarget(_fbo, _currentSize);
|
_shared->setRenderTarget(_fbo, _currentSize);
|
||||||
_shared->_renderControl->render();
|
_shared->_renderControl->render();
|
||||||
}
|
}
|
||||||
_shared->_lastRenderTime = usecTimestampNow();
|
_shared->_lastRenderTime = usecTimestampNow();
|
||||||
|
@ -179,7 +180,7 @@ void RenderEventHandler::onQuit() {
|
||||||
_fbo = 0;
|
_fbo = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
_shared->shutdownRendering(_canvas, _currentSize);
|
_shared->shutdownRendering(_currentSize);
|
||||||
_canvas.doneCurrent();
|
_canvas.doneCurrent();
|
||||||
}
|
}
|
||||||
_canvas.moveToThreadWithContext(qApp->thread());
|
_canvas.moveToThreadWithContext(qApp->thread());
|
||||||
|
|
|
@ -78,7 +78,6 @@ SharedObject::SharedObject() {
|
||||||
QObject::connect(qApp, &QCoreApplication::aboutToQuit, this, &SharedObject::onAboutToQuit);
|
QObject::connect(qApp, &QCoreApplication::aboutToQuit, this, &SharedObject::onAboutToQuit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SharedObject::~SharedObject() {
|
SharedObject::~SharedObject() {
|
||||||
// After destroy returns, the rendering thread should be gone
|
// After destroy returns, the rendering thread should be gone
|
||||||
destroy();
|
destroy();
|
||||||
|
@ -173,7 +172,6 @@ void SharedObject::setRootItem(QQuickItem* rootItem) {
|
||||||
QObject::connect(_renderControl, &QQuickRenderControl::renderRequested, this, &SharedObject::requestRender);
|
QObject::connect(_renderControl, &QQuickRenderControl::renderRequested, this, &SharedObject::requestRender);
|
||||||
QObject::connect(_renderControl, &QQuickRenderControl::sceneChanged, this, &SharedObject::requestRenderSync);
|
QObject::connect(_renderControl, &QQuickRenderControl::sceneChanged, this, &SharedObject::requestRenderSync);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SharedObject::destroy() {
|
void SharedObject::destroy() {
|
||||||
|
@ -220,10 +218,8 @@ void SharedObject::destroy() {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define SINGLE_QML_ENGINE 0
|
#define SINGLE_QML_ENGINE 0
|
||||||
|
|
||||||
|
|
||||||
#if SINGLE_QML_ENGINE
|
#if SINGLE_QML_ENGINE
|
||||||
static QQmlEngine* globalEngine{ nullptr };
|
static QQmlEngine* globalEngine{ nullptr };
|
||||||
static size_t globalEngineRefCount{ 0 };
|
static size_t globalEngineRefCount{ 0 };
|
||||||
|
@ -344,6 +340,11 @@ void SharedObject::setSize(const QSize& size) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SharedObject::setMaxFps(uint8_t maxFps) {
|
||||||
|
QMutexLocker locker(&_mutex);
|
||||||
|
_maxFps = maxFps;
|
||||||
|
}
|
||||||
|
|
||||||
bool SharedObject::preRender(bool sceneGraphSync) {
|
bool SharedObject::preRender(bool sceneGraphSync) {
|
||||||
#ifndef DISABLE_QML
|
#ifndef DISABLE_QML
|
||||||
QMutexLocker lock(&_mutex);
|
QMutexLocker lock(&_mutex);
|
||||||
|
@ -370,9 +371,9 @@ bool SharedObject::preRender(bool sceneGraphSync) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SharedObject::shutdownRendering(OffscreenGLCanvas& canvas, const QSize& size) {
|
void SharedObject::shutdownRendering(const QSize& size) {
|
||||||
QMutexLocker locker(&_mutex);
|
QMutexLocker locker(&_mutex);
|
||||||
if (size != QSize(0, 0)) {
|
if (size != QSize()) {
|
||||||
getTextureCache().releaseSize(size);
|
getTextureCache().releaseSize(size);
|
||||||
if (_latestTextureAndFence.first) {
|
if (_latestTextureAndFence.first) {
|
||||||
getTextureCache().releaseTexture(_latestTextureAndFence);
|
getTextureCache().releaseTexture(_latestTextureAndFence);
|
||||||
|
@ -380,19 +381,17 @@ void SharedObject::shutdownRendering(OffscreenGLCanvas& canvas, const QSize& siz
|
||||||
}
|
}
|
||||||
#ifndef DISABLE_QML
|
#ifndef DISABLE_QML
|
||||||
_renderControl->invalidate();
|
_renderControl->invalidate();
|
||||||
canvas.doneCurrent();
|
|
||||||
#endif
|
#endif
|
||||||
wake();
|
wake();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SharedObject::isQuit() {
|
bool SharedObject::isQuit() const {
|
||||||
QMutexLocker locker(&_mutex);
|
QMutexLocker locker(&_mutex);
|
||||||
return _quit;
|
return _quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SharedObject::requestRender() {
|
void SharedObject::requestRender() {
|
||||||
// Don't queue multiple renders
|
if (_quit) {
|
||||||
if (_renderRequested) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_renderRequested = true;
|
_renderRequested = true;
|
||||||
|
@ -402,18 +401,13 @@ void SharedObject::requestRenderSync() {
|
||||||
if (_quit) {
|
if (_quit) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
_renderRequested = true;
|
||||||
{
|
|
||||||
QMutexLocker lock(&_mutex);
|
|
||||||
_syncRequested = true;
|
_syncRequested = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
requestRender();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SharedObject::fetchTexture(TextureAndFence& textureAndFence) {
|
bool SharedObject::fetchTexture(TextureAndFence& textureAndFence) {
|
||||||
QMutexLocker locker(&_mutex);
|
QMutexLocker locker(&_mutex);
|
||||||
if (0 == _latestTextureAndFence.first) {
|
if (!_latestTextureAndFence.first) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
textureAndFence = { 0, 0 };
|
textureAndFence = { 0, 0 };
|
||||||
|
@ -421,8 +415,7 @@ bool SharedObject::fetchTexture(TextureAndFence& textureAndFence) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void hifi::qml::impl::SharedObject::addToDeletionList(QObject * object)
|
void SharedObject::addToDeletionList(QObject* object) {
|
||||||
{
|
|
||||||
_deletionList.append(QPointer<QObject>(object));
|
_deletionList.append(QPointer<QObject>(object));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -469,11 +462,9 @@ void SharedObject::onRender() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QMutexLocker lock(&_mutex);
|
|
||||||
if (_syncRequested) {
|
if (_syncRequested) {
|
||||||
lock.unlock();
|
|
||||||
_renderControl->polishItems();
|
_renderControl->polishItems();
|
||||||
lock.relock();
|
QMutexLocker lock(&_mutex);
|
||||||
QCoreApplication::postEvent(_renderObject, new OffscreenEvent(OffscreenEvent::RenderSync));
|
QCoreApplication::postEvent(_renderObject, new OffscreenEvent(OffscreenEvent::RenderSync));
|
||||||
// sync and render request, main and render threads must be synchronized
|
// sync and render request, main and render threads must be synchronized
|
||||||
wait();
|
wait();
|
||||||
|
@ -494,13 +485,11 @@ void SharedObject::onTimer() {
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&_mutex);
|
QMutexLocker locker(&_mutex);
|
||||||
// Don't queue more than one frame at a time
|
// Don't queue more than one frame at a time
|
||||||
if (0 != _latestTextureAndFence.first) {
|
if (_latestTextureAndFence.first) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
{
|
if (!_maxFps) {
|
||||||
if (_maxFps == 0) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto minRenderInterval = USECS_PER_SECOND / _maxFps;
|
auto minRenderInterval = USECS_PER_SECOND / _maxFps;
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
|
|
||||||
#include "TextureCache.h"
|
#include "TextureCache.h"
|
||||||
|
|
||||||
|
|
||||||
class QWindow;
|
class QWindow;
|
||||||
class QTimer;
|
class QTimer;
|
||||||
class QQuickWindow;
|
class QQuickWindow;
|
||||||
|
@ -24,7 +23,6 @@ class QQuickItem;
|
||||||
class QOpenGLContext;
|
class QOpenGLContext;
|
||||||
class QQmlEngine;
|
class QQmlEngine;
|
||||||
class QQmlContext;
|
class QQmlContext;
|
||||||
class OffscreenGLCanvas;
|
|
||||||
|
|
||||||
namespace hifi { namespace qml {
|
namespace hifi { namespace qml {
|
||||||
|
|
||||||
|
@ -51,11 +49,11 @@ public:
|
||||||
void create(OffscreenSurface* surface);
|
void create(OffscreenSurface* surface);
|
||||||
void setRootItem(QQuickItem* rootItem);
|
void setRootItem(QQuickItem* rootItem);
|
||||||
void destroy();
|
void destroy();
|
||||||
bool isQuit();
|
bool isQuit() const;
|
||||||
|
|
||||||
QSize getSize() const;
|
QSize getSize() const;
|
||||||
void setSize(const QSize& size);
|
void setSize(const QSize& size);
|
||||||
void setMaxFps(uint8_t maxFps) { _maxFps = maxFps; }
|
void setMaxFps(uint8_t maxFps);
|
||||||
|
|
||||||
QQuickWindow* getWindow() { return _quickWindow; }
|
QQuickWindow* getWindow() { return _quickWindow; }
|
||||||
QQuickItem* getRootItem() { return _rootItem; }
|
QQuickItem* getRootItem() { return _rootItem; }
|
||||||
|
@ -72,7 +70,7 @@ private:
|
||||||
bool event(QEvent* e) override;
|
bool event(QEvent* e) override;
|
||||||
|
|
||||||
bool preRender(bool sceneGraphSync);
|
bool preRender(bool sceneGraphSync);
|
||||||
void shutdownRendering(OffscreenGLCanvas& canvas, const QSize& size);
|
void shutdownRendering(const QSize& size);
|
||||||
// Called by the render event handler, from the render thread
|
// Called by the render event handler, from the render thread
|
||||||
void initializeRenderControl(QOpenGLContext* context);
|
void initializeRenderControl(QOpenGLContext* context);
|
||||||
void releaseTextureAndFence();
|
void releaseTextureAndFence();
|
||||||
|
@ -95,7 +93,6 @@ private:
|
||||||
|
|
||||||
// Texture management
|
// Texture management
|
||||||
TextureAndFence _latestTextureAndFence { 0, 0 };
|
TextureAndFence _latestTextureAndFence { 0, 0 };
|
||||||
QQuickItem* _item{ nullptr };
|
|
||||||
QQuickItem* _rootItem { nullptr };
|
QQuickItem* _rootItem { nullptr };
|
||||||
QQuickWindow* _quickWindow { nullptr };
|
QQuickWindow* _quickWindow { nullptr };
|
||||||
QQmlContext* _qmlContext { nullptr };
|
QQmlContext* _qmlContext { nullptr };
|
||||||
|
|
|
@ -35,7 +35,6 @@ public:
|
||||||
using Size = uint64_t;
|
using Size = uint64_t;
|
||||||
|
|
||||||
struct TextureSet {
|
struct TextureSet {
|
||||||
Size textureSize;
|
|
||||||
// The number of surfaces with this size
|
// The number of surfaces with this size
|
||||||
size_t clientCount { 0 };
|
size_t clientCount { 0 };
|
||||||
ValueList returnedTextures;
|
ValueList returnedTextures;
|
||||||
|
|
|
@ -111,7 +111,7 @@ void CompositeHUD::run(const RenderContextPointer& renderContext, const gpu::Fra
|
||||||
assert(renderContext->args->_context);
|
assert(renderContext->args->_context);
|
||||||
|
|
||||||
// We do not want to render HUD elements in secondary camera
|
// We do not want to render HUD elements in secondary camera
|
||||||
if (renderContext->args->_renderMode == RenderArgs::RenderMode::SECONDARY_CAMERA_RENDER_MODE) {
|
if (nsightActive() || renderContext->args->_renderMode == RenderArgs::RenderMode::SECONDARY_CAMERA_RENDER_MODE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -136,8 +136,8 @@ namespace render {
|
||||||
render::ScenePointer _scene;
|
render::ScenePointer _scene;
|
||||||
int8_t _cameraMode { -1 };
|
int8_t _cameraMode { -1 };
|
||||||
|
|
||||||
std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> _hudOperator;
|
std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> _hudOperator { nullptr };
|
||||||
gpu::TexturePointer _hudTexture;
|
gpu::TexturePointer _hudTexture { nullptr };
|
||||||
|
|
||||||
bool _takingSnapshot { false };
|
bool _takingSnapshot { false };
|
||||||
StencilMaskMode _stencilMaskMode { StencilMaskMode::NONE };
|
StencilMaskMode _stencilMaskMode { StencilMaskMode::NONE };
|
||||||
|
|
|
@ -284,10 +284,11 @@ GPUIdent* GPUIdent::ensureQuery(const QString& vendor, const QString& renderer)
|
||||||
|
|
||||||
AdapterEntry entry = *outy;
|
AdapterEntry entry = *outy;
|
||||||
for (auto test = entry.second.begin(); test != entry.second.end(); ++test) {
|
for (auto test = entry.second.begin(); test != entry.second.end(); ++test) {
|
||||||
|
std::wstring wDeviceName(test->DeviceName);
|
||||||
|
std::string deviceName(wDeviceName.begin(), wDeviceName.end());
|
||||||
|
|
||||||
nlohmann::json output = {};
|
nlohmann::json output = {};
|
||||||
output["description"] = entry.first.first.Description;
|
output["model"] = deviceName;
|
||||||
output["deviceName"]= test->DeviceName;
|
|
||||||
output["coordinatesleft"] = test->DesktopCoordinates.left;
|
output["coordinatesleft"] = test->DesktopCoordinates.left;
|
||||||
output["coordinatesright"] = test->DesktopCoordinates.right;
|
output["coordinatesright"] = test->DesktopCoordinates.right;
|
||||||
output["coordinatestop"] = test->DesktopCoordinates.top;
|
output["coordinatestop"] = test->DesktopCoordinates.top;
|
||||||
|
|
|
@ -17,7 +17,8 @@
|
||||||
(function () {
|
(function () {
|
||||||
|
|
||||||
var LEAP_MOTION_NAME = "LeapMotion";
|
var LEAP_MOTION_NAME = "LeapMotion";
|
||||||
var handTouchEnabled = true;
|
// Hand touch is disabled due to twitchy finger bug when walking near walls or tables. see BUGZ-154.
|
||||||
|
var handTouchEnabled = false;
|
||||||
var leapMotionEnabled = Controller.getRunningInputDeviceNames().indexOf(LEAP_MOTION_NAME) >= 0;
|
var leapMotionEnabled = Controller.getRunningInputDeviceNames().indexOf(LEAP_MOTION_NAME) >= 0;
|
||||||
var MSECONDS_AFTER_LOAD = 2000;
|
var MSECONDS_AFTER_LOAD = 2000;
|
||||||
var updateFingerWithIndex = 0;
|
var updateFingerWithIndex = 0;
|
||||||
|
|
|
@ -17,7 +17,8 @@
|
||||||
(function () {
|
(function () {
|
||||||
|
|
||||||
var LEAP_MOTION_NAME = "LeapMotion";
|
var LEAP_MOTION_NAME = "LeapMotion";
|
||||||
var handTouchEnabled = true;
|
// Hand touch is disabled due to twitchy finger bug when walking near walls or tables. see BUGZ-154.
|
||||||
|
var handTouchEnabled = false;
|
||||||
var leapMotionEnabled = Controller.getRunningInputDeviceNames().indexOf(LEAP_MOTION_NAME) >= 0;
|
var leapMotionEnabled = Controller.getRunningInputDeviceNames().indexOf(LEAP_MOTION_NAME) >= 0;
|
||||||
var MSECONDS_AFTER_LOAD = 2000;
|
var MSECONDS_AFTER_LOAD = 2000;
|
||||||
var updateFingerWithIndex = 0;
|
var updateFingerWithIndex = 0;
|
||||||
|
|
|
@ -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 1.0
|
import hifi.dialogs 1.0
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: newMaterialDialog
|
id: newMaterialDialog
|
||||||
|
|
|
@ -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 1.0
|
import hifi.dialogs 1.0
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: newModelDialog
|
id: newModelDialog
|
||||||
|
|
Loading…
Reference in a new issue