Shader Rendering (not working)
This commit is contained in:
parent
07f75966f2
commit
52923d3a92
@ -33,7 +33,11 @@ add_executable(Dicewars_Siedler src/main.cpp
|
||||
src/engine/layer/Layer.cpp
|
||||
src/engine/layer/Layer.h
|
||||
src/engine/layer/GameLayer.cpp
|
||||
src/engine/layer/GameLayer.h)
|
||||
src/engine/layer/GameLayer.h
|
||||
src/engine/renderer/shaders/ShaderProgram.cpp
|
||||
src/engine/renderer/shaders/ShaderProgram.h
|
||||
src/engine/renderer/shaders/StaticShader.cpp
|
||||
src/engine/renderer/shaders/StaticShader.h)
|
||||
|
||||
target_include_directories(Dicewars_Siedler PRIVATE
|
||||
lib/glfw/include
|
||||
|
||||
9
assets/shaders/fragmentShader.glsl
Normal file
9
assets/shaders/fragmentShader.glsl
Normal file
@ -0,0 +1,9 @@
|
||||
#version 400 core
|
||||
|
||||
in vec3 color;
|
||||
|
||||
out vec4 outColor;
|
||||
|
||||
void main(void) {
|
||||
outColor = vec4(color, 1.0f);
|
||||
}
|
||||
11
assets/shaders/vertexShader.glsl
Normal file
11
assets/shaders/vertexShader.glsl
Normal file
@ -0,0 +1,11 @@
|
||||
#version 400 core
|
||||
|
||||
in vec3 position;
|
||||
|
||||
out vec3 color;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = vec4(position, 1.0);
|
||||
color = vec3(position.x + 0.5, 1.0, position.y + 0.5);
|
||||
}
|
||||
@ -42,7 +42,7 @@ void GLFWWindow::Init(const WindowProps& props)
|
||||
|
||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
|
||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
|
||||
//glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||||
|
||||
m_Window = glfwCreateWindow(
|
||||
static_cast<int>(m_Data.Width), static_cast<int>(m_Data.Height), m_Data.Title.c_str(), nullptr, nullptr);
|
||||
|
||||
@ -13,7 +13,9 @@ void Renderer::prepare() {
|
||||
|
||||
void Renderer::renderFrame(const RawModel& model) {
|
||||
prepare();
|
||||
staticShader.start();
|
||||
renderRawModel(model);
|
||||
staticShader.stop();
|
||||
}
|
||||
|
||||
void Renderer::renderRawModel(const RawModel& model) {
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
#ifndef DICEWARS_SIEDLER_RENDERER_H
|
||||
#define DICEWARS_SIEDLER_RENDERER_H
|
||||
#include "model/RawModel.h"
|
||||
#include "shaders/StaticShader.h"
|
||||
|
||||
|
||||
class Renderer {
|
||||
@ -13,6 +14,7 @@ public:
|
||||
void renderFrame(const RawModel& moddel);
|
||||
private:
|
||||
void renderRawModel(const RawModel &model);
|
||||
StaticShader staticShader;
|
||||
};
|
||||
|
||||
|
||||
|
||||
77
src/engine/renderer/shaders/ShaderProgram.cpp
Normal file
77
src/engine/renderer/shaders/ShaderProgram.cpp
Normal file
@ -0,0 +1,77 @@
|
||||
//
|
||||
// Created by sebastian on 24.12.25.
|
||||
//
|
||||
|
||||
#include "ShaderProgram.h"
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
#include "glad/glad.h"
|
||||
|
||||
ShaderProgram::ShaderProgram(std::string vert, std::string frag) {
|
||||
vertexShaderID = loadShader(vert, GL_VERTEX_SHADER);
|
||||
fragmentShaderID = loadShader(frag, GL_FRAGMENT_SHADER);
|
||||
|
||||
programID = glCreateProgram();
|
||||
glAttachShader(programID, vertexShaderID);
|
||||
glAttachShader(programID, fragmentShaderID);
|
||||
glLinkProgram(programID);
|
||||
glValidateProgram(programID);
|
||||
}
|
||||
|
||||
void ShaderProgram::start(){
|
||||
glUseProgram(programID);
|
||||
}
|
||||
|
||||
void ShaderProgram::stop(){
|
||||
glUseProgram(0);
|
||||
}
|
||||
|
||||
void ShaderProgram::cleanUp() {
|
||||
stop();
|
||||
glDetachShader(programID, vertexShaderID);
|
||||
glDetachShader(programID, fragmentShaderID);
|
||||
glDeleteShader(vertexShaderID);
|
||||
glDeleteShader(fragmentShaderID);
|
||||
glDeleteProgram(programID);
|
||||
}
|
||||
|
||||
|
||||
void ShaderProgram::bindAttribute(int attribute, const std::string& variableName) const {
|
||||
glBindAttribLocation(programID, attribute, variableName.c_str());
|
||||
}
|
||||
|
||||
int ShaderProgram::loadShader(const std::string& file, int type) {
|
||||
std::ifstream shaderFile(file);
|
||||
if (!shaderFile.is_open())
|
||||
{
|
||||
std::cerr << "Failed to open shader file: " << file << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::stringstream buffer;
|
||||
buffer << shaderFile.rdbuf();
|
||||
std::string sourceStr = buffer.str();
|
||||
const char* source = sourceStr.c_str();
|
||||
|
||||
GLuint shaderID = glCreateShader(type);
|
||||
glShaderSource(shaderID, 1, &source, nullptr);
|
||||
glCompileShader(shaderID);
|
||||
|
||||
// 3. Kompilierungsstatus prüfen
|
||||
GLint success;
|
||||
glGetShaderiv(shaderID, GL_COMPILE_STATUS, &success);
|
||||
if (!success)
|
||||
{
|
||||
char infoLog[512];
|
||||
glGetShaderInfoLog(shaderID, 512, nullptr, infoLog);
|
||||
std::cerr << "ERROR: Shader compilation failed ("
|
||||
<< file << ")\n"
|
||||
<< infoLog << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return shaderID;
|
||||
}
|
||||
32
src/engine/renderer/shaders/ShaderProgram.h
Normal file
32
src/engine/renderer/shaders/ShaderProgram.h
Normal file
@ -0,0 +1,32 @@
|
||||
//
|
||||
// Created by sebastian on 24.12.25.
|
||||
//
|
||||
|
||||
#ifndef DICEWARS_SIEDLER_SHADERPROGRAM_H
|
||||
#define DICEWARS_SIEDLER_SHADERPROGRAM_H
|
||||
#include <string>
|
||||
|
||||
#include "../../../../lib/glfw/src/internal.h"
|
||||
|
||||
|
||||
class ShaderProgram {
|
||||
public:
|
||||
ShaderProgram(std::string vert, std::string frag);
|
||||
void start();
|
||||
void stop();
|
||||
void cleanUp();
|
||||
protected:
|
||||
GLuint programID;
|
||||
GLuint vertexShaderID;
|
||||
GLuint fragmentShaderID;
|
||||
|
||||
void bindAttribute(int attribute, const std::string& variableName) const;
|
||||
|
||||
virtual void bindAttributes() const = 0;
|
||||
|
||||
private:
|
||||
static int loadShader(const std::string& file, int type);
|
||||
};
|
||||
|
||||
|
||||
#endif //DICEWARS_SIEDLER_SHADERPROGRAM_H
|
||||
13
src/engine/renderer/shaders/StaticShader.cpp
Normal file
13
src/engine/renderer/shaders/StaticShader.cpp
Normal file
@ -0,0 +1,13 @@
|
||||
//
|
||||
// Created by sebastian on 24.12.25.
|
||||
//
|
||||
|
||||
#include "StaticShader.h"
|
||||
|
||||
StaticShader::StaticShader() : ShaderProgram(VERTEX_FILE, FRAGMENT_FILE) {
|
||||
StaticShader::bindAttributes();
|
||||
}
|
||||
|
||||
void StaticShader::bindAttributes() const {
|
||||
bindAttribute(0, "position");
|
||||
}
|
||||
23
src/engine/renderer/shaders/StaticShader.h
Normal file
23
src/engine/renderer/shaders/StaticShader.h
Normal file
@ -0,0 +1,23 @@
|
||||
//
|
||||
// Created by sebastian on 24.12.25.
|
||||
//
|
||||
|
||||
#ifndef DICEWARS_SIEDLER_STATICSHADER_H
|
||||
#define DICEWARS_SIEDLER_STATICSHADER_H
|
||||
#include "ShaderProgram.h"
|
||||
|
||||
|
||||
class StaticShader: public ShaderProgram
|
||||
{
|
||||
public:
|
||||
StaticShader();
|
||||
private:
|
||||
inline static const std::string VERTEX_FILE = "assets/shaders/fragmentShader.glsl";
|
||||
inline static const std::string FRAGMENT_FILE = "assets/shaders/vertexShader.glsl";
|
||||
|
||||
protected:
|
||||
void bindAttributes() const override;
|
||||
};
|
||||
|
||||
|
||||
#endif //DICEWARS_SIEDLER_STATICSHADER_H
|
||||
Loading…
Reference in New Issue
Block a user