Bring back changes for transparency and added new error protection for big components.

This commit is contained in:
Jonathas Costa
2019-07-15 10:31:08 -04:00
parent cb36a25d5a
commit 0f09c36aa2
11 changed files with 66 additions and 20 deletions

View File

@@ -13,10 +13,10 @@ local SunGlare = {
Size = 1.3*10^10.5,
Origin = "Center",
Billboard = true,
Texture = textures .. "/halo.png",
Texture = textures .. "/test6.png",
BlendMode = "Additive",
Opacity = 0.65,
RenderableType = "Transparent"
RenderableType = "Transparency"
},
Transform = {
Translation = {

View File

@@ -73,6 +73,11 @@ private:
GL_COLOR_ATTACHMENT1
};
inline static const GLenum ColorAttachment03Array[2] = {
GL_COLOR_ATTACHMENT0,
GL_COLOR_ATTACHMENT3
};
inline static const GLenum ColorAttachment012Array[3] = {
GL_COLOR_ATTACHMENT0,
GL_COLOR_ATTACHMENT1,

View File

@@ -96,6 +96,7 @@ protected:
properties::FloatProperty _opacity;
properties::StringProperty _renderableType;
void setRenderBinFromOpacity();
void registerUpdateRenderBinFromOpacity();
private:

View File

@@ -127,7 +127,7 @@ RenderablePlane::RenderablePlane(const ghoul::Dictionary& dictionary)
_blendMode.onChange([&]() {
switch (_blendMode) {
case BlendModeNormal:
setRenderBin(Renderable::RenderBin::Opaque);
setRenderBinFromOpacity();
break;
case BlendModeAdditive:
setRenderBin(Renderable::RenderBin::Transparent);
@@ -137,6 +137,12 @@ RenderablePlane::RenderablePlane(const ghoul::Dictionary& dictionary)
}
});
_opacity.onChange([&]() {
if (_blendMode == BlendModeNormal) {
setRenderBinFromOpacity();
}
});
if (dictionary.hasKey(BlendModeInfo.identifier)) {
const std::string v = dictionary.value<std::string>(BlendModeInfo.identifier);
if (v == "Normal") {

View File

@@ -67,12 +67,14 @@ protected:
virtual void bindTexture();
virtual void unbindTexture();
protected:
properties::OptionProperty _blendMode;
private:
void createPlane();
properties::BoolProperty _billboard;
properties::FloatProperty _size;
properties::OptionProperty _blendMode;
ghoul::opengl::ProgramObject* _shader = nullptr;

View File

@@ -85,6 +85,8 @@ RenderablePlaneImageLocal::RenderablePlaneImageLocal(const ghoul::Dictionary& di
"RenderablePlaneImageLocal"
);
addProperty(_blendMode);
_texturePath = absPath(dictionary.value<std::string>(TextureInfo.identifier));
_textureFile = std::make_unique<ghoul::filesystem::File>(_texturePath);

View File

@@ -178,8 +178,10 @@ RenderableTrail::RenderableTrail(const ghoul::Dictionary& dictionary)
properties::OptionProperty::DisplayType::Dropdown
)
{
setRenderBin(RenderBin::Overlay);
addProperty(_opacity);
registerUpdateRenderBinFromOpacity();
//registerUpdateRenderBinFromOpacity();
_translation = Translation::createFromDictionary(
dictionary.value<ghoul::Dictionary>(KeyTranslation)
@@ -289,7 +291,7 @@ void RenderableTrail::render(const RenderData& data, RendererTasks&) {
if (usingFramebufferRenderer) {
glDepthMask(false);
//glBlendFunc(GL_SRC_ALPHA, GL_ONE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
}
const bool renderLines = (_renderingModes == RenderingModeLines) |

View File

@@ -100,8 +100,8 @@ namespace {
constexpr openspace::properties::Property::PropertyInfo RenderableTypeInfo = {
"RenderableType",
"RenderableType",
"This value specifies if the plane should be rendered in the Background,"
"Opaque, Transparent, or Overlay rendering step."
"This value specifies if the orbit should be rendered in the Background,"
"Opaque, Transparent, or Overlay rendering step. Default is Transparent."
};
} // namespace
@@ -192,7 +192,7 @@ RenderableTrailOrbit::RenderableTrailOrbit(const ghoul::Dictionary& dictionary)
}
}
else {
setRenderBin(Renderable::RenderBin::Opaque);
setRenderBin(Renderable::RenderBin::Overlay);
}
}

View File

@@ -30,6 +30,8 @@
#define bloom_thresh_min #{rendererData.bloom_thresh_min}
#define bloom_thresh_max #{rendererData.bloom_thresh_max}
#define deltaError 0.00001
layout(location = 0) out vec4 _out_color_;
layout(location = 1) out vec4 gPosition;
layout(location = 2) out vec4 gNormal;
@@ -37,7 +39,7 @@ layout(location = 3) out vec4 filterBuffer;
void main() {
Fragment f = getFragment();
_out_color_ = vec4((log2(vec3(1.0) - f.color.rgb)/(-exposure)), f.color.a);
_out_color_ = vec4((log2(vec3(1.0) - (f.color.rgb - vec3(deltaError)))/(-exposure)), f.color.a);
//_out_color_ = f.color;
gPosition = f.gPosition;
gNormal = f.gNormal;

View File

@@ -34,7 +34,6 @@
#include <openspace/rendering/renderable.h>
#include <openspace/rendering/renderengine.h>
#include <openspace/rendering/volumeraycaster.h>
#include <openspace/rendering/volumeraycaster.h>
#include <openspace/scene/scene.h>
#include <openspace/util/camera.h>
#include <openspace/util/timemanager.h>
@@ -264,6 +263,13 @@ void FramebufferRenderer::initialize() {
_pingPongBuffers.colorTexture[1],
0
);
glFramebufferTexture2D(
GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT3,
GL_TEXTURE_2D_MULTISAMPLE,
_gBuffers._filterTexture,
0
);
glFramebufferTexture2D(
GL_FRAMEBUFFER,
GL_DEPTH_ATTACHMENT,
@@ -530,6 +536,16 @@ void FramebufferRenderer::captureAndSetOpenGLDefaultState() {
glDisablei(GL_BLEND, 2);
glDisablei(GL_BLEND, 3);
glClampColor(GL_CLAMP_READ_COLOR, GL_FALSE);
// JCC: From OpenGL Registry
// Note that the FrontFace and ClampColor commands in section 12.2 are not
// deprecated, as they still affect other non - deprecated functionality; however,
// the ClampColor targets CLAMP_VERTEX_COLOR and CLAMP_FRAGMENT_ -
// COLOR are deprecated.
//glClampColor(GL_CLAMP_VERTEX_COLOR, GL_FALSE);
//glClampColor(GL_CLAMP_FRAGMENT_COLOR, GL_FALSE);
_osDefaultGLState.blendEnabled = true;
_osDefaultGLState.blend0Enabled = true;
_osDefaultGLState.blend1Enabled = false;
@@ -1860,10 +1876,11 @@ void FramebufferRenderer::render(Scene* scene, Camera* camera, float blackoutFac
scene->render(data, tasks);
data.renderBinMask = static_cast<int>(Renderable::RenderBin::Opaque);
scene->render(data, tasks);
glDrawBuffers(2, ColorAttachment03Array);
data.renderBinMask = static_cast<int>(Renderable::RenderBin::Transparent);
scene->render(data, tasks);
data.renderBinMask = static_cast<int>(Renderable::RenderBin::Overlay);
scene->render(data, tasks);
// Run Volume Tasks
{
@@ -1876,19 +1893,12 @@ void FramebufferRenderer::render(Scene* scene, Camera* camera, float blackoutFac
performRaycasterTasks(tasks.raycasterTasks);
}
// If no Deferred Task are present, the resolve step
// is executed in a separated step
if (!tasks.deferredcasterTasks.empty()) {
// We use ping pong rendering in order to be able to
// render to the same final buffer, multiple
// deferred tasks at same time (e.g. more than 1 ATM being seen at once)
glBindFramebuffer(GL_FRAMEBUFFER, _pingPongBuffers.framebuffer);
glDrawBuffers(1, &ColorAttachment01Array[_pingPongIndex]);
// JCC: next commands should be in the cache....
glEnablei(GL_BLEND, 0);
glDisablei(GL_BLEND, 1);
glDisablei(GL_BLEND, 2);
glDisablei(GL_BLEND, 3);
std::unique_ptr<performance::PerformanceMeasurement> perfInternal;
if (doPerformanceMeasurements) {
@@ -1899,6 +1909,13 @@ void FramebufferRenderer::render(Scene* scene, Camera* camera, float blackoutFac
performDeferredTasks(tasks.deferredcasterTasks);
}
glDrawBuffers(4, ColorAttachment0123Array);
data.renderBinMask = static_cast<int>(Renderable::RenderBin::Overlay);
scene->render(data, tasks);
glDrawBuffer(GL_COLOR_ATTACHMENT0);
// Disabling depth test for filtering and hdr
glDisable(GL_DEPTH_TEST);

View File

@@ -211,6 +211,15 @@ void Renderable::onEnabledChange(std::function<void(bool)> callback) {
});
}
void Renderable::setRenderBinFromOpacity() {
if (_opacity > 0.f && _opacity < 1.f) {
setRenderBin(Renderable::RenderBin::Transparent);
}
else {
setRenderBin(Renderable::RenderBin::Opaque);
}
}
void Renderable::registerUpdateRenderBinFromOpacity() {
_opacity.onChange([this](){
if (_opacity > 0.f && _opacity < 1.f) {