On the fly shader switching
This commit is contained in:
@@ -22,7 +22,7 @@
|
||||
<VCProjectVersion>15.0</VCProjectVersion>
|
||||
<ProjectGuid>{BE30292B-9C31-474C-AC8C-E1BFA61BD1A1}</ProjectGuid>
|
||||
<RootNamespace>OpenGL</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
|
||||
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
Display::Display(int width, int height, const std::string& title) {
|
||||
SDL_Init(SDL_INIT_VIDEO);
|
||||
|
||||
SDL_GL_SetSwapInterval(0);
|
||||
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
|
||||
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
|
||||
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
|
||||
@@ -21,20 +22,15 @@ Display::Display(int width, int height, const std::string& title) {
|
||||
std::cerr << "GLEW Failed to initialize" << std::endl;
|
||||
}
|
||||
|
||||
SDL_WarpMouseInWindow(m_window, width / 2, height / 2);
|
||||
SDL_SetRelativeMouseMode(SDL_TRUE);
|
||||
|
||||
m_isClosed = false;
|
||||
std::cout << "Display initialized and gl context successfuly created" << std::endl;
|
||||
}
|
||||
|
||||
void Display::Update() {
|
||||
SDL_GL_SwapWindow(m_window);
|
||||
|
||||
SDL_Event e;
|
||||
|
||||
while (SDL_PollEvent(&e)) {
|
||||
if (e.type == SDL_QUIT) {
|
||||
m_isClosed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Display::isClosed() {
|
||||
@@ -45,4 +41,5 @@ Display::~Display() {
|
||||
SDL_GL_DeleteContext(m_glContext);
|
||||
SDL_DestroyWindow(m_window);
|
||||
SDL_Quit();
|
||||
m_isClosed = true;
|
||||
}
|
||||
|
||||
@@ -42,37 +42,55 @@ int main(int argc, char** argv) {
|
||||
ShaderMode mode = ShaderMode::SHADER_COLOUR;
|
||||
|
||||
Mesh mesh(vertices, indices, sizeof(vertices) / sizeof(vertices[0]));
|
||||
Texture chanceCube("C:/Users/Ben/Desktop/crumpet-engine/resources/textures/chance-cube.jpg");
|
||||
|
||||
Shader shader("C:/Users/Ben/Desktop/crumpet-engine/resources/shaders/simple2d");
|
||||
// std::string resourceFolder = "C:/Users/Ben/Desktop/crumpet-engine/"; // Laptop
|
||||
std::string resourceFolder = "E:/Games/Practicing/OpenGL/"; // PC
|
||||
|
||||
|
||||
Shader texShader(resourceFolder + "resources/shaders/tex");
|
||||
Shader colourShader(resourceFolder + "resources/shaders/col");
|
||||
Shader gradientShader(resourceFolder + "resources/shaders/gradient");
|
||||
Shader texGradientShader(resourceFolder + "resources/shaders/texGrad");
|
||||
|
||||
Texture chanceCube(resourceFolder + "resources/textures/chance-cube.jpg");
|
||||
|
||||
unsigned int ticks = SDL_GetTicks();
|
||||
unsigned int frames = 0;
|
||||
SDL_Event event;
|
||||
while(!display.isClosed()) {
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
switch(mode) {
|
||||
case ShaderMode::SHADER_TEXURE:
|
||||
chanceCube.Bind(0);
|
||||
texShader.Bind();
|
||||
break;
|
||||
case ShaderMode::SHADER_COLOUR:
|
||||
colourShader.Bind();
|
||||
break;
|
||||
case ShaderMode::SHADER_GRADIENT:
|
||||
gradientShader.Bind();
|
||||
break;
|
||||
case ShaderMode::SHADER_TEXGRADIENT:
|
||||
break;
|
||||
default:
|
||||
chanceCube.Bind(0);
|
||||
texGradientShader.Bind();
|
||||
break;
|
||||
}
|
||||
|
||||
shader.Bind();
|
||||
|
||||
chanceCube.Bind(0);
|
||||
mesh.Draw();
|
||||
|
||||
while (SDL_PollEvent(&event) != 0) {
|
||||
if (event.type == SDL_KEYDOWN) {
|
||||
if (mode == ShaderMode::SHADER_TEXURE) mode = ShaderMode::SHADER_COLOUR;
|
||||
else if (mode == ShaderMode::SHADER_COLOUR) mode = ShaderMode::SHADER_GRADIENT;
|
||||
else if (mode == ShaderMode::SHADER_GRADIENT) mode = ShaderMode::SHADER_TEXGRADIENT;
|
||||
else if (mode == ShaderMode::SHADER_TEXGRADIENT) mode = ShaderMode::SHADER_TEXURE;
|
||||
if (event.key.keysym.sym == SDLK_ESCAPE) {
|
||||
display.~Display();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
display.Update();
|
||||
frames++;
|
||||
}
|
||||
|
||||
display.~Display();
|
||||
|
||||
11
resources/shaders/col_fragment.glsl
Normal file
11
resources/shaders/col_fragment.glsl
Normal file
@@ -0,0 +1,11 @@
|
||||
#version 330 core
|
||||
out vec4 FragColor;
|
||||
|
||||
in vec3 ourColor;
|
||||
in vec2 TexCoord;
|
||||
|
||||
uniform sampler2D ourTexture;
|
||||
|
||||
void main() {
|
||||
FragColor = vec4(0.25, 0.9, 1.0, 1.0);
|
||||
}
|
||||
11
resources/shaders/gradient_fragment.glsl
Normal file
11
resources/shaders/gradient_fragment.glsl
Normal file
@@ -0,0 +1,11 @@
|
||||
#version 330 core
|
||||
out vec4 FragColor;
|
||||
|
||||
in vec3 ourColor;
|
||||
in vec2 TexCoord;
|
||||
|
||||
uniform sampler2D ourTexture;
|
||||
|
||||
void main() {
|
||||
FragColor = vec4(ourColor, 1.0);
|
||||
}
|
||||
13
resources/shaders/gradient_vertex.glsl
Normal file
13
resources/shaders/gradient_vertex.glsl
Normal file
@@ -0,0 +1,13 @@
|
||||
#version 330 core
|
||||
layout (location = 0) in vec3 aPos;
|
||||
layout (location = 1) in vec3 aColor;
|
||||
layout (location = 2) in vec2 aTexCoord;
|
||||
|
||||
out vec3 ourColor;
|
||||
out vec2 TexCoord;
|
||||
|
||||
void main() {
|
||||
gl_Position = vec4(aPos, 1.0);
|
||||
ourColor = aColor;
|
||||
TexCoord = aTexCoord;
|
||||
}
|
||||
13
resources/shaders/texGrad_vertex.glsl
Normal file
13
resources/shaders/texGrad_vertex.glsl
Normal file
@@ -0,0 +1,13 @@
|
||||
#version 330 core
|
||||
layout (location = 0) in vec3 aPos;
|
||||
layout (location = 1) in vec3 aColor;
|
||||
layout (location = 2) in vec2 aTexCoord;
|
||||
|
||||
out vec3 ourColor;
|
||||
out vec2 TexCoord;
|
||||
|
||||
void main() {
|
||||
gl_Position = vec4(aPos, 1.0);
|
||||
ourColor = aColor;
|
||||
TexCoord = aTexCoord;
|
||||
}
|
||||
11
resources/shaders/tex_fragment.glsl
Normal file
11
resources/shaders/tex_fragment.glsl
Normal file
@@ -0,0 +1,11 @@
|
||||
#version 330 core
|
||||
out vec4 FragColor;
|
||||
|
||||
in vec3 ourColor;
|
||||
in vec2 TexCoord;
|
||||
|
||||
uniform sampler2D ourTexture;
|
||||
|
||||
void main() {
|
||||
FragColor = texture(ourTexture, TexCoord);
|
||||
}
|
||||
13
resources/shaders/tex_vertex.glsl
Normal file
13
resources/shaders/tex_vertex.glsl
Normal file
@@ -0,0 +1,13 @@
|
||||
#version 330 core
|
||||
layout (location = 0) in vec3 aPos;
|
||||
layout (location = 1) in vec3 aColor;
|
||||
layout (location = 2) in vec2 aTexCoord;
|
||||
|
||||
out vec3 ourColor;
|
||||
out vec2 TexCoord;
|
||||
|
||||
void main() {
|
||||
gl_Position = vec4(aPos, 1.0);
|
||||
ourColor = aColor;
|
||||
TexCoord = aTexCoord;
|
||||
}
|
||||
Reference in New Issue
Block a user