Compare commits
10 commits
3c6d72a434
...
f175d66354
Author | SHA1 | Date | |
---|---|---|---|
|
f175d66354 | ||
|
282e2b4d63 | ||
|
6c7658b5d9 | ||
|
60cfa67c3b | ||
|
6b01c56a7b | ||
|
10cecf3c36 | ||
|
8484607d9a | ||
|
c3be25c38a | ||
|
b2f0007eda | ||
|
c6ed573696 |
14 changed files with 205 additions and 34 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
||||||
build/test
|
build/test
|
||||||
|
build/main
|
|
@ -2,3 +2,12 @@
|
||||||
# the VEry LArge Game Engine
|
# the VEry LArge Game Engine
|
||||||
|
|
||||||
it's a game engine for big s#1t
|
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
BIN
a.out
Binary file not shown.
BIN
build/main
BIN
build/main
Binary file not shown.
BIN
build/test
BIN
build/test
Binary file not shown.
29
engine/object.cpp
Normal file
29
engine/object.cpp
Normal 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
34
engine/object.hpp
Normal 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
|
|
@ -39,7 +39,7 @@ bool rendering::Shaderinit() {
|
||||||
|
|
||||||
// --get paths--
|
// --get paths--
|
||||||
for (int i = 0; i < manifest["vertex"].size(); i++) {
|
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;
|
std::vector<std::string> shadercode_vertex;
|
||||||
|
@ -88,7 +88,7 @@ bool rendering::Shaderinit() {
|
||||||
|
|
||||||
// --get paths--
|
// --get paths--
|
||||||
for (int i = 0; i < manifest["fragment"].size(); i++) {
|
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;
|
std::vector<std::string> shadercode_fragment;
|
||||||
|
@ -144,14 +144,34 @@ bool rendering::Shaderinit() {
|
||||||
}
|
}
|
||||||
// fragment
|
// fragment
|
||||||
if (manifest["combos"][i]["fragment"].isInt()) {
|
if (manifest["combos"][i]["fragment"].isInt()) {
|
||||||
shader.vertexShader =
|
shader.fragmentShader =
|
||||||
vertex_shaders.at(manifest["combos"][i]["fragment"].asInt());
|
fragment_shaders.at(manifest["combos"][i]["fragment"].asInt());
|
||||||
} else {
|
} else {
|
||||||
std::cerr
|
std::cerr
|
||||||
<< "required argument \"fragment\" is nonexistant or not an int";
|
<< "required argument \"fragment\" is nonexistant or not an int\n";
|
||||||
return false;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rendering::render(){
|
||||||
|
for (int i=0; i<objects.size(); i++) {
|
||||||
|
objects.at(i).render();
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,6 +12,7 @@
|
||||||
#include <json/value.h>
|
#include <json/value.h>
|
||||||
#include <json/reader.h>
|
#include <json/reader.h>
|
||||||
#include "shader.hpp"
|
#include "shader.hpp"
|
||||||
|
#include "object.hpp"
|
||||||
|
|
||||||
|
|
||||||
//contains the context for the window and stuff for setting up the renderer to render stuff
|
//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> vertex_shaders;
|
||||||
std::vector<GLuint> fragment_shaders;
|
std::vector<GLuint> fragment_shaders;
|
||||||
std::vector<shader> shaders;
|
std::vector<shader> shaders;
|
||||||
|
std::vector<gameobject> objects;
|
||||||
|
|
||||||
|
//temporary
|
||||||
|
void render();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SDL_Window *window;
|
SDL_Window *window;
|
||||||
|
|
|
@ -1,8 +1,19 @@
|
||||||
#include "shader.hpp"
|
#include "shader.hpp"
|
||||||
|
|
||||||
void shader::linkshader(){
|
void shader::linkshader() { glLinkProgram(shaderProgram); }
|
||||||
|
|
||||||
|
void shader::attatchshader() {
|
||||||
shaderProgram = glCreateProgram();
|
shaderProgram = glCreateProgram();
|
||||||
glAttachShader(shaderProgram, vertexShader);
|
glAttachShader(shaderProgram, vertexShader);
|
||||||
glAttachShader(shaderProgram, fragmentShader);
|
glAttachShader(shaderProgram, fragmentShader);
|
||||||
glLinkProgram(shaderProgram);
|
}
|
||||||
|
|
||||||
|
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());
|
||||||
}
|
}
|
|
@ -5,6 +5,7 @@
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include <SDL2/SDL_opengl.h>
|
#include <SDL2/SDL_opengl.h>
|
||||||
#include <SDL2/SDL_video.h>
|
#include <SDL2/SDL_video.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
class shader{
|
class shader{
|
||||||
public:
|
public:
|
||||||
|
@ -12,7 +13,13 @@ class shader{
|
||||||
GLuint vertexShader;
|
GLuint vertexShader;
|
||||||
GLuint shaderProgram;
|
GLuint shaderProgram;
|
||||||
//links the shader and creates the 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 linkshader();
|
||||||
|
void use();
|
||||||
private:
|
private:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
44
main.cpp
44
main.cpp
|
@ -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
|
//vbo
|
||||||
GLuint vbo;
|
GLuint vbo;
|
||||||
glGenBuffers(1, &vbo); // Generate 1 buffer
|
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);
|
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-----
|
//-----vao-----
|
||||||
GLuint vao;
|
|
||||||
glGenVertexArrays(1, &vao);
|
|
||||||
glBindVertexArray(vao);
|
glBindVertexArray(vao);
|
||||||
//-----vao-----
|
//-----vao-----
|
||||||
|
|
||||||
|
@ -121,10 +123,10 @@ int main(int argc, char *argv[])
|
||||||
glEnableVertexAttribArray(colAttrib);
|
glEnableVertexAttribArray(colAttrib);
|
||||||
glVertexAttribPointer(colAttrib, 3, GL_FLOAT, GL_FALSE, 5*sizeof(GLfloat), (void*)(2*sizeof(GLfloat)));
|
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");
|
//GLint uniColor = glGetUniformLocation(shaderProgram, "triangleColor");
|
||||||
glUniform3f(uniColor, 1.0f, 0.0f, 0.0f);
|
//glUniform3f(uniColor, 1.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
{
|
{
|
||||||
"vertex":[
|
"vertex":[
|
||||||
"shaders/vertex/simple.glsl"
|
{"path":"shaders/vertex/simple.glsl"}
|
||||||
],
|
],
|
||||||
"fragment":[
|
"fragment":[
|
||||||
"shaders/fragment/simple.glsl"
|
{
|
||||||
|
"path":"shaders/fragment/simple.glsl",
|
||||||
|
"framebuff_output":["outColor"]
|
||||||
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
"combos":[
|
"combos":[
|
||||||
|
|
52
test.cpp
52
test.cpp
|
@ -1,15 +1,53 @@
|
||||||
|
#include "engine/object.hpp"
|
||||||
#include "engine/rendering.hpp"
|
#include "engine/rendering.hpp"
|
||||||
|
#include "engine/shader.hpp"
|
||||||
#include <SDL2/SDL_video.h>
|
#include <SDL2/SDL_video.h>
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
rendering renderer;
|
rendering renderer;
|
||||||
|
|
||||||
renderer.SDLinit();
|
renderer.SDLinit();
|
||||||
SDL_Window *window =
|
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.GLinit(window);
|
||||||
|
|
||||||
renderer.Shaderinit();
|
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;
|
SDL_Event windowEvent;
|
||||||
|
|
||||||
|
@ -21,8 +59,20 @@ int main(int argc, char *argv[]) {
|
||||||
windowEvent.key.keysym.sym == SDLK_ESCAPE)
|
windowEvent.key.keysym.sym == SDLK_ESCAPE)
|
||||||
break;
|
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_SwapWindow(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SDL_GL_DeleteContext(renderer.context);
|
SDL_GL_DeleteContext(renderer.context);
|
||||||
|
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue