Compare commits

...

10 commits

Author SHA1 Message Date
loeade
f175d66354 finaaaalllyyyy ∩w∩ 2023-08-08 04:02:40 +02:00
loeade
282e2b4d63 duudde git 2023-08-07 20:12:25 +02:00
loeade
6c7658b5d9 realises shaders.json was wrong gets me every time 2023-08-07 20:12:05 +02:00
loeade
60cfa67c3b determination. (Is ThAt AN uNdeRTalE rEfERenCE???) 2023-08-07 19:05:58 +02:00
loeade
6b01c56a7b y u no work!?!?!? 2023-08-07 16:39:48 +02:00
loeade
10cecf3c36 s#i7's getting real 2023-08-07 03:05:29 +02:00
loeade
8484607d9a try{ addRenderSupport() } 2023-08-06 23:30:26 +02:00
loeade
c3be25c38a beginnings of gameobjects 2023-08-06 22:56:51 +02:00
loeade
b2f0007eda added shader loading and first steps of using shdr 2023-08-06 22:45:17 +02:00
loeade
c6ed573696 gitignore 2023-08-06 22:40:03 +02:00
14 changed files with 205 additions and 34 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
build/test
build/main

View file

@ -2,3 +2,12 @@
# the VEry LArge Game Engine
it's a game engine for big s#1t
# building
it's easy just type `make` to build and run ./build/main
or run `make Test` to build the test
"easy" he said. instant regret.

BIN
a.out

Binary file not shown.

Binary file not shown.

Binary file not shown.

29
engine/object.cpp Normal file
View file

@ -0,0 +1,29 @@
#include "object.hpp"
#include "shader.hpp"
void gameobject::render() {
glDrawElements(GL_TRIANGLES, element_number, GL_UNSIGNED_INT, elements);
}
gameobject::gameobject(shader *render_shader) {
rend_shader = render_shader;
glGenVertexArrays(1, &vao);
}
void gameobject::genEbo() {
glGenBuffers(1, &ebo); // Generate 1 buffer
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint)*element_number, elements,
GL_STATIC_DRAW);
}
void gameobject::genVbo(GLfloat vertices[], GLuint size) {
glGenBuffers(1, &vbo); // Generate 1 buffer
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * size, vertices, GL_STATIC_DRAW);
}

34
engine/object.hpp Normal file
View file

@ -0,0 +1,34 @@
#ifndef __GAMEOBJECT_H__
#define __GAMEOBJECT_H__
#include <GL/glew.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h>
#include <SDL2/SDL_video.h>
#include "shader.hpp"
/*
* absolute bare minimum to get rendering to
* sorta hacky work
*/
class gameobject{
public:
shader *rend_shader;
GLuint vbo;
GLuint vao;
GLuint element_number;
GLuint ebo;
GLuint *elements;
void render();
void genVbo(GLfloat vertices[], GLuint size);
void genEbo();
gameobject(shader *render_shader);
private:
};
#endif

View file

@ -39,7 +39,7 @@ bool rendering::Shaderinit() {
// --get paths--
for (int i = 0; i < manifest["vertex"].size(); i++) {
shaderpaths_vertex.push_back(manifest["vertex"][0].asString());
shaderpaths_vertex.push_back(manifest["vertex"][i]["path"].asString());
}
std::vector<std::string> shadercode_vertex;
@ -88,7 +88,7 @@ bool rendering::Shaderinit() {
// --get paths--
for (int i = 0; i < manifest["fragment"].size(); i++) {
shaderpaths_fragment.push_back(manifest["fragment"][0].asString());
shaderpaths_fragment.push_back(manifest["fragment"][i]["path"].asString());
}
std::vector<std::string> shadercode_fragment;
@ -144,14 +144,34 @@ bool rendering::Shaderinit() {
}
// fragment
if (manifest["combos"][i]["fragment"].isInt()) {
shader.vertexShader =
vertex_shaders.at(manifest["combos"][i]["fragment"].asInt());
shader.fragmentShader =
fragment_shaders.at(manifest["combos"][i]["fragment"].asInt());
} else {
std::cerr
<< "required argument \"fragment\" is nonexistant or not an int";
<< "required argument \"fragment\" is nonexistant or not an int\n";
return false;
}
if(!manifest["fragment"][manifest["combos"][i]["fragment"].asInt()]["framebuff_output"].isArray()){
std::cerr<<"vertex["<<i<<"].framebuff_output is not an array.\n";
return false;
}
shader.attatchshader();
for(int j=0; j < manifest["fragment"][manifest["combos"][i]["fragment"].asInt()]["framebuff_output"].size();j++){
glBindFragDataLocation(shader.shaderProgram, j, manifest["fragment"][manifest["combos"][i]["fragment"].asInt()]["framebuff_output"][j].asCString());
}
shader.linkshader();
this->shaders.push_back(shader);
}
return true;
}
void rendering::render(){
for (int i=0; i<objects.size(); i++) {
objects.at(i).render();
}
}

View file

@ -12,6 +12,7 @@
#include <json/value.h>
#include <json/reader.h>
#include "shader.hpp"
#include "object.hpp"
//contains the context for the window and stuff for setting up the renderer to render stuff
@ -31,6 +32,10 @@ public:
std::vector<GLuint> vertex_shaders;
std::vector<GLuint> fragment_shaders;
std::vector<shader> shaders;
std::vector<gameobject> objects;
//temporary
void render();
private:
SDL_Window *window;

View file

@ -1,8 +1,19 @@
#include "shader.hpp"
void shader::linkshader(){
shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
void shader::linkshader() { glLinkProgram(shaderProgram); }
void shader::attatchshader() {
shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
}
void shader::use() { glUseProgram(shaderProgram); }
GLint shader::getInputId(std::string name) {
return glGetProgramResourceIndex(shaderProgram, GL_PROGRAM_INPUT, name.c_str());
}
GLint shader::getOutputId(std::string name) {
return glGetProgramResourceIndex(shaderProgram, GL_PROGRAM_OUTPUT, name.c_str());
}

View file

@ -5,6 +5,7 @@
#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h>
#include <SDL2/SDL_video.h>
#include <string>
class shader{
public:
@ -12,7 +13,13 @@ class shader{
GLuint vertexShader;
GLuint shaderProgram;
//links the shader and creates the shaderprogram
GLint getInputId(std::string name);
GLint getOutputId(std::string name);
//void setAttribute(std::string name);
void setAttribute(GLuint name);
void attatchshader();
void linkshader();
void use();
private:
};

View file

@ -71,6 +71,25 @@ int main(int argc, char *argv[])
};
//shaders
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertcode, NULL);
glCompileShader(vertexShader);
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragcode, NULL);
glCompileShader(fragmentShader);
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
GLuint vao;
glGenVertexArrays(1, &vao);
//vbo
GLuint vbo;
glGenBuffers(1, &vbo); // Generate 1 buffer
@ -88,26 +107,9 @@ int main(int argc, char *argv[])
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elements), elements, GL_STATIC_DRAW);
//shaders
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertcode, NULL);
glCompileShader(vertexShader);
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragcode, NULL);
glCompileShader(fragmentShader);
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
//-----vao-----
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
//-----vao-----
@ -121,10 +123,10 @@ int main(int argc, char *argv[])
glEnableVertexAttribArray(colAttrib);
glVertexAttribPointer(colAttrib, 3, GL_FLOAT, GL_FALSE, 5*sizeof(GLfloat), (void*)(2*sizeof(GLfloat)));
glBindFragDataLocation(shaderProgram, 0, "outColor");
//glBindFragDataLocation(shaderProgram, 0, "outColor");
GLint uniColor = glGetUniformLocation(shaderProgram, "triangleColor");
glUniform3f(uniColor, 1.0f, 0.0f, 0.0f);
//GLint uniColor = glGetUniformLocation(shaderProgram, "triangleColor");
//glUniform3f(uniColor, 1.0f, 0.0f, 0.0f);

View file

@ -1,9 +1,12 @@
{
"vertex":[
"shaders/vertex/simple.glsl"
{"path":"shaders/vertex/simple.glsl"}
],
"fragment":[
"shaders/fragment/simple.glsl"
{
"path":"shaders/fragment/simple.glsl",
"framebuff_output":["outColor"]
}
],
"combos":[

View file

@ -1,15 +1,53 @@
#include "engine/object.hpp"
#include "engine/rendering.hpp"
#include "engine/shader.hpp"
#include <SDL2/SDL_video.h>
int main(int argc, char *argv[]) {
rendering renderer;
renderer.SDLinit();
SDL_Window *window =
SDL_CreateWindow("aaa", 20, 20, 500, 500, SDL_WINDOW_OPENGL);
SDL_CreateWindow("aaa", 20, 20, 800, 600, SDL_WINDOW_OPENGL);
renderer.GLinit(window);
renderer.Shaderinit();
GLfloat vertices[] = {
-0.5f, 0.5f, 1.0f, 0.0f, 0.0f, // Top-left
0.5f, 0.5f, 0.0f, 1.0f, 0.0f, // Top-right
0.5f, -0.5f, 0.0f, 0.0f, 1.0f, // Bottom-right
-0.5f, -0.5f, 1.0f, 1.0f, 1.0f // Bottom-left
};
GLuint elements[] = {0, 2, 3, 1, 2, 3};
gameobject test(&renderer.shaders.at(0));
// renderer.objects.push_back(test);
test.element_number = 6;
test.elements = elements;
test.genVbo(vertices, 20);
test.genEbo();
glBindVertexArray(test.vao);
test.rend_shader->use();
GLint posAttrib = test.rend_shader->getInputId("position");
glEnableVertexAttribArray(posAttrib);
glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat),
0);
GLint colAttrib = test.rend_shader->getInputId("color");
glEnableVertexAttribArray(colAttrib);
glVertexAttribPointer(colAttrib, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat),
(void *)(2 * sizeof(GLfloat)));
/*GLint uniColor =
glGetUniformLocation(test.rend_shader->shaderProgram, "triangleColor");
glUniform3f(uniColor, 1.0f, 0.0f, 0.0f);*/
SDL_Event windowEvent;
@ -21,8 +59,20 @@ int main(int argc, char *argv[]) {
windowEvent.key.keysym.sym == SDLK_ESCAPE)
break;
}
GLenum err = glGetError();
if (err != GL_NO_ERROR) {
std::cout << err<<"\n"<<posAttrib;
return -1;
}
// renderer.render();
// test.render();
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, elements);
SDL_GL_SwapWindow(window);
}
SDL_GL_DeleteContext(renderer.context);
SDL_Quit();