mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 13:28:09 +02:00
Refining the stencil configuration and triggering only in hmd mode
This commit is contained in:
parent
4a419f2d07
commit
f9aa400b95
10 changed files with 25 additions and 30 deletions
|
@ -2185,6 +2185,9 @@ void Application::paintGL() {
|
||||||
});
|
});
|
||||||
renderArgs._context->setStereoProjections(eyeProjections);
|
renderArgs._context->setStereoProjections(eyeProjections);
|
||||||
renderArgs._context->setStereoViews(eyeOffsets);
|
renderArgs._context->setStereoViews(eyeOffsets);
|
||||||
|
|
||||||
|
// Configure the type of display / stereo
|
||||||
|
renderArgs._displayMode = (isHMDMode() ? RenderArgs::STEREO_HMD : RenderArgs::STEREO_MONITOR);
|
||||||
}
|
}
|
||||||
renderArgs._blitFramebuffer = finalFramebuffer;
|
renderArgs._blitFramebuffer = finalFramebuffer;
|
||||||
displaySide(&renderArgs, _myCamera);
|
displaySide(&renderArgs, _myCamera);
|
||||||
|
|
|
@ -97,7 +97,7 @@ void Skybox::render(gpu::Batch& batch, const ViewFrustum& viewFrustum, const Sky
|
||||||
}
|
}
|
||||||
|
|
||||||
auto skyState = std::make_shared<gpu::State>();
|
auto skyState = std::make_shared<gpu::State>();
|
||||||
skyState->setStencilTest(true, 0x00, gpu::State::StencilTest(1, 0xFF, gpu::EQUAL, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP));
|
skyState->setStencilTest(true, 0xFF, gpu::State::StencilTest(1, 0xFF, gpu::EQUAL, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP));
|
||||||
|
|
||||||
thePipeline = gpu::Pipeline::create(skyShader, skyState);
|
thePipeline = gpu::Pipeline::create(skyShader, skyState);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ ProceduralSkybox::ProceduralSkybox() : model::Skybox() {
|
||||||
_procedural._fragmentSource = skybox_frag;
|
_procedural._fragmentSource = skybox_frag;
|
||||||
// Adjust the pipeline state for background using the stencil test
|
// Adjust the pipeline state for background using the stencil test
|
||||||
_procedural.setDoesFade(false);
|
_procedural.setDoesFade(false);
|
||||||
_procedural._opaqueState->setStencilTest(true, 0x00, gpu::State::StencilTest(1, 0xFF, gpu::EQUAL, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP));
|
_procedural._opaqueState->setStencilTest(true, 0xFF, gpu::State::StencilTest(1, 0xFF, gpu::EQUAL, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ProceduralSkybox::empty() {
|
bool ProceduralSkybox::empty() {
|
||||||
|
|
|
@ -71,7 +71,7 @@ const gpu::PipelinePointer& Antialiasing::getAntialiasingPipeline() {
|
||||||
|
|
||||||
gpu::StatePointer state = gpu::StatePointer(new gpu::State());
|
gpu::StatePointer state = gpu::StatePointer(new gpu::State());
|
||||||
|
|
||||||
PrepareStencil::testShape(*state);
|
PrepareStencil::testMask(*state);
|
||||||
|
|
||||||
state->setDepthTest(false, false, gpu::LESS_EQUAL);
|
state->setDepthTest(false, false, gpu::LESS_EQUAL);
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ const gpu::PipelinePointer& Antialiasing::getBlendPipeline() {
|
||||||
gpu::StatePointer state = gpu::StatePointer(new gpu::State());
|
gpu::StatePointer state = gpu::StatePointer(new gpu::State());
|
||||||
|
|
||||||
state->setDepthTest(false, false, gpu::LESS_EQUAL);
|
state->setDepthTest(false, false, gpu::LESS_EQUAL);
|
||||||
PrepareStencil::testShape(*state);
|
PrepareStencil::testMask(*state);
|
||||||
|
|
||||||
// Good to go add the brand new pipeline
|
// Good to go add the brand new pipeline
|
||||||
_blendPipeline = gpu::Pipeline::create(program, state);
|
_blendPipeline = gpu::Pipeline::create(program, state);
|
||||||
|
|
|
@ -70,12 +70,14 @@ gpu::PipelinePointer PrepareStencil::getPaintStencilPipeline() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrepareStencil::run(const RenderContextPointer& renderContext, const gpu::FramebufferPointer& srcFramebuffer) {
|
void PrepareStencil::run(const RenderContextPointer& renderContext, const gpu::FramebufferPointer& srcFramebuffer) {
|
||||||
assert(renderContext->args);
|
|
||||||
assert(renderContext->args->_context);
|
|
||||||
|
|
||||||
RenderArgs* args = renderContext->args;
|
RenderArgs* args = renderContext->args;
|
||||||
|
|
||||||
|
// Only draw the stencil mask if in HMD mode.
|
||||||
|
if (args->_displayMode != RenderArgs::STEREO_HMD) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
doInBatch(args->_context, [&](gpu::Batch& batch) {
|
doInBatch(args->_context, [&](gpu::Batch& batch) {
|
||||||
args->_batch = &batch;
|
|
||||||
batch.enableStereo(false);
|
batch.enableStereo(false);
|
||||||
|
|
||||||
batch.setViewportTransform(args->_viewport);
|
batch.setViewportTransform(args->_viewport);
|
||||||
|
@ -96,7 +98,6 @@ void PrepareStencil::run(const RenderContextPointer& renderContext, const gpu::F
|
||||||
batch.draw(gpu::TRIANGLE_STRIP, 4);
|
batch.draw(gpu::TRIANGLE_STRIP, 4);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
args->_batch = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrepareStencil::drawMask(gpu::State& state) {
|
void PrepareStencil::drawMask(gpu::State& state) {
|
||||||
|
@ -104,11 +105,11 @@ void PrepareStencil::drawMask(gpu::State& state) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrepareStencil::testMask(gpu::State& state) {
|
void PrepareStencil::testMask(gpu::State& state) {
|
||||||
state.setStencilTest(true, 0xFF, gpu::State::StencilTest(PrepareStencil::STENCIL_MASK, 0xFF, gpu::NOT_EQUAL, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP));
|
state.setStencilTest(true, 0x00, gpu::State::StencilTest(PrepareStencil::STENCIL_MASK, 0xFF, gpu::NOT_EQUAL, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrepareStencil::testBackground(gpu::State& state) {
|
void PrepareStencil::testBackground(gpu::State& state) {
|
||||||
state.setStencilTest(true, 0xFF, gpu::State::StencilTest(PrepareStencil::STENCIL_BACKGROUND, 0xFF, gpu::EQUAL, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP));
|
state.setStencilTest(true, 0x00, gpu::State::StencilTest(PrepareStencil::STENCIL_BACKGROUND, 0xFF, gpu::EQUAL, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrepareStencil::testMaskDrawShape(gpu::State& state) {
|
void PrepareStencil::testMaskDrawShape(gpu::State& state) {
|
||||||
|
@ -116,5 +117,5 @@ void PrepareStencil::testMaskDrawShape(gpu::State& state) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrepareStencil::testShape(gpu::State& state) {
|
void PrepareStencil::testShape(gpu::State& state) {
|
||||||
state.setStencilTest(true, 0xFF, gpu::State::StencilTest(PrepareStencil::STENCIL_SHAPE, 0xFF, gpu::NOT_EQUAL, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP));
|
state.setStencilTest(true, 0x00, gpu::State::StencilTest(PrepareStencil::STENCIL_SHAPE, 0xFF, gpu::EQUAL, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP, gpu::State::STENCIL_OP_KEEP));
|
||||||
}
|
}
|
|
@ -555,7 +555,7 @@ const gpu::PipelinePointer& SurfaceGeometryPass::getCurvaturePipeline() {
|
||||||
|
|
||||||
#ifdef USE_STENCIL_TEST
|
#ifdef USE_STENCIL_TEST
|
||||||
// Stencil test the curvature pass for objects pixels only, not the background
|
// Stencil test the curvature pass for objects pixels only, not the background
|
||||||
PrepareStencil::testMask(*state);
|
PrepareStencil::testShape(*state);
|
||||||
#endif
|
#endif
|
||||||
// Good to go add the brand new pipeline
|
// Good to go add the brand new pipeline
|
||||||
_curvaturePipeline = gpu::Pipeline::create(program, state);
|
_curvaturePipeline = gpu::Pipeline::create(program, state);
|
||||||
|
|
|
@ -39,7 +39,7 @@ void ToneMappingEffect::init() {
|
||||||
slotBindings.insert(gpu::Shader::Binding(std::string("colorMap"), ToneMappingEffect_LightingMapSlot));
|
slotBindings.insert(gpu::Shader::Binding(std::string("colorMap"), ToneMappingEffect_LightingMapSlot));
|
||||||
gpu::Shader::makeProgram(*blitProgram, slotBindings);
|
gpu::Shader::makeProgram(*blitProgram, slotBindings);
|
||||||
auto blitState = std::make_shared<gpu::State>();
|
auto blitState = std::make_shared<gpu::State>();
|
||||||
PrepareStencil::testShape(*blitState);
|
PrepareStencil::testMask(*blitState);
|
||||||
blitState->setColorWriteMask(true, true, true, true);
|
blitState->setColorWriteMask(true, true, true, true);
|
||||||
_blitLightBuffer = gpu::PipelinePointer(gpu::Pipeline::create(blitProgram, blitState));
|
_blitLightBuffer = gpu::PipelinePointer(gpu::Pipeline::create(blitProgram, blitState));
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,8 +14,10 @@
|
||||||
|
|
||||||
in vec2 varTexCoord0;
|
in vec2 varTexCoord0;
|
||||||
|
|
||||||
|
float aspectRatio = 0.95;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
vec2 pos = varTexCoord0 * 2.0 - vec2(1.0);
|
vec2 pos = varTexCoord0 * 2.0 - vec2(1.0);
|
||||||
pos.x = pos.x * (pos.x > 0.0 ? 2.0 : -2.0) - 1.0;
|
pos.x = aspectRatio * (pos.x * (pos.x > 0.0 ? 2.0 : -2.0) - 1.0);
|
||||||
if (1.0 - dot(pos.xy, pos.xy) > 0.0 ) discard;
|
if (1.0 - dot(pos.xy, pos.xy) > 0.0 ) discard;
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,7 @@ public:
|
||||||
class RenderArgs {
|
class RenderArgs {
|
||||||
public:
|
public:
|
||||||
enum RenderMode { DEFAULT_RENDER_MODE, SHADOW_RENDER_MODE, DIFFUSE_RENDER_MODE, NORMAL_RENDER_MODE, MIRROR_RENDER_MODE };
|
enum RenderMode { DEFAULT_RENDER_MODE, SHADOW_RENDER_MODE, DIFFUSE_RENDER_MODE, NORMAL_RENDER_MODE, MIRROR_RENDER_MODE };
|
||||||
enum RenderSide { MONO, STEREO_LEFT, STEREO_RIGHT };
|
enum DisplayMode { MONO, STEREO_MONITOR, STEREO_HMD };
|
||||||
enum DebugFlags {
|
enum DebugFlags {
|
||||||
RENDER_DEBUG_NONE = 0,
|
RENDER_DEBUG_NONE = 0,
|
||||||
RENDER_DEBUG_HULLS = 1
|
RENDER_DEBUG_HULLS = 1
|
||||||
|
@ -87,7 +87,7 @@ public:
|
||||||
float sizeScale = 1.0f,
|
float sizeScale = 1.0f,
|
||||||
int boundaryLevelAdjust = 0,
|
int boundaryLevelAdjust = 0,
|
||||||
RenderMode renderMode = DEFAULT_RENDER_MODE,
|
RenderMode renderMode = DEFAULT_RENDER_MODE,
|
||||||
RenderSide renderSide = MONO,
|
DisplayMode displayMode = MONO,
|
||||||
DebugFlags debugFlags = RENDER_DEBUG_NONE,
|
DebugFlags debugFlags = RENDER_DEBUG_NONE,
|
||||||
gpu::Batch* batch = nullptr) :
|
gpu::Batch* batch = nullptr) :
|
||||||
_context(context),
|
_context(context),
|
||||||
|
@ -95,7 +95,7 @@ public:
|
||||||
_sizeScale(sizeScale),
|
_sizeScale(sizeScale),
|
||||||
_boundaryLevelAdjust(boundaryLevelAdjust),
|
_boundaryLevelAdjust(boundaryLevelAdjust),
|
||||||
_renderMode(renderMode),
|
_renderMode(renderMode),
|
||||||
_renderSide(renderSide),
|
_displayMode(displayMode),
|
||||||
_debugFlags(debugFlags),
|
_debugFlags(debugFlags),
|
||||||
_batch(batch) {
|
_batch(batch) {
|
||||||
}
|
}
|
||||||
|
@ -121,7 +121,7 @@ public:
|
||||||
float _sizeScale = 1.0f;
|
float _sizeScale = 1.0f;
|
||||||
int _boundaryLevelAdjust = 0;
|
int _boundaryLevelAdjust = 0;
|
||||||
RenderMode _renderMode = DEFAULT_RENDER_MODE;
|
RenderMode _renderMode = DEFAULT_RENDER_MODE;
|
||||||
RenderSide _renderSide = MONO;
|
DisplayMode _displayMode = MONO;
|
||||||
DebugFlags _debugFlags = RENDER_DEBUG_NONE;
|
DebugFlags _debugFlags = RENDER_DEBUG_NONE;
|
||||||
gpu::Batch* _batch = nullptr;
|
gpu::Batch* _batch = nullptr;
|
||||||
|
|
||||||
|
|
|
@ -31,13 +31,9 @@
|
||||||
#include <render-utils/deferred_light_point_vert.h>
|
#include <render-utils/deferred_light_point_vert.h>
|
||||||
#include <render-utils/deferred_light_spot_vert.h>
|
#include <render-utils/deferred_light_spot_vert.h>
|
||||||
|
|
||||||
#include <render-utils/directional_light_frag.h>
|
|
||||||
#include <render-utils/directional_ambient_light_frag.h>
|
#include <render-utils/directional_ambient_light_frag.h>
|
||||||
#include <render-utils/directional_skybox_light_frag.h>
|
#include <render-utils/directional_skybox_light_frag.h>
|
||||||
|
|
||||||
#include <render-utils/point_light_frag.h>
|
|
||||||
#include <render-utils/spot_light_frag.h>
|
|
||||||
|
|
||||||
#include <render-utils/standardTransformPNTC_vert.h>
|
#include <render-utils/standardTransformPNTC_vert.h>
|
||||||
#include <render-utils/standardDrawTexture_frag.h>
|
#include <render-utils/standardDrawTexture_frag.h>
|
||||||
|
|
||||||
|
@ -66,9 +62,6 @@
|
||||||
#include <entities-renderer/textured_particle_frag.h>
|
#include <entities-renderer/textured_particle_frag.h>
|
||||||
#include <entities-renderer/textured_particle_vert.h>
|
#include <entities-renderer/textured_particle_vert.h>
|
||||||
|
|
||||||
#include <render-utils/hit_effect_vert.h>
|
|
||||||
#include <render-utils/hit_effect_frag.h>
|
|
||||||
|
|
||||||
#include <render-utils/overlay3D_vert.h>
|
#include <render-utils/overlay3D_vert.h>
|
||||||
#include <render-utils/overlay3D_frag.h>
|
#include <render-utils/overlay3D_frag.h>
|
||||||
|
|
||||||
|
@ -155,11 +148,8 @@ void QTestWindow::draw() {
|
||||||
testShaderBuild(simple_vert, simple_frag);
|
testShaderBuild(simple_vert, simple_frag);
|
||||||
testShaderBuild(simple_vert, simple_textured_frag);
|
testShaderBuild(simple_vert, simple_textured_frag);
|
||||||
testShaderBuild(simple_vert, simple_textured_unlit_frag);
|
testShaderBuild(simple_vert, simple_textured_unlit_frag);
|
||||||
testShaderBuild(deferred_light_vert, directional_light_frag);
|
|
||||||
testShaderBuild(deferred_light_vert, directional_ambient_light_frag);
|
testShaderBuild(deferred_light_vert, directional_ambient_light_frag);
|
||||||
testShaderBuild(deferred_light_vert, directional_skybox_light_frag);
|
testShaderBuild(deferred_light_vert, directional_skybox_light_frag);
|
||||||
testShaderBuild(deferred_light_point_vert, point_light_frag);
|
|
||||||
testShaderBuild(deferred_light_spot_vert, spot_light_frag);
|
|
||||||
testShaderBuild(standardTransformPNTC_vert, standardDrawTexture_frag);
|
testShaderBuild(standardTransformPNTC_vert, standardDrawTexture_frag);
|
||||||
testShaderBuild(standardTransformPNTC_vert, DrawTextureOpaque_frag);
|
testShaderBuild(standardTransformPNTC_vert, DrawTextureOpaque_frag);
|
||||||
|
|
||||||
|
@ -190,7 +180,6 @@ void QTestWindow::draw() {
|
||||||
testShaderBuild(ambient_occlusion_vert, ambient_occlusion_frag);
|
testShaderBuild(ambient_occlusion_vert, ambient_occlusion_frag);
|
||||||
testShaderBuild(ambient_occlusion_vert, occlusion_blend_frag);
|
testShaderBuild(ambient_occlusion_vert, occlusion_blend_frag);
|
||||||
*/
|
*/
|
||||||
testShaderBuild(hit_effect_vert, hit_effect_frag);
|
|
||||||
|
|
||||||
testShaderBuild(overlay3D_vert, overlay3D_frag);
|
testShaderBuild(overlay3D_vert, overlay3D_frag);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue