diff --git a/android/app/CMakeLists.txt b/android/app/CMakeLists.txt
index 4260882018..a0af43b30a 100644
--- a/android/app/CMakeLists.txt
+++ b/android/app/CMakeLists.txt
@@ -11,8 +11,8 @@ include_directories("${INTERFACE_DIR}/src")
target_link_libraries(native-lib android log m interface)
set(GVR_ROOT "${HIFI_ANDROID_PRECOMPILED}/gvr/gvr-android-sdk-1.101.0/")
-target_include_directories(native-lib PRIVATE "${GVR_ROOT}/libraries/headers")
-target_link_libraries(native-lib "${GVR_ROOT}/libraries/libgvr.so")
+target_include_directories(native-lib PRIVATE "${GVR_ROOT}/libraries/headers" "libraries/ui/src")
+target_link_libraries(native-lib "${GVR_ROOT}/libraries/libgvr.so" ui)
# finished libraries
# core -> qt
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 4113f047fa..3c7f59703e 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -8,6 +8,7 @@
+
diff --git a/libraries/render-utils/src/RenderForwardTask.cpp b/libraries/render-utils/src/RenderForwardTask.cpp
index 09ff9510f5..a0efc694cd 100755
--- a/libraries/render-utils/src/RenderForwardTask.cpp
+++ b/libraries/render-utils/src/RenderForwardTask.cpp
@@ -18,6 +18,9 @@
#include
#include
#include "StencilMaskPass.h"
+#include "ZoneRenderer.h"
+#include "FadeEffect.h"
+#include "BackgroundStage.h"
#include "FramebufferCache.h"
#include "TextureCache.h"
@@ -27,33 +30,50 @@
#include "nop_frag.h"
using namespace render;
-extern void initForwardPipelines(ShapePlumber& plumber);
+extern void initForwardPipelines(ShapePlumber& plumber, const render::ShapePipeline::BatchSetter& batchSetter, const render::ShapePipeline::ItemSetter& itemSetter);
void RenderForwardTask::build(JobModel& task, const render::Varying& input, render::Varying& output) {
auto items = input.get();
+ auto fadeEffect = DependencyManager::get();
// Prepare the ShapePipelines
ShapePlumberPointer shapePlumber = std::make_shared();
- initForwardPipelines(*shapePlumber);
+ initForwardPipelines(*shapePlumber, fadeEffect->getBatchSetter(), fadeEffect->getItemUniformSetter());
// Extract opaques / transparents / lights / metas / overlays / background
const auto& opaques = items.get0()[RenderFetchCullSortTask::OPAQUE_SHAPE];
-// const auto& transparents = items.get0()[RenderFetchCullSortTask::TRANSPARENT_SHAPE];
+ const auto& transparents = items.get0()[RenderFetchCullSortTask::TRANSPARENT_SHAPE];
// const auto& lights = items.get0()[RenderFetchCullSortTask::LIGHT];
-// const auto& metas = items.get0()[RenderFetchCullSortTask::META];
+ const auto& metas = items.get0()[RenderFetchCullSortTask::META];
// const auto& overlayOpaques = items.get0()[RenderFetchCullSortTask::OVERLAY_OPAQUE_SHAPE];
// const auto& overlayTransparents = items.get0()[RenderFetchCullSortTask::OVERLAY_TRANSPARENT_SHAPE];
- const auto& background = items.get0()[RenderFetchCullSortTask::BACKGROUND];
+ //const auto& background = items.get0()[RenderFetchCullSortTask::BACKGROUND];
// const auto& spatialSelection = items[1];
const auto framebuffer = task.addJob("PrepareFramebuffer");
task.addJob("DrawOpaques", opaques, shapePlumber);
task.addJob("Stencil");
- task.addJob("DrawBackground", background);
- // Bounds do not draw on stencil buffer, so they must come last
- task.addJob("DrawBounds", opaques);
+ const auto lightingModel = task.addJob("LightingModel");
+
+ // Filter zones from the general metas bucket
+ const auto zones = task.addJob("ZoneRenderer", metas);
+
+// task.addJob("DrawBackground", background);
+ // Similar to light stage, background stage has been filled by several potential render items and resolved for the frame in this job
+ task.addJob("DrawBackgroundDeferred", lightingModel);
+
+ { // Debug the bounds of the rendered items, still look at the zbuffer
+
+ task.addJob("DrawMetaBounds", metas);
+ task.addJob("DrawBounds", opaques);
+
+ task.addJob("DrawZones", zones);
+ }
+
+ task.addJob("DrawTransparents", transparents, shapePlumber);
+
// Blit!
task.addJob("Blit", framebuffer);
diff --git a/libraries/render-utils/src/RenderPipelines.cpp b/libraries/render-utils/src/RenderPipelines.cpp
index 7f644add72..8457ed021e 100644
--- a/libraries/render-utils/src/RenderPipelines.cpp
+++ b/libraries/render-utils/src/RenderPipelines.cpp
@@ -106,7 +106,7 @@ using namespace std::placeholders;
void initOverlay3DPipelines(ShapePlumber& plumber, bool depthTest = false);
void initDeferredPipelines(ShapePlumber& plumber, const render::ShapePipeline::BatchSetter& batchSetter, const render::ShapePipeline::ItemSetter& itemSetter);
-void initForwardPipelines(ShapePlumber& plumber);
+void initForwardPipelines(ShapePlumber& plumber, const render::ShapePipeline::BatchSetter& batchSetter, const render::ShapePipeline::ItemSetter& itemSetter);
void initZPassPipelines(ShapePlumber& plumber, gpu::StatePointer state);
void addPlumberPipeline(ShapePlumber& plumber,
@@ -436,12 +436,13 @@ void initDeferredPipelines(render::ShapePlumber& plumber, const render::ShapePip
skinModelShadowFadeVertex, modelShadowFadePixel, batchSetter, itemSetter);
}
-void initForwardPipelines(render::ShapePlumber& plumber) {
+void initForwardPipelines(ShapePlumber& plumber, const render::ShapePipeline::BatchSetter& batchSetter, const render::ShapePipeline::ItemSetter& itemSetter) {
// Vertex shaders
auto modelVertex = gpu::Shader::createVertex(std::string(model_vert));
auto modelNormalMapVertex = gpu::Shader::createVertex(std::string(model_normal_map_vert));
auto skinModelVertex = gpu::Shader::createVertex(std::string(skin_model_vert));
auto skinModelNormalMapVertex = gpu::Shader::createVertex(std::string(skin_model_normal_map_vert));
+ auto skinModelNormalMapFadeVertex = gpu::Shader::createVertex(std::string(skin_model_normal_map_fade_vert));
// Pixel shaders
auto modelPixel = gpu::Shader::createPixel(std::string(forward_model_frag));
@@ -449,38 +450,43 @@ void initForwardPipelines(render::ShapePlumber& plumber) {
auto modelNormalMapPixel = gpu::Shader::createPixel(std::string(forward_model_normal_map_frag));
auto modelSpecularMapPixel = gpu::Shader::createPixel(std::string(forward_model_specular_map_frag));
auto modelNormalSpecularMapPixel = gpu::Shader::createPixel(std::string(forward_model_normal_specular_map_frag));
+ auto modelNormalMapFadePixel = gpu::Shader::createPixel(std::string(model_normal_map_fade_frag));
using Key = render::ShapeKey;
- auto addPipeline = std::bind(&addPlumberPipeline, std::ref(plumber), _1, _2, _3, nullptr, nullptr);
+ auto addPipeline = std::bind(&addPlumberPipeline, std::ref(plumber), _1, _2, _3, _4, _5);
// Opaques
addPipeline(
Key::Builder().withMaterial(),
- modelVertex, modelPixel);
+ modelVertex, modelPixel, nullptr, nullptr);
addPipeline(
Key::Builder().withMaterial().withUnlit(),
- modelVertex, modelUnlitPixel);
+ modelVertex, modelUnlitPixel, nullptr, nullptr);
addPipeline(
Key::Builder().withMaterial().withTangents(),
- modelNormalMapVertex, modelNormalMapPixel);
+ modelNormalMapVertex, modelNormalMapPixel, nullptr, nullptr);
addPipeline(
Key::Builder().withMaterial().withSpecular(),
- modelVertex, modelSpecularMapPixel);
+ modelVertex, modelSpecularMapPixel, nullptr, nullptr);
addPipeline(
Key::Builder().withMaterial().withTangents().withSpecular(),
- modelNormalMapVertex, modelNormalSpecularMapPixel);
+ modelNormalMapVertex, modelNormalSpecularMapPixel, nullptr, nullptr);
// Skinned
addPipeline(
Key::Builder().withMaterial().withSkinned(),
- skinModelVertex, modelPixel);
+ skinModelVertex, modelPixel, nullptr, nullptr);
addPipeline(
Key::Builder().withMaterial().withSkinned().withTangents(),
- skinModelNormalMapVertex, modelNormalMapPixel);
+ skinModelNormalMapVertex, modelNormalMapPixel, nullptr, nullptr);
addPipeline(
Key::Builder().withMaterial().withSkinned().withSpecular(),
- skinModelVertex, modelSpecularMapPixel);
+ skinModelVertex, modelSpecularMapPixel, nullptr, nullptr);
addPipeline(
Key::Builder().withMaterial().withSkinned().withTangents().withSpecular(),
- skinModelNormalMapVertex, modelNormalSpecularMapPixel);
+ skinModelNormalMapVertex, modelNormalSpecularMapPixel, nullptr, nullptr);
+ addPipeline(
+ Key::Builder().withMaterial().withSkinned().withTangents().withFade(),
+ skinModelNormalMapFadeVertex, modelNormalMapFadePixel, batchSetter, itemSetter, nullptr, nullptr);
+
}
void addPlumberPipeline(ShapePlumber& plumber,