Skip to content

Commit 267e8d0

Browse files
Adds fullscreen quad example
1 parent ba1786c commit 267e8d0

File tree

10 files changed

+101
-6
lines changed

10 files changed

+101
-6
lines changed

CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
88
# Wall: Enable all warnings about constructors
99
# Wextra: Enable some extra warnings
1010
# Werror: Treat all warnings as errors
11-
# set(warnings "-Wall -Wextra -Werror")
11+
# set(warnings "-Wall -Wextra -Werror")
1212
elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
1313
# W4: Show the most warnings
1414
# WX: Treat all warnings as errors
@@ -55,6 +55,7 @@ add_subdirectory(${PROJECTS_DIR}/read_pixels)
5555
add_subdirectory(${PROJECTS_DIR}/point_sprites)
5656
add_subdirectory(${PROJECTS_DIR}/phong_lighting)
5757
add_subdirectory(${PROJECTS_DIR}/raytracer)
58+
add_subdirectory(${PROJECTS_DIR}/fullscreen_quad)
5859

5960
# Create a variable that is set to true and cached after the first configuration
6061
set(CONFIGURED_ONCE TRUE CACHE INTERNAL "A flag showing that CMake has configured at least once.")

src/projects/basic_cube/src/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class BasicCubeExample : public Application
7575
void setup() override
7676
{
7777
// Set and use cube shader
78-
m_shader = std::make_unique<GlslProgram>(GlslProgram::Format().vertex("../assets/shaders/cube.vert").fragment("../assets/shaders/cube.frag"));
78+
m_shader = std::make_unique<GlslProgram>(GlslProgram::Format().vertex("../assets/shaders/quad.vert").fragment("../assets/shaders/quad.frag"));
7979
m_shader->introspect();
8080
m_shader->use();
8181

src/projects/compute_shader/src/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class ComputeShaderExample : public Application
8585

8686
void load_shaders()
8787
{
88-
m_cube_shader = std::make_unique<GlslProgram>(GlslProgram::Format().vertex("../assets/shaders/cube.vert").fragment("../assets/shaders/cube.frag"));
88+
m_cube_shader = std::make_unique<GlslProgram>(GlslProgram::Format().vertex("../assets/shaders/quad.vert").fragment("../assets/shaders/quad.frag"));
8989
m_full_screen_quad_shader = std::make_unique<GlslProgram>(GlslProgram::Format().vertex("../assets/shaders/full_screen_quad.vert").fragment("../assets/shaders/full_screen_quad.frag"));
9090
m_compute_shader = std::make_unique<GlslProgram>(GlslProgram::Format().compute("../assets/shaders/shader.comp"));
9191
}

src/projects/framebuffers/src/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class FboExample : public Application
7676
void setup() override
7777
{
7878
// Create shaders
79-
m_shader = std::make_unique<GlslProgram>(GlslProgram::Format().vertex("../assets/shaders/cube.vert").fragment("../assets/shaders/cube.frag"));
79+
m_shader = std::make_unique<GlslProgram>(GlslProgram::Format().vertex("../assets/shaders/quad.vert").fragment("../assets/shaders/quad.frag"));
8080
m_shader2 = std::make_unique<GlslProgram>(GlslProgram::Format().vertex("../assets/shaders/cube2.vert").fragment("../assets/shaders/cube2.frag"));
8181

8282
// Cube vertex attribute parameters
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Name for this project
2+
set(PROJECT_NAME "fullscreen_quad")
3+
4+
# Choose the library for the final build
5+
set(PROJECT_BUILD_DIR ${CMAKE_SOURCE_DIR}/bin/${PROJECT_NAME})
6+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BUILD_DIR}/$<CONFIG>)
7+
8+
# Set sources
9+
set(PROJECTS_SOURCE_DIR ${CMAKE_SOURCE_DIR}/src/projects)
10+
set(SOURCES
11+
src/main.cpp
12+
${INCLUDE_DIR}/glad/src/glad.c
13+
${INCLUDE_DIR}/glm/glm/gtc/matrix_transform.hpp
14+
${INCLUDE_DIR}/projects/base_app.h
15+
${INCLUDE_DIR}/projects/glsl_program.h
16+
${INCLUDE_DIR}/projects/camera.h
17+
${PROJECTS_SOURCE_DIR}/base_app/base_app.cpp
18+
${PROJECTS_SOURCE_DIR}/base_app/glsl_program.cpp
19+
${PROJECTS_SOURCE_DIR}/base_app/camera.cpp
20+
)
21+
22+
23+
add_executable(${PROJECT_NAME} ${SOURCES})
24+
target_link_libraries(${PROJECT_NAME} ${CMAKE_DL_LIBS} glfw ${GLFW_LIBRARIES})
25+
26+
# Copy resources
27+
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/assets DESTINATION ${PROJECT_BUILD_DIR}/)
28+
29+
# Set correct CWD for debugger
30+
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
31+
set_target_properties(${PROJECT_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src)
32+
endif()
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#version 440 core
2+
3+
layout (location = 0) out vec4 frag_color;
4+
5+
uniform float time;
6+
7+
void main()
8+
{
9+
float red_amount = (sin(time * 4.0) + 1.0) / 2.0;
10+
frag_color = vec4(red_amount, 0.0, 0.0, 1.0);
11+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#version 440 core
2+
3+
const vec2[4] positions = {
4+
{-1.0, -1.0},
5+
{1.0, -1.0},
6+
{-1.0, 1.0},
7+
{1.0, 1.0}
8+
};
9+
10+
void main()
11+
{
12+
gl_Position = vec4(positions[gl_VertexID].xy, 0.0, 1.0);
13+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// This renders a full screen quad
2+
#include <memory>
3+
#include <vector>
4+
5+
#include "base_app.h"
6+
#include "glsl_program.h"
7+
8+
class FullscreenQuadExample : public Application
9+
{
10+
private:
11+
GLuint m_vao { 0 };
12+
const GLuint m_num_vertices{ 4 };
13+
std::unique_ptr<GlslProgram> m_shader;
14+
15+
void setup() override
16+
{
17+
// Create shader
18+
m_shader = std::make_unique<GlslProgram>(GlslProgram::Format().vertex("../assets/shaders/quad.vert").fragment("../assets/shaders/quad.frag"));
19+
m_shader->use();
20+
m_shader->introspect();
21+
22+
// Setup and bind a VAO
23+
glCreateVertexArrays(1, &m_vao);
24+
glBindVertexArray(m_vao);
25+
}
26+
27+
void render(double current_time) override
28+
{
29+
m_shader->uniform("time", static_cast<float>(current_time));
30+
glDrawArrays(GL_TRIANGLE_STRIP, 0, m_num_vertices);
31+
};
32+
};
33+
34+
int main(int argc, char* argv[])
35+
{
36+
std::unique_ptr<Application> app{ new FullscreenQuadExample };
37+
app->run();
38+
}

src/projects/geometry_shader_normal_viewer/src/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ class GeometryShaderExample : public Application
8686
void setup() override
8787
{
8888
// Create shaders
89-
m_shader = std::make_unique<GlslProgram>(GlslProgram::Format().vertex("../assets/shaders/cube.vert").fragment("../assets/shaders/cube.frag"));
89+
m_shader = std::make_unique<GlslProgram>(GlslProgram::Format().vertex("../assets/shaders/quad.vert").fragment("../assets/shaders/quad.frag"));
9090
m_normal_shader = std::make_unique<GlslProgram>(GlslProgram::Format().vertex("../assets/shaders/normal_viewer.vert").fragment("../assets/shaders/normal_viewer.frag").geometry("../assets/shaders/normal_viewer.geom"));
9191

9292
// Cube position vertex attribute parameters

src/projects/read_pixels/src/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ class ReadPixelsExample : public Application
169169
m_data_size = ((m_info.window_width * 3 + 3) & ~3) * m_info.window_height;
170170

171171
// Create shader
172-
m_shader = std::make_unique<GlslProgram>(GlslProgram::Format().vertex("../assets/shaders/cube.vert").fragment("../assets/shaders/cube.frag"));
172+
m_shader = std::make_unique<GlslProgram>(GlslProgram::Format().vertex("../assets/shaders/quad.vert").fragment("../assets/shaders/quad.frag"));
173173

174174
// Cube vertex attribute parameters
175175
const GLuint elements_per_face{ 6 };

0 commit comments

Comments
 (0)