On the fly shader switching

This commit is contained in:
plane000
2018-09-17 20:19:59 +01:00
parent ed4179dcd1
commit 61d34d7aac
11 changed files with 106 additions and 19 deletions

View File

@@ -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">

View File

@@ -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;
}

View File

@@ -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();

View 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);
}

View 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);
}

View 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;
}

View 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;
}

View 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);
}

View 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;
}