This commit is contained in:
Sebastian Piwell
2016-03-31 14:53:42 -04:00
parent a2fb30b432
commit 79979fe8dd
7 changed files with 43 additions and 78 deletions
@@ -40,12 +40,11 @@ ScreenSpaceFramebuffer::ScreenSpaceFramebuffer()
_id = id();
setName("ScreenSpaceFramebuffer" + std::to_string(_id));
registerProperties();
glm::vec2 resolution = OsEng.windowWrapper().currentWindowResolution();
glm::vec2 resolution = OsEng.windowWrapper().currentWindowResolution();
addProperty(_size);
OsEng.gui()._property.registerProperty(&_size);
_size.set(glm::vec4(0, 0, resolution.x,resolution.y));
}
ScreenSpaceFramebuffer::~ScreenSpaceFramebuffer(){}
@@ -55,14 +54,8 @@ bool ScreenSpaceFramebuffer::initialize(){
createPlane();
createShaders();
createFragmentbuffer();
// Setting spherical/euclidean onchange handler
_useFlatScreen.onChange([this](){
useEuclideanCoordinates(_useFlatScreen.value());
});
return isReady();
}
@@ -82,7 +75,6 @@ bool ScreenSpaceFramebuffer::deinitialize(){
}
_framebuffer->detachAll();
removeAllRenderFunctions();
return true;
@@ -104,14 +96,11 @@ void ScreenSpaceFramebuffer::render(){
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_ALPHA_TEST);
for(auto renderFunction : _renderFunctions){
(*renderFunction)();
}
_framebuffer->deactivate();
glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO);
glViewport (0, 0, resolution.x, resolution.y);
glm::mat4 rotation = rotationMatrix();
@@ -134,29 +123,6 @@ bool ScreenSpaceFramebuffer::isReady() const{
return ready;
}
int ScreenSpaceFramebuffer::id(){
static int id = 0;
return id++;
}
void ScreenSpaceFramebuffer::createFragmentbuffer(){
_framebuffer = std::make_unique<ghoul::opengl::FramebufferObject>();
_framebuffer->activate();
_texture = std::make_unique<ghoul::opengl::Texture>(glm::uvec3(_originalViewportSize.x, _originalViewportSize.y, 1));
_texture->uploadTexture();
_texture->setFilter(ghoul::opengl::Texture::FilterMode::Linear);
_framebuffer->attachTexture(_texture.get(), GL_COLOR_ATTACHMENT0);
_framebuffer->deactivate();
// GLuint depthrenderbuffer;
// glGenRenderbuffers(1, &depthrenderbuffer);
// glBindRenderbuffer(GL_RENDERBUFFER, depthrenderbuffer);
// glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, _originalViewportSize.x, _originalViewportSize.y);
// glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthrenderbuffer);
// GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0};
// glDrawBuffers(1, DrawBuffers);
}
void ScreenSpaceFramebuffer::setSize(glm::vec4 size){
_size.set(size);
@@ -169,4 +135,19 @@ void ScreenSpaceFramebuffer::addRenderFunction(std::shared_ptr<std::function<voi
void ScreenSpaceFramebuffer::removeAllRenderFunctions(){
_renderFunctions.clear();
}
void ScreenSpaceFramebuffer::createFragmentbuffer(){
_framebuffer = std::make_unique<ghoul::opengl::FramebufferObject>();
_framebuffer->activate();
_texture = std::make_unique<ghoul::opengl::Texture>(glm::uvec3(_originalViewportSize.x, _originalViewportSize.y, 1));
_texture->uploadTexture();
_texture->setFilter(ghoul::opengl::Texture::FilterMode::Linear);
_framebuffer->attachTexture(_texture.get(), GL_COLOR_ATTACHMENT0);
_framebuffer->deactivate();
}
int ScreenSpaceFramebuffer::id(){
static int id = 0;
return id++;
}
} //namespace openspace
@@ -54,13 +54,12 @@ private:
void createFragmentbuffer();
static int id();
std::unique_ptr<ghoul::opengl::FramebufferObject> _framebuffer;
int _id;
std::vector<std::shared_ptr<std::function<void()>>> _renderFunctions;
properties::Vec4Property _size;
std::unique_ptr<ghoul::opengl::FramebufferObject> _framebuffer;
std::vector<std::shared_ptr<std::function<void()>>> _renderFunctions;
int _id;
};
} //namespace openspace
+7 -13
View File
@@ -31,17 +31,17 @@ namespace {
namespace openspace {
ScreenSpaceImage::ScreenSpaceImage(std::string texturePath)
:ScreenSpaceRenderable()
,_texturePath("texturePath", "Texture path", texturePath)
:ScreenSpaceRenderable()
,_texturePath("texturePath", "Texture path", texturePath)
{
_id = id();
setName("ScreenSpaceImage" + std::to_string(_id));
addProperty(_texturePath);
registerProperties();
OsEng.gui()._property.registerProperty(&_texturePath);
addProperty(_texturePath);
OsEng.gui()._property.registerProperty(&_texturePath);
_texturePath.onChange([this](){ loadTexture(); });
}
@@ -52,13 +52,8 @@ bool ScreenSpaceImage::initialize(){
createPlane();
createShaders();
loadTexture();
// Setting spherical/euclidean onchange handler
_useFlatScreen.onChange([this](){
useEuclideanCoordinates(_useFlatScreen.value());
});
return isReady();
}
@@ -69,7 +64,6 @@ bool ScreenSpaceImage::deinitialize(){
glDeleteBuffers(1, &_vertexPositionBuffer);
_vertexPositionBuffer = 0;
_texturePath = "";
_texture = nullptr;
@@ -119,7 +113,7 @@ void ScreenSpaceImage::loadTexture() {
}
int ScreenSpaceImage::id(){
static int id = 0;
return id++;
static int id = 0;
return id++;
}
}
+1 -1
View File
@@ -41,9 +41,9 @@ public:
ScreenSpaceImage(std::string texturePath);
~ScreenSpaceImage();
void render() override;
bool initialize() override;
bool deinitialize() override;
void render() override;
void update() override;
bool isReady() const override;