mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-05-21 20:09:00 -05:00
Merge branch 'master' into feature/horizons-framework
This commit is contained in:
@@ -1138,10 +1138,21 @@ int main(int argc, char* argv[]) {
|
||||
std::filesystem::path base = configurationFilePath.parent_path();
|
||||
FileSys.registerPathToken("${BASE}", base);
|
||||
|
||||
// For now, we just initialize glfw since we can't execute anything meaningfully
|
||||
// after SGCT initializes glfw. There is a bit of startup delay because of this,
|
||||
// but it shouldn't be too bad
|
||||
glfwInit();
|
||||
GLFWmonitor* m = glfwGetPrimaryMonitor();
|
||||
const GLFWvidmode* mode = glfwGetVideoMode(m);
|
||||
glm::ivec2 size = glm::ivec2(mode->width, mode->height);
|
||||
glfwTerminate();
|
||||
|
||||
|
||||
// Loading configuration from disk
|
||||
LDEBUG("Loading configuration from disk");
|
||||
*global::configuration = configuration::loadConfigurationFromFile(
|
||||
configurationFilePath.string(),
|
||||
size,
|
||||
commandlineArguments.configurationOverride
|
||||
);
|
||||
|
||||
|
||||
@@ -77,6 +77,11 @@ int main(int argc, char** argv) {
|
||||
)
|
||||
);
|
||||
|
||||
ghoul::logging::LogManager::initialize(
|
||||
ghoul::logging::LogLevel::Debug,
|
||||
ghoul::logging::LogManager::ImmediateFlush::Yes
|
||||
);
|
||||
|
||||
commandlineParser.setCommandLine(arguments);
|
||||
commandlineParser.execute();
|
||||
|
||||
@@ -98,10 +103,6 @@ int main(int argc, char** argv) {
|
||||
|
||||
settings.changeHostPassword = defaultChangeHostPassword.str();
|
||||
}
|
||||
ghoul::logging::LogManager::initialize(
|
||||
ghoul::logging::LogLevel::Debug,
|
||||
ghoul::logging::LogManager::ImmediateFlush::Yes
|
||||
);
|
||||
LINFO(fmt::format("Connection password: {}", settings.password));
|
||||
LINFO(fmt::format("Host password: {}", settings.changeHostPassword));
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ local wmap = {
|
||||
Texture = textures .. "wmap_ilc_7yr_v4_200uK_RGB_sos.png",
|
||||
Orientation = "Both",
|
||||
MirrorTexture = true,
|
||||
UseAdditiveBlending = true,
|
||||
RenderBinMode = "PreDeferredTransparent",
|
||||
FadeInThreshold = 0.4
|
||||
},
|
||||
GUI = {
|
||||
@@ -55,7 +55,7 @@ local cbe = {
|
||||
Texture = textures .. "COBErect.png",
|
||||
Orientation = "Both",
|
||||
MirrorTexture = true,
|
||||
UseAdditiveBlending = true,
|
||||
RenderBinMode = "PreDeferredTransparent",
|
||||
FadeInThreshold = 0.4
|
||||
},
|
||||
GUI = {
|
||||
@@ -81,7 +81,7 @@ local planck = {
|
||||
Texture = textures .. "cmb4k.jpg",
|
||||
Orientation = "Both",
|
||||
MirrorTexture = true,
|
||||
UseAdditiveBlending = true,
|
||||
RenderBinMode = "PreDeferredTransparent",
|
||||
FadeInThreshold = 0.4
|
||||
},
|
||||
GUI = {
|
||||
@@ -107,7 +107,7 @@ local Halpha = {
|
||||
Opacity = 0.4,
|
||||
Texture = textures .. "mwHalpha-f.png",
|
||||
Orientation = "Inside",
|
||||
UseAdditiveBlending = true,
|
||||
RenderBinMode = "PreDeferredTransparent",
|
||||
MirrorTexture = true,
|
||||
FadeOutThreshold = 0.025,
|
||||
Background = true
|
||||
|
||||
@@ -26,7 +26,7 @@ local multiverse_planck_1 = {
|
||||
Texture = textures .. "cmb4k.jpg",
|
||||
Orientation = "Both",
|
||||
MirrorTexture = true,
|
||||
UseAdditiveBlending = true,
|
||||
RenderBinMode = "PreDeferredTransparent",
|
||||
FadeInThreshold = 0.4
|
||||
},
|
||||
GUI = {
|
||||
@@ -56,7 +56,7 @@ local multiverse_planck_2 = {
|
||||
Texture = textures .. "cmb4k.jpg",
|
||||
Orientation = "Both",
|
||||
MirrorTexture = true,
|
||||
UseAdditiveBlending = true,
|
||||
RenderBinMode = "PreDeferredTransparent",
|
||||
FadeInThreshold = 0.4
|
||||
},
|
||||
GUI = {
|
||||
@@ -86,7 +86,7 @@ local multiverse_planck_3 = {
|
||||
Texture = textures .. "cmb4k.jpg",
|
||||
Orientation = "Both",
|
||||
MirrorTexture = true,
|
||||
UseAdditiveBlending = true,
|
||||
RenderBinMode = "PreDeferredTransparent",
|
||||
FadeInThreshold = 0.4
|
||||
},
|
||||
GUI = {
|
||||
@@ -116,7 +116,7 @@ local multiverse_planck_4 = {
|
||||
Texture = textures .. "cmb4k.jpg",
|
||||
Orientation = "Both",
|
||||
MirrorTexture = true,
|
||||
UseAdditiveBlending = true,
|
||||
RenderBinMode = "PreDeferredTransparent",
|
||||
FadeInThreshold = 0.4
|
||||
},
|
||||
GUI = {
|
||||
|
||||
@@ -21,7 +21,7 @@ local sphere = {
|
||||
Opacity = 0.35,
|
||||
Texture = sphereTextures .. "DarkUniverse_mellinger_4k.jpg",
|
||||
Orientation = "Inside",
|
||||
UseAdditiveBlending = true,
|
||||
RenderBinMode = "PreDeferredTransparent",
|
||||
MirrorTexture = true,
|
||||
FadeOutThreshold = 0.0015,
|
||||
Background = true
|
||||
|
||||
@@ -19,7 +19,7 @@ local object = {
|
||||
Segments = 40,
|
||||
Opacity = 0.4,
|
||||
Texture = textures .. "eso0932a_blend.png",
|
||||
UseAdditiveBlending = true,
|
||||
RenderBinMode = "PreDeferredTransparent",
|
||||
Orientation = "Inside",
|
||||
MirrorTexture = true,
|
||||
FadeOutThreshold = 0.01,
|
||||
|
||||
@@ -42,7 +42,7 @@ local JWSTBand = {
|
||||
DisableFadeInOut = true,
|
||||
Orientation = "Inside",
|
||||
Opacity = 0.05,
|
||||
UseAdditiveBlending = true,
|
||||
RenderBinMode = "PreDeferredTransparent",
|
||||
},
|
||||
Tag = { "mission_jwst_fov" },
|
||||
GUI = {
|
||||
|
||||
@@ -20,7 +20,7 @@ local L1 = {
|
||||
Parent = transforms.SolarSystemBarycenter.Identifier,
|
||||
Renderable = {
|
||||
Type = "RenderablePlaneImageLocal",
|
||||
RenderableType = "Opaque",
|
||||
RenderBinMode = "Opaque",
|
||||
Billboard = true,
|
||||
Size = 700E5,
|
||||
Texture = circle .. "circle.png",
|
||||
|
||||
@@ -20,7 +20,7 @@ local L2Small = {
|
||||
Parent = transforms.SolarSystemBarycenter.Identifier,
|
||||
Renderable = {
|
||||
Type = "RenderablePlaneImageLocal",
|
||||
RenderableType = "Opaque",
|
||||
RenderBinMode = "Opaque",
|
||||
Billboard = true,
|
||||
Size = 400E4,
|
||||
Texture = circle .. "circle.png",
|
||||
@@ -46,7 +46,7 @@ local L2 = {
|
||||
Parent = transforms.SolarSystemBarycenter.Identifier,
|
||||
Renderable = {
|
||||
Type = "RenderablePlaneImageLocal",
|
||||
RenderableType = "Opaque",
|
||||
RenderBinMode = "Opaque",
|
||||
Billboard = true,
|
||||
Size = 700E5,
|
||||
Texture = circle .. "circle.png",
|
||||
|
||||
@@ -20,7 +20,7 @@ local L4 = {
|
||||
Parent = transforms.SolarSystemBarycenter.Identifier,
|
||||
Renderable = {
|
||||
Type = "RenderablePlaneImageLocal",
|
||||
RenderableType = "Opaque",
|
||||
RenderBinMode = "Opaque",
|
||||
Billboard = true,
|
||||
Size = 800E6,
|
||||
Texture = circle .. "circle.png",
|
||||
|
||||
@@ -20,7 +20,7 @@ local L5 = {
|
||||
Parent = transforms.SolarSystemBarycenter.Identifier,
|
||||
Renderable = {
|
||||
Type = "RenderablePlaneImageLocal",
|
||||
RenderableType = "Opaque",
|
||||
RenderBinMode = "Opaque",
|
||||
Billboard = true,
|
||||
Size = 800E6,
|
||||
Texture = circle .. "circle.png",
|
||||
|
||||
@@ -88,8 +88,8 @@ local initializeAndAddNodes = function()
|
||||
Observer = transforms.EarthInertial.Identifier,
|
||||
File = path,
|
||||
LineNumber = 1,
|
||||
RenderBinMode = "PostDeferredTransparent"
|
||||
},
|
||||
RenderBinMode = "PostDeferredTransparent",
|
||||
Color = { 0.9, 0.6715, 0.0 },
|
||||
Fade = 1.5,
|
||||
Period = period,
|
||||
|
||||
@@ -49,8 +49,8 @@ asset.onInitialize(function ()
|
||||
Observer = transforms.EarthInertial.Identifier,
|
||||
File = path,
|
||||
LineNumber = 1,
|
||||
RenderBinMode = "PostDeferredTransparent"
|
||||
},
|
||||
RenderBinMode = "PostDeferredTransparent"
|
||||
Color = { 0.9, 0.6715, 0.0 },
|
||||
Fade = 1.5,
|
||||
Period = period,
|
||||
|
||||
@@ -51,8 +51,8 @@ asset.onInitialize(function ()
|
||||
Observer = transforms.EarthInertial.Identifier,
|
||||
File = path,
|
||||
LineNumber = 1,
|
||||
RenderBinMode = "PostDeferredTransparent"
|
||||
},
|
||||
RenderBinMode = "PostDeferredTransparent"
|
||||
Color = { 0.9, 0.6715, 0.0 },
|
||||
Fade = 1.5,
|
||||
Period = period,
|
||||
|
||||
@@ -20,7 +20,7 @@ local SunGlare = {
|
||||
Texture = textures .. "halo.png",
|
||||
BlendMode = "Additive",
|
||||
Opacity = 0.65,
|
||||
RenderableType = "PreDeferredTransparency"
|
||||
RenderBinMode = "PreDeferredTransparent"
|
||||
},
|
||||
GUI = {
|
||||
Name = "Sun Glare",
|
||||
|
||||
@@ -141,7 +141,7 @@ struct Configuration {
|
||||
std::filesystem::path findConfiguration(const std::string& filename = "openspace.cfg");
|
||||
|
||||
Configuration loadConfigurationFromFile(const std::filesystem::path& filename,
|
||||
const std::string& overrideScript);
|
||||
const glm::ivec2& primaryMonitorResolution, const std::string& overrideScript);
|
||||
|
||||
} // namespace openspace::configuration
|
||||
|
||||
|
||||
@@ -117,6 +117,7 @@ protected:
|
||||
double _interactionSphere = 0.0;
|
||||
SceneGraphNode* _parent = nullptr;
|
||||
bool _shouldUpdateIfDisabled = false;
|
||||
RenderBin _renderBin = RenderBin::Opaque;
|
||||
|
||||
private:
|
||||
// We only want the SceneGraphNode to be able manipulate the parent, so we don't want
|
||||
@@ -124,8 +125,6 @@ private:
|
||||
// parentage and that's no bueno
|
||||
friend ghoul::mm_unique_ptr<SceneGraphNode> SceneGraphNode::createFromDictionary(
|
||||
const ghoul::Dictionary&);
|
||||
|
||||
RenderBin _renderBin = RenderBin::Opaque;
|
||||
};
|
||||
|
||||
} // namespace openspace
|
||||
|
||||
@@ -45,28 +45,10 @@ namespace {
|
||||
"that is applied to this plane. This image has to be square."
|
||||
};
|
||||
|
||||
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."
|
||||
};
|
||||
|
||||
struct [[codegen::Dictionary(RenderablePlaneImageLocal)]] Parameters {
|
||||
// [[codegen::verbatim(TextureInfo.description)]]
|
||||
std::string texture;
|
||||
|
||||
enum class [[codegen::map(openspace::Renderable::RenderBin)]] RenderType {
|
||||
Background,
|
||||
Opaque,
|
||||
PreDeferredTransparent [[codegen::key("PreDeferredTransparency")]],
|
||||
PostDeferredTransparent [[codegen::key("PostDeferredTransparency")]],
|
||||
Overlay
|
||||
};
|
||||
|
||||
// [[codegen::verbatim(RenderableTypeInfo.description)]]
|
||||
std::optional<RenderType> renderType [[codegen::key("RenderableType")]];
|
||||
|
||||
// If this value is set to 'true', the image for this plane will not be loaded at
|
||||
// startup but rather when image is shown for the first time. Additionally, if the
|
||||
// plane is hidden, the image will automatically be unloaded
|
||||
@@ -109,13 +91,6 @@ RenderablePlaneImageLocal::RenderablePlaneImageLocal(const ghoul::Dictionary& di
|
||||
_texturePath.onChange([this]() { loadTexture(); });
|
||||
_textureFile->setCallback([this]() { _textureIsDirty = true; });
|
||||
|
||||
if (p.renderType.has_value()) {
|
||||
setRenderBin(codegen::map<Renderable::RenderBin>(*p.renderType));
|
||||
}
|
||||
else {
|
||||
setRenderBin(Renderable::RenderBin::Opaque);
|
||||
}
|
||||
|
||||
_isLoadingLazily = p.lazyLoading.value_or(_isLoadingLazily);
|
||||
if (_isLoadingLazily) {
|
||||
_enabled.onChange([this]() {
|
||||
|
||||
@@ -75,12 +75,6 @@ namespace {
|
||||
"outside of the sphere, or both."
|
||||
};
|
||||
|
||||
constexpr openspace::properties::Property::PropertyInfo UseAdditiveBlendingInfo = {
|
||||
"UseAdditiveBlending",
|
||||
"Use Additive Blending",
|
||||
"Render the object using additive blending."
|
||||
};
|
||||
|
||||
constexpr openspace::properties::Property::PropertyInfo SegmentsInfo = {
|
||||
"Segments",
|
||||
"Number of Segments",
|
||||
@@ -113,12 +107,6 @@ namespace {
|
||||
"Enables/Disables the Fade-In/Out effects."
|
||||
};
|
||||
|
||||
constexpr openspace::properties::Property::PropertyInfo BackgroundInfo = {
|
||||
"Background",
|
||||
"Sets the current sphere rendering as a background rendering type",
|
||||
"Enables/Disables background rendering."
|
||||
};
|
||||
|
||||
struct [[codegen::Dictionary(RenderableSphere)]] Parameters {
|
||||
// [[codegen::verbatim(SizeInfo.description)]]
|
||||
float size;
|
||||
@@ -138,9 +126,6 @@ namespace {
|
||||
// [[codegen::verbatim(OrientationInfo.description)]]
|
||||
std::optional<Orientation> orientation;
|
||||
|
||||
// [[codegen::verbatim(UseAdditiveBlendingInfo.description)]]
|
||||
std::optional<bool> useAdditiveBlending;
|
||||
|
||||
// [[codegen::verbatim(MirrorTextureInfo.description)]]
|
||||
std::optional<bool> mirrorTexture;
|
||||
|
||||
@@ -152,9 +137,6 @@ namespace {
|
||||
|
||||
// [[codegen::verbatim(DisableFadeInOutInfo.description)]]
|
||||
std::optional<bool> disableFadeInOut;
|
||||
|
||||
// [[codegen::verbatim(BackgroundInfo.description)]]
|
||||
std::optional<bool> background;
|
||||
};
|
||||
#include "renderablesphere_codegen.cpp"
|
||||
} // namespace
|
||||
@@ -172,9 +154,7 @@ RenderableSphere::RenderableSphere(const ghoul::Dictionary& dictionary)
|
||||
, _size(SizeInfo, 1.f, 0.f, 1e25f)
|
||||
, _segments(SegmentsInfo, 8, 4, 1000)
|
||||
, _mirrorTexture(MirrorTextureInfo, false)
|
||||
, _useAdditiveBlending(UseAdditiveBlendingInfo, false)
|
||||
, _disableFadeInDistance(DisableFadeInOutInfo, true)
|
||||
, _backgroundRendering(BackgroundInfo, false)
|
||||
, _fadeInThreshold(FadeInThresholdInfo, -1.f, 0.f, 1.f)
|
||||
, _fadeOutThreshold(FadeOutThresholdInfo, -1.f, 0.f, 1.f)
|
||||
{
|
||||
@@ -215,14 +195,8 @@ RenderableSphere::RenderableSphere(const ghoul::Dictionary& dictionary)
|
||||
_texturePath.onChange([this]() { loadTexture(); });
|
||||
|
||||
addProperty(_mirrorTexture);
|
||||
addProperty(_useAdditiveBlending);
|
||||
|
||||
_mirrorTexture = p.mirrorTexture.value_or(_mirrorTexture);
|
||||
_useAdditiveBlending = p.useAdditiveBlending.value_or(_useAdditiveBlending);
|
||||
|
||||
if (_useAdditiveBlending) {
|
||||
setRenderBin(Renderable::RenderBin::PreDeferredTransparent);
|
||||
}
|
||||
|
||||
bool hasGivenFadeOut = p.fadeOutThreshold.has_value();
|
||||
if (hasGivenFadeOut) {
|
||||
@@ -241,12 +215,6 @@ RenderableSphere::RenderableSphere(const ghoul::Dictionary& dictionary)
|
||||
addProperty(_disableFadeInDistance);
|
||||
}
|
||||
|
||||
_backgroundRendering = p.background.value_or(_backgroundRendering);
|
||||
|
||||
if (_backgroundRendering) {
|
||||
setRenderBin(Renderable::RenderBin::Background);
|
||||
}
|
||||
|
||||
setBoundingSphere(_size);
|
||||
setRenderBinFromOpacity();
|
||||
}
|
||||
@@ -386,14 +354,14 @@ void RenderableSphere::render(const RenderData& data, RendererTasks&) {
|
||||
glDisable(GL_CULL_FACE);
|
||||
}
|
||||
|
||||
if (_useAdditiveBlending) {
|
||||
if (_renderBin == Renderable::RenderBin::PreDeferredTransparent) {
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
glDepthMask(false);
|
||||
}
|
||||
|
||||
_sphere->render();
|
||||
|
||||
if (_useAdditiveBlending) {
|
||||
if (_renderBin == Renderable::RenderBin::PreDeferredTransparent) {
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glDepthMask(true);
|
||||
}
|
||||
|
||||
@@ -70,9 +70,7 @@ private:
|
||||
properties::IntProperty _segments;
|
||||
|
||||
properties::BoolProperty _mirrorTexture;
|
||||
properties::BoolProperty _useAdditiveBlending;
|
||||
properties::BoolProperty _disableFadeInDistance;
|
||||
properties::BoolProperty _backgroundRendering;
|
||||
|
||||
properties::FloatProperty _fadeInThreshold;
|
||||
properties::FloatProperty _fadeOutThreshold;
|
||||
|
||||
@@ -77,12 +77,6 @@ namespace {
|
||||
"outside of the sphere, or both."
|
||||
};
|
||||
|
||||
constexpr openspace::properties::Property::PropertyInfo UseAdditiveBlendingInfo = {
|
||||
"UseAdditiveBlending",
|
||||
"Use Additive Blending",
|
||||
"Render the object using additive blending."
|
||||
};
|
||||
|
||||
constexpr openspace::properties::Property::PropertyInfo SegmentsInfo = {
|
||||
"Segments",
|
||||
"Number of Segments",
|
||||
@@ -115,14 +109,6 @@ namespace {
|
||||
"Enables/Disables the Fade-In/Out effects."
|
||||
};
|
||||
|
||||
constexpr openspace::properties::Property::PropertyInfo BackgroundInfo = {
|
||||
"Background",
|
||||
"Render as Background",
|
||||
"If this value is set, the sphere is rendered in the background rendering bin, "
|
||||
"causing it to be rendered before most other scene graph nodes"
|
||||
};
|
||||
|
||||
|
||||
struct [[codegen::Dictionary(RenerableTimeVaryingSphere)]] Parameters {
|
||||
// [[codegen::verbatim(SizeInfo.description)]]
|
||||
float size;
|
||||
@@ -142,9 +128,6 @@ namespace {
|
||||
// [[codegen::verbatim(OrientationInfo.description)]]
|
||||
std::optional<Orientation> orientation;
|
||||
|
||||
// [[codegen::verbatim(UseAdditiveBlendingInfo.description)]]
|
||||
std::optional<bool> useAdditiveBlending;
|
||||
|
||||
// [[codegen::verbatim(MirrorTextureInfo.description)]]
|
||||
std::optional<bool> mirrorTexture;
|
||||
|
||||
@@ -156,9 +139,6 @@ namespace {
|
||||
|
||||
// [[codegen::verbatim(DisableFadeInOutInfo.description)]]
|
||||
std::optional<bool> disableFadeInOut;
|
||||
|
||||
// [[codegen::verbatim(BackgroundInfo.description)]]
|
||||
std::optional<bool> background;
|
||||
};
|
||||
#include "renderabletimevaryingsphere_codegen.cpp"
|
||||
} // namespace
|
||||
@@ -179,9 +159,7 @@ RenderableTimeVaryingSphere::RenderableTimeVaryingSphere(
|
||||
, _size(SizeInfo, 1.f, 0.f, 1e35f)
|
||||
, _segments(SegmentsInfo, 8, 4, 1000)
|
||||
, _mirrorTexture(MirrorTextureInfo, false)
|
||||
, _useAdditiveBlending(UseAdditiveBlendingInfo, false)
|
||||
, _disableFadeInDistance(DisableFadeInOutInfo, true)
|
||||
, _backgroundRendering(BackgroundInfo, false)
|
||||
, _fadeInThreshold(FadeInThresholdInfo, -1.f, -1.f, 1.f)
|
||||
, _fadeOutThreshold(FadeOutThresholdInfo, -1.f, -1.f, 1.f)
|
||||
{
|
||||
@@ -219,30 +197,18 @@ RenderableTimeVaryingSphere::RenderableTimeVaryingSphere(
|
||||
_segments.onChange([this]() { _sphereIsDirty = true; });
|
||||
|
||||
addProperty(_mirrorTexture);
|
||||
addProperty(_useAdditiveBlending);
|
||||
addProperty(_fadeOutThreshold);
|
||||
addProperty(_fadeInThreshold);
|
||||
|
||||
_mirrorTexture = p.mirrorTexture.value_or(_mirrorTexture);
|
||||
_useAdditiveBlending = p.useAdditiveBlending.value_or(_useAdditiveBlending);
|
||||
_fadeOutThreshold = p.fadeOutThreshold.value_or(_fadeOutThreshold);
|
||||
_fadeInThreshold = p.fadeInThreshold.value_or(_fadeInThreshold);
|
||||
|
||||
if (_useAdditiveBlending) {
|
||||
setRenderBin(Renderable::RenderBin::PreDeferredTransparent);
|
||||
}
|
||||
|
||||
if (_fadeOutThreshold || _fadeInThreshold) {
|
||||
_disableFadeInDistance = false;
|
||||
addProperty(_disableFadeInDistance);
|
||||
}
|
||||
|
||||
_backgroundRendering = p.background.value_or(_backgroundRendering);
|
||||
|
||||
if (_backgroundRendering) {
|
||||
setRenderBin(Renderable::RenderBin::Background);
|
||||
}
|
||||
|
||||
setBoundingSphere(_size);
|
||||
setRenderBinFromOpacity();
|
||||
}
|
||||
@@ -383,14 +349,14 @@ void RenderableTimeVaryingSphere::render(const RenderData& data, RendererTasks&)
|
||||
glDisable(GL_CULL_FACE);
|
||||
}
|
||||
|
||||
if (_useAdditiveBlending) {
|
||||
if (_renderBin == Renderable::RenderBin::PreDeferredTransparent) {
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
glDepthMask(false);
|
||||
}
|
||||
|
||||
_sphere->render();
|
||||
|
||||
if (_useAdditiveBlending) {
|
||||
if (_renderBin == Renderable::RenderBin::PreDeferredTransparent) {
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glDepthMask(true);
|
||||
}
|
||||
|
||||
@@ -83,9 +83,7 @@ private:
|
||||
properties::IntProperty _segments;
|
||||
|
||||
properties::BoolProperty _mirrorTexture;
|
||||
properties::BoolProperty _useAdditiveBlending;
|
||||
properties::BoolProperty _disableFadeInDistance;
|
||||
properties::BoolProperty _backgroundRendering;
|
||||
|
||||
properties::FloatProperty _fadeInThreshold;
|
||||
properties::FloatProperty _fadeOutThreshold;
|
||||
|
||||
@@ -71,20 +71,6 @@ namespace {
|
||||
{ "Points+Lines", RenderingModeLinesPoints }
|
||||
};
|
||||
|
||||
// Fragile! Keep in sync with documentation
|
||||
const std::map<std::string, openspace::Renderable::RenderBin> RenderBinConversion = {
|
||||
{ "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",
|
||||
@@ -139,13 +125,6 @@ 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."
|
||||
};
|
||||
|
||||
struct [[codegen::Dictionary(RenderableTrail)]] Parameters {
|
||||
// This object is used to compute locations along the path. Any Translation object
|
||||
// can be used here
|
||||
@@ -251,12 +230,6 @@ RenderableTrail::RenderableTrail(const ghoul::Dictionary& dictionary)
|
||||
|
||||
addPropertySubOwner(_appearance);
|
||||
|
||||
if (dictionary.hasValue<std::string>(RenderBinModeInfo.identifier)) {
|
||||
openspace::Renderable::RenderBin cfgRenderBin = RenderBinConversion.at(
|
||||
dictionary.value<std::string>(RenderBinModeInfo.identifier)
|
||||
);
|
||||
setRenderBin(cfgRenderBin);
|
||||
}
|
||||
}
|
||||
|
||||
void RenderableTrail::initializeGL() {
|
||||
|
||||
@@ -47,20 +47,6 @@
|
||||
namespace {
|
||||
constexpr const char* ProgramName = "OrbitalKepler";
|
||||
|
||||
// Fragile! Keep in sync with documentation
|
||||
const std::map<std::string, openspace::Renderable::RenderBin> RenderBinConversion = {
|
||||
{ "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,
|
||||
@@ -223,12 +209,6 @@ namespace {
|
||||
"Contiguous Size of Render Block",
|
||||
"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."
|
||||
};
|
||||
|
||||
struct [[codegen::Dictionary(RenderableOrbitalKepler)]] Parameters {
|
||||
// [[codegen::verbatim(PathInfo.description)]]
|
||||
@@ -251,9 +231,6 @@ namespace {
|
||||
|
||||
// [[codegen::verbatim(RenderSizeInfo.description)]]
|
||||
std::optional<int> renderSize;
|
||||
|
||||
// [[codegen::verbatim(RenderBinModeInfo.description)]]
|
||||
std::optional<std::string> renderBinMode;
|
||||
};
|
||||
#include "renderableorbitalkepler_codegen.cpp"
|
||||
} // namespace
|
||||
@@ -390,62 +367,25 @@ RenderableOrbitalKepler::RenderableOrbitalKepler(const ghoul::Dictionary& dict)
|
||||
, _sizeRender(RenderSizeInfo, 1, 1, 2)
|
||||
, _path(PathInfo)
|
||||
{
|
||||
documentation::testSpecificationAndThrow(
|
||||
Documentation(),
|
||||
dict,
|
||||
"RenderableOrbitalKepler"
|
||||
);
|
||||
_path = dict.value<std::string>(PathInfo.identifier);
|
||||
_segmentQuality = static_cast<int>(dict.value<double>(SegmentQualityInfo.identifier));
|
||||
|
||||
if (dict.hasValue<glm::dvec3>(LineColorInfo.identifier)) {
|
||||
_appearance.lineColor = dict.value<glm::dvec3>(LineColorInfo.identifier);
|
||||
}
|
||||
|
||||
_appearance.lineFade =
|
||||
dict.hasValue<double>(TrailFadeInfo.identifier) ?
|
||||
static_cast<float>(dict.value<double>(TrailFadeInfo.identifier)) :
|
||||
20.f;
|
||||
|
||||
if (dict.hasValue<double>(StartRenderIdxInfo.identifier)) {
|
||||
_startRenderIdx = static_cast<unsigned int>(
|
||||
dict.value<double>(StartRenderIdxInfo.identifier));
|
||||
}
|
||||
else {
|
||||
_startRenderIdx = 0u;
|
||||
}
|
||||
|
||||
if (dict.hasValue<double>(RenderSizeInfo.identifier)) {
|
||||
_sizeRender = static_cast<unsigned int>(
|
||||
dict.value<double>(RenderSizeInfo.identifier));
|
||||
}
|
||||
else {
|
||||
_sizeRender = 0u;
|
||||
}
|
||||
|
||||
_appearance.lineWidth =
|
||||
dict.hasValue<double>(LineWidthInfo.identifier) ?
|
||||
static_cast<float>(dict.value<double>(LineWidthInfo.identifier)) :
|
||||
2.f;
|
||||
|
||||
_reinitializeTrailBuffers = std::function<void()>([this] { initializeGL(); });
|
||||
|
||||
const Parameters p = codegen::bake<Parameters>(dict);
|
||||
|
||||
_path = p.path;
|
||||
_path.onChange(_reinitializeTrailBuffers);
|
||||
|
||||
_segmentQuality = p.segmentQuality;
|
||||
_segmentQuality.onChange(_reinitializeTrailBuffers);
|
||||
|
||||
_appearance.lineColor = p.color;
|
||||
_appearance.lineFade = p.trailFade.value_or(20.f);
|
||||
_appearance.lineWidth = p.lineWidth.value_or(2.f);
|
||||
addPropertySubOwner(_appearance);
|
||||
addProperty(_path);
|
||||
addProperty(_segmentQuality);
|
||||
addProperty(_opacity);
|
||||
|
||||
if (dict.hasValue<std::string>(RenderBinModeInfo.identifier)) {
|
||||
Renderable::RenderBin cfgRenderBin = RenderBinConversion.at(
|
||||
dict.value<std::string>(RenderBinModeInfo.identifier)
|
||||
);
|
||||
setRenderBin(cfgRenderBin);
|
||||
}
|
||||
else {
|
||||
setRenderBin(Renderable::RenderBin::PostDeferredTransparent);
|
||||
}
|
||||
_startRenderIdx = p.startRenderIdx.value_or(0);
|
||||
|
||||
_sizeRender = p.renderSize.value_or(0u);
|
||||
|
||||
}
|
||||
|
||||
void RenderableOrbitalKepler::initializeGL() {
|
||||
|
||||
@@ -357,21 +357,6 @@ end
|
||||
|
||||
|
||||
|
||||
function normalizeArg(arg)
|
||||
arg = arg or {}
|
||||
|
||||
check("number", arg, 1)
|
||||
check("number", arg, 2)
|
||||
|
||||
if type(arg[1]) == "number" and type(arg[2]) == "number" then
|
||||
arg["size"] = { arg[1], arg[2] }
|
||||
arg[1] = nil
|
||||
arg[2] = nil
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
function sgct.makeConfig(config)
|
||||
local configFile = os.tmpname() .. ".json"
|
||||
local file = io.open(configFile, "w+")
|
||||
@@ -383,7 +368,21 @@ end
|
||||
|
||||
|
||||
function sgct.config.single(arg)
|
||||
normalizeArg(arg)
|
||||
arg = arg or {}
|
||||
|
||||
if type(arg[1]) == "number" and type(arg[2]) == "number" then
|
||||
arg["size"] = { arg[1], arg[2] }
|
||||
arg[1] = nil
|
||||
arg[2] = nil
|
||||
else
|
||||
-- No numbers specified, therefore we want to use the screen resolution of the primary
|
||||
-- monitor to derive the resolution
|
||||
-- ScreenResolution is a variable that got injected into the openspace.cfg by the
|
||||
-- OpenSpace code prior to loading this file
|
||||
|
||||
local scale_factor = 2.0/3.0;
|
||||
arg["size"] = { ScreenResolution.x * scale_factor, ScreenResolution.y * scale_factor }
|
||||
end
|
||||
|
||||
check("table", arg, "size", "number")
|
||||
check("table", arg, "fov", "number")
|
||||
@@ -429,7 +428,24 @@ end
|
||||
|
||||
|
||||
function sgct.config.fisheye(arg)
|
||||
normalizeArg(arg)
|
||||
arg = arg or {}
|
||||
|
||||
check("number", arg, 1)
|
||||
check("number", arg, 2)
|
||||
|
||||
if type(arg[1]) == "number" and type(arg[2]) == "number" then
|
||||
arg["size"] = { arg[1], arg[2] }
|
||||
arg[1] = nil
|
||||
arg[2] = nil
|
||||
else
|
||||
-- No numbers specified, therefore we want to use the screen resolution of the primary
|
||||
-- monitor to derive the resolution
|
||||
-- ScreenResolution is a variable that got injected into the openspace.cfg by the
|
||||
-- OpenSpace code prior to loading this file
|
||||
|
||||
local scale_factor = 2.0/3.0;
|
||||
arg["size"] = { ScreenResolution.x * scale_factor, ScreenResolution.y * scale_factor }
|
||||
end
|
||||
|
||||
check("number", arg, "fov")
|
||||
check("number", arg, "tilt")
|
||||
|
||||
@@ -452,12 +452,20 @@ std::filesystem::path findConfiguration(const std::string& filename) {
|
||||
}
|
||||
|
||||
Configuration loadConfigurationFromFile(const std::filesystem::path& filename,
|
||||
const glm::ivec2& primaryMonitorResolution,
|
||||
const std::string& overrideScript)
|
||||
{
|
||||
ghoul_assert(std::filesystem::is_regular_file(filename), "File must exist");
|
||||
|
||||
Configuration result;
|
||||
|
||||
// Injecting the resolution of the primary screen into the Lua state
|
||||
std::string script = fmt::format(
|
||||
"ScreenResolution = {{ x = {}, y = {} }}",
|
||||
primaryMonitorResolution.x, primaryMonitorResolution.y
|
||||
);
|
||||
ghoul::lua::runScript(result.state, script);
|
||||
|
||||
// If there is an initial config helper file, load it into the state
|
||||
if (std::filesystem::is_regular_file(absPath(InitialConfigHelper))) {
|
||||
ghoul::lua::runScriptFile(result.state, absPath(InitialConfigHelper).string());
|
||||
|
||||
@@ -58,6 +58,14 @@ namespace {
|
||||
openspace::properties::Property::Visibility::Hidden
|
||||
};
|
||||
|
||||
constexpr openspace::properties::Property::PropertyInfo RenderableRenderBinModeInfo = {
|
||||
"RenderBinMode",
|
||||
"Render Bin Mode",
|
||||
"This value specifies if the renderable should be rendered in the Background,"
|
||||
"Opaque, Pre/PostDeferredTransparency, or Overlay rendering step.",
|
||||
openspace::properties::Property::Visibility::Developer
|
||||
};
|
||||
|
||||
struct [[codegen::Dictionary(Renderable)]] Parameters {
|
||||
// [[codegen::verbatim(EnabledInfo.description)]]
|
||||
std::optional<bool> enabled;
|
||||
@@ -71,6 +79,18 @@ namespace {
|
||||
|
||||
// [[codegen::verbatim(RenderableTypeInfo.description)]]
|
||||
std::optional<std::string> type;
|
||||
|
||||
// Fragile! Keep in sync with documentation
|
||||
enum class [[codegen::map(openspace::Renderable::RenderBin)]] RenderBinMode {
|
||||
Background,
|
||||
Opaque,
|
||||
PreDeferredTransparent,
|
||||
PostDeferredTransparent,
|
||||
Overlay
|
||||
};
|
||||
|
||||
// [[codegen::verbatim(RenderableRenderBinModeInfo.description)]]
|
||||
std::optional<RenderBinMode> renderBinMode;
|
||||
};
|
||||
#include "renderable_codegen.cpp"
|
||||
} // namespace
|
||||
@@ -103,6 +123,7 @@ ghoul::mm_unique_ptr<Renderable> Renderable::createFromDictionary(
|
||||
}
|
||||
|
||||
|
||||
|
||||
Renderable::Renderable(const ghoul::Dictionary& dictionary)
|
||||
: properties::PropertyOwner({ "Renderable" })
|
||||
, _enabled(EnabledInfo, true)
|
||||
@@ -140,6 +161,11 @@ Renderable::Renderable(const ghoul::Dictionary& dictionary)
|
||||
// set type for UI
|
||||
_renderableType = p.type.value_or(_renderableType);
|
||||
addProperty(_renderableType);
|
||||
|
||||
// only used by a few classes such as RenderableTrail and RenderableSphere
|
||||
if (p.renderBinMode.has_value()) {
|
||||
setRenderBin(codegen::map<Renderable::RenderBin>(*p.renderBinMode));
|
||||
}
|
||||
}
|
||||
|
||||
void Renderable::initialize() {}
|
||||
@@ -220,7 +246,9 @@ void Renderable::onEnabledChange(std::function<void(bool)> callback) {
|
||||
}
|
||||
|
||||
void Renderable::setRenderBinFromOpacity() {
|
||||
if (_renderBin != Renderable::RenderBin::PostDeferredTransparent) {
|
||||
if ((_renderBin != Renderable::RenderBin::PostDeferredTransparent) &&
|
||||
(_renderBin != Renderable::RenderBin::Overlay))
|
||||
{
|
||||
if (_opacity >= 0.f && _opacity < 1.f) {
|
||||
setRenderBin(Renderable::RenderBin::PreDeferredTransparent);
|
||||
}
|
||||
@@ -231,18 +259,7 @@ void Renderable::setRenderBinFromOpacity() {
|
||||
}
|
||||
|
||||
void Renderable::registerUpdateRenderBinFromOpacity() {
|
||||
_opacity.onChange([this](){
|
||||
if ((_renderBin != Renderable::RenderBin::PostDeferredTransparent) &&
|
||||
(_renderBin != Renderable::RenderBin::Overlay))
|
||||
{
|
||||
if (_opacity >= 0.f && _opacity < 1.f) {
|
||||
setRenderBin(Renderable::RenderBin::PreDeferredTransparent);
|
||||
}
|
||||
else {
|
||||
setRenderBin(Renderable::RenderBin::Opaque);
|
||||
}
|
||||
}
|
||||
});
|
||||
_opacity.onChange([this]() { setRenderBinFromOpacity(); });
|
||||
}
|
||||
|
||||
} // namespace openspace
|
||||
|
||||
@@ -67,6 +67,7 @@ int main(int argc, char** argv) {
|
||||
|
||||
*global::configuration = configuration::loadConfigurationFromFile(
|
||||
configFile.string(),
|
||||
glm::ivec2(0),
|
||||
""
|
||||
);
|
||||
global::openSpaceEngine->registerPathTokens();
|
||||
|
||||
@@ -53,15 +53,15 @@ FontSize = {
|
||||
Configuration loadConfiguration(const std::string& tag, const std::string& content) {
|
||||
std::string filename = fmt::format("test_configuration_{}.cfg", tag);
|
||||
std::filesystem::path path = std::filesystem::temp_directory_path();
|
||||
std::string configFile = (path / filename).string();
|
||||
writeConfig(configFile, content);
|
||||
std::string file = (path / filename).string();
|
||||
writeConfig(file, content);
|
||||
try {
|
||||
Configuration conf = loadConfigurationFromFile(configFile, content);
|
||||
std::filesystem::remove(configFile);
|
||||
Configuration conf = loadConfigurationFromFile(file, glm::ivec2(0), content);
|
||||
std::filesystem::remove(file);
|
||||
return conf;
|
||||
}
|
||||
catch (...) {
|
||||
std::filesystem::remove(configFile);
|
||||
std::filesystem::remove(file);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user