~ | First triangle

This commit is contained in:
TheRedShip
2024-10-14 01:43:29 +02:00
parent d8fd3d0535
commit eae1ae4790
5 changed files with 57 additions and 33 deletions

View File

@ -30,7 +30,7 @@ SRCS_DIR := srcs
OBJS_DIR := .objs OBJS_DIR := .objs
ALL_SRCS := RT.cpp gl.cpp \ ALL_SRCS := RT.cpp gl.cpp \
Window.cpp Window.cpp Shader.cpp \
SRCS := $(ALL_SRCS:%=$(SRCS_DIR)/%) SRCS := $(ALL_SRCS:%=$(SRCS_DIR)/%)
@ -38,7 +38,7 @@ SRCS := $(ALL_SRCS:%=$(SRCS_DIR)/%)
OBJS := $(addprefix $(OBJS_DIR)/, $(SRCS:%.cpp=%.o)) OBJS := $(addprefix $(OBJS_DIR)/, $(SRCS:%.cpp=%.o))
CC := g++ CC := g++ -Wextra -Wall -Werror
IFLAGS := -Ofast -I./includes -L./lib -lglfw3 -lopengl32 -lgdi32 -lcglm IFLAGS := -Ofast -I./includes -L./lib -lglfw3 -lopengl32 -lgdi32 -lcglm

View File

@ -18,7 +18,7 @@
class Shader class Shader
{ {
public: public:
Shader(char *vertexPath, char *fragmentPath); Shader(std::string vertexPath, std::string fragmentPath);
Shader(Shader const &src); Shader(Shader const &src);
~Shader(void); ~Shader(void);

View File

@ -3,5 +3,5 @@ out vec4 FragColor;
void main() void main()
{ {
FragColor = vec4(1.0, 0., 0., 0.); FragColor = vec4(1.0, 0., 0., 1.);
} }

View File

@ -15,18 +15,42 @@
int main(void) int main(void)
{ {
Window window; Window window;
Shader shader("shaders/vertex.glsl", "shaders/frag.glsl"); Shader shader("shaders/vertex.glsl", "shaders/frag.glsl");
shader.attach(); shader.attach();
RT::Vec2f vertices[6] = {
{ -0.5f, -1.0f }, { 1.0f, -1.0f }, { -1.0f, 1.0f },
{ 1.0f, -1.0f }, { 1.0f, 1.0f }, { -1.0f, 1.0f }
};
unsigned int VAO, VBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
// Bind the VAO
glBindVertexArray(VAO);
// Bind the VBO and upload the vertex data to it
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// Set vertex attributes
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
// Unbind the VBO and VAO
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
while (!window.shouldClose()) while (!window.shouldClose())
{ {
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shader.getProgram()); glUseProgram(shader.getProgram());
glBindVertexArray(VAO);
glDrawArrays(GL_TRIANGLES, 0, 6);
window.display(); window.display();
window.pollEvents(); window.pollEvents();

View File

@ -37,23 +37,10 @@ char* load_file(char const* path)
return buffer; return buffer;
} }
void Shader::checkCompileErrors(GLuint shader) Shader::Shader(std::string vertexPath, std::string fragmentPath)
{ {
GLint success; const char *vertexCode = load_file(vertexPath.c_str());
GLchar infoLog[512]; const char *fragmentCode = load_file(fragmentPath.c_str());
glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(shader, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::COMPILATION_FAILED\n" << infoLog << std::endl;
}
}
Shader::Shader(char *vertexPath, char *fragmentPath)
{
const char *vertexCode = load_file(vertexPath);
const char *fragmentCode = load_file(fragmentPath);
_vertex = glCreateShader(GL_VERTEX_SHADER); _vertex = glCreateShader(GL_VERTEX_SHADER);
@ -70,15 +57,6 @@ Shader::Shader(char *vertexPath, char *fragmentPath)
checkCompileErrors(_fragment); checkCompileErrors(_fragment);
} }
void Shader::attach(void)
{
_program = glCreateProgram();
glAttachShader(_program, _vertex);
glAttachShader(_program, _fragment);
glLinkProgram(_program);
}
Shader::Shader(Shader const &src) Shader::Shader(Shader const &src)
{ {
*this = src; *this = src;
@ -102,6 +80,28 @@ Shader::~Shader(void)
glDeleteProgram(_program); glDeleteProgram(_program);
} }
void Shader::attach(void)
{
_program = glCreateProgram();
glAttachShader(_program, _vertex);
glAttachShader(_program, _fragment);
glLinkProgram(_program);
}
void Shader::checkCompileErrors(GLuint shader)
{
GLint success;
GLchar infoLog[512];
glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(shader, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::COMPILATION_FAILED\n" << infoLog << std::endl;
}
}
GLuint Shader::getProgram(void) const GLuint Shader::getProgram(void) const
{ {
return (_program); return (_program);