fixed window resize issue

This commit is contained in:
Natalia Nowakowska 2024-02-07 18:51:40 +01:00
parent 816d346cb7
commit ce6f718b27
3 changed files with 26 additions and 16 deletions

View File

@ -5,6 +5,7 @@ in vec2 TexCoords;
uniform sampler2D image; uniform sampler2D image;
uniform int count;
uniform bool horizontal; uniform bool horizontal;
uniform float weight[5] = float[] (0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162); uniform float weight[5] = float[] (0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162);
@ -14,7 +15,7 @@ void main()
vec3 result = texture(image, TexCoords).rgb * weight[0]; vec3 result = texture(image, TexCoords).rgb * weight[0];
if(horizontal) if(horizontal)
{ {
for(int i = 1; i < 5; ++i) for(int i = 1; i < count; ++i)
{ {
result += texture(image, TexCoords + vec2(tex_offset.x * i, 0.0)).rgb * weight[i]; result += texture(image, TexCoords + vec2(tex_offset.x * i, 0.0)).rgb * weight[i];
result += texture(image, TexCoords - vec2(tex_offset.x * i, 0.0)).rgb * weight[i]; result += texture(image, TexCoords - vec2(tex_offset.x * i, 0.0)).rgb * weight[i];

View File

@ -211,10 +211,10 @@ void main() {
float brightness = dot(mixedColor, vec3(0.2126, 0.7152, 0.0722)); float brightness = dot(mixedColor, vec3(0.2126, 0.7152, 0.0722));
if(brightness > 1.0) if(brightness > 1.5)
BrightColor = vec4(mixedColor, 1.0); BrightColor = vec4(mixedColor, 1.0);
else else
BrightColor = vec4(0.0, 0.0, 0.0, 1.0); BrightColor = vec4(0.5, 0.5, 0.5, 1.0);
outColor = vec4(mixedColor, 1.0); outColor = vec4(mixedColor, 1.0);
} }

View File

@ -20,7 +20,6 @@ GLuint programTex;
GLuint programPbr; GLuint programPbr;
GLuint programSun; GLuint programSun;
GLuint programSkyBox; GLuint programSkyBox;
//GLuint programBloom;
GLuint programBloomFinal; GLuint programBloomFinal;
GLuint programBlur; GLuint programBlur;
@ -81,7 +80,9 @@ int HDR_WIDTH;
int HDR_HEIGHT; int HDR_HEIGHT;
bool bloom = true; bool bloom = true;
float exposure = 1.5f; float bloom_exposure = 1.f;
int blur_count = 1;
float lightPower = 8.f; float lightPower = 8.f;
glm::vec3 lightColor = glm::vec3(lightPower, lightPower, lightPower); glm::vec3 lightColor = glm::vec3(lightPower, lightPower, lightPower);
@ -158,7 +159,7 @@ void renderQuad()
} }
void initHDR(GLFWwindow* window) { void initHDR(GLFWwindow* window) {
glfwGetFramebufferSize(window, &HDR_WIDTH, &HDR_HEIGHT); glfwGetWindowSize(window, &HDR_WIDTH, &HDR_HEIGHT);
glGenFramebuffers(1, &hdrFBO); glGenFramebuffers(1, &hdrFBO);
glBindFramebuffer(GL_FRAMEBUFFER, hdrFBO); glBindFramebuffer(GL_FRAMEBUFFER, hdrFBO);
// create 2 floating point color buffers (1 for normal rendering, other for brightness threshold values) // create 2 floating point color buffers (1 for normal rendering, other for brightness threshold values)
@ -178,7 +179,7 @@ void initHDR(GLFWwindow* window) {
void initRBO(GLFWwindow* window) { void initRBO(GLFWwindow* window) {
glfwGetFramebufferSize(window, &HDR_WIDTH, &HDR_HEIGHT); glfwGetWindowSize(window, &HDR_WIDTH, &HDR_HEIGHT);
glGenRenderbuffers(1, &rboDepth); glGenRenderbuffers(1, &rboDepth);
glBindRenderbuffer(GL_RENDERBUFFER, rboDepth); glBindRenderbuffer(GL_RENDERBUFFER, rboDepth);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, HDR_WIDTH, HDR_HEIGHT); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, HDR_WIDTH, HDR_HEIGHT);
@ -192,8 +193,8 @@ void initRBO(GLFWwindow* window) {
glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindFramebuffer(GL_FRAMEBUFFER, 0);
} }
void blurPingPong() { void blurPingPong(GLFWwindow* window) {
glfwGetWindowSize(window, &HDR_WIDTH, &HDR_HEIGHT);
glGenFramebuffers(2, pingpongFBO); glGenFramebuffers(2, pingpongFBO);
glGenTextures(2, pingpongColorbuffers); glGenTextures(2, pingpongColorbuffers);
for (unsigned int i = 0; i < 2; i++) for (unsigned int i = 0; i < 2; i++)
@ -316,6 +317,7 @@ void drawPlanetBlur() {
bool horizontal = true, first_iteration = true; bool horizontal = true, first_iteration = true;
unsigned int amount = 10; unsigned int amount = 10;
glUseProgram(programBlur); glUseProgram(programBlur);
glUniform1i(glGetUniformLocation(programBlur, "count"), blur_count);
for (unsigned int i = 0; i < amount; i++) for (unsigned int i = 0; i < amount; i++)
{ {
glBindFramebuffer(GL_FRAMEBUFFER, pingpongFBO[horizontal]); glBindFramebuffer(GL_FRAMEBUFFER, pingpongFBO[horizontal]);
@ -337,7 +339,7 @@ void drawPlanetBlur() {
glActiveTexture(GL_TEXTURE1); glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, pingpongColorbuffers[!horizontal]); glBindTexture(GL_TEXTURE_2D, pingpongColorbuffers[!horizontal]);
glUniform1i(glGetUniformLocation(programBloomFinal, "bloom"), bloom); glUniform1i(glGetUniformLocation(programBloomFinal, "bloom"), bloom);
glUniform1f(glGetUniformLocation(programBloomFinal, "exposure"), exposure); glUniform1f(glGetUniformLocation(programBloomFinal, "exposure"), bloom_exposure);
renderQuad(); renderQuad();
} }
@ -379,6 +381,10 @@ void renderScene(GLFWwindow* window) {
void framebuffer_size_callback(GLFWwindow* window, int width, int height) { void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
aspectRatio = float(width) / float(height); aspectRatio = float(width) / float(height);
initHDR(window);
initRBO(window);
blurPingPong(window);
glViewport(0, 0, width, height); glViewport(0, 0, width, height);
} }
@ -416,8 +422,12 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
if (key == GLFW_KEY_P && action == GLFW_PRESS) if (key == GLFW_KEY_P && action == GLFW_PRESS)
lightingCheck = !lightingCheck; lightingCheck = !lightingCheck;
if (key == GLFW_KEY_B && action == GLFW_PRESS) if (key == GLFW_KEY_B && action == GLFW_PRESS) {
bloom = !bloom; blur_count++;
if (blur_count > 5)
blur_count = 1;
}
} }
//obsluga wejscia //obsluga wejscia
@ -487,7 +497,8 @@ void processInput(GLFWwindow* window)
void init(GLFWwindow* window) { void init(GLFWwindow* window) {
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
initHDR(window);
initRBO(window);
glEnable(GL_DEPTH_TEST); glEnable(GL_DEPTH_TEST);
//glDisable(GL_DEPTH_TEST); //glDisable(GL_DEPTH_TEST);
@ -509,9 +520,7 @@ void init(GLFWwindow* window) {
skyBoxTex = Core::LoadSkyBox(skyBoxPaths); skyBoxTex = Core::LoadSkyBox(skyBoxPaths);
initHDR(window); blurPingPong(window);
initRBO(window);
blurPingPong();
shaderBloomConfig(); shaderBloomConfig();
} }