mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-05-02 08:49:20 -05:00
Merge branch 'develop' into feature/globebrowsing
Conflicts: modules/base/scale/staticscale.cpp modules/base/scale/staticscale.h modules/globebrowsing/meshes/trianglesoup.h modules/globebrowsing/tile/tiledataset.cpp modules/newhorizons/shaders/renderableModelProjection_fs.glsl src/interaction/interactionhandler.cpp src/rendering/renderengine.cpp src/scene/scenegraphnode.cpp
This commit is contained in:
@@ -125,9 +125,9 @@ bool ModelGeometry::initialize(Renderable* parent) {
|
||||
for (auto v: _vertices)
|
||||
{
|
||||
maximumDistanceSquared = glm::max(
|
||||
glm::pow(v.location[0], 2) +
|
||||
glm::pow(v.location[1], 2) +
|
||||
glm::pow(v.location[2], 2), maximumDistanceSquared);
|
||||
glm::pow(v.location[0], 2.f) +
|
||||
glm::pow(v.location[1], 2.f) +
|
||||
glm::pow(v.location[2], 2.f), maximumDistanceSquared);
|
||||
}
|
||||
_parent->setBoundingSphere(PowerScaledScalar(glm::sqrt(maximumDistanceSquared), 0.0));
|
||||
|
||||
|
||||
@@ -211,7 +211,7 @@ void RenderableModel::render(const RenderData& data) {
|
||||
glm::dmat4 modelTransform =
|
||||
glm::translate(glm::dmat4(1.0), data.modelTransform.translation) * // Translation
|
||||
glm::dmat4(data.modelTransform.rotation) * // Spice rotation
|
||||
glm::dmat4(glm::scale(glm::dmat4(1.0), glm::dvec3(data.modelTransform.scale)));
|
||||
glm::dmat4(glm::scale(glm::dmat4(_modelTransform), glm::dvec3(data.modelTransform.scale)));
|
||||
debugModelRotation; // debug model rotation controlled from GUI
|
||||
glm::dmat4 modelViewTransform = data.camera.combinedViewMatrix() * modelTransform;
|
||||
|
||||
|
||||
@@ -60,6 +60,7 @@ RenderablePlane::RenderablePlane(const ghoul::Dictionary& dictionary)
|
||||
, _shader(nullptr)
|
||||
, _textureIsDirty(false)
|
||||
, _texture(nullptr)
|
||||
, _blendMode(BlendMode::Normal)
|
||||
, _quad(0)
|
||||
, _vertexPositionBuffer(0)
|
||||
{
|
||||
@@ -67,7 +68,7 @@ RenderablePlane::RenderablePlane(const ghoul::Dictionary& dictionary)
|
||||
dictionary.getValue("Size", size);
|
||||
_size = size;
|
||||
|
||||
if (dictionary.hasKey("Name")){
|
||||
if (dictionary.hasKey("Name")) {
|
||||
dictionary.getValue("Name", _nodeName);
|
||||
}
|
||||
|
||||
@@ -102,6 +103,13 @@ RenderablePlane::RenderablePlane(const ghoul::Dictionary& dictionary)
|
||||
}
|
||||
}
|
||||
|
||||
std::string blendMode;
|
||||
if (dictionary.getValue("BlendMode", blendMode)) {
|
||||
if (blendMode == "Additive") {
|
||||
_blendMode = BlendMode::Additive;
|
||||
setRenderBin(Renderable::RenderBin::Transparent);
|
||||
}
|
||||
}
|
||||
|
||||
std::string texturePath = "";
|
||||
bool success = dictionary.getValue("Texture", texturePath);
|
||||
@@ -228,9 +236,30 @@ void RenderablePlane::render(const RenderData& data) {
|
||||
_texture->bind();
|
||||
_shader->setUniform("texture1", unit);
|
||||
|
||||
bool usingFramebufferRenderer =
|
||||
OsEng.renderEngine().rendererImplementation() == RenderEngine::RendererImplementation::Framebuffer;
|
||||
|
||||
bool usingABufferRenderer =
|
||||
OsEng.renderEngine().rendererImplementation() == RenderEngine::RendererImplementation::ABuffer;
|
||||
|
||||
if (usingABufferRenderer) {
|
||||
_shader->setUniform("additiveBlending", _blendMode == BlendMode::Additive);
|
||||
}
|
||||
|
||||
bool additiveBlending = _blendMode == BlendMode::Additive && usingFramebufferRenderer;
|
||||
if (additiveBlending) {
|
||||
glDepthMask(false);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
}
|
||||
|
||||
glBindVertexArray(_quad);
|
||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||
|
||||
if (additiveBlending) {
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glDepthMask(true);
|
||||
}
|
||||
|
||||
_shader->deactivate();
|
||||
}
|
||||
|
||||
|
||||
@@ -51,6 +51,11 @@ class RenderablePlane : public Renderable {
|
||||
};
|
||||
|
||||
public:
|
||||
enum class BlendMode : int {
|
||||
Normal = 0,
|
||||
Additive
|
||||
};
|
||||
|
||||
RenderablePlane(const ghoul::Dictionary& dictionary);
|
||||
~RenderablePlane();
|
||||
|
||||
@@ -79,6 +84,7 @@ private:
|
||||
std::unique_ptr<ghoul::opengl::ProgramObject> _shader;
|
||||
bool _textureIsDirty;
|
||||
std::unique_ptr<ghoul::opengl::Texture> _texture;
|
||||
BlendMode _blendMode;
|
||||
ghoul::filesystem::File* _textureFile;
|
||||
GLuint _quad;
|
||||
GLuint _vertexPositionBuffer;
|
||||
|
||||
@@ -124,6 +124,7 @@ bool RenderableTrail::initialize() {
|
||||
"${MODULE_BASE}/shaders/ephemeris_vs.glsl",
|
||||
"${MODULE_BASE}/shaders/ephemeris_fs.glsl");
|
||||
|
||||
setRenderBin(Renderable::RenderBin::Overlay);
|
||||
|
||||
if (!_programObject)
|
||||
return false;
|
||||
@@ -192,6 +193,14 @@ void RenderableTrail::render(const RenderData& data) {
|
||||
// _programObject->setUniform("forceFade", _distanceFade);
|
||||
//}
|
||||
|
||||
bool usingFramebufferRenderer =
|
||||
OsEng.renderEngine().rendererImplementation() == RenderEngine::RendererImplementation::Framebuffer;
|
||||
|
||||
if (usingFramebufferRenderer) {
|
||||
glDepthMask(false);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
}
|
||||
|
||||
glLineWidth(_lineWidth);
|
||||
|
||||
glBindVertexArray(_vaoID);
|
||||
@@ -207,6 +216,12 @@ void RenderableTrail::render(const RenderData& data) {
|
||||
glBindVertexArray(0);
|
||||
}
|
||||
|
||||
|
||||
if (usingFramebufferRenderer) {
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glDepthMask(true);
|
||||
}
|
||||
|
||||
_programObject->deactivate();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user