mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 17:23:29 +02:00
Merge pull request #15052 from amerhifi/quest-demo
case 21485: removing quest-demo specific changes
This commit is contained in:
commit
cc9a3e2541
39 changed files with 352 additions and 119 deletions
|
@ -66,10 +66,10 @@ android {
|
||||||
}
|
}
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
release {
|
release {
|
||||||
storeFile project.hasProperty("HIFI_ANDROID_KEYSTORE") ? file(HIFI_ANDROID_KEYSTORE) : null
|
storeFile project.hasProperty("HIFI_ANDROID_KEYSTORE") ? file(HIFI_ANDROID_KEYSTORE) : file('../keystore.jks')
|
||||||
storePassword project.hasProperty("HIFI_ANDROID_KEYSTORE_PASSWORD") ? HIFI_ANDROID_KEYSTORE_PASSWORD : ''
|
storePassword project.hasProperty("HIFI_ANDROID_KEYSTORE_PASSWORD") ? HIFI_ANDROID_KEYSTORE_PASSWORD : 'password'
|
||||||
keyAlias project.hasProperty("HIFI_ANDROID_KEY_ALIAS") ? HIFI_ANDROID_KEY_ALIAS : ''
|
keyAlias project.hasProperty("HIFI_ANDROID_KEY_ALIAS") ? HIFI_ANDROID_KEY_ALIAS : 'key0'
|
||||||
keyPassword project.hasProperty("HIFI_ANDROID_KEY_PASSWORD") ? HIFI_ANDROID_KEY_PASSWORD : ''
|
keyPassword project.hasProperty("HIFI_ANDROID_KEY_PASSWORD") ? HIFI_ANDROID_KEY_PASSWORD : 'password'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,10 +90,7 @@ android {
|
||||||
release {
|
release {
|
||||||
minifyEnabled false
|
minifyEnabled false
|
||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||||
signingConfig project.hasProperty("HIFI_ANDROID_KEYSTORE") &&
|
signingConfig signingConfigs.release
|
||||||
project.hasProperty("HIFI_ANDROID_KEYSTORE_PASSWORD") &&
|
|
||||||
project.hasProperty("HIFI_ANDROID_KEY_ALIAS") &&
|
|
||||||
project.hasProperty("HIFI_ANDROID_KEY_PASSWORD")? signingConfigs.release : null
|
|
||||||
buildConfigField "String", "BACKTRACE_URL", "\"" + (System.getenv("CMAKE_BACKTRACE_URL") ? System.getenv("CMAKE_BACKTRACE_URL") : '') + "\""
|
buildConfigField "String", "BACKTRACE_URL", "\"" + (System.getenv("CMAKE_BACKTRACE_URL") ? System.getenv("CMAKE_BACKTRACE_URL") : '') + "\""
|
||||||
buildConfigField "String", "BACKTRACE_TOKEN", "\"" + (System.getenv("CMAKE_BACKTRACE_TOKEN") ? System.getenv("CMAKE_BACKTRACE_TOKEN") : '') + "\""
|
buildConfigField "String", "BACKTRACE_TOKEN", "\"" + (System.getenv("CMAKE_BACKTRACE_TOKEN") ? System.getenv("CMAKE_BACKTRACE_TOKEN") : '') + "\""
|
||||||
buildConfigField "String", "OAUTH_CLIENT_ID", "\"" + (System.getenv("OAUTH_CLIENT_ID") ? System.getenv("OAUTH_CLIENT_ID") : '') + "\""
|
buildConfigField "String", "OAUTH_CLIENT_ID", "\"" + (System.getenv("OAUTH_CLIENT_ID") ? System.getenv("OAUTH_CLIENT_ID") : '') + "\""
|
||||||
|
|
BIN
android/apps/keystore.jks
Normal file
BIN
android/apps/keystore.jks
Normal file
Binary file not shown.
|
@ -44,10 +44,10 @@ android {
|
||||||
}
|
}
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
release {
|
release {
|
||||||
storeFile project.hasProperty("HIFI_ANDROID_KEYSTORE") ? file(HIFI_ANDROID_KEYSTORE) : null
|
storeFile project.hasProperty("HIFI_ANDROID_KEYSTORE") ? file(HIFI_ANDROID_KEYSTORE) : file('../keystore.jks')
|
||||||
storePassword project.hasProperty("HIFI_ANDROID_KEYSTORE_PASSWORD") ? HIFI_ANDROID_KEYSTORE_PASSWORD : ''
|
storePassword project.hasProperty("HIFI_ANDROID_KEYSTORE_PASSWORD") ? HIFI_ANDROID_KEYSTORE_PASSWORD : 'password'
|
||||||
keyAlias project.hasProperty("HIFI_ANDROID_KEY_ALIAS") ? HIFI_ANDROID_KEY_ALIAS : ''
|
keyAlias project.hasProperty("HIFI_ANDROID_KEY_ALIAS") ? HIFI_ANDROID_KEY_ALIAS : 'key0'
|
||||||
keyPassword project.hasProperty("HIFI_ANDROID_KEY_PASSWORD") ? HIFI_ANDROID_KEY_PASSWORD : ''
|
keyPassword project.hasProperty("HIFI_ANDROID_KEY_PASSWORD") ? HIFI_ANDROID_KEY_PASSWORD : 'password'
|
||||||
v2SigningEnabled false
|
v2SigningEnabled false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -133,12 +133,6 @@ android {
|
||||||
assetList.each { file -> out.println(file) }
|
assetList.each { file -> out.println(file) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
variant.outputs.all {
|
|
||||||
if (RELEASE_NUMBER != '0') {
|
|
||||||
outputFileName = "app_" + RELEASE_NUMBER + "_" + RELEASE_TYPE + ".apk"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ extern "C" {
|
||||||
Java_io_highfidelity_oculus_OculusMobileActivity_nativeInitOculusPlatform(JNIEnv *env, jobject obj){
|
Java_io_highfidelity_oculus_OculusMobileActivity_nativeInitOculusPlatform(JNIEnv *env, jobject obj){
|
||||||
initOculusPlatform(env, obj);
|
initOculusPlatform(env, obj);
|
||||||
}
|
}
|
||||||
QAndroidJniObject __interfaceActivity;
|
QAndroidJniObject __interfaceActivity;
|
||||||
|
|
||||||
JNIEXPORT void JNICALL
|
JNIEXPORT void JNICALL
|
||||||
Java_io_highfidelity_oculus_OculusMobileActivity_questNativeOnCreate(JNIEnv *env, jobject obj) {
|
Java_io_highfidelity_oculus_OculusMobileActivity_questNativeOnCreate(JNIEnv *env, jobject obj) {
|
||||||
|
@ -80,6 +80,10 @@ QAndroidJniObject __interfaceActivity;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL
|
||||||
|
Java_io_highfidelity_oculus_OculusMobileActivity_questNativeAwayMode(JNIEnv *env, jobject obj) {
|
||||||
|
AndroidHelper::instance().toggleAwayMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
JNIEXPORT void Java_io_highfidelity_oculus_OculusMobileActivity_questOnAppAfterLoad(JNIEnv* env, jobject obj) {
|
JNIEXPORT void Java_io_highfidelity_oculus_OculusMobileActivity_questOnAppAfterLoad(JNIEnv* env, jobject obj) {
|
||||||
|
|
|
@ -5,6 +5,7 @@ import io.highfidelity.oculus.OculusMobileActivity;
|
||||||
import io.highfidelity.utils.HifiUtils;
|
import io.highfidelity.utils.HifiUtils;
|
||||||
|
|
||||||
public class InterfaceActivity extends OculusMobileActivity {
|
public class InterfaceActivity extends OculusMobileActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
HifiUtils.upackAssets(getAssets(), getCacheDir().getAbsolutePath());
|
HifiUtils.upackAssets(getAssets(), getCacheDir().getAbsolutePath());
|
||||||
|
|
|
@ -5,6 +5,7 @@ import android.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import io.highfidelity.oculus.OculusMobileActivity;
|
import io.highfidelity.oculus.OculusMobileActivity;
|
||||||
import io.highfidelity.utils.HifiUtils;
|
import io.highfidelity.utils.HifiUtils;
|
||||||
|
@ -19,9 +20,18 @@ public class PermissionsChecker extends Activity {
|
||||||
Manifest.permission.CAMERA
|
Manifest.permission.CAMERA
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static final String EXTRA_ARGS = "args";
|
||||||
|
private String mArgs;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
mArgs =(getIntent().getStringExtra(EXTRA_ARGS));
|
||||||
|
|
||||||
|
if(!TextUtils.isEmpty(mArgs)) {
|
||||||
|
System.out.println("Application launched with following args: " + mArgs);
|
||||||
|
}
|
||||||
|
|
||||||
requestAppPermissions(REQUIRED_PERMISSIONS,REQUEST_PERMISSIONS);
|
requestAppPermissions(REQUIRED_PERMISSIONS,REQUEST_PERMISSIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +57,13 @@ public class PermissionsChecker extends Activity {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void launchActivityWithPermissions() {
|
private void launchActivityWithPermissions() {
|
||||||
startActivity(new Intent(this, InterfaceActivity.class));
|
Intent intent= new Intent(this, InterfaceActivity.class);
|
||||||
|
|
||||||
|
if(!TextUtils.isEmpty(mArgs)) {
|
||||||
|
intent.putExtra("applicationArguments", mArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
startActivity(intent);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,35 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -xeuo pipefail
|
set -xeuo pipefail
|
||||||
|
|
||||||
|
ANDROID_BUILD_TYPE=release
|
||||||
|
ANDROID_BUILD_TARGET=assembleRelease
|
||||||
|
|
||||||
|
if [[ "$RELEASE_TYPE" == "PR" ]]; then
|
||||||
|
ANDROID_APK_SUFFIX=PR${RELEASE_NUMBER}-${SHA7}.apk ;
|
||||||
|
elif [[ "${STABLE_BUILD}" == "1" ]]; then
|
||||||
|
ANDROID_APK_SUFFIX=${RELEASE_NUMBER}.apk ;
|
||||||
|
else
|
||||||
|
ANDROID_APK_SUFFIX=${RELEASE_NUMBER}-${SHA7}.apk ;
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Interface build
|
||||||
|
ANDROID_APP=interface
|
||||||
|
ANDROID_OUTPUT_DIR=./apps/${ANDROID_APP}/build/outputs/apk/${ANDROID_BUILD_TYPE}
|
||||||
|
ANDROID_OUTPUT_FILE=${ANDROID_APP}-${ANDROID_BUILD_TYPE}.apk
|
||||||
|
ANDROID_APK_NAME=HighFidelity-Beta-${ANDROID_APK_SUFFIX}
|
||||||
./gradlew -PHIFI_ANDROID_PRECOMPILED=${HIFI_ANDROID_PRECOMPILED} -PVERSION_CODE=${VERSION_CODE} -PRELEASE_NUMBER=${RELEASE_NUMBER} -PRELEASE_TYPE=${RELEASE_TYPE} ${ANDROID_APP}:${ANDROID_BUILD_TARGET}
|
./gradlew -PHIFI_ANDROID_PRECOMPILED=${HIFI_ANDROID_PRECOMPILED} -PVERSION_CODE=${VERSION_CODE} -PRELEASE_NUMBER=${RELEASE_NUMBER} -PRELEASE_TYPE=${RELEASE_TYPE} ${ANDROID_APP}:${ANDROID_BUILD_TARGET}
|
||||||
|
cp ${ANDROID_OUTPUT_DIR}/${ANDROID_OUTPUT_FILE} ./${ANDROID_APK_NAME}
|
||||||
|
|
||||||
|
# Quest Interface build
|
||||||
|
ANDROID_APP=questInterface
|
||||||
|
ANDROID_OUTPUT_DIR=./apps/${ANDROID_APP}/build/outputs/apk/${ANDROID_BUILD_TYPE}
|
||||||
|
ANDROID_OUTPUT_FILE=${ANDROID_APP}-${ANDROID_BUILD_TYPE}.apk
|
||||||
|
ANDROID_APK_NAME=HighFidelity-Quest-Beta-${ANDROID_APK_SUFFIX}
|
||||||
|
./gradlew -PHIFI_ANDROID_PRECOMPILED=${HIFI_ANDROID_PRECOMPILED} -PVERSION_CODE=${VERSION_CODE} -PRELEASE_NUMBER=${RELEASE_NUMBER} -PRELEASE_TYPE=${RELEASE_TYPE} ${ANDROID_APP}:${ANDROID_BUILD_TARGET} || true
|
||||||
|
cp ${ANDROID_OUTPUT_DIR}/${ANDROID_OUTPUT_FILE} ./${ANDROID_APK_NAME} || true
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# This is the actual output from gradle, which no longer attempts to muck with the naming of the APK
|
|
||||||
OUTPUT_APK=./apps/${ANDROID_APP}/build/outputs/apk/${ANDROID_BUILD_DIR}/${ANDROID_BUILT_APK_NAME}
|
|
||||||
# This is the APK name requested by Jenkins
|
|
||||||
TARGET_APK=./${ANDROID_APK_NAME}
|
|
||||||
# Make sure this matches up with the new ARTIFACT_EXPRESSION for jenkins builds, which should be "android/*.apk"
|
|
||||||
cp ${OUTPUT_APK} ${TARGET_APK}
|
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ docker build --build-arg BUILD_UID=`id -u` -t "${DOCKER_IMAGE_NAME}" -f docker/D
|
||||||
# So make sure we use VERSION_CODE consistently
|
# So make sure we use VERSION_CODE consistently
|
||||||
test -z "$VERSION_CODE" && export VERSION_CODE=$VERSION
|
test -z "$VERSION_CODE" && export VERSION_CODE=$VERSION
|
||||||
|
|
||||||
|
# FIXME figure out which of these actually need to be forwarded and which can be eliminated
|
||||||
docker run \
|
docker run \
|
||||||
--rm \
|
--rm \
|
||||||
--security-opt seccomp:unconfined \
|
--security-opt seccomp:unconfined \
|
||||||
|
@ -27,6 +28,7 @@ docker run \
|
||||||
-e OAUTH_CLIENT_SECRET \
|
-e OAUTH_CLIENT_SECRET \
|
||||||
-e OAUTH_CLIENT_ID \
|
-e OAUTH_CLIENT_ID \
|
||||||
-e OAUTH_REDIRECT_URI \
|
-e OAUTH_REDIRECT_URI \
|
||||||
|
-e SHA7 \
|
||||||
-e VERSION_CODE \
|
-e VERSION_CODE \
|
||||||
"${DOCKER_IMAGE_NAME}" \
|
"${DOCKER_IMAGE_NAME}" \
|
||||||
sh -c "./build_android.sh"
|
sh -c "./build_android.sh"
|
||||||
|
|
|
@ -73,7 +73,7 @@ RUN mkdir "$HIFI_BASE" && \
|
||||||
|
|
||||||
RUN git clone https://github.com/jherico/hifi.git && \
|
RUN git clone https://github.com/jherico/hifi.git && \
|
||||||
cd ~/hifi && \
|
cd ~/hifi && \
|
||||||
git checkout feature/quest_frame_player
|
git checkout quest/build
|
||||||
|
|
||||||
WORKDIR /home/jenkins/hifi
|
WORKDIR /home/jenkins/hifi
|
||||||
|
|
||||||
|
|
|
@ -34,11 +34,16 @@ public class OculusMobileActivity extends QtActivity implements SurfaceHolder.Ca
|
||||||
private native void questNativeOnResume();
|
private native void questNativeOnResume();
|
||||||
private native void questOnAppAfterLoad();
|
private native void questOnAppAfterLoad();
|
||||||
|
|
||||||
|
private native void questNativeAwayMode();
|
||||||
private SurfaceView mView;
|
private SurfaceView mView;
|
||||||
private SurfaceHolder mSurfaceHolder;
|
private SurfaceHolder mSurfaceHolder;
|
||||||
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
if(getIntent().hasExtra("applicationArguments")){
|
||||||
|
super.APPLICATION_PARAMETERS=getIntent().getStringExtra("applicationArguments");
|
||||||
|
}
|
||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
Log.w(TAG, "QQQ onCreate");
|
Log.w(TAG, "QQQ onCreate");
|
||||||
|
@ -51,6 +56,7 @@ public class OculusMobileActivity extends QtActivity implements SurfaceHolder.Ca
|
||||||
nativeOnCreate();
|
nativeOnCreate();
|
||||||
questNativeOnCreate();
|
questNativeOnCreate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onAppLoadedComplete() {
|
public void onAppLoadedComplete() {
|
||||||
Log.w(TAG, "QQQ Load Completed");
|
Log.w(TAG, "QQQ Load Completed");
|
||||||
runOnUiThread(() -> {
|
runOnUiThread(() -> {
|
||||||
|
@ -62,7 +68,8 @@ public class OculusMobileActivity extends QtActivity implements SurfaceHolder.Ca
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
Log.w(TAG, "QQQ onDestroy");
|
Log.w(TAG, "QQQ onDestroy");
|
||||||
|
isPausing=false;
|
||||||
|
super.onStop();
|
||||||
nativeOnSurfaceChanged(null);
|
nativeOnSurfaceChanged(null);
|
||||||
|
|
||||||
Log.w(TAG, "QQQ onDestroy -- SUPER onDestroy");
|
Log.w(TAG, "QQQ onDestroy -- SUPER onDestroy");
|
||||||
|
@ -78,6 +85,7 @@ public class OculusMobileActivity extends QtActivity implements SurfaceHolder.Ca
|
||||||
|
|
||||||
questNativeOnResume();
|
questNativeOnResume();
|
||||||
nativeOnResume();
|
nativeOnResume();
|
||||||
|
isPausing=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -87,40 +95,42 @@ public class OculusMobileActivity extends QtActivity implements SurfaceHolder.Ca
|
||||||
|
|
||||||
questNativeOnPause();
|
questNativeOnPause();
|
||||||
nativeOnPause();
|
nativeOnPause();
|
||||||
|
isPausing=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStop(){
|
protected void onStop(){
|
||||||
super.onStop();
|
super.onStop();
|
||||||
Log.w(TAG, "QQQ Onstop called");
|
Log.w(TAG, "QQQ_ Onstop called");
|
||||||
|
questNativeAwayMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onRestart(){
|
protected void onRestart() {
|
||||||
super.onRestart();
|
super.onRestart();
|
||||||
Log.w(TAG, "QQQ onRestart called ****");
|
Log.w(TAG, "QQQ_ onRestart called");
|
||||||
questOnAppAfterLoad();
|
questOnAppAfterLoad();
|
||||||
|
questNativeAwayMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void surfaceCreated(SurfaceHolder holder) {
|
public void surfaceCreated(SurfaceHolder holder) {
|
||||||
Log.w(TAG, "QQQ surfaceCreated ************************************");
|
Log.w(TAG, "QQQ_ surfaceCreated");
|
||||||
nativeOnSurfaceChanged(holder.getSurface());
|
nativeOnSurfaceChanged(holder.getSurface());
|
||||||
mSurfaceHolder = holder;
|
mSurfaceHolder = holder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
|
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
|
||||||
Log.w(TAG, "QQQ surfaceChanged");
|
Log.w(TAG, "QQQ_ surfaceChanged");
|
||||||
nativeOnSurfaceChanged(holder.getSurface());
|
nativeOnSurfaceChanged(holder.getSurface());
|
||||||
mSurfaceHolder = holder;
|
mSurfaceHolder = holder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void surfaceDestroyed(SurfaceHolder holder) {
|
public void surfaceDestroyed(SurfaceHolder holder) {
|
||||||
Log.w(TAG, "QQQ surfaceDestroyed ***************************************************");
|
Log.w(TAG, "QQQ_ surfaceDestroyed");
|
||||||
nativeOnSurfaceChanged(null);
|
nativeOnSurfaceChanged(null);
|
||||||
mSurfaceHolder = null;
|
mSurfaceHolder = null;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -70,6 +70,7 @@ public class QtActivity extends Activity {
|
||||||
public final String QT_ANDROID_DEFAULT_THEME = QT_ANDROID_THEMES[0]; // sets the default theme.
|
public final String QT_ANDROID_DEFAULT_THEME = QT_ANDROID_THEMES[0]; // sets the default theme.
|
||||||
private QtActivityLoader m_loader = new QtActivityLoader(this);
|
private QtActivityLoader m_loader = new QtActivityLoader(this);
|
||||||
|
|
||||||
|
public boolean isPausing=false;
|
||||||
public QtActivity() {
|
public QtActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -650,9 +651,13 @@ public class QtActivity extends Activity {
|
||||||
@Override
|
@Override
|
||||||
protected void onStop() {
|
protected void onStop() {
|
||||||
super.onStop();
|
super.onStop();
|
||||||
QtApplication.invokeDelegate();
|
|
||||||
|
if(!isPausing){
|
||||||
|
QtApplication.invokeDelegate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -45,6 +45,10 @@ void AndroidHelper::notifyBeforeEnterBackground() {
|
||||||
emit beforeEnterBackground();
|
emit beforeEnterBackground();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AndroidHelper::notifyToggleAwayMode() {
|
||||||
|
emit toggleAwayMode();
|
||||||
|
}
|
||||||
|
|
||||||
void AndroidHelper::notifyEnterBackground() {
|
void AndroidHelper::notifyEnterBackground() {
|
||||||
emit enterBackground();
|
emit enterBackground();
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ public:
|
||||||
void notifyEnterForeground();
|
void notifyEnterForeground();
|
||||||
void notifyBeforeEnterBackground();
|
void notifyBeforeEnterBackground();
|
||||||
void notifyEnterBackground();
|
void notifyEnterBackground();
|
||||||
|
void notifyToggleAwayMode();
|
||||||
|
|
||||||
void performHapticFeedback(int duration);
|
void performHapticFeedback(int duration);
|
||||||
void processURL(const QString &url);
|
void processURL(const QString &url);
|
||||||
|
@ -55,7 +56,7 @@ signals:
|
||||||
void enterForeground();
|
void enterForeground();
|
||||||
void beforeEnterBackground();
|
void beforeEnterBackground();
|
||||||
void enterBackground();
|
void enterBackground();
|
||||||
|
void toggleAwayMode();
|
||||||
void hapticFeedbackRequested(int duration);
|
void hapticFeedbackRequested(int duration);
|
||||||
|
|
||||||
void handleSignupCompleted();
|
void handleSignupCompleted();
|
||||||
|
|
|
@ -1756,6 +1756,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
|
||||||
#endif
|
#endif
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// Setup the _keyboardMouseDevice, _touchscreenDevice, _touchscreenVirtualPadDevice and the user input mapper with the default bindings
|
// Setup the _keyboardMouseDevice, _touchscreenDevice, _touchscreenVirtualPadDevice and the user input mapper with the default bindings
|
||||||
userInputMapper->registerDevice(_keyboardMouseDevice->getInputDevice());
|
userInputMapper->registerDevice(_keyboardMouseDevice->getInputDevice());
|
||||||
// if the _touchscreenDevice is not supported it will not be registered
|
// if the _touchscreenDevice is not supported it will not be registered
|
||||||
|
@ -2411,6 +2412,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
|
||||||
connect(&AndroidHelper::instance(), &AndroidHelper::beforeEnterBackground, this, &Application::beforeEnterBackground);
|
connect(&AndroidHelper::instance(), &AndroidHelper::beforeEnterBackground, this, &Application::beforeEnterBackground);
|
||||||
connect(&AndroidHelper::instance(), &AndroidHelper::enterBackground, this, &Application::enterBackground);
|
connect(&AndroidHelper::instance(), &AndroidHelper::enterBackground, this, &Application::enterBackground);
|
||||||
connect(&AndroidHelper::instance(), &AndroidHelper::enterForeground, this, &Application::enterForeground);
|
connect(&AndroidHelper::instance(), &AndroidHelper::enterForeground, this, &Application::enterForeground);
|
||||||
|
connect(&AndroidHelper::instance(), &AndroidHelper::toggleAwayMode, this, &Application::toggleAwayMode);
|
||||||
AndroidHelper::instance().notifyLoadComplete();
|
AndroidHelper::instance().notifyLoadComplete();
|
||||||
#endif
|
#endif
|
||||||
pauseUntilLoginDetermined();
|
pauseUntilLoginDetermined();
|
||||||
|
@ -3661,8 +3663,8 @@ void Application::handleSandboxStatus(QNetworkReply* reply) {
|
||||||
// If this is a first run we short-circuit the address passed in
|
// If this is a first run we short-circuit the address passed in
|
||||||
if (_firstRun.get()) {
|
if (_firstRun.get()) {
|
||||||
#if !defined(Q_OS_ANDROID)
|
#if !defined(Q_OS_ANDROID)
|
||||||
DependencyManager::get<AddressManager>()->goToEntry();
|
DependencyManager::get<AddressManager>()->goToEntry();
|
||||||
sentTo = SENT_TO_ENTRY;
|
sentTo = SENT_TO_ENTRY;
|
||||||
#endif
|
#endif
|
||||||
_firstRun.set(false);
|
_firstRun.set(false);
|
||||||
|
|
||||||
|
@ -9155,6 +9157,8 @@ void Application::beforeEnterBackground() {
|
||||||
clearDomainOctreeDetails();
|
clearDomainOctreeDetails();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Application::enterBackground() {
|
void Application::enterBackground() {
|
||||||
QMetaObject::invokeMethod(DependencyManager::get<AudioClient>().data(),
|
QMetaObject::invokeMethod(DependencyManager::get<AudioClient>().data(),
|
||||||
"stop", Qt::BlockingQueuedConnection);
|
"stop", Qt::BlockingQueuedConnection);
|
||||||
|
@ -9178,6 +9182,15 @@ void Application::enterForeground() {
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
nodeList->setSendDomainServerCheckInEnabled(true);
|
nodeList->setSendDomainServerCheckInEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Application::toggleAwayMode(){
|
||||||
|
QKeyEvent event = QKeyEvent (QEvent::KeyPress, Qt::Key_Escape, Qt::NoModifier);
|
||||||
|
QCoreApplication::sendEvent (this, &event);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include "Application.moc"
|
#include "Application.moc"
|
||||||
|
|
|
@ -338,7 +338,8 @@ public:
|
||||||
void beforeEnterBackground();
|
void beforeEnterBackground();
|
||||||
void enterBackground();
|
void enterBackground();
|
||||||
void enterForeground();
|
void enterForeground();
|
||||||
#endif
|
void toggleAwayMode();
|
||||||
|
#endif
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void svoImportRequested(const QString& url);
|
void svoImportRequested(const QString& url);
|
||||||
|
|
|
@ -19,13 +19,19 @@
|
||||||
#include <SimpleMovingAverage.h>
|
#include <SimpleMovingAverage.h>
|
||||||
#include <render/Args.h>
|
#include <render/Args.h>
|
||||||
|
|
||||||
|
|
||||||
#ifdef Q_OS_ANDROID
|
#ifdef Q_OS_ANDROID
|
||||||
const float LOD_DEFAULT_QUALITY_LEVEL = 0.75f; // default quality level setting is High (lower framerate)
|
const float LOD_DEFAULT_QUALITY_LEVEL = 0.2f; // default quality level setting is High (lower framerate)
|
||||||
#else
|
#else
|
||||||
const float LOD_DEFAULT_QUALITY_LEVEL = 0.5f; // default quality level setting is Mid
|
const float LOD_DEFAULT_QUALITY_LEVEL = 0.5f; // default quality level setting is Mid
|
||||||
#endif
|
#endif
|
||||||
const float LOD_MAX_LIKELY_DESKTOP_FPS = 60.0f; // this is essentially, V-synch fps
|
const float LOD_MAX_LIKELY_DESKTOP_FPS = 60.0f; // this is essentially, V-synch fps
|
||||||
|
#ifdef Q_OS_ANDROID
|
||||||
|
const float LOD_MAX_LIKELY_HMD_FPS = 36.0f; // this is essentially, V-synch fps
|
||||||
|
#else
|
||||||
const float LOD_MAX_LIKELY_HMD_FPS = 90.0f; // this is essentially, V-synch fps
|
const float LOD_MAX_LIKELY_HMD_FPS = 90.0f; // this is essentially, V-synch fps
|
||||||
|
#endif
|
||||||
|
|
||||||
const float LOD_OFFSET_FPS = 5.0f; // offset of FPS to add for computing the target framerate
|
const float LOD_OFFSET_FPS = 5.0f; // offset of FPS to add for computing the target framerate
|
||||||
|
|
||||||
class AABox;
|
class AABox;
|
||||||
|
|
|
@ -865,7 +865,6 @@ const AnimPoseVec& AnimInverseKinematics::evaluate(const AnimVariantMap& animVar
|
||||||
|
|
||||||
//virtual
|
//virtual
|
||||||
const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut, const AnimPoseVec& underPoses) {
|
const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut, const AnimPoseVec& underPoses) {
|
||||||
|
|
||||||
// allows solutionSource to be overridden by an animVar
|
// allows solutionSource to be overridden by an animVar
|
||||||
auto solutionSource = animVars.lookup(_solutionSourceVar, (int)_solutionSource);
|
auto solutionSource = animVars.lookup(_solutionSourceVar, (int)_solutionSource);
|
||||||
|
|
||||||
|
|
|
@ -1066,6 +1066,13 @@ void Rig::computeMotionAnimationState(float deltaTime, const glm::vec3& worldPos
|
||||||
|
|
||||||
if (_enableInverseKinematics) {
|
if (_enableInverseKinematics) {
|
||||||
_animVars.set("ikOverlayAlpha", 1.0f);
|
_animVars.set("ikOverlayAlpha", 1.0f);
|
||||||
|
_animVars.set("splineIKEnabled", true);
|
||||||
|
_animVars.set("leftHandIKEnabled", true);
|
||||||
|
_animVars.set("rightHandIKEnabled", true);
|
||||||
|
_animVars.set("leftFootIKEnabled", true);
|
||||||
|
_animVars.set("rightFootIKEnabled", true);
|
||||||
|
_animVars.set("leftFootPoleVectorEnabled", true);
|
||||||
|
_animVars.set("rightFootPoleVectorEnabled", true);
|
||||||
} else {
|
} else {
|
||||||
_animVars.set("ikOverlayAlpha", 0.0f);
|
_animVars.set("ikOverlayAlpha", 0.0f);
|
||||||
_animVars.set("splineIKEnabled", false);
|
_animVars.set("splineIKEnabled", false);
|
||||||
|
@ -1878,15 +1885,13 @@ void Rig::updateFromControllerParameters(const ControllerParameters& params, flo
|
||||||
};
|
};
|
||||||
|
|
||||||
std::shared_ptr<AnimInverseKinematics> ikNode = getAnimInverseKinematicsNode();
|
std::shared_ptr<AnimInverseKinematics> ikNode = getAnimInverseKinematicsNode();
|
||||||
if (ikNode) {
|
for (int i = 0; i < (int)NumSecondaryControllerTypes; i++) {
|
||||||
for (int i = 0; i < (int)NumSecondaryControllerTypes; i++) {
|
int index = indexOfJoint(secondaryControllerJointNames[i]);
|
||||||
int index = indexOfJoint(secondaryControllerJointNames[i]);
|
if ((index >= 0) && (ikNode)) {
|
||||||
if (index >= 0) {
|
if (params.secondaryControllerFlags[i] & (uint8_t)ControllerFlags::Enabled) {
|
||||||
if (params.secondaryControllerFlags[i] & (uint8_t)ControllerFlags::Enabled) {
|
ikNode->setSecondaryTargetInRigFrame(index, params.secondaryControllerPoses[i]);
|
||||||
ikNode->setSecondaryTargetInRigFrame(index, params.secondaryControllerPoses[i]);
|
} else {
|
||||||
} else {
|
ikNode->clearSecondaryTarget(index);
|
||||||
ikNode->clearSecondaryTarget(index);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1537,6 +1537,7 @@ void Avatar::rigReady() {
|
||||||
buildUnscaledEyeHeightCache();
|
buildUnscaledEyeHeightCache();
|
||||||
buildSpine2SplineRatioCache();
|
buildSpine2SplineRatioCache();
|
||||||
computeMultiSphereShapes();
|
computeMultiSphereShapes();
|
||||||
|
buildSpine2SplineRatioCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
// rig has been reset.
|
// rig has been reset.
|
||||||
|
|
|
@ -380,16 +380,26 @@ void OpenGLDisplayPlugin::customizeContext() {
|
||||||
scissorState->setScissorEnable(true);
|
scissorState->setScissorEnable(true);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
#ifdef Q_OS_ANDROID
|
||||||
|
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTextureGammaLinearToSRGB);
|
||||||
|
#else
|
||||||
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTexture);
|
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTexture);
|
||||||
_simplePipeline = gpu::Pipeline::create(program, scissorState);
|
#endif
|
||||||
_hudPipeline = gpu::Pipeline::create(program, blendState);
|
_simplePipeline = gpu::Pipeline::create(program, scissorState);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::display_plugins::program::SrgbToLinear);
|
#ifdef Q_OS_ANDROID
|
||||||
|
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTextureGammaLinearToSRGB);
|
||||||
|
#else
|
||||||
|
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTextureGammaSRGBToLinear);
|
||||||
|
#endif
|
||||||
_presentPipeline = gpu::Pipeline::create(program, scissorState);
|
_presentPipeline = gpu::Pipeline::create(program, scissorState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTexture);
|
||||||
|
_hudPipeline = gpu::Pipeline::create(program, blendState);
|
||||||
|
}
|
||||||
{
|
{
|
||||||
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTextureMirroredX);
|
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::gpu::program::DrawTextureMirroredX);
|
||||||
_mirrorHUDPipeline = gpu::Pipeline::create(program, blendState);
|
_mirrorHUDPipeline = gpu::Pipeline::create(program, blendState);
|
||||||
|
@ -885,6 +895,7 @@ void OpenGLDisplayPlugin::updateCompositeFramebuffer() {
|
||||||
auto renderSize = glm::uvec2(getRecommendedRenderSize());
|
auto renderSize = glm::uvec2(getRecommendedRenderSize());
|
||||||
if (!_compositeFramebuffer || _compositeFramebuffer->getSize() != renderSize) {
|
if (!_compositeFramebuffer || _compositeFramebuffer->getSize() != renderSize) {
|
||||||
_compositeFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("OpenGLDisplayPlugin::composite", gpu::Element::COLOR_RGBA_32, renderSize.x, renderSize.y));
|
_compositeFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("OpenGLDisplayPlugin::composite", gpu::Element::COLOR_RGBA_32, renderSize.x, renderSize.y));
|
||||||
|
// _compositeFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("OpenGLDisplayPlugin::composite", gpu::Element::COLOR_SRGBA_32, renderSize.x, renderSize.y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
// OpenGLDisplayPlugin_present.frag
|
|
||||||
|
|
||||||
LAYOUT(binding=0) uniform sampler2D colorMap;
|
|
||||||
|
|
||||||
layout(location=0) in vec2 varTexCoord0;
|
|
||||||
|
|
||||||
layout(location=0) out vec4 outFragColor;
|
|
||||||
|
|
||||||
float sRGBFloatToLinear(float value) {
|
|
||||||
const float SRGB_ELBOW = 0.04045;
|
|
||||||
|
|
||||||
return mix(pow((value + 0.055) / 1.055, 2.4), value / 12.92, float(value <= SRGB_ELBOW));
|
|
||||||
}
|
|
||||||
|
|
||||||
vec3 colorToLinearRGB(vec3 srgb) {
|
|
||||||
return vec3(sRGBFloatToLinear(srgb.r), sRGBFloatToLinear(srgb.g), sRGBFloatToLinear(srgb.b));
|
|
||||||
}
|
|
||||||
|
|
||||||
void main(void) {
|
|
||||||
outFragColor.a = 1.0;
|
|
||||||
outFragColor.rgb = colorToLinearRGB(texture(colorMap, varTexCoord0).rgb);
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
VERTEX gpu::vertex::DrawUnitQuadTexcoord
|
|
|
@ -29,6 +29,13 @@ gpu::PipelinePointer PolyLineEntityRenderer::_glowPipeline = nullptr;
|
||||||
|
|
||||||
static const QUrl DEFAULT_POLYLINE_TEXTURE = PathUtils::resourcesUrl("images/paintStroke.png");
|
static const QUrl DEFAULT_POLYLINE_TEXTURE = PathUtils::resourcesUrl("images/paintStroke.png");
|
||||||
|
|
||||||
|
#if defined(USE_GLES)
|
||||||
|
static bool DISABLE_DEFERRED = true;
|
||||||
|
#else
|
||||||
|
static const QString RENDER_FORWARD{ "HIFI_RENDER_FORWARD" };
|
||||||
|
static bool DISABLE_DEFERRED = QProcessEnvironment::systemEnvironment().contains(RENDER_FORWARD);
|
||||||
|
#endif
|
||||||
|
|
||||||
PolyLineEntityRenderer::PolyLineEntityRenderer(const EntityItemPointer& entity) : Parent(entity) {
|
PolyLineEntityRenderer::PolyLineEntityRenderer(const EntityItemPointer& entity) : Parent(entity) {
|
||||||
_texture = DependencyManager::get<TextureCache>()->getTexture(DEFAULT_POLYLINE_TEXTURE);
|
_texture = DependencyManager::get<TextureCache>()->getTexture(DEFAULT_POLYLINE_TEXTURE);
|
||||||
|
|
||||||
|
@ -44,7 +51,13 @@ PolyLineEntityRenderer::PolyLineEntityRenderer(const EntityItemPointer& entity)
|
||||||
|
|
||||||
void PolyLineEntityRenderer::buildPipeline() {
|
void PolyLineEntityRenderer::buildPipeline() {
|
||||||
// FIXME: opaque pipeline
|
// FIXME: opaque pipeline
|
||||||
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::entities_renderer::program::paintStroke);
|
gpu::ShaderPointer program;
|
||||||
|
if (DISABLE_DEFERRED) {
|
||||||
|
program = gpu::Shader::createProgram(shader::entities_renderer::program::paintStroke_forward);
|
||||||
|
} else {
|
||||||
|
program = gpu::Shader::createProgram(shader::entities_renderer::program::paintStroke);
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
gpu::StatePointer state = gpu::StatePointer(new gpu::State());
|
gpu::StatePointer state = gpu::StatePointer(new gpu::State());
|
||||||
state->setCullMode(gpu::State::CullMode::CULL_NONE);
|
state->setCullMode(gpu::State::CullMode::CULL_NONE);
|
||||||
|
@ -170,18 +183,19 @@ void PolyLineEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPo
|
||||||
|
|
||||||
void PolyLineEntityRenderer::updateGeometry() {
|
void PolyLineEntityRenderer::updateGeometry() {
|
||||||
int maxNumVertices = std::min(_points.length(), _normals.length());
|
int maxNumVertices = std::min(_points.length(), _normals.length());
|
||||||
|
|
||||||
bool doesStrokeWidthVary = false;
|
bool doesStrokeWidthVary = false;
|
||||||
if (_widths.size() >= 0) {
|
if (_widths.size() > 0) {
|
||||||
|
float prevWidth = _widths[0];
|
||||||
for (int i = 1; i < maxNumVertices; i++) {
|
for (int i = 1; i < maxNumVertices; i++) {
|
||||||
float width = PolyLineEntityItem::DEFAULT_LINE_WIDTH;
|
float width = i < _widths.length() ? _widths[i] : PolyLineEntityItem::DEFAULT_LINE_WIDTH;
|
||||||
if (i < _widths.length()) {
|
if (width != prevWidth) {
|
||||||
width = _widths[i];
|
|
||||||
}
|
|
||||||
if (width != _widths[i - 1]) {
|
|
||||||
doesStrokeWidthVary = true;
|
doesStrokeWidthVary = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (i > _widths.length() + 1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
prevWidth = width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,12 +207,13 @@ void PolyLineEntityRenderer::updateGeometry() {
|
||||||
|
|
||||||
std::vector<PolylineVertex> vertices;
|
std::vector<PolylineVertex> vertices;
|
||||||
vertices.reserve(maxNumVertices);
|
vertices.reserve(maxNumVertices);
|
||||||
|
|
||||||
for (int i = 0; i < maxNumVertices; i++) {
|
for (int i = 0; i < maxNumVertices; i++) {
|
||||||
// Position
|
// Position
|
||||||
glm::vec3 point = _points[i];
|
glm::vec3 point = _points[i];
|
||||||
|
|
||||||
// uCoord
|
// uCoord
|
||||||
float width = i < _widths.size() ? _widths[i] : PolyLineEntityItem::DEFAULT_LINE_WIDTH;
|
float width = i < _widths.size() ? _widths[i] : PolyLineEntityItem::DEFAULT_LINE_WIDTH;
|
||||||
|
|
||||||
if (i > 0) { // First uCoord is 0.0f
|
if (i > 0) { // First uCoord is 0.0f
|
||||||
if (!_isUVModeStretch) {
|
if (!_isUVModeStretch) {
|
||||||
accumulatedDistance += glm::distance(point, _points[i - 1]);
|
accumulatedDistance += glm::distance(point, _points[i - 1]);
|
||||||
|
|
|
@ -30,6 +30,13 @@ using namespace render::entities;
|
||||||
// is a half unit sphere. However, the geometry cache renders a UNIT sphere, so we need to scale down.
|
// is a half unit sphere. However, the geometry cache renders a UNIT sphere, so we need to scale down.
|
||||||
static const float SPHERE_ENTITY_SCALE = 0.5f;
|
static const float SPHERE_ENTITY_SCALE = 0.5f;
|
||||||
|
|
||||||
|
#if defined(USE_GLES)
|
||||||
|
static bool DISABLE_DEFERRED = true;
|
||||||
|
#else
|
||||||
|
static const QString RENDER_FORWARD{ "HIFI_RENDER_FORWARD" };
|
||||||
|
static bool DISABLE_DEFERRED = QProcessEnvironment::systemEnvironment().contains(RENDER_FORWARD);
|
||||||
|
#endif
|
||||||
|
|
||||||
static_assert(shader::render_utils::program::simple != 0, "Validate simple program exists");
|
static_assert(shader::render_utils::program::simple != 0, "Validate simple program exists");
|
||||||
static_assert(shader::render_utils::program::simple_transparent != 0, "Validate simple transparent program exists");
|
static_assert(shader::render_utils::program::simple_transparent != 0, "Validate simple transparent program exists");
|
||||||
|
|
||||||
|
@ -276,7 +283,7 @@ void ShapeEntityRenderer::doRender(RenderArgs* args) {
|
||||||
// FIXME, support instanced multi-shape rendering using multidraw indirect
|
// FIXME, support instanced multi-shape rendering using multidraw indirect
|
||||||
outColor.a *= _isFading ? Interpolate::calculateFadeRatio(_fadeStartTime) : 1.0f;
|
outColor.a *= _isFading ? Interpolate::calculateFadeRatio(_fadeStartTime) : 1.0f;
|
||||||
render::ShapePipelinePointer pipeline;
|
render::ShapePipelinePointer pipeline;
|
||||||
if (_renderLayer == RenderLayer::WORLD) {
|
if (_renderLayer == RenderLayer::WORLD && !DISABLE_DEFERRED) {
|
||||||
pipeline = outColor.a < 1.0f ? geometryCache->getTransparentShapePipeline() : geometryCache->getOpaqueShapePipeline();
|
pipeline = outColor.a < 1.0f ? geometryCache->getTransparentShapePipeline() : geometryCache->getOpaqueShapePipeline();
|
||||||
} else {
|
} else {
|
||||||
pipeline = outColor.a < 1.0f ? geometryCache->getForwardTransparentShapePipeline() : geometryCache->getForwardOpaqueShapePipeline();
|
pipeline = outColor.a < 1.0f ? geometryCache->getForwardTransparentShapePipeline() : geometryCache->getForwardOpaqueShapePipeline();
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
VERTEX paintStroke
|
35
libraries/entities-renderer/src/paintStroke_forward.slf
Normal file
35
libraries/entities-renderer/src/paintStroke_forward.slf
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
<@include gpu/Config.slh@>
|
||||||
|
<$VERSION_HEADER$>
|
||||||
|
// Generated on <$_SCRIBE_DATE$>
|
||||||
|
//
|
||||||
|
// paintStroke.frag
|
||||||
|
// fragment shader
|
||||||
|
//
|
||||||
|
// Created by Eric Levin on 8/10/2015
|
||||||
|
// Copyright 2015 High Fidelity, Inc.
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
<@include paintStroke.slh@>
|
||||||
|
<$declarePolyLineBuffers()$>
|
||||||
|
|
||||||
|
LAYOUT(binding=0) uniform sampler2D _texture;
|
||||||
|
|
||||||
|
layout(location=0) in vec3 _normalWS;
|
||||||
|
layout(location=1) in vec2 _texCoord;
|
||||||
|
layout(location=2) in vec4 _color;
|
||||||
|
layout(location=3) in float _distanceFromCenter;
|
||||||
|
layout(location=0) out vec4 _fragColor0;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
vec4 texel = texture(_texture, _texCoord);
|
||||||
|
int frontCondition = 1 - 2 * int(gl_FrontFacing);
|
||||||
|
vec3 color = _color.rgb * texel.rgb;
|
||||||
|
float alpha = texel.a * _color.a;
|
||||||
|
|
||||||
|
alpha *= mix(1.0, pow(1.0 - abs(_distanceFromCenter), 10.0), _polylineData.faceCameraGlow.y);
|
||||||
|
|
||||||
|
_fragColor0 = vec4(color, alpha);
|
||||||
|
}
|
|
@ -16,20 +16,39 @@
|
||||||
// YCoCg =====> Luma (Y) chrominance green (Cg) and chrominance orange (Co)
|
// YCoCg =====> Luma (Y) chrominance green (Cg) and chrominance orange (Co)
|
||||||
// https://software.intel.com/en-us/node/503873
|
// https://software.intel.com/en-us/node/503873
|
||||||
|
|
||||||
|
// sRGB ====> Linear
|
||||||
float color_scalar_sRGBToLinear(float value) {
|
float color_scalar_sRGBToLinear(float value) {
|
||||||
const float SRGB_ELBOW = 0.04045;
|
// Same as pow(value, 2.2)
|
||||||
|
return mix(pow((value + 0.055) / 1.055, 2.4), value / 12.92, float(value <= 0.04045));
|
||||||
return mix(pow((value + 0.055) / 1.055, 2.4), value / 12.92, float(value <= SRGB_ELBOW));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 color_sRGBToLinear(vec3 srgb) {
|
vec3 color_sRGBToLinear(vec3 srgb) {
|
||||||
return vec3(color_scalar_sRGBToLinear(srgb.r), color_scalar_sRGBToLinear(srgb.g), color_scalar_sRGBToLinear(srgb.b));
|
// return vec3(color_scalar_sRGBToLinear(srgb.r), color_scalar_sRGBToLinear(srgb.g), color_scalar_sRGBToLinear(srgb.b));
|
||||||
|
// Same as pow(value, 2.2)
|
||||||
|
return mix(pow((srgb + vec3(0.055)) / vec3(1.055), vec3(2.4)), srgb / vec3(12.92), vec3(lessThanEqual(srgb, vec3(0.04045))));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 color_sRGBAToLinear(vec4 srgba) {
|
vec4 color_sRGBAToLinear(vec4 srgba) {
|
||||||
return vec4(color_sRGBToLinear(srgba.xyz), srgba.w);
|
return vec4(color_sRGBToLinear(srgba.xyz), srgba.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Linear ====> sRGB
|
||||||
|
float color_scalar_LinearTosRGB(float value) {
|
||||||
|
// Same as return pow(value, 1/2.2)
|
||||||
|
return mix(1.055 * pow(value, 0.41666) - 0.055, value * 12.92, float(value < 0.0031308));
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 color_LinearTosRGB(vec3 lrgb) {
|
||||||
|
// Same as return pow(lrgb, 1/2.2)
|
||||||
|
// return vec3(color_scalar_LinearTosRGB(lrgb.r), color_scalar_LinearTosRGB(lrgb.g), color_scalar_LinearTosRGB(lrgb.b));
|
||||||
|
return mix(vec3(1.055) * pow(vec3(lrgb), vec3(0.41666)) - vec3(0.055), vec3(lrgb) * vec3(12.92), vec3(lessThan(lrgb, vec3(0.0031308))));
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 color_LinearTosRGBA(vec4 lrgba) {
|
||||||
|
return vec4(color_LinearTosRGB(lrgba.xyz), lrgba.w);
|
||||||
|
}
|
||||||
|
|
||||||
vec3 color_LinearToYCoCg(vec3 rgb) {
|
vec3 color_LinearToYCoCg(vec3 rgb) {
|
||||||
// Y = R/4 + G/2 + B/4
|
// Y = R/4 + G/2 + B/4
|
||||||
// Co = R/2 - B/2
|
// Co = R/2 - B/2
|
||||||
|
|
26
libraries/gpu/src/gpu/DrawTextureGammaLinearToSRGB.slf
Normal file
26
libraries/gpu/src/gpu/DrawTextureGammaLinearToSRGB.slf
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<@include gpu/Config.slh@>
|
||||||
|
<$VERSION_HEADER$>
|
||||||
|
// Generated on <$_SCRIBE_DATE$>
|
||||||
|
//
|
||||||
|
// DrawTextureGammaLinearToSRGB.frag
|
||||||
|
//
|
||||||
|
// Draw texture 0 fetched at texcoord.xy, and apply linear to sRGB color space conversion
|
||||||
|
//
|
||||||
|
// Created by Sam Gateau on 2/24/2019
|
||||||
|
// Copyright 2019 High Fidelity, Inc.
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
<@include gpu/Color.slh@>
|
||||||
|
|
||||||
|
|
||||||
|
LAYOUT(binding=0) uniform sampler2D colorMap;
|
||||||
|
|
||||||
|
layout(location=0) in vec2 varTexCoord0;
|
||||||
|
layout(location=0) out vec4 outFragColor;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
outFragColor = color_LinearTosRGBA(texture(colorMap, varTexCoord0));
|
||||||
|
}
|
1
libraries/gpu/src/gpu/DrawTextureGammaLinearToSRGB.slp
Normal file
1
libraries/gpu/src/gpu/DrawTextureGammaLinearToSRGB.slp
Normal file
|
@ -0,0 +1 @@
|
||||||
|
VERTEX DrawUnitQuadTexcoord
|
26
libraries/gpu/src/gpu/DrawTextureGammaSRGBToLinear.slf
Normal file
26
libraries/gpu/src/gpu/DrawTextureGammaSRGBToLinear.slf
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<@include gpu/Config.slh@>
|
||||||
|
<$VERSION_HEADER$>
|
||||||
|
// Generated on <$_SCRIBE_DATE$>
|
||||||
|
//
|
||||||
|
// DrawTextureGammaSRGBToLinear.frag
|
||||||
|
//
|
||||||
|
// Draw texture 0 fetched at texcoord.xy, and apply sRGB to Linear color space conversion
|
||||||
|
//
|
||||||
|
// Created by Sam Gateau on 2/24/2019
|
||||||
|
// Copyright 2019 High Fidelity, Inc.
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
<@include gpu/Color.slh@>
|
||||||
|
|
||||||
|
|
||||||
|
LAYOUT(binding=0) uniform sampler2D colorMap;
|
||||||
|
|
||||||
|
layout(location=0) in vec2 varTexCoord0;
|
||||||
|
layout(location=0) out vec4 outFragColor;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
outFragColor = color_sRGBAToLinear(texture(colorMap, varTexCoord0));
|
||||||
|
}
|
1
libraries/gpu/src/gpu/DrawTextureGammaSRGBToLinear.slp
Normal file
1
libraries/gpu/src/gpu/DrawTextureGammaSRGBToLinear.slp
Normal file
|
@ -0,0 +1 @@
|
||||||
|
VERTEX DrawUnitQuadTexcoord
|
|
@ -32,18 +32,19 @@ void Framebuffer::create(const glm::uvec2& size) {
|
||||||
_validTexture = false;
|
_validTexture = false;
|
||||||
|
|
||||||
// Depth renderbuffer
|
// Depth renderbuffer
|
||||||
glGenRenderbuffers(1, &_depth);
|
/* glGenRenderbuffers(1, &_depth);
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER, _depth);
|
glBindRenderbuffer(GL_RENDERBUFFER, _depth);
|
||||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, _size.x, _size.y);
|
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, _size.x, _size.y);
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER, 0);
|
glBindRenderbuffer(GL_RENDERBUFFER, 0);
|
||||||
|
*/
|
||||||
// Framebuffer
|
// Framebuffer
|
||||||
glGenFramebuffers(1, &_fbo);
|
glGenFramebuffers(1, &_fbo);
|
||||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, _fbo);
|
// glBindFramebuffer(GL_DRAW_FRAMEBUFFER, _fbo);
|
||||||
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _depth);
|
// glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _depth);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
// glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
|
||||||
_swapChain = vrapi_CreateTextureSwapChain3(VRAPI_TEXTURE_TYPE_2D, GL_RGBA8, _size.x, _size.y, 1, 3);
|
_swapChain = vrapi_CreateTextureSwapChain3(VRAPI_TEXTURE_TYPE_2D, GL_RGBA8, _size.x, _size.y, 1, 3);
|
||||||
|
|
||||||
_length = vrapi_GetTextureSwapChainLength(_swapChain);
|
_length = vrapi_GetTextureSwapChainLength(_swapChain);
|
||||||
if (!_length) {
|
if (!_length) {
|
||||||
__android_log_write(ANDROID_LOG_WARN, "QQQ_OVR", "Unable to count swap chain textures");
|
__android_log_write(ANDROID_LOG_WARN, "QQQ_OVR", "Unable to count swap chain textures");
|
||||||
|
|
|
@ -140,7 +140,11 @@ struct VrSurface : public TaskQueue {
|
||||||
if (vrReady != vrRunning) {
|
if (vrReady != vrRunning) {
|
||||||
if (vrRunning) {
|
if (vrRunning) {
|
||||||
__android_log_write(ANDROID_LOG_WARN, "QQQ_OVR", "vrapi_LeaveVrMode");
|
__android_log_write(ANDROID_LOG_WARN, "QQQ_OVR", "vrapi_LeaveVrMode");
|
||||||
|
vrapi_SetClockLevels(session, 1, 1);
|
||||||
|
vrapi_SetExtraLatencyMode(session, VRAPI_EXTRA_LATENCY_MODE_OFF);
|
||||||
|
vrapi_SetDisplayRefreshRate(session, 60);
|
||||||
vrapi_LeaveVrMode(session);
|
vrapi_LeaveVrMode(session);
|
||||||
|
|
||||||
session = nullptr;
|
session = nullptr;
|
||||||
oculusActivity = nullptr;
|
oculusActivity = nullptr;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -121,6 +121,7 @@ QRectF OculusMobileDisplayPlugin::getPlayAreaRect() {
|
||||||
|
|
||||||
glm::mat4 OculusMobileDisplayPlugin::getEyeProjection(Eye eye, const glm::mat4& baseProjection) const {
|
glm::mat4 OculusMobileDisplayPlugin::getEyeProjection(Eye eye, const glm::mat4& baseProjection) const {
|
||||||
glm::mat4 result = baseProjection;
|
glm::mat4 result = baseProjection;
|
||||||
|
|
||||||
VrHandler::withOvrMobile([&](ovrMobile* session){
|
VrHandler::withOvrMobile([&](ovrMobile* session){
|
||||||
auto trackingState = vrapi_GetPredictedTracking2(session, 0.0);
|
auto trackingState = vrapi_GetPredictedTracking2(session, 0.0);
|
||||||
result = ovr::Fov{ trackingState.Eye[eye].ProjectionMatrix }.withZ(baseProjection);
|
result = ovr::Fov{ trackingState.Eye[eye].ProjectionMatrix }.withZ(baseProjection);
|
||||||
|
@ -130,15 +131,19 @@ glm::mat4 OculusMobileDisplayPlugin::getEyeProjection(Eye eye, const glm::mat4&
|
||||||
|
|
||||||
glm::mat4 OculusMobileDisplayPlugin::getCullingProjection(const glm::mat4& baseProjection) const {
|
glm::mat4 OculusMobileDisplayPlugin::getCullingProjection(const glm::mat4& baseProjection) const {
|
||||||
glm::mat4 result = baseProjection;
|
glm::mat4 result = baseProjection;
|
||||||
|
|
||||||
VrHandler::withOvrMobile([&](ovrMobile* session){
|
VrHandler::withOvrMobile([&](ovrMobile* session){
|
||||||
auto trackingState = vrapi_GetPredictedTracking2(session, 0.0);
|
auto trackingState = vrapi_GetPredictedTracking2(session, 0.0);
|
||||||
ovr::Fov fovs[2];
|
ovr::Fov fovs[2];
|
||||||
for (size_t i = 0; i < 2; ++i) {
|
for (size_t i = 0; i < 2; ++i) {
|
||||||
fovs[i].extract(trackingState.Eye[i].ProjectionMatrix);
|
fovs[i].extract(trackingState.Eye[i].ProjectionMatrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
fovs[0].extend(fovs[1]);
|
fovs[0].extend(fovs[1]);
|
||||||
return fovs[0].withZ(baseProjection);
|
result= glm::scale( fovs[0].withZ(baseProjection),glm::vec3(1.5f));
|
||||||
|
return result;
|
||||||
});
|
});
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,10 +173,8 @@ bool OculusMobileDisplayPlugin::isHmdMounted() const {
|
||||||
static void goToDevMobile() {
|
static void goToDevMobile() {
|
||||||
auto addressManager = DependencyManager::get<AddressManager>();
|
auto addressManager = DependencyManager::get<AddressManager>();
|
||||||
auto currentAddress = addressManager->currentAddress().toString().toStdString();
|
auto currentAddress = addressManager->currentAddress().toString().toStdString();
|
||||||
if (std::string::npos == currentAddress.find("dev-mobile")) {
|
if (std::string::npos == currentAddress.find("quest-dev")) {
|
||||||
addressManager->handleLookupString("hifi://dev-mobile/495.236,501.017,482.434/0,0.97452,0,-0.224301");
|
addressManager->handleLookupString("hifi://quest-dev");
|
||||||
//addressManager->handleLookupString("hifi://dev-mobile/504,498,491/0,0,0,0");
|
|
||||||
//addressManager->handleLookupString("hifi://dev-mobile/0,-1,1");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,12 +220,12 @@ bool OculusMobileDisplayPlugin::beginFrameRender(uint32_t frameIndex) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// static uint32_t count = 0;
|
// static uint32_t count = 0;
|
||||||
// if ((++count % 1000) == 0) {
|
// if ((++count % 1000) == 0) {
|
||||||
// AbstractViewStateInterface::instance()->postLambdaEvent([] {
|
// AbstractViewStateInterface::instance()->postLambdaEvent([] {
|
||||||
// goToDevMobile();
|
// goToDevMobile();
|
||||||
// });
|
// });
|
||||||
// }
|
// }
|
||||||
|
|
||||||
return result && Parent::beginFrameRender(frameIndex);
|
return result && Parent::beginFrameRender(frameIndex);
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,13 +96,6 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend
|
||||||
// draw a stencil mask in hidden regions of the framebuffer.
|
// draw a stencil mask in hidden regions of the framebuffer.
|
||||||
task.addJob<PrepareStencil>("PrepareStencil", framebuffer);
|
task.addJob<PrepareStencil>("PrepareStencil", framebuffer);
|
||||||
|
|
||||||
// Layered
|
|
||||||
const auto nullJitter = Varying(glm::vec2(0.0f, 0.0f));
|
|
||||||
const auto inFrontOpaquesInputs = DrawLayered3D::Inputs(inFrontOpaque, lightingModel, nullJitter).asVarying();
|
|
||||||
const auto inFrontTransparentsInputs = DrawLayered3D::Inputs(inFrontTransparent, lightingModel, nullJitter).asVarying();
|
|
||||||
task.addJob<DrawLayered3D>("DrawInFrontOpaque", inFrontOpaquesInputs, true);
|
|
||||||
task.addJob<DrawLayered3D>("DrawInFrontTransparent", inFrontTransparentsInputs, false);
|
|
||||||
|
|
||||||
// Draw opaques forward
|
// Draw opaques forward
|
||||||
const auto opaqueInputs = DrawForward::Inputs(opaques, lightingModel).asVarying();
|
const auto opaqueInputs = DrawForward::Inputs(opaques, lightingModel).asVarying();
|
||||||
task.addJob<DrawForward>("DrawOpaques", opaqueInputs, shapePlumber);
|
task.addJob<DrawForward>("DrawOpaques", opaqueInputs, shapePlumber);
|
||||||
|
@ -115,6 +108,13 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend
|
||||||
const auto transparentInputs = DrawForward::Inputs(transparents, lightingModel).asVarying();
|
const auto transparentInputs = DrawForward::Inputs(transparents, lightingModel).asVarying();
|
||||||
task.addJob<DrawForward>("DrawTransparents", transparentInputs, shapePlumber);
|
task.addJob<DrawForward>("DrawTransparents", transparentInputs, shapePlumber);
|
||||||
|
|
||||||
|
// Layered
|
||||||
|
const auto nullJitter = Varying(glm::vec2(0.0f, 0.0f));
|
||||||
|
const auto inFrontOpaquesInputs = DrawLayered3D::Inputs(inFrontOpaque, lightingModel, nullJitter).asVarying();
|
||||||
|
const auto inFrontTransparentsInputs = DrawLayered3D::Inputs(inFrontTransparent, lightingModel, nullJitter).asVarying();
|
||||||
|
task.addJob<DrawLayered3D>("DrawInFrontOpaque", inFrontOpaquesInputs, true);
|
||||||
|
task.addJob<DrawLayered3D>("DrawInFrontTransparent", inFrontTransparentsInputs, false);
|
||||||
|
|
||||||
{ // Debug the bounds of the rendered items, still look at the zbuffer
|
{ // Debug the bounds of the rendered items, still look at the zbuffer
|
||||||
|
|
||||||
task.addJob<DrawBounds>("DrawMetaBounds", metas);
|
task.addJob<DrawBounds>("DrawMetaBounds", metas);
|
||||||
|
|
|
@ -14,8 +14,8 @@
|
||||||
var DEFAULT_SCRIPTS_COMBINED = [
|
var DEFAULT_SCRIPTS_COMBINED = [
|
||||||
"system/request-service.js",
|
"system/request-service.js",
|
||||||
"system/progress.js",
|
"system/progress.js",
|
||||||
//"system/away.js",
|
"system/away.js",
|
||||||
"system/hmd.js",
|
//"system/hmd.js",
|
||||||
"system/menu.js",
|
"system/menu.js",
|
||||||
"system/bubble.js",
|
"system/bubble.js",
|
||||||
"system/pal.js", // "system/mod.js", // older UX, if you prefer
|
"system/pal.js", // "system/mod.js", // older UX, if you prefer
|
||||||
|
@ -25,6 +25,7 @@ var DEFAULT_SCRIPTS_COMBINED = [
|
||||||
"system/notifications.js",
|
"system/notifications.js",
|
||||||
"system/commerce/wallet.js",
|
"system/commerce/wallet.js",
|
||||||
"system/dialTone.js",
|
"system/dialTone.js",
|
||||||
|
"system/marketplaces/marketplaces.js",
|
||||||
"system/quickGoto.js",
|
"system/quickGoto.js",
|
||||||
"system/firstPersonHMD.js",
|
"system/firstPersonHMD.js",
|
||||||
"system/tablet-ui/tabletUI.js",
|
"system/tablet-ui/tabletUI.js",
|
||||||
|
|
|
@ -148,6 +148,27 @@ Rectangle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Separator {}
|
Separator {}
|
||||||
|
Column {
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
spacing: 5
|
||||||
|
Repeater {
|
||||||
|
model: [ "MSAA:PrepareFramebuffer:numSamples:4:1"
|
||||||
|
]
|
||||||
|
ConfigSlider {
|
||||||
|
label: qsTr(modelData.split(":")[0])
|
||||||
|
integral: true
|
||||||
|
config: render.mainViewTask.getConfig(modelData.split(":")[1])
|
||||||
|
property: modelData.split(":")[2]
|
||||||
|
max: modelData.split(":")[3]
|
||||||
|
min: modelData.split(":")[4]
|
||||||
|
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Separator {}
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
height: childrenRect.height
|
height: childrenRect.height
|
||||||
|
|
|
@ -154,7 +154,7 @@ function goAway(fromStartup) {
|
||||||
if (!isEnabled || isAway) {
|
if (!isEnabled || isAway) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we're entering away mode from some other state than startup, then we create our move timer immediately.
|
// If we're entering away mode from some other state than startup, then we create our move timer immediately.
|
||||||
// However if we're just stating up, we need to delay this process so that we don't think the initial teleport
|
// However if we're just stating up, we need to delay this process so that we don't think the initial teleport
|
||||||
// is actually a move.
|
// is actually a move.
|
||||||
|
|
|
@ -2,6 +2,7 @@ High Fidelity, Inc.
|
||||||
Avatar Exporter
|
Avatar Exporter
|
||||||
Version 0.2
|
Version 0.2
|
||||||
|
|
||||||
|
|
||||||
Note: It is recommended to use Unity versions between 2017.4.17f1 and 2018.2.12f1 for this Avatar Exporter.
|
Note: It is recommended to use Unity versions between 2017.4.17f1 and 2018.2.12f1 for this Avatar Exporter.
|
||||||
|
|
||||||
To create a new avatar project:
|
To create a new avatar project:
|
||||||
|
|
Loading…
Reference in a new issue