mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-05-29 11:19:54 +02:00
Bringing back brownBis to just msaa support
This commit is contained in:
parent
8a4f7fe2b6
commit
9ad783135c
12 changed files with 43 additions and 122 deletions
|
@ -66,6 +66,7 @@ void GraphicsEngine::initializeGPU(GLWidget* glwidget) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsEngine::initializeRender(bool disableDeferred) {
|
void GraphicsEngine::initializeRender(bool disableDeferred) {
|
||||||
|
|
||||||
// Set up the render engine
|
// Set up the render engine
|
||||||
render::CullFunctor cullFunctor = LODManager::shouldRender;
|
render::CullFunctor cullFunctor = LODManager::shouldRender;
|
||||||
_renderEngine->addJob<UpdateSceneTask>("UpdateScene");
|
_renderEngine->addJob<UpdateSceneTask>("UpdateScene");
|
||||||
|
|
|
@ -354,14 +354,14 @@ void OpenGLDisplayPlugin::customizeContext() {
|
||||||
if ((image.width() > 0) && (image.height() > 0)) {
|
if ((image.width() > 0) && (image.height() > 0)) {
|
||||||
|
|
||||||
cursorData.texture = gpu::Texture::createStrict(
|
cursorData.texture = gpu::Texture::createStrict(
|
||||||
gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::SRGBA),
|
gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA),
|
||||||
image.width(), image.height(),
|
image.width(), image.height(),
|
||||||
gpu::Texture::MAX_NUM_MIPS,
|
gpu::Texture::MAX_NUM_MIPS,
|
||||||
gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR));
|
gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR));
|
||||||
cursorData.texture->setSource("cursor texture");
|
cursorData.texture->setSource("cursor texture");
|
||||||
auto usage = gpu::Texture::Usage::Builder().withColor().withAlpha();
|
auto usage = gpu::Texture::Usage::Builder().withColor().withAlpha();
|
||||||
cursorData.texture->setUsage(usage.build());
|
cursorData.texture->setUsage(usage.build());
|
||||||
cursorData.texture->setStoredMipFormat(gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::SRGBA));
|
cursorData.texture->setStoredMipFormat(gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA));
|
||||||
cursorData.texture->assignStoredMip(0, image.byteCount(), image.constBits());
|
cursorData.texture->assignStoredMip(0, image.byteCount(), image.constBits());
|
||||||
cursorData.texture->setAutoGenerateMips(true);
|
cursorData.texture->setAutoGenerateMips(true);
|
||||||
}
|
}
|
||||||
|
@ -382,13 +382,12 @@ void OpenGLDisplayPlugin::customizeContext() {
|
||||||
{
|
{
|
||||||
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);
|
_simplePipeline = gpu::Pipeline::create(program, scissorState);
|
||||||
// _hudPipeline = gpu::Pipeline::create(program, blendState);
|
_hudPipeline = gpu::Pipeline::create(program, blendState);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::display_plugins::program::SrgbToLinear);
|
gpu::ShaderPointer program = gpu::Shader::createProgram(shader::display_plugins::program::SrgbToLinear);
|
||||||
_presentPipeline = gpu::Pipeline::create(program, scissorState);
|
_presentPipeline = gpu::Pipeline::create(program, scissorState);
|
||||||
_hudPipeline = gpu::Pipeline::create(program, blendState);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -515,8 +514,7 @@ void OpenGLDisplayPlugin::renderFromTexture(gpu::Batch& batch, const gpu::Textur
|
||||||
batch.setViewportTransform(viewport);
|
batch.setViewportTransform(viewport);
|
||||||
batch.setResourceTexture(0, texture);
|
batch.setResourceTexture(0, texture);
|
||||||
#ifndef USE_GLES
|
#ifndef USE_GLES
|
||||||
batch.setPipeline(_simplePipeline);
|
batch.setPipeline(_presentPipeline);
|
||||||
// batch.setPipeline(_presentPipeline);
|
|
||||||
#else
|
#else
|
||||||
batch.setPipeline(_simplePipeline);
|
batch.setPipeline(_simplePipeline);
|
||||||
#endif
|
#endif
|
||||||
|
@ -607,7 +605,7 @@ void OpenGLDisplayPlugin::compositePointer() {
|
||||||
render([&](gpu::Batch& batch) {
|
render([&](gpu::Batch& batch) {
|
||||||
batch.enableStereo(false);
|
batch.enableStereo(false);
|
||||||
batch.setProjectionTransform(mat4());
|
batch.setProjectionTransform(mat4());
|
||||||
// batch.setFramebuffer(_compositeFramebuffer);
|
batch.setFramebuffer(_compositeFramebuffer);
|
||||||
batch.setPipeline(_cursorPipeline);
|
batch.setPipeline(_cursorPipeline);
|
||||||
batch.setResourceTexture(0, cursorData.texture);
|
batch.setResourceTexture(0, cursorData.texture);
|
||||||
batch.resetViewTransform();
|
batch.resetViewTransform();
|
||||||
|
@ -643,7 +641,7 @@ void OpenGLDisplayPlugin::compositeLayers() {
|
||||||
|
|
||||||
{
|
{
|
||||||
PROFILE_RANGE_EX(render_detail, "compositeScene", 0xff0077ff, (uint64_t)presentCount())
|
PROFILE_RANGE_EX(render_detail, "compositeScene", 0xff0077ff, (uint64_t)presentCount())
|
||||||
// compositeScene();
|
compositeScene();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HIFI_ENABLE_NSIGHT_DEBUG
|
#ifdef HIFI_ENABLE_NSIGHT_DEBUG
|
||||||
|
@ -657,10 +655,10 @@ void OpenGLDisplayPlugin::compositeLayers() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* {
|
{
|
||||||
PROFILE_RANGE_EX(render_detail, "compositeExtra", 0xff0077ff, (uint64_t)presentCount())
|
PROFILE_RANGE_EX(render_detail, "compositeExtra", 0xff0077ff, (uint64_t)presentCount())
|
||||||
compositeExtra();
|
compositeExtra();
|
||||||
}*/
|
}
|
||||||
|
|
||||||
// Draw the pointer last so it's on top of everything
|
// Draw the pointer last so it's on top of everything
|
||||||
auto compositorHelper = DependencyManager::get<CompositorHelper>();
|
auto compositorHelper = DependencyManager::get<CompositorHelper>();
|
||||||
|
@ -675,8 +673,7 @@ void OpenGLDisplayPlugin::internalPresent() {
|
||||||
// Note: _displayTexture must currently be the same size as the display.
|
// Note: _displayTexture must currently be the same size as the display.
|
||||||
uvec2 dims = _displayTexture ? uvec2(_displayTexture->getDimensions()) : getSurfacePixels();
|
uvec2 dims = _displayTexture ? uvec2(_displayTexture->getDimensions()) : getSurfacePixels();
|
||||||
auto viewport = ivec4(uvec2(0), dims);
|
auto viewport = ivec4(uvec2(0), dims);
|
||||||
// renderFromTexture(batch, _displayTexture ? _displayTexture : _compositeFramebuffer->getRenderBuffer(0), viewport, viewport);
|
renderFromTexture(batch, _displayTexture ? _displayTexture : _compositeFramebuffer->getRenderBuffer(0), viewport, viewport);
|
||||||
renderFromTexture(batch, _displayTexture ? _displayTexture : _currentFrame->framebuffer->getRenderBuffer(0), viewport, viewport);
|
|
||||||
});
|
});
|
||||||
swapBuffers();
|
swapBuffers();
|
||||||
_presentRate.increment();
|
_presentRate.increment();
|
||||||
|
@ -885,7 +882,7 @@ OpenGLDisplayPlugin::~OpenGLDisplayPlugin() {
|
||||||
void OpenGLDisplayPlugin::updateCompositeFramebuffer() {
|
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_SRGBA_32, renderSize.x, renderSize.y));
|
_compositeFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("OpenGLDisplayPlugin::composite", gpu::Element::COLOR_RGBA_32, renderSize.x, renderSize.y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,31 +17,6 @@ vec3 colorToLinearRGB(vec3 srgb) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
vec4 fetched = texture(colorMap, varTexCoord0);
|
outFragColor.a = 1.0;
|
||||||
//outFragColor = fetched;
|
outFragColor.rgb = colorToLinearRGB(texture(colorMap, varTexCoord0).rgb);
|
||||||
outFragColor.a = fetched.a;
|
|
||||||
outFragColor.rgb = pow(fetched.rgb, vec3(2.2));
|
|
||||||
|
|
||||||
/* int vSize = 300;
|
|
||||||
int hSize = 400;
|
|
||||||
|
|
||||||
if (gl_FragCoord.y < vSize) {
|
|
||||||
finalColor *= pow(2.0, 0.1);
|
|
||||||
}
|
|
||||||
else if (gl_FragCoord.y > 2 * vSize) {
|
|
||||||
finalColor *= pow(2.0, -0.1);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
finalColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gl_FragCoord.x <hSize) {
|
|
||||||
outFragColor.rgb = colorToLinearRGB(finalColor);
|
|
||||||
} else if (gl_FragCoord.x > 2 * hSize) {
|
|
||||||
outFragColor.rgb = pow(finalColor, vec3(1.0 / 2.2));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
outFragColor.rgb = finalColor;
|
|
||||||
}*/
|
|
||||||
// outFragColor.rgb = sqrt(finalColor);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -260,9 +260,7 @@ void HmdDisplayPlugin::internalPresent() {
|
||||||
|
|
||||||
viewport.z *= 2;
|
viewport.z *= 2;
|
||||||
}
|
}
|
||||||
// renderFromTexture(batch, _compositeFramebuffer->getRenderBuffer(0), viewport, scissor, fbo);
|
renderFromTexture(batch, _compositeFramebuffer->getRenderBuffer(0), viewport, scissor, fbo);
|
||||||
renderFromTexture(batch, _currentFrame->framebuffer->getRenderBuffer(0), viewport, scissor, fbo);
|
|
||||||
|
|
||||||
});
|
});
|
||||||
swapBuffers();
|
swapBuffers();
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,6 @@ const QSurfaceFormat& getDefaultOpenGLSurfaceFormat() {
|
||||||
#else
|
#else
|
||||||
format.setProfile(QSurfaceFormat::OpenGLContextProfile::CoreProfile);
|
format.setProfile(QSurfaceFormat::OpenGLContextProfile::CoreProfile);
|
||||||
#endif
|
#endif
|
||||||
format.setColorSpace(QSurfaceFormat::sRGBColorSpace);
|
|
||||||
|
|
||||||
if (gl::Context::enableDebugLogger()) {
|
if (gl::Context::enableDebugLogger()) {
|
||||||
format.setOption(QSurfaceFormat::DebugContext);
|
format.setOption(QSurfaceFormat::DebugContext);
|
||||||
|
|
|
@ -278,6 +278,7 @@ public:
|
||||||
FillMode fillMode{ FILL_FACE };
|
FillMode fillMode{ FILL_FACE };
|
||||||
CullMode cullMode{ CULL_NONE };
|
CullMode cullMode{ CULL_NONE };
|
||||||
ColorMask colorWriteMask{ WRITE_ALL };
|
ColorMask colorWriteMask{ WRITE_ALL };
|
||||||
|
|
||||||
Flags flags;
|
Flags flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -118,22 +118,22 @@ 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);
|
||||||
|
|
||||||
/* { // 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);
|
||||||
task.addJob<DrawBounds>("DrawBounds", opaques);
|
task.addJob<DrawBounds>("DrawBounds", opaques);
|
||||||
task.addJob<DrawBounds>("DrawTransparentBounds", transparents);
|
task.addJob<DrawBounds>("DrawTransparentBounds", transparents);
|
||||||
|
|
||||||
task.addJob<DrawBounds>("DrawZones", zones);*/
|
task.addJob<DrawBounds>("DrawZones", zones);
|
||||||
const auto debugZoneInputs = DebugZoneLighting::Inputs(deferredFrameTransform, lightFrame, backgroundFrame).asVarying();
|
const auto debugZoneInputs = DebugZoneLighting::Inputs(deferredFrameTransform, lightFrame, backgroundFrame).asVarying();
|
||||||
task.addJob<DebugZoneLighting>("DrawZoneStack", debugZoneInputs);
|
task.addJob<DebugZoneLighting>("DrawZoneStack", debugZoneInputs);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// Lighting Buffer ready for tone mapping
|
// Lighting Buffer ready for tone mapping
|
||||||
// Forward rendering on GLES doesn't support tonemapping to and from the same FBO, so we specify
|
// Forward rendering on GLES doesn't support tonemapping to and from the same FBO, so we specify
|
||||||
// the output FBO as null, which causes the tonemapping to target the blit framebuffer
|
// the output FBO as null, which causes the tonemapping to target the blit framebuffer
|
||||||
// const auto toneMappingInputs = ToneMappingDeferred::Inputs(framebuffer, static_cast<gpu::FramebufferPointer>(nullptr) ).asVarying();
|
const auto toneMappingInputs = ToneMappingDeferred::Inputs(framebuffer, static_cast<gpu::FramebufferPointer>(nullptr) ).asVarying();
|
||||||
// task.addJob<ToneMappingDeferred>("ToneMapping", toneMappingInputs);
|
task.addJob<ToneMappingDeferred>("ToneMapping", toneMappingInputs);
|
||||||
|
|
||||||
// Layered Overlays
|
// Layered Overlays
|
||||||
// Composite the HUD and HUD overlays
|
// Composite the HUD and HUD overlays
|
||||||
|
@ -141,40 +141,29 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend
|
||||||
|
|
||||||
// Disable blit because we do tonemapping and compositing directly to the blit FBO
|
// Disable blit because we do tonemapping and compositing directly to the blit FBO
|
||||||
// Blit!
|
// Blit!
|
||||||
task.addJob<Blit>("Blit", framebuffer);
|
// task.addJob<Blit>("Blit", framebuffer);
|
||||||
}
|
|
||||||
|
|
||||||
void PrepareFramebuffer::configure(const PrepareFramebuffer::Config& config) {
|
|
||||||
_numSamples = config.getNumSamples();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrepareFramebuffer::run(const RenderContextPointer& renderContext, gpu::FramebufferPointer& framebuffer) {
|
void PrepareFramebuffer::run(const RenderContextPointer& renderContext, gpu::FramebufferPointer& framebuffer) {
|
||||||
glm::uvec2 frameSize(renderContext->args->_viewport.z, renderContext->args->_viewport.w);
|
glm::uvec2 frameSize(renderContext->args->_viewport.z, renderContext->args->_viewport.w);
|
||||||
|
|
||||||
// Resizing framebuffers instead of re-building them seems to cause issues with threaded rendering
|
// Resizing framebuffers instead of re-building them seems to cause issues with threaded rendering
|
||||||
if (_framebuffer && (_framebuffer->getSize() != frameSize || _framebuffer->getNumSamples() != _numSamples)) {
|
if (_framebuffer && _framebuffer->getSize() != frameSize) {
|
||||||
_framebuffer.reset();
|
_framebuffer.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_framebuffer) {
|
if (!_framebuffer) {
|
||||||
_framebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("forward"));
|
_framebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("forward"));
|
||||||
|
|
||||||
int numSamples = _numSamples;
|
|
||||||
|
|
||||||
auto colorFormat = gpu::Element::COLOR_SRGBA_32;
|
auto colorFormat = gpu::Element::COLOR_SRGBA_32;
|
||||||
auto defaultSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR);
|
auto defaultSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_POINT);
|
||||||
/* auto colorTexture =
|
|
||||||
gpu::Texture::createRenderBuffer(colorFormat, frameSize.x, frameSize.y, gpu::Texture::SINGLE_MIP, defaultSampler);
|
|
||||||
_framebuffer->setRenderBuffer(0, colorTexture);*/
|
|
||||||
auto colorTexture =
|
auto colorTexture =
|
||||||
gpu::Texture::createRenderBufferMultisample(colorFormat, frameSize.x, frameSize.y, numSamples, defaultSampler);
|
gpu::Texture::createRenderBuffer(colorFormat, frameSize.x, frameSize.y, gpu::Texture::SINGLE_MIP, defaultSampler);
|
||||||
_framebuffer->setRenderBuffer(0, colorTexture);
|
_framebuffer->setRenderBuffer(0, colorTexture);
|
||||||
|
|
||||||
auto depthFormat = gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::DEPTH_STENCIL); // Depth24_Stencil8 texel format
|
auto depthFormat = gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::DEPTH_STENCIL); // Depth24_Stencil8 texel format
|
||||||
/* auto depthTexture =
|
|
||||||
gpu::Texture::createRenderBuffer(depthFormat, frameSize.x, frameSize.y, gpu::Texture::SINGLE_MIP, defaultSampler);
|
|
||||||
_framebuffer->setDepthStencilBuffer(depthTexture, depthFormat);*/
|
|
||||||
auto depthTexture =
|
auto depthTexture =
|
||||||
gpu::Texture::createRenderBufferMultisample(depthFormat, frameSize.x, frameSize.y, numSamples, defaultSampler);
|
gpu::Texture::createRenderBuffer(depthFormat, frameSize.x, frameSize.y, gpu::Texture::SINGLE_MIP, defaultSampler);
|
||||||
_framebuffer->setDepthStencilBuffer(depthTexture, depthFormat);
|
_framebuffer->setDepthStencilBuffer(depthTexture, depthFormat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,33 +27,16 @@ public:
|
||||||
void build(JobModel& task, const render::Varying& input, render::Varying& output);
|
void build(JobModel& task, const render::Varying& input, render::Varying& output);
|
||||||
};
|
};
|
||||||
|
|
||||||
class PrepareFramebufferConfig : public render::Job::Config {
|
|
||||||
Q_OBJECT
|
|
||||||
Q_PROPERTY(int numSamples WRITE setNumSamples READ getNumSamples NOTIFY dirty)
|
|
||||||
public:
|
|
||||||
int getNumSamples() const { return numSamples; }
|
|
||||||
void setNumSamples(int num) { numSamples = num; emit dirty(); }
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void dirty();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
int numSamples{ 8 };
|
|
||||||
};
|
|
||||||
|
|
||||||
class PrepareFramebuffer {
|
class PrepareFramebuffer {
|
||||||
public:
|
public:
|
||||||
using Inputs = gpu::FramebufferPointer;
|
using Inputs = gpu::FramebufferPointer;
|
||||||
using Config = PrepareFramebufferConfig;
|
using JobModel = render::Job::ModelO<PrepareFramebuffer, Inputs>;
|
||||||
using JobModel = render::Job::ModelO<PrepareFramebuffer, Inputs, Config>;
|
|
||||||
|
|
||||||
void configure(const Config& config);
|
|
||||||
void run(const render::RenderContextPointer& renderContext,
|
void run(const render::RenderContextPointer& renderContext,
|
||||||
gpu::FramebufferPointer& framebuffer);
|
gpu::FramebufferPointer& framebuffer);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
gpu::FramebufferPointer _framebuffer;
|
gpu::FramebufferPointer _framebuffer;
|
||||||
int _numSamples { 8 };
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class PrepareForward {
|
class PrepareForward {
|
||||||
|
|
|
@ -40,13 +40,6 @@ void ToneMappingEffect::setExposure(float exposure) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToneMappingEffect::setColorFilter(const glm::vec3& colorFilter) {
|
|
||||||
auto& params = _parametersBuffer.get<Parameters>();
|
|
||||||
if (params._colorFilter != colorFilter) {
|
|
||||||
_parametersBuffer.edit<Parameters>()._colorFilter = colorFilter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ToneMappingEffect::setToneCurve(ToneCurve curve) {
|
void ToneMappingEffect::setToneCurve(ToneCurve curve) {
|
||||||
auto& params = _parametersBuffer.get<Parameters>();
|
auto& params = _parametersBuffer.get<Parameters>();
|
||||||
if (params._toneCurve != curve) {
|
if (params._toneCurve != curve) {
|
||||||
|
@ -69,6 +62,9 @@ void ToneMappingEffect::render(RenderArgs* args, const gpu::TexturePointer& ligh
|
||||||
batch.enableStereo(false);
|
batch.enableStereo(false);
|
||||||
batch.setFramebuffer(destinationFramebuffer);
|
batch.setFramebuffer(destinationFramebuffer);
|
||||||
|
|
||||||
|
// FIXME: Generate the Luminosity map
|
||||||
|
//batch.generateTextureMips(lightingBuffer);
|
||||||
|
|
||||||
batch.setViewportTransform(args->_viewport);
|
batch.setViewportTransform(args->_viewport);
|
||||||
batch.setProjectionTransform(glm::mat4());
|
batch.setProjectionTransform(glm::mat4());
|
||||||
batch.resetViewTransform();
|
batch.resetViewTransform();
|
||||||
|
@ -84,7 +80,6 @@ void ToneMappingEffect::render(RenderArgs* args, const gpu::TexturePointer& ligh
|
||||||
|
|
||||||
void ToneMappingDeferred::configure(const Config& config) {
|
void ToneMappingDeferred::configure(const Config& config) {
|
||||||
_toneMappingEffect.setExposure(config.exposure);
|
_toneMappingEffect.setExposure(config.exposure);
|
||||||
_toneMappingEffect.setColorFilter(toGlm(config.colorFilter));
|
|
||||||
_toneMappingEffect.setToneCurve((ToneMappingEffect::ToneCurve)config.curve);
|
_toneMappingEffect.setToneCurve((ToneMappingEffect::ToneCurve)config.curve);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,9 +31,6 @@ public:
|
||||||
void setExposure(float exposure);
|
void setExposure(float exposure);
|
||||||
float getExposure() const { return _parametersBuffer.get<Parameters>()._exposure; }
|
float getExposure() const { return _parametersBuffer.get<Parameters>()._exposure; }
|
||||||
|
|
||||||
void setColorFilter(const glm::vec3& colorFilter);
|
|
||||||
glm::vec3 getColorFIlter() const { return _parametersBuffer.get<Parameters>()._colorFilter; }
|
|
||||||
|
|
||||||
// Different tone curve available
|
// Different tone curve available
|
||||||
enum ToneCurve {
|
enum ToneCurve {
|
||||||
None = 0,
|
None = 0,
|
||||||
|
@ -54,10 +51,8 @@ private:
|
||||||
float _exposure = 0.0f;
|
float _exposure = 0.0f;
|
||||||
float _twoPowExposure = 1.0f;
|
float _twoPowExposure = 1.0f;
|
||||||
glm::vec2 spareA;
|
glm::vec2 spareA;
|
||||||
glm::vec3 _colorFilter{ 1.0f };
|
int _toneCurve = Gamma22;
|
||||||
float spareB;
|
glm::vec3 spareB;
|
||||||
int _toneCurve = None;
|
|
||||||
glm::vec3 spareC;
|
|
||||||
|
|
||||||
Parameters() {}
|
Parameters() {}
|
||||||
};
|
};
|
||||||
|
@ -70,19 +65,16 @@ private:
|
||||||
class ToneMappingConfig : public render::Job::Config {
|
class ToneMappingConfig : public render::Job::Config {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(float exposure MEMBER exposure WRITE setExposure);
|
Q_PROPERTY(float exposure MEMBER exposure WRITE setExposure);
|
||||||
Q_PROPERTY(QColor colorFilter MEMBER colorFilter WRITE setColorFilter);
|
|
||||||
Q_PROPERTY(int curve MEMBER curve WRITE setCurve);
|
Q_PROPERTY(int curve MEMBER curve WRITE setCurve);
|
||||||
public:
|
public:
|
||||||
ToneMappingConfig() : render::Job::Config(true) {}
|
ToneMappingConfig() : render::Job::Config(true) {}
|
||||||
|
|
||||||
void setExposure(float newExposure) { exposure = newExposure; emit dirty(); }
|
void setExposure(float newExposure) { exposure = newExposure; emit dirty(); }
|
||||||
void setColorFilter(const QColor& newColorFilter) { colorFilter = newColorFilter; emit dirty(); }
|
|
||||||
void setCurve(int newCurve) { curve = std::max((int)ToneMappingEffect::None, std::min((int)ToneMappingEffect::Filmic, newCurve)); emit dirty(); }
|
void setCurve(int newCurve) { curve = std::max((int)ToneMappingEffect::None, std::min((int)ToneMappingEffect::Filmic, newCurve)); emit dirty(); }
|
||||||
|
|
||||||
|
|
||||||
float exposure{ 0.0f };
|
float exposure{ 0.0f };
|
||||||
QColor colorFilter { 255, 255, 255 };
|
int curve{ ToneMappingEffect::Gamma22 };
|
||||||
int curve{ ToneMappingEffect::None };
|
|
||||||
signals:
|
signals:
|
||||||
void dirty();
|
void dirty();
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
|
|
||||||
struct ToneMappingParams {
|
struct ToneMappingParams {
|
||||||
vec4 _exp_2powExp_s0_s1;
|
vec4 _exp_2powExp_s0_s1;
|
||||||
vec4 _colorFilter_s0;
|
|
||||||
ivec4 _toneCurve_s0_s1_s2;
|
ivec4 _toneCurve_s0_s1_s2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -33,14 +32,11 @@ LAYOUT(binding=RENDER_UTILS_BUFFER_TM_PARAMS) uniform toneMappingParamsBuffer {
|
||||||
float getTwoPowExposure() {
|
float getTwoPowExposure() {
|
||||||
return params._exp_2powExp_s0_s1.y;
|
return params._exp_2powExp_s0_s1.y;
|
||||||
}
|
}
|
||||||
vec3 getColorFilter() {
|
|
||||||
return params._colorFilter_s0.xyz;
|
|
||||||
}
|
|
||||||
int getToneCurve() {
|
int getToneCurve() {
|
||||||
return params._toneCurve_s0_s1_s2.x;
|
return params._toneCurve_s0_s1_s2.x;
|
||||||
}
|
}
|
||||||
|
|
||||||
LAYOUT(binding = RENDER_UTILS_TEXTURE_TM_COLOR) uniform sampler2D colorMap;
|
LAYOUT(binding=RENDER_UTILS_TEXTURE_TM_COLOR) uniform sampler2D colorMap;
|
||||||
|
|
||||||
layout(location=0) in vec2 varTexCoord0;
|
layout(location=0) in vec2 varTexCoord0;
|
||||||
layout(location=0) out vec4 outFragColor;
|
layout(location=0) out vec4 outFragColor;
|
||||||
|
@ -49,7 +45,7 @@ void main(void) {
|
||||||
vec4 fragColorRaw = texture(colorMap, varTexCoord0);
|
vec4 fragColorRaw = texture(colorMap, varTexCoord0);
|
||||||
vec3 fragColor = fragColorRaw.xyz;
|
vec3 fragColor = fragColorRaw.xyz;
|
||||||
|
|
||||||
vec3 srcColor = fragColor * getColorFilter() * getTwoPowExposure();
|
vec3 srcColor = fragColor * getTwoPowExposure();
|
||||||
|
|
||||||
int toneCurve = getToneCurve();
|
int toneCurve = getToneCurve();
|
||||||
vec3 tonedColor = srcColor;
|
vec3 tonedColor = srcColor;
|
||||||
|
@ -58,7 +54,7 @@ void main(void) {
|
||||||
tonedColor = (x * (6.2 * x + 0.5)) / (x * (6.2 * x + 1.7) + 0.06);
|
tonedColor = (x * (6.2 * x + 0.5)) / (x * (6.2 * x + 1.7) + 0.06);
|
||||||
} else if (toneCurve == ToneCurveReinhard) {
|
} else if (toneCurve == ToneCurveReinhard) {
|
||||||
tonedColor = srcColor/(1.0 + srcColor);
|
tonedColor = srcColor/(1.0 + srcColor);
|
||||||
// tonedColor = pow(tonedColor, vec3(INV_GAMMA_22));
|
tonedColor = pow(tonedColor, vec3(INV_GAMMA_22));
|
||||||
} else if (toneCurve == ToneCurveGamma22) {
|
} else if (toneCurve == ToneCurveGamma22) {
|
||||||
tonedColor = pow(srcColor, vec3(INV_GAMMA_22));
|
tonedColor = pow(srcColor, vec3(INV_GAMMA_22));
|
||||||
} // else None toned = src
|
} // else None toned = src
|
||||||
|
|
|
@ -150,26 +150,21 @@ void OculusDisplayPlugin::hmdPresent() {
|
||||||
// Manually bind the texture to the FBO
|
// Manually bind the texture to the FBO
|
||||||
// FIXME we should have a way of wrapping raw GL ids in GPU objects without
|
// FIXME we should have a way of wrapping raw GL ids in GPU objects without
|
||||||
// taking ownership of the object
|
// taking ownership of the object
|
||||||
auto srcfbo = getGLBackend()->getFramebufferID(_currentFrame->framebuffer);
|
auto fbo = getGLBackend()->getFramebufferID(_outputFramebuffer);
|
||||||
auto dstfbo = getGLBackend()->getFramebufferID(_outputFramebuffer);
|
glNamedFramebufferTexture(fbo, GL_COLOR_ATTACHMENT0, curTexId, 0);
|
||||||
glNamedFramebufferTexture(dstfbo, GL_COLOR_ATTACHMENT0, curTexId, 0);
|
|
||||||
auto viewport = ivec4(uvec2(), _outputFramebuffer->getSize());
|
auto viewport = ivec4(uvec2(), _outputFramebuffer->getSize());
|
||||||
/* render([&](gpu::Batch& batch) {
|
render([&](gpu::Batch& batch) {
|
||||||
batch.enableStereo(false);
|
batch.enableStereo(false);
|
||||||
batch.setFramebuffer(_outputFramebuffer);
|
batch.setFramebuffer(_outputFramebuffer);
|
||||||
batch.setViewportTransform(ivec4(uvec2(), _outputFramebuffer->getSize()));
|
batch.setViewportTransform(ivec4(uvec2(), _outputFramebuffer->getSize()));
|
||||||
batch.setStateScissorRect(ivec4(uvec2(), _outputFramebuffer->getSize()));
|
batch.setStateScissorRect(ivec4(uvec2(), _outputFramebuffer->getSize()));
|
||||||
batch.resetViewTransform();
|
batch.resetViewTransform();
|
||||||
batch.setProjectionTransform(mat4());
|
batch.setProjectionTransform(mat4());
|
||||||
// batch.setPipeline(_presentPipeline);
|
batch.setPipeline(_presentPipeline);
|
||||||
batch.setPipeline(_simplePipeline);
|
batch.setResourceTexture(0, _compositeFramebuffer->getRenderBuffer(0));
|
||||||
// batch.setResourceTexture(0, _compositeFramebuffer->getRenderBuffer(0));
|
|
||||||
batch.setResourceTexture(0, _currentFrame->framebuffer->getRenderBuffer(0));
|
|
||||||
batch.draw(gpu::TRIANGLE_STRIP, 4);
|
batch.draw(gpu::TRIANGLE_STRIP, 4);
|
||||||
});*/
|
});
|
||||||
glBlitNamedFramebuffer(srcfbo, dstfbo, viewport.x, viewport.y, viewport.z, viewport.w, viewport.x, viewport.y,
|
glNamedFramebufferTexture(fbo, GL_COLOR_ATTACHMENT0, 0, 0);
|
||||||
viewport.z, viewport.w, GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
|
||||||
glNamedFramebufferTexture(dstfbo, GL_COLOR_ATTACHMENT0, 0, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue