[GameState] Framebuffer is now resized when window size changes. [Framebuffer] Small fixes.
This commit is contained in:
parent
608b53730e
commit
f0df5815c0
@ -6,7 +6,63 @@ varying vec2 v_coord2d;
|
|||||||
uniform sampler2D screenTexture;
|
uniform sampler2D screenTexture;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
gl_FragColor = texture2D(screenTexture, v_texCoord);
|
vec4 color = texture2D(screenTexture, v_texCoord);
|
||||||
/* gl_FragColor = vec4(vec3(1.0 - texture2D(screenTexture, v_texCoord)), 1.0); */
|
|
||||||
|
// Grayscale
|
||||||
|
/* float average = (color.r + color.g + color.b) / 3.0; // Basic */
|
||||||
|
/* float average = 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b; // More realistic */
|
||||||
|
/* color = vec4(average, average, average, 1.0); */
|
||||||
|
|
||||||
|
// Inverted colors
|
||||||
|
/* color = vec4(vec3(1.0 - texture2D(screenTexture, v_texCoord)), 1.0); */
|
||||||
|
|
||||||
|
gl_FragColor = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// const float offset = 1.0 / 300.0;
|
||||||
|
//
|
||||||
|
// void main() {
|
||||||
|
// vec2 offsets[9] = vec2[](
|
||||||
|
// vec2(-offset, offset), // top-left
|
||||||
|
// vec2( 0.0f, offset), // top-center
|
||||||
|
// vec2( offset, offset), // top-right
|
||||||
|
// vec2(-offset, 0.0f), // center-left
|
||||||
|
// vec2( 0.0f, 0.0f), // center-center
|
||||||
|
// vec2( offset, 0.0f), // center-right
|
||||||
|
// vec2(-offset, -offset), // bottom-left
|
||||||
|
// vec2( 0.0f, -offset), // bottom-center
|
||||||
|
// vec2( offset, -offset) // bottom-right
|
||||||
|
// );
|
||||||
|
//
|
||||||
|
// // Sharpen
|
||||||
|
// /* float kernel[9] = float[]( */
|
||||||
|
// /* -1, -1, -1, */
|
||||||
|
// /* -1, 9, -1, */
|
||||||
|
// /* -1, -1, -1 */
|
||||||
|
// /* ); */
|
||||||
|
//
|
||||||
|
// // Blur
|
||||||
|
// /* float kernel[9] = float[]( */
|
||||||
|
// /* 1.0 / 16, 2.0 / 16, 1.0 / 16, */
|
||||||
|
// /* 2.0 / 16, 4.0 / 16, 2.0 / 16, */
|
||||||
|
// /* 1.0 / 16, 2.0 / 16, 1.0 / 16 */
|
||||||
|
// /* ); */
|
||||||
|
//
|
||||||
|
// // Edge-detection
|
||||||
|
// /* float kernel[9] = float[]( */
|
||||||
|
// /* 1, 1, 1, */
|
||||||
|
// /* 1, -8, 1, */
|
||||||
|
// /* 1, 1, 1 */
|
||||||
|
// /* ); */
|
||||||
|
//
|
||||||
|
// vec3 sampleTex[9];
|
||||||
|
// for(int i = 0; i < 9; i++) {
|
||||||
|
// sampleTex[i] = vec3(texture2D(screenTexture, v_texCoord.st + offsets[i]));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// vec3 col = vec3(0.0);
|
||||||
|
// for(int i = 0; i < 9; i++)
|
||||||
|
// col += sampleTex[i] * kernel[i];
|
||||||
|
//
|
||||||
|
// gl_FragColor = vec4(col, 1.0);
|
||||||
|
// }
|
||||||
|
@ -30,6 +30,17 @@
|
|||||||
#include "Framebuffer.hpp"
|
#include "Framebuffer.hpp"
|
||||||
|
|
||||||
Framebuffer::Framebuffer(u16 width, u16 height) {
|
Framebuffer::Framebuffer(u16 width, u16 height) {
|
||||||
|
init(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
Framebuffer::~Framebuffer() {
|
||||||
|
clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Framebuffer::init(u16 width, u16 height) {
|
||||||
|
if (m_id)
|
||||||
|
clear();
|
||||||
|
|
||||||
glCheck(glGenFramebuffers(1, &m_id));
|
glCheck(glGenFramebuffers(1, &m_id));
|
||||||
bind(this);
|
bind(this);
|
||||||
|
|
||||||
@ -55,15 +66,21 @@ Framebuffer::Framebuffer(u16 width, u16 height) {
|
|||||||
bind(nullptr);
|
bind(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
Framebuffer::~Framebuffer() {
|
void Framebuffer::clear() {
|
||||||
if (m_id)
|
if (m_id) {
|
||||||
glCheck(glDeleteFramebuffers(1, &m_id));
|
glCheck(glDeleteFramebuffers(1, &m_id));
|
||||||
|
m_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_texid)
|
if (m_texid) {
|
||||||
glCheck(glDeleteTextures(1, &m_texid));
|
glCheck(glDeleteTextures(1, &m_texid));
|
||||||
|
m_texid = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_rbo)
|
if (m_rbo) {
|
||||||
glCheck(glDeleteRenderbuffers(1, &m_rbo));
|
glCheck(glDeleteRenderbuffers(1, &m_rbo));
|
||||||
|
m_rbo = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Framebuffer::bind(const Framebuffer *framebuffer) {
|
void Framebuffer::bind(const Framebuffer *framebuffer) {
|
||||||
|
@ -29,12 +29,19 @@
|
|||||||
|
|
||||||
#include <gk/core/IntTypes.hpp>
|
#include <gk/core/IntTypes.hpp>
|
||||||
#include <gk/gl/OpenGL.hpp>
|
#include <gk/gl/OpenGL.hpp>
|
||||||
|
#include <gk/utils/NonCopyable.hpp>
|
||||||
|
|
||||||
class Framebuffer {
|
class Framebuffer : public gk::NonCopyable {
|
||||||
public:
|
public:
|
||||||
Framebuffer(u16 width, u16 height);
|
Framebuffer(u16 width, u16 height);
|
||||||
|
Framebuffer(Framebuffer &&) = default;
|
||||||
~Framebuffer();
|
~Framebuffer();
|
||||||
|
|
||||||
|
Framebuffer &operator=(Framebuffer &&) = default;
|
||||||
|
|
||||||
|
void init(u16 width, u16 height);
|
||||||
|
void clear();
|
||||||
|
|
||||||
GLuint texid() const { return m_texid; }
|
GLuint texid() const { return m_texid; }
|
||||||
|
|
||||||
static void bind(const Framebuffer *framebuffer);
|
static void bind(const Framebuffer *framebuffer);
|
||||||
|
@ -139,6 +139,8 @@ void GameState::onEvent(const sf::Event &event) {
|
|||||||
|
|
||||||
m_camera.setAspectRatio((float)Config::screenWidth / Config::screenHeight);
|
m_camera.setAspectRatio((float)Config::screenWidth / Config::screenHeight);
|
||||||
m_hud.setup();
|
m_hud.setup();
|
||||||
|
|
||||||
|
m_fbo.init(Config::screenWidth, Config::screenHeight);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,7 +215,6 @@ void GameState::draw(gk::RenderTarget &target, gk::RenderStates states) const {
|
|||||||
// gk::Shader::bind(nullptr);
|
// gk::Shader::bind(nullptr);
|
||||||
|
|
||||||
Framebuffer::bind(&m_fbo);
|
Framebuffer::bind(&m_fbo);
|
||||||
// glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
@ -226,7 +227,6 @@ void GameState::draw(gk::RenderTarget &target, gk::RenderStates states) const {
|
|||||||
target.draw(it.second, states);
|
target.draw(it.second, states);
|
||||||
|
|
||||||
Framebuffer::bind(nullptr);
|
Framebuffer::bind(nullptr);
|
||||||
// glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user