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.cpp
|
||||||
src/engine/layer/Layer.h
|
src/engine/layer/Layer.h
|
||||||
src/engine/layer/GameLayer.cpp
|
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
|
target_include_directories(Dicewars_Siedler PRIVATE
|
||||||
lib/glfw/include
|
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_MAJOR, 4);
|
||||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
|
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(
|
m_Window = glfwCreateWindow(
|
||||||
static_cast<int>(m_Data.Width), static_cast<int>(m_Data.Height), m_Data.Title.c_str(), nullptr, nullptr);
|
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) {
|
void Renderer::renderFrame(const RawModel& model) {
|
||||||
prepare();
|
prepare();
|
||||||
|
staticShader.start();
|
||||||
renderRawModel(model);
|
renderRawModel(model);
|
||||||
|
staticShader.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::renderRawModel(const RawModel& model) {
|
void Renderer::renderRawModel(const RawModel& model) {
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
#ifndef DICEWARS_SIEDLER_RENDERER_H
|
#ifndef DICEWARS_SIEDLER_RENDERER_H
|
||||||
#define DICEWARS_SIEDLER_RENDERER_H
|
#define DICEWARS_SIEDLER_RENDERER_H
|
||||||
#include "model/RawModel.h"
|
#include "model/RawModel.h"
|
||||||
|
#include "shaders/StaticShader.h"
|
||||||
|
|
||||||
|
|
||||||
class Renderer {
|
class Renderer {
|
||||||
@ -13,6 +14,7 @@ public:
|
|||||||
void renderFrame(const RawModel& moddel);
|
void renderFrame(const RawModel& moddel);
|
||||||
private:
|
private:
|
||||||
void renderRawModel(const RawModel &model);
|
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