diff options
| -rw-r--r-- | src/core/src/loop.c | 136 | ||||
| -rw-r--r-- | src/rendering/include/engine/rendering/rendering.h | 2 | ||||
| -rw-r--r-- | src/rendering/src/gl.c | 7 | ||||
| -rw-r--r-- | src/rendering/src/rendering.c | 22 | ||||
| -rw-r--r-- | src/rendering/src/window.c | 4 |
5 files changed, 51 insertions, 120 deletions
diff --git a/src/core/src/loop.c b/src/core/src/loop.c index 642f771..f9c100c 100644 --- a/src/core/src/loop.c +++ b/src/core/src/loop.c @@ -5,6 +5,9 @@ #include <cglm/cglm.h> +#define STB_IMAGE_IMPLEMENTATION +#include <stb/stb_image.h> + #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) /* include winapi */ #include <Windows.h> @@ -36,6 +39,12 @@ Platform* GLOBAL_PLATFORM = NULL; input_callback_t* callbacks[128]; usize callbacks_len; +/* TODO: MOVE ME */ +#include <glad/gl.h> +char *img_filename = "test.png"; +unsigned char *test_image = NULL; +GLuint img_texture; + i32 nproc(void) { return get_nprocs(); } @@ -95,109 +104,6 @@ Platform* engine_init(const char* windowtitle, i32 windowWidth, i32 windowHeight // Dont forget to init the renderer init_render_opengl(w); - //const GladGLContext *gl = w->context; - - //struct RenderObject *testobject = malloc(sizeof(struct RenderObject)); - - //gl->GenVertexArrays(1, &(testobject->vao)); - //gl->BindVertexArray(testobject->vao); - - //p->testobject = testobject; - - //testobject->g_vertex_buffer_data[0] = -1.0f; - //testobject->g_vertex_buffer_data[1] = -1.0f; - //testobject->g_vertex_buffer_data[2] = 0.0f; - - //testobject->g_vertex_buffer_data[3] = 1.0f; - //testobject->g_vertex_buffer_data[4] = -1.0f; - //testobject->g_vertex_buffer_data[5] = 0.0f; - - //testobject->g_vertex_buffer_data[6] = 0.0f; - //testobject->g_vertex_buffer_data[7] = 1.0f; - //testobject->g_vertex_buffer_data[8] = 0.0f; - - //static const float bufdata[] = { - // -1.0f,-1.0f,-1.0f, // triangle 1 : begin - // -1.0f,-1.0f, 1.0f, - // -1.0f, 1.0f, 1.0f, // triangle 1 : end - // 1.0f, 1.0f,-1.0f, // triangle 2 : begin - // -1.0f,-1.0f,-1.0f, - // -1.0f, 1.0f,-1.0f, // triangle 2 : end - // 1.0f,-1.0f, 1.0f, - // -1.0f,-1.0f,-1.0f, - // 1.0f,-1.0f,-1.0f, - // 1.0f, 1.0f,-1.0f, - // 1.0f,-1.0f,-1.0f, - // -1.0f,-1.0f,-1.0f, - // -1.0f,-1.0f,-1.0f, - // -1.0f, 1.0f, 1.0f, - // -1.0f, 1.0f,-1.0f, - // 1.0f,-1.0f, 1.0f, - // -1.0f,-1.0f, 1.0f, - // -1.0f,-1.0f,-1.0f, - // -1.0f, 1.0f, 1.0f, - // -1.0f,-1.0f, 1.0f, - // 1.0f,-1.0f, 1.0f, - // 1.0f, 1.0f, 1.0f, - // 1.0f,-1.0f,-1.0f, - // 1.0f, 1.0f,-1.0f, - // 1.0f,-1.0f,-1.0f, - // 1.0f, 1.0f, 1.0f, - // 1.0f,-1.0f, 1.0f, - // 1.0f, 1.0f, 1.0f, - // 1.0f, 1.0f,-1.0f, - // -1.0f, 1.0f,-1.0f, - // 1.0f, 1.0f, 1.0f, - // -1.0f, 1.0f,-1.0f, - // -1.0f, 1.0f, 1.0f, - // 1.0f, 1.0f, 1.0f, - // -1.0f, 1.0f, 1.0f, - // 1.0f,-1.0f, 1.0f - //}; - - //static const GLfloat g_color_buffer_data[] = { - // 0.583f, 0.771f, 0.014f, - // 0.609f, 0.115f, 0.436f, - // 0.327f, 0.483f, 0.844f, - // 0.822f, 0.569f, 0.201f, - // 0.435f, 0.602f, 0.223f, - // 0.310f, 0.747f, 0.185f, - // 0.597f, 0.770f, 0.761f, - // 0.559f, 0.436f, 0.730f, - // 0.359f, 0.583f, 0.152f, - // 0.483f, 0.596f, 0.789f, - // 0.559f, 0.861f, 0.639f, - // 0.195f, 0.548f, 0.859f, - // 0.014f, 0.184f, 0.576f, - // 0.771f, 0.328f, 0.970f, - // 0.406f, 0.615f, 0.116f, - // 0.676f, 0.977f, 0.133f, - // 0.971f, 0.572f, 0.833f, - // 0.140f, 0.616f, 0.489f, - // 0.997f, 0.513f, 0.064f, - // 0.945f, 0.719f, 0.592f, - // 0.543f, 0.021f, 0.978f, - // 0.279f, 0.317f, 0.505f, - // 0.167f, 0.620f, 0.077f, - // 0.347f, 0.857f, 0.137f, - // 0.055f, 0.953f, 0.042f, - // 0.714f, 0.505f, 0.345f, - // 0.783f, 0.290f, 0.734f, - // 0.722f, 0.645f, 0.174f, - // 0.302f, 0.455f, 0.848f, - // 0.225f, 0.587f, 0.040f, - // 0.517f, 0.713f, 0.338f, - // 0.053f, 0.959f, 0.120f, - // 0.393f, 0.621f, 0.362f, - // 0.673f, 0.211f, 0.457f, - // 0.820f, 0.883f, 0.371f, - // 0.982f, 0.099f, 0.879f - //}; - - -//// LOG("sizeof(bufdata) = %lu", sizeof(bufdata)); -//// LOG("sizeof(g_vertex_buffer_data) = %lu", sizeof(testobject->g_vertex_buffer_data)); -//// //// Generate 1 buffer, put the resulting identifier in vertexbuffer //gl->GenBuffers(1, &(testobject->vbo)); @@ -339,6 +245,29 @@ Platform* engine_init(const char* windowtitle, i32 windowWidth, i32 windowHeight p->bindings_sz = 0; p->bindings_len = 0; + { + int x,y,n; + test_image = stbi_load(img_filename, &x, &y, &n, 0); + if (test_image == NULL) { + ERROR("Failed to load image %s", img_filename); + } else { + // + const GladGLContext *gl = w->context; + gl->GenTextures(1, &img_texture); + gl->BindTexture(GL_TEXTURE_2D, img_texture); + + gl->TexImage2D(GL_TEXTURE_2D, 0, GL_RGB, x, y, 0, GL_RGBA, GL_UNSIGNED_BYTE, test_image); + + gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + stbi_image_free(test_image); + } +// // ... process data if not NULL ... +// // ... x = width, y = height, n = # 8-bit components per pixel ... +// // ... replace '0' with '1'..'4' to force that many components per pixel +// // ... but 'n' will always be the number that it would have been if you said 0 + } // TODO: Add global bindings INFO("Available cores: %d", nproc()); @@ -543,7 +472,6 @@ void engine_stop(Platform* p) { // } //} - destroy_window(p->window); } diff --git a/src/rendering/include/engine/rendering/rendering.h b/src/rendering/include/engine/rendering/rendering.h index bde298c..7b67248 100644 --- a/src/rendering/include/engine/rendering/rendering.h +++ b/src/rendering/include/engine/rendering/rendering.h @@ -90,6 +90,6 @@ typedef struct { } data; } RenderDrawCall; -RenderObject RenderObject_new(float* model, usize sz); +RenderObject RenderObject_new(float* model, usize sz, float* uv, usize uv_sz); #endif diff --git a/src/rendering/src/gl.c b/src/rendering/src/gl.c index f05c07d..bef19b6 100644 --- a/src/rendering/src/gl.c +++ b/src/rendering/src/gl.c @@ -121,7 +121,7 @@ GLuint LoadShaders( return ProgramID; } -RenderObject RenderObject_new(float* model, usize sz) { +RenderObject RenderObject_new(float* model, usize sz, float* uv, usize uv_sz) { GladGLContext *gl = GLOBAL_PLATFORM->window->context; RenderObject o; @@ -134,11 +134,14 @@ RenderObject RenderObject_new(float* model, usize sz) { gl->BindBuffer(GL_ARRAY_BUFFER, o.vbo); gl->BufferData(GL_ARRAY_BUFFER, sz, model, GL_STATIC_DRAW); + gl->GenBuffers(1, &(o.col)); + gl->BindBuffer(GL_ARRAY_BUFFER, o.col); + gl->BufferData(GL_ARRAY_BUFFER, uv_sz, uv, GL_STATIC_DRAW); //gl->GenBuffers(1, &(o.ibo)); //gl->BindBuffer(GL_ARRAY_BUFFER, o.ibo); //gl->BufferData(GL_ARRAY_BUFFER, sizeof(quad), quad, GL_STATIC_DRAW); - o.shader.program = LoadShaders(gl, "shader.vertexshader", "shader.fragmentshader"); + o.shader.program = LoadShaders(gl, "shader.vert", "shader.frag"); return o; } diff --git a/src/rendering/src/rendering.c b/src/rendering/src/rendering.c index 89a6be3..77cd285 100644 --- a/src/rendering/src/rendering.c +++ b/src/rendering/src/rendering.c @@ -76,7 +76,7 @@ void render_present(Window* w) { { - vec3 cam = {3., 2., 3.}; // perspective + vec3 cam = {-3., 2., -3.}; // perspective mat4 per; // perspective mat4 v; // view mat4 model = GLM_MAT4_IDENTITY_INIT; @@ -122,16 +122,16 @@ void render_present(Window* w) { ); //// Do the color buffer (?) - //gl->EnableVertexAttribArray(1); - //gl->BindBuffer(GL_ARRAY_BUFFER, p->testobject->col); - //gl->VertexAttribPointer( - // 1, // attribute. No particular reason for 1, but must match the layout in the shader. - // 3, // size - // GL_FLOAT, // type - // GL_FALSE, // normalized? - // 0, // stride - // (void*)0 // array buffer offset - // ); + gl->EnableVertexAttribArray(1); + gl->BindBuffer(GL_ARRAY_BUFFER, o->col); + gl->VertexAttribPointer( + 1, // attribute. No particular reason for 1, but must match the layout in the shader. + 2, // size + GL_FLOAT, // type + GL_FALSE, // normalized? + 0, // stride + (void*)0 // array buffer offset + ); diff --git a/src/rendering/src/window.c b/src/rendering/src/window.c index 431ce3f..9c04957 100644 --- a/src/rendering/src/window.c +++ b/src/rendering/src/window.c @@ -102,8 +102,8 @@ Window* init_window_glfw( // TODO: input handler callback glfwSetFramebufferSizeCallback(window, window_size_callback); - glfwMakeContextCurrent(window); - glfwSwapInterval(0); + //glfwMakeContextCurrent(window); + //glfwSwapInterval(0); // Create the window datastructure ret = (Window*)calloc(1, sizeof(Window)); |
