mirror of
https://github.com/JoeyDeVries/LearnOpenGL.git
synced 2026-01-30 20:13:22 +08:00
2.3.csm: fix mac os issues
1. Lower OpenGL demands: the demo works fine with v4.1. No need to require v4.6 which is not available on mac os. 2. Use actual framebuffer size to fix viewport issues on retina displays.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
#version 460 core
|
#version 410 core
|
||||||
out vec4 FragColor;
|
out vec4 FragColor;
|
||||||
|
|
||||||
uniform vec4 color;
|
uniform vec4 color;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#version 460 core
|
#version 410 core
|
||||||
layout (location = 0) in vec3 aPos;
|
layout (location = 0) in vec3 aPos;
|
||||||
|
|
||||||
uniform mat4 view;
|
uniform mat4 view;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#version 460 core
|
#version 410 core
|
||||||
layout (location = 0) in vec3 aPos;
|
layout (location = 0) in vec3 aPos;
|
||||||
layout (location = 1) in vec2 aTexCoords;
|
layout (location = 1) in vec2 aTexCoords;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#version 460 core
|
#version 410 core
|
||||||
out vec4 FragColor;
|
out vec4 FragColor;
|
||||||
|
|
||||||
in vec2 TexCoords;
|
in vec2 TexCoords;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#version 460 core
|
#version 410 core
|
||||||
out vec4 FragColor;
|
out vec4 FragColor;
|
||||||
|
|
||||||
in VS_OUT {
|
in VS_OUT {
|
||||||
@@ -16,7 +16,7 @@ uniform float farPlane;
|
|||||||
|
|
||||||
uniform mat4 view;
|
uniform mat4 view;
|
||||||
|
|
||||||
layout (std140, binding = 0) uniform LightSpaceMatrices
|
layout (std140) uniform LightSpaceMatrices
|
||||||
{
|
{
|
||||||
mat4 lightSpaceMatrices[16];
|
mat4 lightSpaceMatrices[16];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#version 460 core
|
#version 410 core
|
||||||
layout (location = 0) in vec3 aPos;
|
layout (location = 0) in vec3 aPos;
|
||||||
layout (location = 1) in vec3 aNormal;
|
layout (location = 1) in vec3 aNormal;
|
||||||
layout (location = 2) in vec2 aTexCoords;
|
layout (location = 2) in vec2 aTexCoords;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#version 460 core
|
#version 410 core
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,12 +1,15 @@
|
|||||||
#version 460 core
|
#version 410 core
|
||||||
|
|
||||||
layout(triangles, invocations = 5) in;
|
layout(triangles, invocations = 5) in;
|
||||||
layout(triangle_strip, max_vertices = 3) out;
|
layout(triangle_strip, max_vertices = 3) out;
|
||||||
|
|
||||||
layout (std140, binding = 0) uniform LightSpaceMatrices
|
layout (std140/*, binding = 0*/) uniform LightSpaceMatrices
|
||||||
{
|
{
|
||||||
mat4 lightSpaceMatrices[16];
|
mat4 lightSpaceMatrices[16];
|
||||||
};
|
};
|
||||||
|
/*
|
||||||
|
uniform mat4 lightSpaceMatrices[16];
|
||||||
|
*/
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#version 460 core
|
#version 410 core
|
||||||
layout (location = 0) in vec3 aPos;
|
layout (location = 0) in vec3 aPos;
|
||||||
|
|
||||||
uniform mat4 model;
|
uniform mat4 model;
|
||||||
|
|||||||
@@ -30,6 +30,10 @@ void drawCascadeVolumeVisualizers(const std::vector<glm::mat4>& lightMatrices, S
|
|||||||
const unsigned int SCR_WIDTH = 2560;
|
const unsigned int SCR_WIDTH = 2560;
|
||||||
const unsigned int SCR_HEIGHT = 1440;
|
const unsigned int SCR_HEIGHT = 1440;
|
||||||
|
|
||||||
|
// framebuffer size
|
||||||
|
int fb_width;
|
||||||
|
int fb_height;
|
||||||
|
|
||||||
// camera
|
// camera
|
||||||
Camera camera(glm::vec3(0.0f, 0.0f, 3.0f));
|
Camera camera(glm::vec3(0.0f, 0.0f, 3.0f));
|
||||||
float lastX = (float)SCR_WIDTH / 2.0;
|
float lastX = (float)SCR_WIDTH / 2.0;
|
||||||
@@ -68,8 +72,8 @@ int main()
|
|||||||
// glfw: initialize and configure
|
// glfw: initialize and configure
|
||||||
// ------------------------------
|
// ------------------------------
|
||||||
glfwInit();
|
glfwInit();
|
||||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
||||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
||||||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
@@ -89,6 +93,7 @@ int main()
|
|||||||
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
|
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
|
||||||
glfwSetCursorPosCallback(window, mouse_callback);
|
glfwSetCursorPosCallback(window, mouse_callback);
|
||||||
glfwSetScrollCallback(window, scroll_callback);
|
glfwSetScrollCallback(window, scroll_callback);
|
||||||
|
glfwGetFramebufferSize(window, &fb_width, &fb_height);
|
||||||
|
|
||||||
// tell GLFW to capture our mouse
|
// tell GLFW to capture our mouse
|
||||||
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
|
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
|
||||||
@@ -239,15 +244,15 @@ int main()
|
|||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
|
||||||
// reset viewport
|
// reset viewport
|
||||||
glViewport(0, 0, SCR_WIDTH, SCR_HEIGHT);
|
glViewport(0, 0, fb_width, fb_height);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
// 2. render scene as normal using the generated depth/shadow map
|
// 2. render scene as normal using the generated depth/shadow map
|
||||||
// --------------------------------------------------------------
|
// --------------------------------------------------------------
|
||||||
glViewport(0, 0, SCR_WIDTH, SCR_HEIGHT);
|
glViewport(0, 0, fb_width, fb_height);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
shader.use();
|
shader.use();
|
||||||
const glm::mat4 projection = glm::perspective(glm::radians(camera.Zoom), (float)SCR_WIDTH / (float)SCR_HEIGHT, cameraNearPlane, cameraFarPlane);
|
const glm::mat4 projection = glm::perspective(glm::radians(camera.Zoom), (float)fb_width / (float)fb_height, cameraNearPlane, cameraFarPlane);
|
||||||
const glm::mat4 view = camera.GetViewMatrix();
|
const glm::mat4 view = camera.GetViewMatrix();
|
||||||
shader.setMat4("projection", projection);
|
shader.setMat4("projection", projection);
|
||||||
shader.setMat4("view", view);
|
shader.setMat4("view", view);
|
||||||
@@ -540,7 +545,7 @@ void processInput(GLFWwindow *window)
|
|||||||
fPress = glfwGetKey(window, GLFW_KEY_F);
|
fPress = glfwGetKey(window, GLFW_KEY_F);
|
||||||
|
|
||||||
static int plusPress = GLFW_RELEASE;
|
static int plusPress = GLFW_RELEASE;
|
||||||
if (glfwGetKey(window, GLFW_KEY_KP_ADD) == GLFW_RELEASE && plusPress == GLFW_PRESS)
|
if (glfwGetKey(window, GLFW_KEY_N) == GLFW_RELEASE && plusPress == GLFW_PRESS)
|
||||||
{
|
{
|
||||||
debugLayer++;
|
debugLayer++;
|
||||||
if (debugLayer > shadowCascadeLevels.size())
|
if (debugLayer > shadowCascadeLevels.size())
|
||||||
@@ -548,7 +553,7 @@ void processInput(GLFWwindow *window)
|
|||||||
debugLayer = 0;
|
debugLayer = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
plusPress = glfwGetKey(window, GLFW_KEY_KP_ADD);
|
plusPress = glfwGetKey(window, GLFW_KEY_N);
|
||||||
|
|
||||||
static int cPress = GLFW_RELEASE;
|
static int cPress = GLFW_RELEASE;
|
||||||
if (glfwGetKey(window, GLFW_KEY_C) == GLFW_RELEASE && cPress == GLFW_PRESS)
|
if (glfwGetKey(window, GLFW_KEY_C) == GLFW_RELEASE && cPress == GLFW_PRESS)
|
||||||
@@ -564,6 +569,8 @@ void framebuffer_size_callback(GLFWwindow* window, int width, int height)
|
|||||||
{
|
{
|
||||||
// make sure the viewport matches the new window dimensions; note that width and
|
// make sure the viewport matches the new window dimensions; note that width and
|
||||||
// height will be significantly larger than specified on retina displays.
|
// height will be significantly larger than specified on retina displays.
|
||||||
|
fb_width = width;
|
||||||
|
fb_height = height;
|
||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -662,7 +669,7 @@ std::vector<glm::vec4> getFrustumCornersWorldSpace(const glm::mat4& proj, const
|
|||||||
glm::mat4 getLightSpaceMatrix(const float nearPlane, const float farPlane)
|
glm::mat4 getLightSpaceMatrix(const float nearPlane, const float farPlane)
|
||||||
{
|
{
|
||||||
const auto proj = glm::perspective(
|
const auto proj = glm::perspective(
|
||||||
glm::radians(camera.Zoom), (float)SCR_WIDTH / (float)SCR_HEIGHT, nearPlane,
|
glm::radians(camera.Zoom), (float)fb_width / (float)fb_height, nearPlane,
|
||||||
farPlane);
|
farPlane);
|
||||||
const auto corners = getFrustumCornersWorldSpace(proj, camera.GetViewMatrix());
|
const auto corners = getFrustumCornersWorldSpace(proj, camera.GetViewMatrix());
|
||||||
|
|
||||||
@@ -712,7 +719,6 @@ glm::mat4 getLightSpaceMatrix(const float nearPlane, const float farPlane)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const glm::mat4 lightProjection = glm::ortho(minX, maxX, minY, maxY, minZ, maxZ);
|
const glm::mat4 lightProjection = glm::ortho(minX, maxX, minY, maxY, minZ, maxZ);
|
||||||
|
|
||||||
return lightProjection * lightView;
|
return lightProjection * lightView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user