Add render functions to screenspaceframebuffer

This commit is contained in:
Sebastian Piwell
2016-03-17 17:52:07 -04:00
parent ac40c0a7d6
commit 8bc736acec
6 changed files with 44 additions and 36 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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",

View File

@@ -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;
}

View File

@@ -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")