mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-03-16 10:31:05 -05:00
Add render functions to screenspaceframebuffer
This commit is contained in:
@@ -29,7 +29,7 @@
|
||||
|
||||
#include <openspace/properties/vectorproperty.h>
|
||||
#include <openspace/properties/stringproperty.h>
|
||||
#include <openspace/rendering/screenspacerenderable.h>
|
||||
#include <openspace/rendering/screenspacerenderable.h>
|
||||
|
||||
namespace ghoul {
|
||||
namespace fontrendering {
|
||||
@@ -146,12 +146,11 @@ public:
|
||||
} _onScreenInformation;
|
||||
|
||||
std::shared_ptr<ScreenSpaceRenderable> ssr;
|
||||
void renderInformation(); //MOVE BACK TO PRIVATE
|
||||
|
||||
private:
|
||||
void setRenderer(std::unique_ptr<Renderer> renderer);
|
||||
RendererImplementation rendererFromString(const std::string& method);
|
||||
void storePerformanceMeasurements();
|
||||
void renderInformation();
|
||||
void renderScreenLog();
|
||||
|
||||
Camera* _mainCamera;
|
||||
|
||||
@@ -56,9 +56,6 @@ bool ScreenSpaceFramebuffer::initialize(){
|
||||
useEuclideanCoordinates(_useFlatScreen.value());
|
||||
});
|
||||
|
||||
//for testing
|
||||
_ssi = std::make_shared<ScreenSpaceImage>("${OPENSPACE_DATA}/test3.jpg");
|
||||
OsEng.renderEngine().registerScreenSpaceRenderable(_ssi);
|
||||
return isReady();
|
||||
}
|
||||
|
||||
@@ -83,28 +80,32 @@ bool ScreenSpaceFramebuffer::deinitialize(){
|
||||
}
|
||||
|
||||
void ScreenSpaceFramebuffer::render(){
|
||||
glViewport (0, 0, _originalViewportSize.x, _originalViewportSize.y);
|
||||
GLint defaultFBO = _framebuffer->getActiveObject();
|
||||
_framebuffer->activate();
|
||||
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
|
||||
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
// test functions -------------------------------
|
||||
_ssi->render();
|
||||
// OsEng.renderEngine().renderer()->render(1,false);
|
||||
OsEng.renderEngine().renderInformation();
|
||||
//-----------------------------------------------
|
||||
_framebuffer->deactivate();
|
||||
if(!_renderFunctions.empty()){
|
||||
glViewport (0, 0, _originalViewportSize.x, _originalViewportSize.y);
|
||||
GLint defaultFBO = _framebuffer->getActiveObject();
|
||||
_framebuffer->activate();
|
||||
|
||||
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
|
||||
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO);
|
||||
glm::vec2 resolution = OsEng.windowWrapper().currentWindowResolution();
|
||||
glViewport (0, 0, resolution.x, resolution.y);
|
||||
|
||||
glm::mat4 rotation = rotationMatrix();
|
||||
glm::mat4 translation = translationMatrix();
|
||||
glm::mat4 scale = scaleMatrix();
|
||||
scale = glm::scale(scale, glm::vec3(1.0f, -1.0f, 1.0f));
|
||||
glm::mat4 modelTransform = rotation*translation*scale;
|
||||
draw(modelTransform);
|
||||
for(auto renderFunction : _renderFunctions){
|
||||
|
||||
(*renderFunction)();
|
||||
|
||||
}
|
||||
_framebuffer->deactivate();
|
||||
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO);
|
||||
glm::vec2 resolution = OsEng.windowWrapper().currentWindowResolution();
|
||||
glViewport (0, 0, resolution.x, resolution.y);
|
||||
|
||||
glm::mat4 rotation = rotationMatrix();
|
||||
glm::mat4 translation = translationMatrix();
|
||||
glm::mat4 scale = scaleMatrix();
|
||||
scale = glm::scale(scale, glm::vec3(1.0f, -1.0f, 1.0f));
|
||||
glm::mat4 modelTransform = rotation*translation*scale;
|
||||
draw(modelTransform);
|
||||
}
|
||||
}
|
||||
|
||||
void ScreenSpaceFramebuffer::update(){}
|
||||
@@ -141,4 +142,8 @@ void ScreenSpaceFramebuffer::createFragmentbuffer(){
|
||||
// GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0};
|
||||
// glDrawBuffers(1, DrawBuffers);
|
||||
}
|
||||
|
||||
void ScreenSpaceFramebuffer::addRenderFunction(std::shared_ptr<std::function<void()>> renderFunction){
|
||||
_renderFunctions.push_back(renderFunction);
|
||||
}
|
||||
} //namespace openspace
|
||||
@@ -41,7 +41,7 @@ public:
|
||||
void render() override;
|
||||
void update() override;
|
||||
bool isReady() const override;
|
||||
|
||||
void addRenderFunction(std::shared_ptr<std::function<void()>> renderFunction);
|
||||
private:
|
||||
void createFragmentbuffer();
|
||||
static int id();
|
||||
@@ -49,7 +49,7 @@ private:
|
||||
std::unique_ptr<ghoul::opengl::FramebufferObject> _framebuffer;
|
||||
int _id;
|
||||
|
||||
std::shared_ptr<ScreenSpaceImage> _ssi; //for testing
|
||||
std::vector<std::shared_ptr<std::function<void()>>> _renderFunctions;
|
||||
};
|
||||
|
||||
} //namespace openspace
|
||||
|
||||
@@ -7,8 +7,8 @@ return {
|
||||
|
||||
-- Sets the scene that is to be loaded by OpenSpace. A scene file is a description
|
||||
-- of all entities that will be visible during an instance of OpenSpace
|
||||
Scene = "${SCENE}/default_nh.scene",
|
||||
-- Scene = "${SCENE}/default.scene",
|
||||
-- Scene = "${SCENE}/default_nh.scene",
|
||||
Scene = "${SCENE}/default.scene",
|
||||
-- Scene = "${SCENE}/default-modified.scene",
|
||||
-- Scene = "${SCENE}/rosetta.scene",
|
||||
-- Scene = "${SCENE}/dawn.scene",
|
||||
|
||||
@@ -206,11 +206,15 @@ bool RenderEngine::initialize() {
|
||||
#endif // GHOUL_USE_SOIL
|
||||
|
||||
ghoul::io::TextureReader::ref().addReader(std::make_shared<ghoul::io::TextureReaderCMAP>());
|
||||
ssr = std::make_shared<ScreenSpaceFramebuffer>();
|
||||
// ssr = std::make_shared<ScreenSpaceImage>("${OPENSPACE_DATA}/test2.jpg");
|
||||
|
||||
//For testing screenspacerenderables
|
||||
ssr = std::make_shared<ScreenSpaceImage>("${OPENSPACE_DATA}/test2.jpg");
|
||||
registerScreenSpaceRenderable(ssr);
|
||||
// registerScreenSpaceRenderable(std::make_shared<ScreenSpaceImage>("${OPENSPACE_DATA}/test3.jpg"));
|
||||
// registerScreenSpaceRenderable(std::make_shared<ScreenSpaceFramebuffer>());
|
||||
|
||||
std::shared_ptr<ScreenSpaceFramebuffer> ssfb = std::make_shared<ScreenSpaceFramebuffer>();
|
||||
ssfb->addRenderFunction(std::make_shared<std::function<void()>>([this](){renderInformation();}));
|
||||
ssfb->addRenderFunction(std::make_shared<std::function<void()>>([this](){ssr->render();}));
|
||||
registerScreenSpaceRenderable(ssfb);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ ScreenSpaceRenderable::ScreenSpaceRenderable()
|
||||
, _euclideanPosition("euclideanPosition", "Euclidean coordinates", glm::vec2(0),glm::vec2(-4),glm::vec2(4))
|
||||
, _sphericalPosition("sphericalPosition", "Spherical coordinates", glm::vec2(0),glm::vec2(-M_PI),glm::vec2(M_PI))
|
||||
, _depth("depth", "Depth", 0, 0, 1)
|
||||
, _scale("scale", "Scale" , 0.5, 0, 1)
|
||||
, _scale("scale", "Scale" , 0.5, 0, 2)
|
||||
, _quad(0)
|
||||
, _vertexPositionBuffer(0)
|
||||
,_rendererPath("${SHADERS}/renderframebuffer.frag")
|
||||
|
||||
Reference in New Issue
Block a user