Merge pull request #1230 from OpenSpace/issue/1217

Issue/1217
This commit is contained in:
Alexander Bock
2020-06-30 21:16:04 +02:00
committed by GitHub
20 changed files with 106 additions and 35 deletions
@@ -22,7 +22,8 @@ local LaunchTrail = {
Color = { 0.70, 0.50, 0.20 },
StartTime = "1968 DEC 21 12:51:00",
EndTime = "1968 DEC 21 23:23:22",
SampleInterval = 30
SampleInterval = 30,
RenderBinMode = "PostDeferredTransparent"
},
GUI = {
Name = "Apollo 8 Launch Trail",
@@ -91,7 +91,8 @@ local initializeAndAddNodes = function()
Body = identifier,
Observer = transforms.EarthInertial.Identifier,
File = path,
LineNumber = 1
LineNumber = 1,
RenderBinMode = "PostDeferredTransparent"
},
Color = { 0.9, 0.6715, 0.0 },
Fade = 1.5,
@@ -16,7 +16,7 @@ local SunGlare = {
Texture = textures .. "/halo.png",
BlendMode = "Additive",
Opacity = 0.65,
RenderableType = "Transparency"
RenderableType = "PreDeferredTransparency"
},
Transform = {
Translation = {
+2 -1
View File
@@ -84,7 +84,8 @@ function satellites(title, file, color, group)
Path = file,
SegmentQuality = 3,
Color = color,
Fade = 1.5
Fade = 1.5,
RenderBinMode = "PostDeferredTransparent"
},
Tag = { "earth_satellites" },
GUI = {
+3 -2
View File
@@ -53,8 +53,9 @@ public:
enum class RenderBin : int {
Background = 1,
Opaque = 2,
Transparent = 4,
Overlay = 8
PreDeferredTransparent = 4,
PostDeferredTransparent = 8,
Overlay = 16
};
static std::unique_ptr<Renderable> createFromDictionary(
@@ -621,7 +621,7 @@ void main() {
// All calculations are done in Km:
pixelDepth *= 0.001;
positionObjectsCoords.xyz *= 0.001;
if (pixelDepth < offset) {
// ATM Occluded - Something in fron of ATM.
atmosphereFinalColor += color;
+2 -2
View File
@@ -350,7 +350,7 @@ RenderableLabels::RenderableLabels(const ghoul::Dictionary& dictionary)
setRenderBinFromOpacity();
break;
case BlendModeAdditive:
setRenderBin(Renderable::RenderBin::Transparent);
setRenderBin(Renderable::RenderBin::PreDeferredTransparent);
break;
default:
throw ghoul::MissingCaseException();
@@ -608,7 +608,7 @@ void RenderableLabels::initialize() {
throw ghoul::RuntimeError("Error loading objects labels data.");
}
setRenderBin(Renderable::RenderBin::Transparent);
setRenderBin(Renderable::RenderBin::PreDeferredTransparent);
}
void RenderableLabels::initializeGL() {
+1 -1
View File
@@ -130,7 +130,7 @@ RenderablePlane::RenderablePlane(const ghoul::Dictionary& dictionary)
setRenderBinFromOpacity();
break;
case BlendModeAdditive:
setRenderBin(Renderable::RenderBin::Transparent);
setRenderBin(Renderable::RenderBin::PreDeferredTransparent);
break;
default:
throw ghoul::MissingCaseException();
@@ -117,8 +117,11 @@ RenderablePlaneImageLocal::RenderablePlaneImageLocal(const ghoul::Dictionary& di
else if (renderType == "Opaque") {
setRenderBin(Renderable::RenderBin::Opaque);
}
else if (renderType == "Transparent") {
setRenderBin(Renderable::RenderBin::Transparent);
else if (renderType == "PreDeferredTransparent") {
setRenderBin(Renderable::RenderBin::PreDeferredTransparent);
}
else if (renderType == "PostDeferredTransparent") {
setRenderBin(Renderable::RenderBin::PostDeferredTransparent);
}
else if (renderType == "Overlay") {
setRenderBin(Renderable::RenderBin::Overlay);
+1 -1
View File
@@ -264,7 +264,7 @@ RenderableSphere::RenderableSphere(const ghoul::Dictionary& dictionary)
_useAdditiveBlending = dictionary.value<bool>(UseAdditiveBlendingInfo.identifier);
if (_useAdditiveBlending) {
setRenderBin(Renderable::RenderBin::Transparent);
setRenderBin(Renderable::RenderBin::PreDeferredTransparent);
}
}
@@ -68,6 +68,14 @@ namespace {
{ "Points+Lines", RenderingModeLinesPoints }
};
// Fragile! Keep in sync with documentation
const std::map<std::string, openspace::Renderable::RenderBin> RenderBinModeConversion = {
{ "Background", openspace::Renderable::RenderBin::Background },
{ "Opaque", openspace::Renderable::RenderBin::Opaque },
{ "PreDeferredTransparent", openspace::Renderable::RenderBin::PreDeferredTransparent},
{ "PostDeferredTransparent", openspace::Renderable::RenderBin::PostDeferredTransparent}
};
static const openspace::properties::PropertyOwner::PropertyOwnerInfo
AppearanceInfo = {
"Appearance",
@@ -122,6 +130,13 @@ namespace {
"corresponding points (and subpoints) are shown. 'Lines+Points' shows both parts."
};
constexpr openspace::properties::Property::PropertyInfo RenderBinModeInfo = {
"RenderBinMode",
"RenderBin Mode",
"Determines if the trails will be rendered after all other elements, including"
"atmospheres if needed."
};
} // namespace
namespace openspace {
@@ -255,6 +270,13 @@ RenderableTrail::RenderableTrail(const ghoul::Dictionary& dictionary)
}
addPropertySubOwner(_appearance);
if (dictionary.hasKeyAndValue<std::string>(RenderBinModeInfo.identifier)) {
openspace::Renderable::RenderBin cfgRenderBin = RenderBinModeConversion.at(
dictionary.value<std::string>(RenderBinModeInfo.identifier)
);
setRenderBin(cfgRenderBin);
}
}
void RenderableTrail::initializeGL() {
@@ -184,8 +184,11 @@ RenderableTrailOrbit::RenderableTrailOrbit(const ghoul::Dictionary& dictionary)
else if (renderType == "Opaque") {
setRenderBin(Renderable::RenderBin::Opaque);
}
else if (renderType == "Transparent") {
setRenderBin(Renderable::RenderBin::Transparent);
else if (renderType == "PreDeferredTransparent") {
setRenderBin(Renderable::RenderBin::PreDeferredTransparent);
}
else if (renderType == "PostDeferredTransparent") {
setRenderBin(Renderable::RenderBin::PostDeferredTransparent);
}
else if (renderType == "Overlay") {
setRenderBin(Renderable::RenderBin::Overlay);
+4 -1
View File
@@ -67,13 +67,16 @@ Fragment getFragment() {
if (distanceCenter > dLW) {
frag.color.a = 0.0;
//discard;
}
else {
frag.color.a *= pow(float((dLW - distanceCenter) / dLW), blendFactor);
// if (frag.color.a < 0.4)
// discard;
}
frag.gPosition = vs_gPosition;
// There is no normal here
frag.gNormal = vec4(0.0, 0.0, -1.0, 1.0);
@@ -699,7 +699,7 @@ void RenderableBillboardsCloud::initialize() {
_colorOption.setValue(static_cast<int>(_colorRangeData.size() - 1));
}
setRenderBin(Renderable::RenderBin::Transparent);
setRenderBin(Renderable::RenderBin::PreDeferredTransparent);
}
void RenderableBillboardsCloud::initializeGL() {
@@ -435,7 +435,7 @@ RenderablePlanesCloud::RenderablePlanesCloud(const ghoul::Dictionary& dictionary
setRenderBin(Renderable::RenderBin::Opaque);
break;
case BlendModeAdditive:
setRenderBin(Renderable::RenderBin::Transparent);
setRenderBin(Renderable::RenderBin::PreDeferredTransparent);
break;
default:
throw ghoul::MissingCaseException();
@@ -50,6 +50,14 @@ namespace {
constexpr const char* KeyFile = "Path";
constexpr const char* KeyLineNum = "LineNumber";
// Fragile! Keep in sync with documentation
const std::map<std::string, openspace::Renderable::RenderBin> RenderBinModeConversion = {
{ "Background", openspace::Renderable::RenderBin::Background },
{ "Opaque", openspace::Renderable::RenderBin::Opaque },
{ "PreDeferredTransparent", openspace::Renderable::RenderBin::PreDeferredTransparent},
{ "PostDeferredTransparent", openspace::Renderable::RenderBin::PostDeferredTransparent}
};
constexpr const std::array<int, 36> LeapYears = {
1956, 1960, 1964, 1968, 1972, 1976, 1980, 1984, 1988, 1992, 1996,
2000, 2004, 2008, 2012, 2016, 2020, 2024, 2028, 2032, 2036, 2040,
@@ -152,6 +160,13 @@ namespace {
"Number of objects to render sequentially from StartRenderIdx"
};
constexpr openspace::properties::Property::PropertyInfo RenderBinModeInfo = {
"RenderBinMode",
"RenderBin Mode",
"Determines if the trails will be rendered after all other elements, including"
"atmospheres if needed."
};
// Count the number of full days since the beginning of 2000 to the beginning of
// the parameter 'year'
int countDays(int year) {
@@ -345,8 +360,8 @@ double RenderableOrbitalKepler::epochFromYMDdSubstring(const std::string& epochS
RenderableOrbitalKepler::RenderableOrbitalKepler(const ghoul::Dictionary& dict)
: Renderable(dict)
, _path(PathInfo)
, _segmentQuality(SegmentQualityInfo, 2, 1, 10)
, _path(PathInfo)
, _upperLimit(UpperLimitInfo, 1000, 1, 1000000)
, _startRenderIdx(StartRenderIdxInfo, 0, 0, 1)
, _sizeRender(RenderSizeInfo, 1, 1, 2)
@@ -400,7 +415,14 @@ RenderableOrbitalKepler::RenderableOrbitalKepler(const ghoul::Dictionary& dict)
_startRenderIdxCallbackHandle = _startRenderIdx.onChange(_updateStartRenderIdxSelect);
_sizeRenderCallbackHandle = _sizeRender.onChange(_updateRenderSizeSelect);
setRenderBin(Renderable::RenderBin::Overlay);
if (dict.hasKeyAndValue<std::string>(RenderBinModeInfo.identifier)) {
openspace::Renderable::RenderBin cfgRenderBin = RenderBinModeConversion.at(
dict.value<std::string>(RenderBinModeInfo.identifier)
);
setRenderBin(cfgRenderBin);
} else {
setRenderBin(Renderable::RenderBin::PostDeferredTransparent);
}
}
void RenderableOrbitalKepler::initializeGL() {
+2 -1
View File
@@ -585,7 +585,8 @@ void ABufferRenderer::render(Scene* scene, Camera* camera, float blackoutFactor)
// Render the scene to the fragment buffer. Collect renderer tasks (active raycasters)
int renderBinMask = static_cast<int>(Renderable::RenderBin::Background) |
static_cast<int>(Renderable::RenderBin::Opaque) |
static_cast<int>(Renderable::RenderBin::Transparent) |
static_cast<int>(Renderable::RenderBin::PreDeferredTransparent) |
static_cast<int>(Renderable::RenderBin::PostDeferredTransparent) |
static_cast<int>(Renderable::RenderBin::Overlay);
Time time = global::timeManager.time();
+9 -3
View File
@@ -1226,8 +1226,8 @@ void FramebufferRenderer::render(Scene* scene, Camera* camera, float blackoutFac
}
{
GLDebugGroup group("Transparent");
data.renderBinMask = static_cast<int>(Renderable::RenderBin::Transparent);
GLDebugGroup group("PreDeferredTransparent");
data.renderBinMask = static_cast<int>(Renderable::RenderBin::PreDeferredTransparent);
scene->render(data, tasks);
}
@@ -1265,10 +1265,16 @@ void FramebufferRenderer::render(Scene* scene, Camera* camera, float blackoutFac
}
performDeferredTasks(tasks.deferredcasterTasks);
}
glDrawBuffers(1, &ColorAttachment01Array[_pingPongIndex]);
glEnablei(GL_BLEND, 0);
{
GLDebugGroup group("PostDeferredTransparent");
data.renderBinMask = static_cast<int>(Renderable::RenderBin::PostDeferredTransparent);
scene->render(data, tasks);
}
{
GLDebugGroup group("Overlay");
data.renderBinMask = static_cast<int>(Renderable::RenderBin::Overlay);
+14 -10
View File
@@ -235,21 +235,25 @@ 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);
if (_renderBin != Renderable::RenderBin::PostDeferredTransparent) {
if (_opacity >= 0.f && _opacity < 1.f) {
setRenderBin(Renderable::RenderBin::PreDeferredTransparent);
}
else {
setRenderBin(Renderable::RenderBin::Opaque);
}
}
}
void Renderable::registerUpdateRenderBinFromOpacity() {
_opacity.onChange([this](){
if (_opacity > 0.f && _opacity < 1.f) {
setRenderBin(Renderable::RenderBin::Transparent);
}
else {
setRenderBin(Renderable::RenderBin::Opaque);
if (_renderBin != Renderable::RenderBin::PostDeferredTransparent) {
if (_opacity >= 0.f && _opacity < 1.f) {
setRenderBin(Renderable::RenderBin::PreDeferredTransparent);
}
else {
setRenderBin(Renderable::RenderBin::Opaque);
}
}
});
}
+4 -1
View File
@@ -57,9 +57,12 @@ namespace {
return "Opaque";
}
else if (renderBin == 4) {
return "Transparent";
return "PreDeferredTransparent";
}
else if (renderBin == 8) {
return "PostDeferredTransparent";
}
else if (renderBin == 16) {
return "Overlay";
}
else {