From 2b45ce5e58798fa182123019d8a871a32f0d2f80 Mon Sep 17 00:00:00 2001 From: apjagdale Date: Mon, 18 Jun 2018 06:56:45 -0700 Subject: [PATCH 1/3] Fixing travis build issue (#1903) * Fixing travis build issue * Check for property OVR_PLATFORM_SDK to build platform_support extension --- GVRf/Extensions/settings.gradle | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/GVRf/Extensions/settings.gradle b/GVRf/Extensions/settings.gradle index 018cfef45..d3ae36a9b 100644 --- a/GVRf/Extensions/settings.gradle +++ b/GVRf/Extensions/settings.gradle @@ -43,6 +43,8 @@ project(':ResonanceAudio').projectDir = new File('ResonanceAudio/resonanceaudio' include ':x3d' project(':x3d').projectDir = new File('x3d') -include ':platformsdk_support' -project(':platformsdk_support').projectDir = new File('platformsdk_support') +if (hasProperty('OVR_PLATFORM_SDK')){ + include ':platformsdk_support' + project(':platformsdk_support').projectDir = new File('platformsdk_support') +} From c1a10208e2981cc49eb6ed6b18ebe8357e944231 Mon Sep 17 00:00:00 2001 From: Nola Donato Date: Tue, 19 Jun 2018 06:59:06 -0700 Subject: [PATCH 2/3] Fix bugs with adding / removing lights (#1899) * Fix bugs with adding / removing lights Fixed faulty C++ logic for notifying components when they are removed / added from scene Delete light block when light list is cleared (from rendering thread) This fixes intermittent failures with SIDIA lighting tests * Fix vertex buffer copy constructor, add missing normal coord Fixes crash in normal mapping test * fix end of list check * fixed another light removal issue --- .../java/org/gearvrf/GVRShaderTemplate.java | 1 + .../java/org/gearvrf/GVRVertexBuffer.java | 1 + .../src/main/jni/objects/lightlist.cpp | 60 ++++++++++++------- .../src/main/jni/objects/scene_object.cpp | 40 +++++++------ .../src/main/res/raw/vertex_template.vsh | 2 + 5 files changed, 65 insertions(+), 39 deletions(-) diff --git a/GVRf/Framework/framework/src/main/java/org/gearvrf/GVRShaderTemplate.java b/GVRf/Framework/framework/src/main/java/org/gearvrf/GVRShaderTemplate.java index 2711c6a00..2a5ca2459 100644 --- a/GVRf/Framework/framework/src/main/java/org/gearvrf/GVRShaderTemplate.java +++ b/GVRf/Framework/framework/src/main/java/org/gearvrf/GVRShaderTemplate.java @@ -425,6 +425,7 @@ private String assignTexcoords(GVRShaderData mtl) * @param scene * scene being rendered */ + @Override public int bindShader(GVRContext context, IRenderable rdata, GVRScene scene, boolean isMultiview) { GVRMesh mesh = rdata.getMesh(); diff --git a/GVRf/Framework/framework/src/main/java/org/gearvrf/GVRVertexBuffer.java b/GVRf/Framework/framework/src/main/java/org/gearvrf/GVRVertexBuffer.java index 5a1379f39..cb619e040 100644 --- a/GVRf/Framework/framework/src/main/java/org/gearvrf/GVRVertexBuffer.java +++ b/GVRf/Framework/framework/src/main/java/org/gearvrf/GVRVertexBuffer.java @@ -106,6 +106,7 @@ public GVRVertexBuffer(GVRVertexBuffer srcVerts, String descriptor) Pattern pattern = Pattern.compile("([a-zA-Z0-9]+)[ \t]+([a-zA-Z0-9_]+)[^ ]*"); final String srcDesc = srcVerts.getDescriptor(); Matcher matcher = pattern.matcher(srcDesc); + mDescriptor = descriptor; while (matcher.find()) { diff --git a/GVRf/Framework/framework/src/main/jni/objects/lightlist.cpp b/GVRf/Framework/framework/src/main/jni/objects/lightlist.cpp index cfcc8e40d..dd2efc1ab 100755 --- a/GVRf/Framework/framework/src/main/jni/objects/lightlist.cpp +++ b/GVRf/Framework/framework/src/main/jni/objects/lightlist.cpp @@ -33,14 +33,7 @@ namespace gvr { LightList::~LightList() { - if (mLightBlock) - { - delete mLightBlock; - mLightBlock = nullptr; - } -#ifdef DEBUG_LIGHT - LOGD("LIGHT: deleting light block"); -#endif + clear(); } int LightList::getLights(std::vector& lightList) const @@ -114,9 +107,10 @@ bool LightList::removeLight(Light* light) * If all lights in the class are gone, * remove the class from the map. */ - if (lights.size() == 0) + if (lights.size() == 1) { mClassMap.erase(it3); + mDirty |= LIGHT_REMOVED | REBUILD_SHADERS; return true; } /* @@ -226,6 +220,14 @@ ShadowMap* LightList::updateLightBlock(Renderer* renderer) mTotalUniforms = 0; if (mClassMap.size() == 0) { + if (mLightBlock != nullptr) + { + delete mLightBlock; + mLightBlock = nullptr; +#ifdef DEBUG_LIGHT + LOGD("LIGHT: clearing light uniform block"); +#endif + } return NULL; } for (auto it1 = mClassMap.begin(); @@ -260,7 +262,10 @@ void LightList::useLights(Renderer* renderer, Shader* shader) { if (mUseUniformBlock) { - mLightBlock->bindBuffer(shader, renderer); + if (mLightBlock) + { + mLightBlock->bindBuffer(shader, renderer); + } } else { @@ -313,32 +318,43 @@ bool LightList::createLightBlock(Renderer* renderer) numFloats += light->getTotalSize() / sizeof(float); } } - if ((mLightBlock == NULL) || - (numFloats > (mLightBlock->getTotalSize()/ sizeof(float)))) + if (mLightBlock && (numFloats > (mLightBlock->getTotalSize() / sizeof(float)))) { - std::string desc("float lightdata"); - if (mLightBlock) - { - delete mLightBlock; - } - mLightBlock = renderer->createUniformBlock(desc.c_str(), LIGHT_UBO_INDEX, "Lights_ubo", numFloats); - mLightBlock->useGPUBuffer(true); + delete mLightBlock; + mLightBlock = nullptr; #ifdef DEBUG_LIGHT - LOGD("LIGHT: creating light uniform block"); + LOGD("LIGHT: deleting light uniform block"); #endif - return true; } - return false; + if (mLightBlock == nullptr) + { + mLightBlock = renderer->createUniformBlock("float lightdata", LIGHT_UBO_INDEX, + "Lights_ubo", numFloats); +#ifdef DEBUG_LIGHT + LOGD("LIGHT: creating light uniform block %d floats", numFloats); +#endif + mLightBlock->useGPUBuffer(true); + } + return true; } /* * Removes all the lights from the scene. + * This function should only be called from the GL thread. */ void LightList::clear() { std::lock_guard < std::recursive_mutex > lock(mLock); mClassMap.clear(); mDirty = LIGHT_REMOVED | REBUILD_SHADERS; + if (mLightBlock) + { + delete mLightBlock; + mLightBlock = nullptr; +#ifdef DEBUG_LIGHT + LOGD("LIGHT: clearing light uniform block"); +#endif + } #ifdef DEBUG_LIGHT LOGD("LIGHT: clearing lights"); #endif diff --git a/GVRf/Framework/framework/src/main/jni/objects/scene_object.cpp b/GVRf/Framework/framework/src/main/jni/objects/scene_object.cpp index 665a531cb..f06ee0733 100644 --- a/GVRf/Framework/framework/src/main/jni/objects/scene_object.cpp +++ b/GVRf/Framework/framework/src/main/jni/objects/scene_object.cpp @@ -176,16 +176,17 @@ bool SceneObject::onAddChild(SceneObject* addme, SceneObject* root) { std::string error = "SceneObject::addChildObject() : cycle of scene objects is not allowed."; LOGE("%s", error.c_str()); - throw error; + return false; } - if (parent_ != NULL) + if (this == root) { - if (parent_->onAddChild(addme, root) || (parent_ == root)) - { - return true; - } + return true; } - return false; + if (parent_ == NULL) + { + return false; + } + return parent_->onAddChild(addme, root); } @@ -195,14 +196,15 @@ bool SceneObject::onAddChild(SceneObject* addme, SceneObject* root) bool SceneObject::onRemoveChild(SceneObject* removeme, SceneObject* root) { bounding_volume_dirty_ = true; - if (parent_ != NULL) + if (this == root) { - if (parent_->onRemoveChild(removeme, root) || (parent_ == root)) - { - return true; - } + return true; } - return false; + if (parent_ == NULL) + { + return false; + } + return parent_->onRemoveChild(removeme, root); } /** @@ -221,7 +223,8 @@ void SceneObject::onRemovedFromScene(Scene* scene) } } -void SceneObject::removeChildObject(SceneObject* child) { +void SceneObject::removeChildObject(SceneObject* child) +{ Scene* scene = Scene::main_scene(); if (child->parent_ == this) @@ -246,7 +249,8 @@ void SceneObject::removeChildObject(SceneObject* child) { } } -void SceneObject::onTransformChanged() { +void SceneObject::onTransformChanged() +{ Transform* t = transform(); if (t) { @@ -265,10 +269,12 @@ void SceneObject::onTransformChanged() { } } -void SceneObject::clear() { +void SceneObject::clear() +{ Scene* scene = Scene::main_scene(); std::lock_guard < std::mutex > lock(children_mutex_); - for (auto it = children_.begin(); it != children_.end(); ++it) { + for (auto it = children_.begin(); it != children_.end(); ++it) + { SceneObject* child = *it; if (scene != NULL) { diff --git a/GVRf/Framework/framework/src/main/res/raw/vertex_template.vsh b/GVRf/Framework/framework/src/main/res/raw/vertex_template.vsh index b003712de..035bae0c6 100644 --- a/GVRf/Framework/framework/src/main/res/raw/vertex_template.vsh +++ b/GVRf/Framework/framework/src/main/res/raw/vertex_template.vsh @@ -45,6 +45,8 @@ layout(location = 5) out vec2 ambient_coord; layout(location = 6) out vec2 specular_coord; layout(location = 7) out vec2 emissive_coord; layout(location = 8) out vec2 lightmap_coord; +layout(location = 9) out vec2 opacity_coord; +layout(location = 10) out vec2 normal_coord; struct Vertex { From 04afe46fced161fcc7f77834b7f4ed9cd115aee1 Mon Sep 17 00:00:00 2001 From: Mihail Marinov Date: Tue, 19 Jun 2018 08:14:22 -0700 Subject: [PATCH 3/3] gradle: silence deprecation warnings --- GVRf/Framework/backend_daydream/build.gradle | 12 ++++++------ GVRf/Framework/backend_monoscopic/build.gradle | 8 ++++---- GVRf/Framework/backend_oculus/build.gradle | 8 ++++---- GVRf/Framework/framework/build.gradle | 8 ++++---- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/GVRf/Framework/backend_daydream/build.gradle b/GVRf/Framework/backend_daydream/build.gradle index 203ece654..c033d1209 100755 --- a/GVRf/Framework/backend_daydream/build.gradle +++ b/GVRf/Framework/backend_daydream/build.gradle @@ -59,12 +59,12 @@ project.ext.jomlVersion = "1.9.3-SNAPSHOT" project.ext.daydreamVersion = '1.130.0' dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - compile fileTree(include: ['*.jar'], dir: 'src/main/libs') - compile "com.google.vr:sdk-base:${daydreamVersion}" - compile "com.google.vr:sdk-controller:${daydreamVersion}" - compile project(':framework') - compile "org.joml:joml-android:${jomlVersion}" + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation fileTree(include: ['*.jar'], dir: 'src/main/libs') + implementation "com.google.vr:sdk-base:${daydreamVersion}" + implementation "com.google.vr:sdk-controller:${daydreamVersion}" + implementation project(':framework') + implementation "org.joml:joml-android:${jomlVersion}" } clean {}.doLast { diff --git a/GVRf/Framework/backend_monoscopic/build.gradle b/GVRf/Framework/backend_monoscopic/build.gradle index 45e88ab82..dd0130c19 100644 --- a/GVRf/Framework/backend_monoscopic/build.gradle +++ b/GVRf/Framework/backend_monoscopic/build.gradle @@ -122,10 +122,10 @@ android { project.ext.jomlVersion = "1.9.1-SNAPSHOT" dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - compile fileTree(include: ['*.jar'], dir: 'src/main/libs') - compile project(':framework') - compile "org.joml:joml-android:${jomlVersion}" + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation fileTree(include: ['*.jar'], dir: 'src/main/libs') + implementation project(':framework') + implementation "org.joml:joml-android:${jomlVersion}" } clean {}.doLast { diff --git a/GVRf/Framework/backend_oculus/build.gradle b/GVRf/Framework/backend_oculus/build.gradle index b5ed4a329..058c37016 100755 --- a/GVRf/Framework/backend_oculus/build.gradle +++ b/GVRf/Framework/backend_oculus/build.gradle @@ -124,10 +124,10 @@ android { project.ext.jomlVersion = "1.9.3-SNAPSHOT" dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - compile fileTree(include: ['*.jar'], dir: 'src/main/libs') - compile project(':framework') - compile "org.joml:joml-android:${jomlVersion}" + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation fileTree(include: ['*.jar'], dir: 'src/main/libs') + implementation project(':framework') + implementation "org.joml:joml-android:${jomlVersion}" } clean {}.doLast { diff --git a/GVRf/Framework/framework/build.gradle b/GVRf/Framework/framework/build.gradle index 699c4369f..f27a787f8 100755 --- a/GVRf/Framework/framework/build.gradle +++ b/GVRf/Framework/framework/build.gradle @@ -115,10 +115,10 @@ project.ext.jomlVersion = "1.9.3-SNAPSHOT" project.ext.gsonVersion = '2.8.2' dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - compile fileTree(dir: 'src/main/libs', include: ['*.jar']) - compile "org.joml:joml-android:${jomlVersion}" - compile "com.google.code.gson:gson:$gsonVersion" + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'src/main/libs', include: ['*.jar']) + api "org.joml:joml-android:${jomlVersion}" + implementation "com.google.code.gson:gson:$gsonVersion" } clean {}.doLast {