diff options
author | sanine <sanine.not@pm.me> | 2022-08-22 11:00:42 -0500 |
---|---|---|
committer | sanine <sanine.not@pm.me> | 2022-08-22 11:00:42 -0500 |
commit | a2c162f12337142c054c2e1f01ad508ee56963d2 (patch) | |
tree | 80fb3c8cbd8f08000423d5dc961986be07978c28 /src/gl/gl.c | |
parent | dccc9bef56d51c5cad13c2568c5a3b97f637fd6e (diff) |
refactor: move data functions into separate file
Diffstat (limited to 'src/gl/gl.c')
-rw-r--r-- | src/gl/gl.c | 143 |
1 files changed, 1 insertions, 142 deletions
diff --git a/src/gl/gl.c b/src/gl/gl.c index 876df9d..8a1cb17 100644 --- a/src/gl/gl.c +++ b/src/gl/gl.c @@ -18,16 +18,6 @@ int glad_init(lua_State *L); int gl_terminate(lua_State *L); int gl_get_error(lua_State *L); -/* buffers */ -int gl_create_buffer(lua_State *L); -int gl_bind_buffer(lua_State *L); -int gl_buffer_data(lua_State *L); - -int gl_vertex_array_create(lua_State *L); -int gl_vertex_array_bind(lua_State *L); -int gl_vertex_attrib_pointer(lua_State *L); -int gl_vertex_array_enable_attrib(lua_State *L); - void setup_gl(lua_State *L, int honey_index) { int data_types = hs_create_table(L, @@ -44,17 +34,6 @@ void setup_gl(lua_State *L, int honey_index) hs_str_int("outOfMemory", GL_OUT_OF_MEMORY), ); - int buffer_binding_targets = hs_create_table(L, - hs_str_int("arrayBuffer", GL_ARRAY_BUFFER), - hs_str_int("elementArrayBuffer", GL_ELEMENT_ARRAY_BUFFER), - ); - - int buffer_usage_patterns = hs_create_table(L, - hs_str_int("streamDraw", GL_STREAM_DRAW), - hs_str_int("staticDraw", GL_STATIC_DRAW), - hs_str_int("dynamicDraw", GL_DYNAMIC_DRAW), - ); - int gl_index = hs_create_table(L, hs_str_cfunc("init", gl_init), hs_str_cfunc("initGlad", glad_init), @@ -63,23 +42,11 @@ void setup_gl(lua_State *L, int honey_index) hs_str_tbl("dataType", data_types), hs_str_tbl("errorType", error_types), - - /* buffer */ - hs_str_cfunc("createBuffer", gl_create_buffer), - hs_str_cfunc("bindBuffer", gl_bind_buffer), - hs_str_cfunc("bufferData", gl_buffer_data), - - hs_str_cfunc("createVertexArray", gl_vertex_array_create), - hs_str_cfunc("bindVertexArray", gl_vertex_array_bind), - hs_str_cfunc("vertexAttribPointer", gl_vertex_attrib_pointer), - hs_str_cfunc("vertexArrayEnableAttrib", gl_vertex_array_enable_attrib), - - hs_str_tbl("bufferTarget", buffer_binding_targets), - hs_str_tbl("bufferUsage", buffer_usage_patterns), ); setup_shader(L, gl_index); setup_drawing(L, gl_index); + setup_data(L, gl_index); lua_setfield(L, honey_index, "gl"); } @@ -113,111 +80,3 @@ int gl_get_error(lua_State *L) lua_pushinteger(L, glGetError()); return 1; } - - -int gl_create_buffer(lua_State *L) -{ - int buf; - glGenBuffers(1, &buf); - lua_pushinteger(L, buf); - return 1; -} - - -int gl_bind_buffer(lua_State *L) -{ - lua_Integer target, buf; - hs_parse_args(L, hs_int(target), hs_int(buf)); - glBindBuffer(target, buf); - return 0; -} - - -int gl_buffer_data(lua_State *L) -{ - lua_Integer target, type, usage; - int table; - hs_parse_args(L, hs_int(target), hs_int(type), hs_tbl(table), hs_int(usage)); - - if (type != GL_INT && type != GL_FLOAT) { - hs_throw_error(L, "invalid type"); - } - - /* build raw buffer */ - size_t len = lua_objlen(L, table); - void *buf; - if (type == GL_FLOAT) { - float *fbuf = malloc(len * sizeof(float)); - if (fbuf == NULL) - hs_throw_error(L, "failed to allocate intermediary fbuffer"); - for (int i=0; i<len; i++) { - lua_rawgeti(L, table, i+1); - if (!lua_isnumber(L, -1)) { - hs_throw_error(L, "all table items must be numbers (failed at index %d)", i); - } - fbuf[i] = lua_tonumber(L, -1); - lua_pop(L, 1); - } - len = len * sizeof(float); - buf = fbuf; - } - else { - int *ibuf = malloc(len * sizeof(int)); - if (ibuf == NULL) - hs_throw_error(L, "failed to allocate intermediary ibuffer"); - for (int i=0; i<len; i++) { - lua_rawgeti(L, table, i+1); - if (!lua_isnumber(L, -1)) { - hs_throw_error(L, "all table items must be integers (failed at index %d)", i); - } - ibuf[i] = lua_tointeger(L, -1); - lua_pop(L, 1); - } - len = len * sizeof(int); - buf = ibuf; - } - - /* call */ - glBufferData(target, len, buf, usage); - free(buf); - return 0; -} - - -int gl_vertex_array_create(lua_State *L) -{ - int array; - glGenVertexArrays(1, &array); - lua_pushinteger(L, array); - return 1; -} - - -int gl_vertex_array_bind(lua_State *L) -{ - lua_Integer array; - hs_parse_args(L, hs_int(array)); - glBindVertexArray(array); - return 0; -} - - -int gl_vertex_attrib_pointer(lua_State *L) -{ - lua_Integer index, size, stride, offset; - bool normalized; - hs_parse_args(L, hs_int(index), hs_int(size), hs_bool(normalized), hs_int(stride), hs_int(offset)); - glVertexAttribPointer(index, size, GL_FLOAT, - normalized, stride*sizeof(float), - (void*) (offset*sizeof(float))); - return 0; -} - - -int gl_vertex_array_enable_attrib(lua_State *L) -{ - lua_Integer index; - hs_parse_args(L, hs_int(index)); - glEnableVertexAttribArray(index); - return 0; -} |