Compare commits

..

13 Commits

Author SHA1 Message Date
mid
a1439664ca Add vsync parameter 2025-12-02 00:04:13 +02:00
mid
0453585751 Move to k3 SDF fonts 2025-12-02 00:04:05 +02:00
mid
5f6dc66a0f Update to newest k3 2025-10-12 20:47:41 +03:00
mid
2e730baf33 Scriptable near and far planes 2025-09-30 11:05:33 +03:00
mid
462412c31a Already .k3m has some legacy bullshit 2025-09-30 11:05:12 +03:00
mid
e4b5f8d361 streamloader return value 2025-09-19 23:11:42 +03:00
mid
f7a429cfbc Free font buffer 2025-09-13 12:02:27 +03:00
mid
3c372a3024 Map to newest k3 2025-09-13 12:02:15 +03:00
mid
f65891932a k3Font walls 2025-08-28 23:32:03 +03:00
mid
177d259304 Add scrollbox and image objects 2025-08-28 14:11:40 +03:00
mid
dbced43b2b Introduce animation trees, remove "standard animations" from core 2025-08-10 15:42:45 +03:00
mid
96da001734 Add game.ui.obj 2025-07-27 16:54:32 +03:00
mid
943601bc3a Introduce k3Menu properties to luaapi 2025-07-27 16:15:55 +03:00
10 changed files with 1105 additions and 225 deletions

View File

@@ -115,6 +115,8 @@ def write_some_data(context, filepath, doExportEverything):
out.write(struct.pack("4f", m.col[c][0], m.col[c][1], m.col[c][2], m.col[c][3])) out.write(struct.pack("4f", m.col[c][0], m.col[c][1], m.col[c][2], m.col[c][3]))
for b in dabones: for b in dabones:
out.write(struct.pack("B", dabones.index(b.parent) if b.parent else 255)) out.write(struct.pack("B", dabones.index(b.parent) if b.parent else 255))
for b in dabones:
out.write(b.name.encode("UTF-8") + b'\x00')
for v in vertdict.keys(): for v in vertdict.keys():
out.write(struct.pack("3f", v[0][0], v[0][2], -v[0][1])) out.write(struct.pack("3f", v[0][0], v[0][2], -v[0][1]))

View File

@@ -685,7 +685,7 @@ void game_update() {
size_t boneCount = Game.entities.render[ci].cache ? k3MdlGetBoneCount(Game.entities.render[ci].cache) : 0; size_t boneCount = Game.entities.render[ci].cache ? k3MdlGetBoneCount(Game.entities.render[ci].cache) : 0;
if(boneCount) { if(boneCount) {
struct CBoned *cb = game_getcomponent(Game.entities.render[ci].entity, boned); /*struct CBoned *cb = game_getcomponent(Game.entities.render[ci].entity, boned);
if(!cb) { if(!cb) {
cb = game_ensurecomponent(Game.entities.render[ci].entity, boned); cb = game_ensurecomponent(Game.entities.render[ci].entity, boned);
@@ -741,7 +741,7 @@ void game_update() {
glm_decompose(cb->anim.cache.inter[m], cb->bones[m].translation, rot, scaleignore); glm_decompose(cb->anim.cache.inter[m], cb->bones[m].translation, rot, scaleignore);
glm_mat4_quat(cb->anim.cache.inter[m], cb->bones[m].rotation); glm_mat4_quat(cb->anim.cache.inter[m], cb->bones[m].rotation);
} }
} }*/
} }
dGeomID gid = cp->geom; dGeomID gid = cp->geom;
@@ -776,7 +776,7 @@ void game_update() {
for(size_t cm = 0; cm < Game.entities.movementCount; cm++) { for(size_t cm = 0; cm < Game.entities.movementCount; cm++) {
struct CBoned *cb = game_getcomponent(Game.entities.movement[cm].entity, boned); struct CBoned *cb = game_getcomponent(Game.entities.movement[cm].entity, boned);
if(cb && cb->anim.standard) { /*if(cb && cb->anim.standard) {
struct CPhysics *cp = game_getcomponent(Game.entities.movement[cm].entity, physics); struct CPhysics *cp = game_getcomponent(Game.entities.movement[cm].entity, physics);
if(cp && cp->geom) { if(cp && cp->geom) {
dBodyID bid = dGeomGetBody(cp->geom); dBodyID bid = dGeomGetBody(cp->geom);
@@ -789,7 +789,7 @@ void game_update() {
} }
} }
} }
} }*/
} }
for(size_t i = 0; i < Game.conveyorCount; i++) { for(size_t i = 0; i < Game.conveyorCount; i++) {
@@ -876,7 +876,6 @@ void game_update() {
vec3 dif; vec3 dif;
glm_vec3_sub(conveyor->points[nextPoint], conveyor->points[currentPoint], dif); glm_vec3_sub(conveyor->points[nextPoint], conveyor->points[currentPoint], dif);
glm_vec3_scale_as(dif, conveyor->speed * (conveyor->active <= 0 ? -1 : 1), dif); glm_vec3_scale_as(dif, conveyor->speed * (conveyor->active <= 0 ? -1 : 1), dif);
//printf("set %f %f %f\n", dif[0], dif[1], dif[2]);
dBodySetLinearVel(bid, dif[0], dif[1], dif[2]); // doesn't affect movement, but necessary for proper collision response dBodySetLinearVel(bid, dif[0], dif[1], dif[2]); // doesn't affect movement, but necessary for proper collision response
} }
} }
@@ -950,7 +949,7 @@ void game_cleanup() {
Game.entities.renderCount = 0; Game.entities.renderCount = 0;
for(size_t i = 0; i < Game.entities.bonedCount; i++) { for(size_t i = 0; i < Game.entities.bonedCount; i++) {
free(Game.entities.boned[i].bones); //free(Game.entities.boned[i].bones);
} }
Game.entities.bonedCount = 0; Game.entities.bonedCount = 0;

View File

@@ -118,14 +118,7 @@ struct CPlayerCtrl {
struct CBoned { struct CBoned {
uint16_t entity; uint16_t entity;
size_t size; struct k3Animator animator;
struct k3AnimationBone *bones;
struct {
uint16_t id;
struct k3Animator cache;
bool standard;
} anim;
}; };
#define CONVEYOR_TYPE_LOOP 0 #define CONVEYOR_TYPE_LOOP 0

143
src/gl.h
View File

@@ -1,11 +1,11 @@
/** /**
* Loader generated by glad 2.0.8 on Fri May 9 09:20:04 2025 * Loader generated by glad 2.0.8 on Sun Oct 12 16:54:54 2025
* *
* SPDX-License-Identifier: (WTFPL OR CC0-1.0) AND Apache-2.0 * SPDX-License-Identifier: (WTFPL OR CC0-1.0) AND Apache-2.0
* *
* Generator: C/C++ * Generator: C/C++
* Specification: gl * Specification: gl
* Extensions: 37 * Extensions: 40
* *
* APIs: * APIs:
* - gl:compatibility=4.6 * - gl:compatibility=4.6
@@ -19,10 +19,10 @@
* - ON_DEMAND = False * - ON_DEMAND = False
* *
* Commandline: * Commandline:
* --api='gl:compatibility=4.6' --extensions='GL_ARB_compatibility,GL_ARB_debug_output,GL_ARB_fragment_program,GL_ARB_fragment_shader,GL_ARB_framebuffer_sRGB,GL_ARB_shader_image_load_store,GL_ARB_shader_image_size,GL_ARB_shader_objects,GL_ARB_shader_storage_buffer_object,GL_ARB_shading_language_100,GL_ARB_texture_compression_bptc,GL_ARB_texture_float,GL_ARB_texture_rg,GL_ARB_texture_rgb10_a2ui,GL_ARB_vertex_buffer_object,GL_ARB_vertex_program,GL_ARB_vertex_shader,GL_ARB_vertex_type_2_10_10_10_rev,GL_EXT_direct_state_access,GL_EXT_framebuffer_blit,GL_EXT_framebuffer_multisample,GL_EXT_framebuffer_multisample_blit_scaled,GL_EXT_framebuffer_object,GL_EXT_framebuffer_sRGB,GL_EXT_geometry_shader4,GL_EXT_gpu_shader4,GL_EXT_shader_image_load_store,GL_EXT_texture_array,GL_EXT_texture_compression_rgtc,GL_EXT_texture_compression_s3tc,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_integer,GL_EXT_texture_sRGB,GL_EXT_transform_feedback,GL_INTEL_conservative_rasterization,GL_KHR_texture_compression_astc_ldr,GL_NV_conservative_raster' c --header-only * --api='gl:compatibility=4.6' --extensions='GL_ARB_compatibility,GL_ARB_debug_output,GL_ARB_direct_state_access,GL_ARB_fragment_program,GL_ARB_fragment_shader,GL_ARB_framebuffer_sRGB,GL_ARB_shader_image_load_store,GL_ARB_shader_image_size,GL_ARB_shader_objects,GL_ARB_shader_storage_buffer_object,GL_ARB_shading_language_100,GL_ARB_texture_compression_bptc,GL_ARB_texture_float,GL_ARB_texture_rg,GL_ARB_texture_rgb10_a2ui,GL_ARB_timer_query,GL_ARB_vertex_buffer_object,GL_ARB_vertex_program,GL_ARB_vertex_shader,GL_ARB_vertex_type_2_10_10_10_rev,GL_EXT_direct_state_access,GL_EXT_framebuffer_blit,GL_EXT_framebuffer_multisample,GL_EXT_framebuffer_multisample_blit_scaled,GL_EXT_framebuffer_object,GL_EXT_framebuffer_sRGB,GL_EXT_geometry_shader4,GL_EXT_gpu_shader4,GL_EXT_shader_image_load_store,GL_EXT_texture_array,GL_EXT_texture_compression_rgtc,GL_EXT_texture_compression_s3tc,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_integer,GL_EXT_texture_sRGB,GL_EXT_transform_feedback,GL_INTEL_conservative_rasterization,GL_KHR_debug,GL_KHR_texture_compression_astc_ldr,GL_NV_conservative_raster' c --header-only
* *
* Online: * Online:
* http://glad.sh/#api=gl%3Acompatibility%3D4.6&extensions=GL_ARB_compatibility%2CGL_ARB_debug_output%2CGL_ARB_fragment_program%2CGL_ARB_fragment_shader%2CGL_ARB_framebuffer_sRGB%2CGL_ARB_shader_image_load_store%2CGL_ARB_shader_image_size%2CGL_ARB_shader_objects%2CGL_ARB_shader_storage_buffer_object%2CGL_ARB_shading_language_100%2CGL_ARB_texture_compression_bptc%2CGL_ARB_texture_float%2CGL_ARB_texture_rg%2CGL_ARB_texture_rgb10_a2ui%2CGL_ARB_vertex_buffer_object%2CGL_ARB_vertex_program%2CGL_ARB_vertex_shader%2CGL_ARB_vertex_type_2_10_10_10_rev%2CGL_EXT_direct_state_access%2CGL_EXT_framebuffer_blit%2CGL_EXT_framebuffer_multisample%2CGL_EXT_framebuffer_multisample_blit_scaled%2CGL_EXT_framebuffer_object%2CGL_EXT_framebuffer_sRGB%2CGL_EXT_geometry_shader4%2CGL_EXT_gpu_shader4%2CGL_EXT_shader_image_load_store%2CGL_EXT_texture_array%2CGL_EXT_texture_compression_rgtc%2CGL_EXT_texture_compression_s3tc%2CGL_EXT_texture_filter_anisotropic%2CGL_EXT_texture_integer%2CGL_EXT_texture_sRGB%2CGL_EXT_transform_feedback%2CGL_INTEL_conservative_rasterization%2CGL_KHR_texture_compression_astc_ldr%2CGL_NV_conservative_raster&generator=c&options=HEADER_ONLY * http://glad.sh/#api=gl%3Acompatibility%3D4.6&extensions=GL_ARB_compatibility%2CGL_ARB_debug_output%2CGL_ARB_direct_state_access%2CGL_ARB_fragment_program%2CGL_ARB_fragment_shader%2CGL_ARB_framebuffer_sRGB%2CGL_ARB_shader_image_load_store%2CGL_ARB_shader_image_size%2CGL_ARB_shader_objects%2CGL_ARB_shader_storage_buffer_object%2CGL_ARB_shading_language_100%2CGL_ARB_texture_compression_bptc%2CGL_ARB_texture_float%2CGL_ARB_texture_rg%2CGL_ARB_texture_rgb10_a2ui%2CGL_ARB_timer_query%2CGL_ARB_vertex_buffer_object%2CGL_ARB_vertex_program%2CGL_ARB_vertex_shader%2CGL_ARB_vertex_type_2_10_10_10_rev%2CGL_EXT_direct_state_access%2CGL_EXT_framebuffer_blit%2CGL_EXT_framebuffer_multisample%2CGL_EXT_framebuffer_multisample_blit_scaled%2CGL_EXT_framebuffer_object%2CGL_EXT_framebuffer_sRGB%2CGL_EXT_geometry_shader4%2CGL_EXT_gpu_shader4%2CGL_EXT_shader_image_load_store%2CGL_EXT_texture_array%2CGL_EXT_texture_compression_rgtc%2CGL_EXT_texture_compression_s3tc%2CGL_EXT_texture_filter_anisotropic%2CGL_EXT_texture_integer%2CGL_EXT_texture_sRGB%2CGL_EXT_transform_feedback%2CGL_INTEL_conservative_rasterization%2CGL_KHR_debug%2CGL_KHR_texture_compression_astc_ldr%2CGL_NV_conservative_raster&generator=c&options=HEADER_ONLY
* *
*/ */
@@ -2916,6 +2916,8 @@ GLAD_API_CALL int GLAD_GL_VERSION_4_6;
GLAD_API_CALL int GLAD_GL_ARB_compatibility; GLAD_API_CALL int GLAD_GL_ARB_compatibility;
#define GL_ARB_debug_output 1 #define GL_ARB_debug_output 1
GLAD_API_CALL int GLAD_GL_ARB_debug_output; GLAD_API_CALL int GLAD_GL_ARB_debug_output;
#define GL_ARB_direct_state_access 1
GLAD_API_CALL int GLAD_GL_ARB_direct_state_access;
#define GL_ARB_fragment_program 1 #define GL_ARB_fragment_program 1
GLAD_API_CALL int GLAD_GL_ARB_fragment_program; GLAD_API_CALL int GLAD_GL_ARB_fragment_program;
#define GL_ARB_fragment_shader 1 #define GL_ARB_fragment_shader 1
@@ -2940,6 +2942,8 @@ GLAD_API_CALL int GLAD_GL_ARB_texture_float;
GLAD_API_CALL int GLAD_GL_ARB_texture_rg; GLAD_API_CALL int GLAD_GL_ARB_texture_rg;
#define GL_ARB_texture_rgb10_a2ui 1 #define GL_ARB_texture_rgb10_a2ui 1
GLAD_API_CALL int GLAD_GL_ARB_texture_rgb10_a2ui; GLAD_API_CALL int GLAD_GL_ARB_texture_rgb10_a2ui;
#define GL_ARB_timer_query 1
GLAD_API_CALL int GLAD_GL_ARB_timer_query;
#define GL_ARB_vertex_buffer_object 1 #define GL_ARB_vertex_buffer_object 1
GLAD_API_CALL int GLAD_GL_ARB_vertex_buffer_object; GLAD_API_CALL int GLAD_GL_ARB_vertex_buffer_object;
#define GL_ARB_vertex_program 1 #define GL_ARB_vertex_program 1
@@ -2982,6 +2986,8 @@ GLAD_API_CALL int GLAD_GL_EXT_texture_sRGB;
GLAD_API_CALL int GLAD_GL_EXT_transform_feedback; GLAD_API_CALL int GLAD_GL_EXT_transform_feedback;
#define GL_INTEL_conservative_rasterization 1 #define GL_INTEL_conservative_rasterization 1
GLAD_API_CALL int GLAD_GL_INTEL_conservative_rasterization; GLAD_API_CALL int GLAD_GL_INTEL_conservative_rasterization;
#define GL_KHR_debug 1
GLAD_API_CALL int GLAD_GL_KHR_debug;
#define GL_KHR_texture_compression_astc_ldr 1 #define GL_KHR_texture_compression_astc_ldr 1
GLAD_API_CALL int GLAD_GL_KHR_texture_compression_astc_ldr; GLAD_API_CALL int GLAD_GL_KHR_texture_compression_astc_ldr;
#define GL_NV_conservative_raster 1 #define GL_NV_conservative_raster 1
@@ -7530,6 +7536,7 @@ int GLAD_GL_VERSION_4_5 = 0;
int GLAD_GL_VERSION_4_6 = 0; int GLAD_GL_VERSION_4_6 = 0;
int GLAD_GL_ARB_compatibility = 0; int GLAD_GL_ARB_compatibility = 0;
int GLAD_GL_ARB_debug_output = 0; int GLAD_GL_ARB_debug_output = 0;
int GLAD_GL_ARB_direct_state_access = 0;
int GLAD_GL_ARB_fragment_program = 0; int GLAD_GL_ARB_fragment_program = 0;
int GLAD_GL_ARB_fragment_shader = 0; int GLAD_GL_ARB_fragment_shader = 0;
int GLAD_GL_ARB_framebuffer_sRGB = 0; int GLAD_GL_ARB_framebuffer_sRGB = 0;
@@ -7542,6 +7549,7 @@ int GLAD_GL_ARB_texture_compression_bptc = 0;
int GLAD_GL_ARB_texture_float = 0; int GLAD_GL_ARB_texture_float = 0;
int GLAD_GL_ARB_texture_rg = 0; int GLAD_GL_ARB_texture_rg = 0;
int GLAD_GL_ARB_texture_rgb10_a2ui = 0; int GLAD_GL_ARB_texture_rgb10_a2ui = 0;
int GLAD_GL_ARB_timer_query = 0;
int GLAD_GL_ARB_vertex_buffer_object = 0; int GLAD_GL_ARB_vertex_buffer_object = 0;
int GLAD_GL_ARB_vertex_program = 0; int GLAD_GL_ARB_vertex_program = 0;
int GLAD_GL_ARB_vertex_shader = 0; int GLAD_GL_ARB_vertex_shader = 0;
@@ -7563,6 +7571,7 @@ int GLAD_GL_EXT_texture_integer = 0;
int GLAD_GL_EXT_texture_sRGB = 0; int GLAD_GL_EXT_texture_sRGB = 0;
int GLAD_GL_EXT_transform_feedback = 0; int GLAD_GL_EXT_transform_feedback = 0;
int GLAD_GL_INTEL_conservative_rasterization = 0; int GLAD_GL_INTEL_conservative_rasterization = 0;
int GLAD_GL_KHR_debug = 0;
int GLAD_GL_KHR_texture_compression_astc_ldr = 0; int GLAD_GL_KHR_texture_compression_astc_ldr = 0;
int GLAD_GL_NV_conservative_raster = 0; int GLAD_GL_NV_conservative_raster = 0;
@@ -10179,6 +10188,106 @@ static void glad_gl_load_GL_ARB_debug_output( GLADuserptrloadfunc load, void* us
glad_glDebugMessageInsertARB = (PFNGLDEBUGMESSAGEINSERTARBPROC) load(userptr, "glDebugMessageInsertARB"); glad_glDebugMessageInsertARB = (PFNGLDEBUGMESSAGEINSERTARBPROC) load(userptr, "glDebugMessageInsertARB");
glad_glGetDebugMessageLogARB = (PFNGLGETDEBUGMESSAGELOGARBPROC) load(userptr, "glGetDebugMessageLogARB"); glad_glGetDebugMessageLogARB = (PFNGLGETDEBUGMESSAGELOGARBPROC) load(userptr, "glGetDebugMessageLogARB");
} }
static void glad_gl_load_GL_ARB_direct_state_access( GLADuserptrloadfunc load, void* userptr) {
if(!GLAD_GL_ARB_direct_state_access) return;
glad_glBindTextureUnit = (PFNGLBINDTEXTUREUNITPROC) load(userptr, "glBindTextureUnit");
glad_glBlitNamedFramebuffer = (PFNGLBLITNAMEDFRAMEBUFFERPROC) load(userptr, "glBlitNamedFramebuffer");
glad_glCheckNamedFramebufferStatus = (PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC) load(userptr, "glCheckNamedFramebufferStatus");
glad_glClearNamedBufferData = (PFNGLCLEARNAMEDBUFFERDATAPROC) load(userptr, "glClearNamedBufferData");
glad_glClearNamedBufferSubData = (PFNGLCLEARNAMEDBUFFERSUBDATAPROC) load(userptr, "glClearNamedBufferSubData");
glad_glClearNamedFramebufferfi = (PFNGLCLEARNAMEDFRAMEBUFFERFIPROC) load(userptr, "glClearNamedFramebufferfi");
glad_glClearNamedFramebufferfv = (PFNGLCLEARNAMEDFRAMEBUFFERFVPROC) load(userptr, "glClearNamedFramebufferfv");
glad_glClearNamedFramebufferiv = (PFNGLCLEARNAMEDFRAMEBUFFERIVPROC) load(userptr, "glClearNamedFramebufferiv");
glad_glClearNamedFramebufferuiv = (PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC) load(userptr, "glClearNamedFramebufferuiv");
glad_glCompressedTextureSubImage1D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC) load(userptr, "glCompressedTextureSubImage1D");
glad_glCompressedTextureSubImage2D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC) load(userptr, "glCompressedTextureSubImage2D");
glad_glCompressedTextureSubImage3D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC) load(userptr, "glCompressedTextureSubImage3D");
glad_glCopyNamedBufferSubData = (PFNGLCOPYNAMEDBUFFERSUBDATAPROC) load(userptr, "glCopyNamedBufferSubData");
glad_glCopyTextureSubImage1D = (PFNGLCOPYTEXTURESUBIMAGE1DPROC) load(userptr, "glCopyTextureSubImage1D");
glad_glCopyTextureSubImage2D = (PFNGLCOPYTEXTURESUBIMAGE2DPROC) load(userptr, "glCopyTextureSubImage2D");
glad_glCopyTextureSubImage3D = (PFNGLCOPYTEXTURESUBIMAGE3DPROC) load(userptr, "glCopyTextureSubImage3D");
glad_glCreateBuffers = (PFNGLCREATEBUFFERSPROC) load(userptr, "glCreateBuffers");
glad_glCreateFramebuffers = (PFNGLCREATEFRAMEBUFFERSPROC) load(userptr, "glCreateFramebuffers");
glad_glCreateProgramPipelines = (PFNGLCREATEPROGRAMPIPELINESPROC) load(userptr, "glCreateProgramPipelines");
glad_glCreateQueries = (PFNGLCREATEQUERIESPROC) load(userptr, "glCreateQueries");
glad_glCreateRenderbuffers = (PFNGLCREATERENDERBUFFERSPROC) load(userptr, "glCreateRenderbuffers");
glad_glCreateSamplers = (PFNGLCREATESAMPLERSPROC) load(userptr, "glCreateSamplers");
glad_glCreateTextures = (PFNGLCREATETEXTURESPROC) load(userptr, "glCreateTextures");
glad_glCreateTransformFeedbacks = (PFNGLCREATETRANSFORMFEEDBACKSPROC) load(userptr, "glCreateTransformFeedbacks");
glad_glCreateVertexArrays = (PFNGLCREATEVERTEXARRAYSPROC) load(userptr, "glCreateVertexArrays");
glad_glDisableVertexArrayAttrib = (PFNGLDISABLEVERTEXARRAYATTRIBPROC) load(userptr, "glDisableVertexArrayAttrib");
glad_glEnableVertexArrayAttrib = (PFNGLENABLEVERTEXARRAYATTRIBPROC) load(userptr, "glEnableVertexArrayAttrib");
glad_glFlushMappedNamedBufferRange = (PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC) load(userptr, "glFlushMappedNamedBufferRange");
glad_glGenerateTextureMipmap = (PFNGLGENERATETEXTUREMIPMAPPROC) load(userptr, "glGenerateTextureMipmap");
glad_glGetCompressedTextureImage = (PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC) load(userptr, "glGetCompressedTextureImage");
glad_glGetNamedBufferParameteri64v = (PFNGLGETNAMEDBUFFERPARAMETERI64VPROC) load(userptr, "glGetNamedBufferParameteri64v");
glad_glGetNamedBufferParameteriv = (PFNGLGETNAMEDBUFFERPARAMETERIVPROC) load(userptr, "glGetNamedBufferParameteriv");
glad_glGetNamedBufferPointerv = (PFNGLGETNAMEDBUFFERPOINTERVPROC) load(userptr, "glGetNamedBufferPointerv");
glad_glGetNamedBufferSubData = (PFNGLGETNAMEDBUFFERSUBDATAPROC) load(userptr, "glGetNamedBufferSubData");
glad_glGetNamedFramebufferAttachmentParameteriv = (PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC) load(userptr, "glGetNamedFramebufferAttachmentParameteriv");
glad_glGetNamedFramebufferParameteriv = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC) load(userptr, "glGetNamedFramebufferParameteriv");
glad_glGetNamedRenderbufferParameteriv = (PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC) load(userptr, "glGetNamedRenderbufferParameteriv");
glad_glGetQueryBufferObjecti64v = (PFNGLGETQUERYBUFFEROBJECTI64VPROC) load(userptr, "glGetQueryBufferObjecti64v");
glad_glGetQueryBufferObjectiv = (PFNGLGETQUERYBUFFEROBJECTIVPROC) load(userptr, "glGetQueryBufferObjectiv");
glad_glGetQueryBufferObjectui64v = (PFNGLGETQUERYBUFFEROBJECTUI64VPROC) load(userptr, "glGetQueryBufferObjectui64v");
glad_glGetQueryBufferObjectuiv = (PFNGLGETQUERYBUFFEROBJECTUIVPROC) load(userptr, "glGetQueryBufferObjectuiv");
glad_glGetTextureImage = (PFNGLGETTEXTUREIMAGEPROC) load(userptr, "glGetTextureImage");
glad_glGetTextureLevelParameterfv = (PFNGLGETTEXTURELEVELPARAMETERFVPROC) load(userptr, "glGetTextureLevelParameterfv");
glad_glGetTextureLevelParameteriv = (PFNGLGETTEXTURELEVELPARAMETERIVPROC) load(userptr, "glGetTextureLevelParameteriv");
glad_glGetTextureParameterIiv = (PFNGLGETTEXTUREPARAMETERIIVPROC) load(userptr, "glGetTextureParameterIiv");
glad_glGetTextureParameterIuiv = (PFNGLGETTEXTUREPARAMETERIUIVPROC) load(userptr, "glGetTextureParameterIuiv");
glad_glGetTextureParameterfv = (PFNGLGETTEXTUREPARAMETERFVPROC) load(userptr, "glGetTextureParameterfv");
glad_glGetTextureParameteriv = (PFNGLGETTEXTUREPARAMETERIVPROC) load(userptr, "glGetTextureParameteriv");
glad_glGetTransformFeedbacki64_v = (PFNGLGETTRANSFORMFEEDBACKI64_VPROC) load(userptr, "glGetTransformFeedbacki64_v");
glad_glGetTransformFeedbacki_v = (PFNGLGETTRANSFORMFEEDBACKI_VPROC) load(userptr, "glGetTransformFeedbacki_v");
glad_glGetTransformFeedbackiv = (PFNGLGETTRANSFORMFEEDBACKIVPROC) load(userptr, "glGetTransformFeedbackiv");
glad_glGetVertexArrayIndexed64iv = (PFNGLGETVERTEXARRAYINDEXED64IVPROC) load(userptr, "glGetVertexArrayIndexed64iv");
glad_glGetVertexArrayIndexediv = (PFNGLGETVERTEXARRAYINDEXEDIVPROC) load(userptr, "glGetVertexArrayIndexediv");
glad_glGetVertexArrayiv = (PFNGLGETVERTEXARRAYIVPROC) load(userptr, "glGetVertexArrayiv");
glad_glInvalidateNamedFramebufferData = (PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC) load(userptr, "glInvalidateNamedFramebufferData");
glad_glInvalidateNamedFramebufferSubData = (PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC) load(userptr, "glInvalidateNamedFramebufferSubData");
glad_glMapNamedBuffer = (PFNGLMAPNAMEDBUFFERPROC) load(userptr, "glMapNamedBuffer");
glad_glMapNamedBufferRange = (PFNGLMAPNAMEDBUFFERRANGEPROC) load(userptr, "glMapNamedBufferRange");
glad_glNamedBufferData = (PFNGLNAMEDBUFFERDATAPROC) load(userptr, "glNamedBufferData");
glad_glNamedBufferStorage = (PFNGLNAMEDBUFFERSTORAGEPROC) load(userptr, "glNamedBufferStorage");
glad_glNamedBufferSubData = (PFNGLNAMEDBUFFERSUBDATAPROC) load(userptr, "glNamedBufferSubData");
glad_glNamedFramebufferDrawBuffer = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC) load(userptr, "glNamedFramebufferDrawBuffer");
glad_glNamedFramebufferDrawBuffers = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC) load(userptr, "glNamedFramebufferDrawBuffers");
glad_glNamedFramebufferParameteri = (PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC) load(userptr, "glNamedFramebufferParameteri");
glad_glNamedFramebufferReadBuffer = (PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC) load(userptr, "glNamedFramebufferReadBuffer");
glad_glNamedFramebufferRenderbuffer = (PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC) load(userptr, "glNamedFramebufferRenderbuffer");
glad_glNamedFramebufferTexture = (PFNGLNAMEDFRAMEBUFFERTEXTUREPROC) load(userptr, "glNamedFramebufferTexture");
glad_glNamedFramebufferTextureLayer = (PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC) load(userptr, "glNamedFramebufferTextureLayer");
glad_glNamedRenderbufferStorage = (PFNGLNAMEDRENDERBUFFERSTORAGEPROC) load(userptr, "glNamedRenderbufferStorage");
glad_glNamedRenderbufferStorageMultisample = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC) load(userptr, "glNamedRenderbufferStorageMultisample");
glad_glTextureBuffer = (PFNGLTEXTUREBUFFERPROC) load(userptr, "glTextureBuffer");
glad_glTextureBufferRange = (PFNGLTEXTUREBUFFERRANGEPROC) load(userptr, "glTextureBufferRange");
glad_glTextureParameterIiv = (PFNGLTEXTUREPARAMETERIIVPROC) load(userptr, "glTextureParameterIiv");
glad_glTextureParameterIuiv = (PFNGLTEXTUREPARAMETERIUIVPROC) load(userptr, "glTextureParameterIuiv");
glad_glTextureParameterf = (PFNGLTEXTUREPARAMETERFPROC) load(userptr, "glTextureParameterf");
glad_glTextureParameterfv = (PFNGLTEXTUREPARAMETERFVPROC) load(userptr, "glTextureParameterfv");
glad_glTextureParameteri = (PFNGLTEXTUREPARAMETERIPROC) load(userptr, "glTextureParameteri");
glad_glTextureParameteriv = (PFNGLTEXTUREPARAMETERIVPROC) load(userptr, "glTextureParameteriv");
glad_glTextureStorage1D = (PFNGLTEXTURESTORAGE1DPROC) load(userptr, "glTextureStorage1D");
glad_glTextureStorage2D = (PFNGLTEXTURESTORAGE2DPROC) load(userptr, "glTextureStorage2D");
glad_glTextureStorage2DMultisample = (PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC) load(userptr, "glTextureStorage2DMultisample");
glad_glTextureStorage3D = (PFNGLTEXTURESTORAGE3DPROC) load(userptr, "glTextureStorage3D");
glad_glTextureStorage3DMultisample = (PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC) load(userptr, "glTextureStorage3DMultisample");
glad_glTextureSubImage1D = (PFNGLTEXTURESUBIMAGE1DPROC) load(userptr, "glTextureSubImage1D");
glad_glTextureSubImage2D = (PFNGLTEXTURESUBIMAGE2DPROC) load(userptr, "glTextureSubImage2D");
glad_glTextureSubImage3D = (PFNGLTEXTURESUBIMAGE3DPROC) load(userptr, "glTextureSubImage3D");
glad_glTransformFeedbackBufferBase = (PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC) load(userptr, "glTransformFeedbackBufferBase");
glad_glTransformFeedbackBufferRange = (PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC) load(userptr, "glTransformFeedbackBufferRange");
glad_glUnmapNamedBuffer = (PFNGLUNMAPNAMEDBUFFERPROC) load(userptr, "glUnmapNamedBuffer");
glad_glVertexArrayAttribBinding = (PFNGLVERTEXARRAYATTRIBBINDINGPROC) load(userptr, "glVertexArrayAttribBinding");
glad_glVertexArrayAttribFormat = (PFNGLVERTEXARRAYATTRIBFORMATPROC) load(userptr, "glVertexArrayAttribFormat");
glad_glVertexArrayAttribIFormat = (PFNGLVERTEXARRAYATTRIBIFORMATPROC) load(userptr, "glVertexArrayAttribIFormat");
glad_glVertexArrayAttribLFormat = (PFNGLVERTEXARRAYATTRIBLFORMATPROC) load(userptr, "glVertexArrayAttribLFormat");
glad_glVertexArrayBindingDivisor = (PFNGLVERTEXARRAYBINDINGDIVISORPROC) load(userptr, "glVertexArrayBindingDivisor");
glad_glVertexArrayElementBuffer = (PFNGLVERTEXARRAYELEMENTBUFFERPROC) load(userptr, "glVertexArrayElementBuffer");
glad_glVertexArrayVertexBuffer = (PFNGLVERTEXARRAYVERTEXBUFFERPROC) load(userptr, "glVertexArrayVertexBuffer");
glad_glVertexArrayVertexBuffers = (PFNGLVERTEXARRAYVERTEXBUFFERSPROC) load(userptr, "glVertexArrayVertexBuffers");
}
static void glad_gl_load_GL_ARB_fragment_program( GLADuserptrloadfunc load, void* userptr) { static void glad_gl_load_GL_ARB_fragment_program( GLADuserptrloadfunc load, void* userptr) {
if(!GLAD_GL_ARB_fragment_program) return; if(!GLAD_GL_ARB_fragment_program) return;
glad_glBindProgramARB = (PFNGLBINDPROGRAMARBPROC) load(userptr, "glBindProgramARB"); glad_glBindProgramARB = (PFNGLBINDPROGRAMARBPROC) load(userptr, "glBindProgramARB");
@@ -10252,6 +10361,12 @@ static void glad_gl_load_GL_ARB_shader_storage_buffer_object( GLADuserptrloadfun
if(!GLAD_GL_ARB_shader_storage_buffer_object) return; if(!GLAD_GL_ARB_shader_storage_buffer_object) return;
glad_glShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC) load(userptr, "glShaderStorageBlockBinding"); glad_glShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC) load(userptr, "glShaderStorageBlockBinding");
} }
static void glad_gl_load_GL_ARB_timer_query( GLADuserptrloadfunc load, void* userptr) {
if(!GLAD_GL_ARB_timer_query) return;
glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC) load(userptr, "glGetQueryObjecti64v");
glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC) load(userptr, "glGetQueryObjectui64v");
glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC) load(userptr, "glQueryCounter");
}
static void glad_gl_load_GL_ARB_vertex_buffer_object( GLADuserptrloadfunc load, void* userptr) { static void glad_gl_load_GL_ARB_vertex_buffer_object( GLADuserptrloadfunc load, void* userptr) {
if(!GLAD_GL_ARB_vertex_buffer_object) return; if(!GLAD_GL_ARB_vertex_buffer_object) return;
glad_glBindBufferARB = (PFNGLBINDBUFFERARBPROC) load(userptr, "glBindBufferARB"); glad_glBindBufferARB = (PFNGLBINDBUFFERARBPROC) load(userptr, "glBindBufferARB");
@@ -10776,6 +10891,20 @@ static void glad_gl_load_GL_EXT_transform_feedback( GLADuserptrloadfunc load, vo
glad_glGetTransformFeedbackVaryingEXT = (PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) load(userptr, "glGetTransformFeedbackVaryingEXT"); glad_glGetTransformFeedbackVaryingEXT = (PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) load(userptr, "glGetTransformFeedbackVaryingEXT");
glad_glTransformFeedbackVaryingsEXT = (PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) load(userptr, "glTransformFeedbackVaryingsEXT"); glad_glTransformFeedbackVaryingsEXT = (PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) load(userptr, "glTransformFeedbackVaryingsEXT");
} }
static void glad_gl_load_GL_KHR_debug( GLADuserptrloadfunc load, void* userptr) {
if(!GLAD_GL_KHR_debug) return;
glad_glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC) load(userptr, "glDebugMessageCallback");
glad_glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC) load(userptr, "glDebugMessageControl");
glad_glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC) load(userptr, "glDebugMessageInsert");
glad_glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC) load(userptr, "glGetDebugMessageLog");
glad_glGetObjectLabel = (PFNGLGETOBJECTLABELPROC) load(userptr, "glGetObjectLabel");
glad_glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC) load(userptr, "glGetObjectPtrLabel");
glad_glGetPointerv = (PFNGLGETPOINTERVPROC) load(userptr, "glGetPointerv");
glad_glObjectLabel = (PFNGLOBJECTLABELPROC) load(userptr, "glObjectLabel");
glad_glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC) load(userptr, "glObjectPtrLabel");
glad_glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC) load(userptr, "glPopDebugGroup");
glad_glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC) load(userptr, "glPushDebugGroup");
}
static void glad_gl_load_GL_NV_conservative_raster( GLADuserptrloadfunc load, void* userptr) { static void glad_gl_load_GL_NV_conservative_raster( GLADuserptrloadfunc load, void* userptr) {
if(!GLAD_GL_NV_conservative_raster) return; if(!GLAD_GL_NV_conservative_raster) return;
glad_glSubpixelPrecisionBiasNV = (PFNGLSUBPIXELPRECISIONBIASNVPROC) load(userptr, "glSubpixelPrecisionBiasNV"); glad_glSubpixelPrecisionBiasNV = (PFNGLSUBPIXELPRECISIONBIASNVPROC) load(userptr, "glSubpixelPrecisionBiasNV");
@@ -10877,6 +11006,7 @@ static int glad_gl_find_extensions_gl(void) {
GLAD_GL_ARB_compatibility = glad_gl_has_extension(exts, exts_i, "GL_ARB_compatibility"); GLAD_GL_ARB_compatibility = glad_gl_has_extension(exts, exts_i, "GL_ARB_compatibility");
GLAD_GL_ARB_debug_output = glad_gl_has_extension(exts, exts_i, "GL_ARB_debug_output"); GLAD_GL_ARB_debug_output = glad_gl_has_extension(exts, exts_i, "GL_ARB_debug_output");
GLAD_GL_ARB_direct_state_access = glad_gl_has_extension(exts, exts_i, "GL_ARB_direct_state_access");
GLAD_GL_ARB_fragment_program = glad_gl_has_extension(exts, exts_i, "GL_ARB_fragment_program"); GLAD_GL_ARB_fragment_program = glad_gl_has_extension(exts, exts_i, "GL_ARB_fragment_program");
GLAD_GL_ARB_fragment_shader = glad_gl_has_extension(exts, exts_i, "GL_ARB_fragment_shader"); GLAD_GL_ARB_fragment_shader = glad_gl_has_extension(exts, exts_i, "GL_ARB_fragment_shader");
GLAD_GL_ARB_framebuffer_sRGB = glad_gl_has_extension(exts, exts_i, "GL_ARB_framebuffer_sRGB"); GLAD_GL_ARB_framebuffer_sRGB = glad_gl_has_extension(exts, exts_i, "GL_ARB_framebuffer_sRGB");
@@ -10889,6 +11019,7 @@ static int glad_gl_find_extensions_gl(void) {
GLAD_GL_ARB_texture_float = glad_gl_has_extension(exts, exts_i, "GL_ARB_texture_float"); GLAD_GL_ARB_texture_float = glad_gl_has_extension(exts, exts_i, "GL_ARB_texture_float");
GLAD_GL_ARB_texture_rg = glad_gl_has_extension(exts, exts_i, "GL_ARB_texture_rg"); GLAD_GL_ARB_texture_rg = glad_gl_has_extension(exts, exts_i, "GL_ARB_texture_rg");
GLAD_GL_ARB_texture_rgb10_a2ui = glad_gl_has_extension(exts, exts_i, "GL_ARB_texture_rgb10_a2ui"); GLAD_GL_ARB_texture_rgb10_a2ui = glad_gl_has_extension(exts, exts_i, "GL_ARB_texture_rgb10_a2ui");
GLAD_GL_ARB_timer_query = glad_gl_has_extension(exts, exts_i, "GL_ARB_timer_query");
GLAD_GL_ARB_vertex_buffer_object = glad_gl_has_extension(exts, exts_i, "GL_ARB_vertex_buffer_object"); GLAD_GL_ARB_vertex_buffer_object = glad_gl_has_extension(exts, exts_i, "GL_ARB_vertex_buffer_object");
GLAD_GL_ARB_vertex_program = glad_gl_has_extension(exts, exts_i, "GL_ARB_vertex_program"); GLAD_GL_ARB_vertex_program = glad_gl_has_extension(exts, exts_i, "GL_ARB_vertex_program");
GLAD_GL_ARB_vertex_shader = glad_gl_has_extension(exts, exts_i, "GL_ARB_vertex_shader"); GLAD_GL_ARB_vertex_shader = glad_gl_has_extension(exts, exts_i, "GL_ARB_vertex_shader");
@@ -10910,6 +11041,7 @@ static int glad_gl_find_extensions_gl(void) {
GLAD_GL_EXT_texture_sRGB = glad_gl_has_extension(exts, exts_i, "GL_EXT_texture_sRGB"); GLAD_GL_EXT_texture_sRGB = glad_gl_has_extension(exts, exts_i, "GL_EXT_texture_sRGB");
GLAD_GL_EXT_transform_feedback = glad_gl_has_extension(exts, exts_i, "GL_EXT_transform_feedback"); GLAD_GL_EXT_transform_feedback = glad_gl_has_extension(exts, exts_i, "GL_EXT_transform_feedback");
GLAD_GL_INTEL_conservative_rasterization = glad_gl_has_extension(exts, exts_i, "GL_INTEL_conservative_rasterization"); GLAD_GL_INTEL_conservative_rasterization = glad_gl_has_extension(exts, exts_i, "GL_INTEL_conservative_rasterization");
GLAD_GL_KHR_debug = glad_gl_has_extension(exts, exts_i, "GL_KHR_debug");
GLAD_GL_KHR_texture_compression_astc_ldr = glad_gl_has_extension(exts, exts_i, "GL_KHR_texture_compression_astc_ldr"); GLAD_GL_KHR_texture_compression_astc_ldr = glad_gl_has_extension(exts, exts_i, "GL_KHR_texture_compression_astc_ldr");
GLAD_GL_NV_conservative_raster = glad_gl_has_extension(exts, exts_i, "GL_NV_conservative_raster"); GLAD_GL_NV_conservative_raster = glad_gl_has_extension(exts, exts_i, "GL_NV_conservative_raster");
@@ -10994,10 +11126,12 @@ int gladLoadGLUserPtr( GLADuserptrloadfunc load, void *userptr) {
if (!glad_gl_find_extensions_gl()) return 0; if (!glad_gl_find_extensions_gl()) return 0;
glad_gl_load_GL_ARB_debug_output(load, userptr); glad_gl_load_GL_ARB_debug_output(load, userptr);
glad_gl_load_GL_ARB_direct_state_access(load, userptr);
glad_gl_load_GL_ARB_fragment_program(load, userptr); glad_gl_load_GL_ARB_fragment_program(load, userptr);
glad_gl_load_GL_ARB_shader_image_load_store(load, userptr); glad_gl_load_GL_ARB_shader_image_load_store(load, userptr);
glad_gl_load_GL_ARB_shader_objects(load, userptr); glad_gl_load_GL_ARB_shader_objects(load, userptr);
glad_gl_load_GL_ARB_shader_storage_buffer_object(load, userptr); glad_gl_load_GL_ARB_shader_storage_buffer_object(load, userptr);
glad_gl_load_GL_ARB_timer_query(load, userptr);
glad_gl_load_GL_ARB_vertex_buffer_object(load, userptr); glad_gl_load_GL_ARB_vertex_buffer_object(load, userptr);
glad_gl_load_GL_ARB_vertex_program(load, userptr); glad_gl_load_GL_ARB_vertex_program(load, userptr);
glad_gl_load_GL_ARB_vertex_shader(load, userptr); glad_gl_load_GL_ARB_vertex_shader(load, userptr);
@@ -11012,6 +11146,7 @@ int gladLoadGLUserPtr( GLADuserptrloadfunc load, void *userptr) {
glad_gl_load_GL_EXT_texture_array(load, userptr); glad_gl_load_GL_EXT_texture_array(load, userptr);
glad_gl_load_GL_EXT_texture_integer(load, userptr); glad_gl_load_GL_EXT_texture_integer(load, userptr);
glad_gl_load_GL_EXT_transform_feedback(load, userptr); glad_gl_load_GL_EXT_transform_feedback(load, userptr);
glad_gl_load_GL_KHR_debug(load, userptr);
glad_gl_load_GL_NV_conservative_raster(load, userptr); glad_gl_load_GL_NV_conservative_raster(load, userptr);

View File

@@ -25,6 +25,9 @@ static int mdlloader(void *ud, struct ResManRes *res) {
} header; } header;
fread(&header, 4, 4, f); fread(&header, 4, 4, f);
// ' ' or '1'
char version = ((char*) &header.magic)[3];
int colorsEnabled = header.flags & 1; int colorsEnabled = header.flags & 1;
mat4 *invBind = _mm_malloc(sizeof(*invBind) * header.boneCount, 16); mat4 *invBind = _mm_malloc(sizeof(*invBind) * header.boneCount, 16);
@@ -33,6 +36,17 @@ static int mdlloader(void *ud, struct ResManRes *res) {
uint8_t *boneParents = malloc(header.boneCount); uint8_t *boneParents = malloc(header.boneCount);
fread(boneParents, 1, header.boneCount, f); fread(boneParents, 1, header.boneCount, f);
char boneNames[1500] = {};
size_t boneNamesLen = 0;
for(size_t b = 0; b < header.boneCount; b++) {
while(1) {
fread(boneNames + boneNamesLen, 1, 1, f);
if(boneNames[boneNamesLen++] == 0) {
break;
}
}
}
vec3 *pos = malloc(sizeof(*pos) * header.vertCount); vec3 *pos = malloc(sizeof(*pos) * header.vertCount);
fread(pos, sizeof(vec3), header.vertCount, f); fread(pos, sizeof(vec3), header.vertCount, f);
@@ -59,6 +73,8 @@ static int mdlloader(void *ud, struct ResManRes *res) {
struct k3Mdl *mdl = k3MdlCreate(header.vertCount, header.indCount, header.boneCount, pos, nrm, uvs, cols, boneIDs, boneWeights, inds, invBind, boneParents); struct k3Mdl *mdl = k3MdlCreate(header.vertCount, header.indCount, header.boneCount, pos, nrm, uvs, cols, boneIDs, boneWeights, inds, invBind, boneParents);
k3MdlSetBoneNames(mdl, boneNames);
k3MdlSetDebugName(mdl, res->name); k3MdlSetDebugName(mdl, res->name);
free(pos); free(pos);
@@ -70,8 +86,11 @@ static int mdlloader(void *ud, struct ResManRes *res) {
fread(&meshes, sizeof(uint16_t), 1, f); fread(&meshes, sizeof(uint16_t), 1, f);
for(uint32_t i = 0; i < meshes; i++) { for(uint32_t i = 0; i < meshes; i++) {
uint16_t startnum[2]; uint32_t start = 0;
fread(startnum, sizeof(uint16_t), 2, f); uint32_t number = 0;
fread(&start, version == ' ' ? sizeof(uint16_t) : sizeof(uint32_t), 1, f);
fread(&number, version == ' ' ? sizeof(uint16_t) : sizeof(uint32_t), 1, f);
char buf[256] = {}; char buf[256] = {};
for(int c = 0; c < sizeof(buf) - 1; c++) { for(int c = 0; c < sizeof(buf) - 1; c++) {
@@ -81,28 +100,25 @@ static int mdlloader(void *ud, struct ResManRes *res) {
} }
} }
k3MdlAddMesh(mdl, resman_ref(RESMAN_MATERIAL, buf), startnum[0], startnum[1]); k3MdlAddMesh(mdl, resman_ref(RESMAN_MATERIAL, buf), start, number);
} }
for(size_t i = 0; i < header.animCount; i++) { for(size_t i = 0; i < header.animCount; i++) {
struct { struct {
uint16_t id; uint16_t id;
uint16_t frames; uint16_t frameCount;
uint16_t fps; uint16_t fps;
uint16_t zero; uint16_t zero;
} info; } info;
fread(&info, sizeof(info), 1, f); fread(&info, sizeof(info), 1, f);
struct k3Animation *anim = malloc(sizeof(*anim)); struct k3AnimationFountain *anim = _mm_malloc(sizeof(*anim) + sizeof(*anim->frames) * info.frameCount * header.boneCount, 16);
anim->frames = _mm_malloc(sizeof(*anim->frames) * info.frames * header.boneCount, 16);
anim->boneParents = boneParents;
anim->invBind = invBind;
anim->id = info.id; anim->id = info.id;
anim->fps = info.fps; anim->fps = info.fps;
anim->frameCount = info.frames; anim->frameCount = info.frameCount;
anim->boneCount = header.boneCount; anim->bones = header.boneCount;
fread(anim->frames, sizeof(*anim->frames), info.frames * header.boneCount, f); fread(anim->frames, sizeof(*anim->frames), info.frameCount * header.boneCount, f);
k3MdlAddAnim(mdl, anim); k3MdlAddAnim(mdl, anim);
} }
@@ -168,7 +184,7 @@ static int streamloader(void *ud, struct ResManRes *res) {
snprintf(namebuf, sizeof(namebuf), "assets/aud/%s", res->name); snprintf(namebuf, sizeof(namebuf), "assets/aud/%s", res->name);
res->thing = k3MixSourceFile(namebuf); res->thing = k3MixSourceFile(namebuf);
return 1; return !!res->thing;
} }
static int refresh_texture(struct ResManRes *res) { static int refresh_texture(struct ResManRes *res) {
@@ -317,19 +333,11 @@ static int texloader(void *ud, struct ResManRes *res) {
} }
static int fontloader(void *ud, struct ResManRes *res) { static int fontloader(void *ud, struct ResManRes *res) {
FILE *fntf = fopen(res->name, "rb"); char namebuf[256];
fseek(fntf, 0, SEEK_END); snprintf(namebuf, sizeof(namebuf), "assets/%s", res->name);
size_t fntfsz = ftell(fntf);
fseek(fntf, 0, SEEK_SET);
char *fntbuf = malloc(fntfsz);
fread(fntbuf, 1, fntfsz, fntf);
struct k3Font *fnt = k3FontCreate(); struct k3Font *fnt = k3FontCreate();
struct k3Tex *fnttexldr(struct k3Font *fnt, const char *name) { k3FontLoad(fnt, namebuf);
return resman_ref(RESMAN_TEXTURE, name);
}
k3FontLoad(fnt, fntbuf, fntfsz, fnttexldr);
res->thing = fnt; res->thing = fnt;
return 1; return 1;

File diff suppressed because it is too large Load Diff

View File

@@ -14,6 +14,8 @@ extern int LuaapiFirstPerson;
extern double LuaapiStartTime; extern double LuaapiStartTime;
extern float LuaapiFov; extern float LuaapiFov;
extern float LuaapiNear;
extern float LuaapiFar;
extern struct k3Tex *LuaapiSkybox; extern struct k3Tex *LuaapiSkybox;
extern vec4 LuaapiSkyboxRotation; extern vec4 LuaapiSkyboxRotation;

View File

@@ -41,6 +41,8 @@
#include<ctype.h> #include<ctype.h>
GLFWwindow *GameWnd; GLFWwindow *GameWnd;
uint16_t GameWndW;
uint16_t GameWndH;
static int TextureResolutionReduction = 0; static int TextureResolutionReduction = 0;
@@ -70,9 +72,6 @@ static double xposold, yposold;
static void buttoncallback(GLFWwindow *GameWnd, int button, int action, int mods) { static void buttoncallback(GLFWwindow *GameWnd, int button, int action, int mods) {
if(button == GLFW_MOUSE_BUTTON_LEFT) { if(button == GLFW_MOUSE_BUTTON_LEFT) {
if(UiActive) { if(UiActive) {
int ww, wh;
glfwGetWindowSize(GameWnd, &ww, &wh);
struct k3MEvent ev = { struct k3MEvent ev = {
.original = (void*) UiActive, .original = (void*) UiActive,
.target = (void*) UiActive, .target = (void*) UiActive,
@@ -80,8 +79,8 @@ static void buttoncallback(GLFWwindow *GameWnd, int button, int action, int mods
.code = action == GLFW_PRESS ? k3M_EVENT_MOUSE_PRESS : k3M_EVENT_MOUSE_RELEASE, .code = action == GLFW_PRESS ? k3M_EVENT_MOUSE_PRESS : k3M_EVENT_MOUSE_RELEASE,
.mouse = { .mouse = {
.button = k3M_MOUSE_BUTTON_0, .button = k3M_MOUSE_BUTTON_0,
.x = xposold * UiActive->w / ww, .x = xposold * UiActive->w / GameWndW,
.y = (wh - yposold - 1) * UiActive->h / wh, .y = yposold * UiActive->h / GameWndH,
}, },
}; };
@@ -110,11 +109,8 @@ static void motioncallback(GLFWwindow *GameWnd, double xpos, double ypos) {
first = 0; first = 0;
if(UiActive) { if(UiActive) {
int ww, wh; uint16_t uix = xposold * UiActive->w / GameWndW;
glfwGetWindowSize(GameWnd, &ww, &wh); uint16_t uiy = yposold * UiActive->h / GameWndH;
uint16_t uix = xposold * UiActive->w / ww;
uint16_t uiy = (wh - yposold - 1) * UiActive->h / wh;
struct k3MEvent ev = { struct k3MEvent ev = {
.original = (void*) UiActive, .original = (void*) UiActive,
@@ -172,8 +168,16 @@ static void charcallback(GLFWwindow *window, unsigned int codepoint) {
static void fix_resol(); static void fix_resol();
static void resizecallback(GLFWwindow *window, int width, int height) { static void resizecallback(GLFWwindow *window, int width, int height) {
k3Resize(width, height); k3Resize(GameWndW = width, GameWndH = height);
fix_resol(); fix_resol();
if(UiActive) {
UiActive->w = UiActive->wDesired = GameWndW;
UiActive->h = UiActive->hDesired = GameWndH;
k3MMeasure(UiActive);
k3MArrange(UiActive);
}
} }
static int argc; static int argc;
@@ -189,7 +193,10 @@ const char *k4_get_arg(const char *name) {
#include<signal.h> #include<signal.h>
void k4k3LogCallback(enum k3LogLevel lvl, const char *str, size_t len) { void k4k3LogCallback(enum k3LogLevel lvl, const char *str, size_t len) {
if(lvl == k3_TRACE) return;
static const char *prefixes[] = { static const char *prefixes[] = {
[k3_TRACE] = "[\x1B[95mTRACE\x1B[0m]",
[k3_DEBUG] = "[\x1B[95mDEBUG\x1B[0m]", [k3_DEBUG] = "[\x1B[95mDEBUG\x1B[0m]",
[k3_INFO] = "[\x1B[97mINFO\x1B[0m] ", [k3_INFO] = "[\x1B[97mINFO\x1B[0m] ",
[k3_WARN] = "[\x1B[93mWARN\x1B[0m] ", [k3_WARN] = "[\x1B[93mWARN\x1B[0m] ",
@@ -218,13 +225,16 @@ static int eng_init() {
#define START_HEIGHT 540 #define START_HEIGHT 540
#define START_TITLE "k4" #define START_TITLE "k4"
GameWndW = START_WIDTH;
GameWndH = START_HEIGHT;
// Prefer core // Prefer core
if(!k4_get_arg("core") || strcmp(k4_get_arg("core"), "0")) { if(!k4_get_arg("core") || strcmp(k4_get_arg("core"), "0")) {
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
GameWnd = glfwCreateWindow(START_WIDTH, START_HEIGHT, START_TITLE, NULL, NULL); GameWnd = glfwCreateWindow(GameWndW, GameWndH, START_TITLE, NULL, NULL);
} }
// Attempt compatibility // Attempt compatibility
@@ -233,7 +243,7 @@ static int eng_init() {
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_FALSE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_FALSE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 1); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 1);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
GameWnd = glfwCreateWindow(START_WIDTH, START_HEIGHT, START_TITLE, NULL, NULL); GameWnd = glfwCreateWindow(GameWndW, GameWndH, START_TITLE, NULL, NULL);
} }
k3MixInit(44100, 2); k3MixInit(44100, 2);
@@ -267,8 +277,16 @@ static int eng_init() {
GLAD_GL_ARB_framebuffer_sRGB = 0; GLAD_GL_ARB_framebuffer_sRGB = 0;
GLAD_GL_EXT_framebuffer_object = 0; GLAD_GL_EXT_framebuffer_object = 0;
} }
if(k4_get_arg("dsa") && strtol(k4_get_arg("dsa"), NULL, 0) == 0) {
GLAD_GL_EXT_direct_state_access = 0;
GLAD_GL_ARB_direct_state_access = 0;
}
if(k4_get_arg("vsync")) {
glfwSwapInterval(strtol(k4_get_arg("vsync"), NULL, 0));
} else {
glfwSwapInterval(0); glfwSwapInterval(0);
}
printf("GL version: %s\n", glGetString(GL_VERSION)); printf("GL version: %s\n", glGetString(GL_VERSION));
printf("GL renderer: %s\n", glGetString(GL_RENDERER)); printf("GL renderer: %s\n", glGetString(GL_RENDERER));
@@ -276,7 +294,9 @@ static int eng_init() {
k3SetLogCallback(k4k3LogCallback); k3SetLogCallback(k4k3LogCallback);
k3Init(); k3Init(
!k4_get_arg("tc") || strtol(k4_get_arg("tc"), NULL, 0) != 0,
!k4_get_arg("mipmap") || strtol(k4_get_arg("mipmap"), NULL, 0) != 0);
k3BatchInit(); k3BatchInit();
@@ -433,6 +453,9 @@ int main(int argc_, char **argv_) {
net_hi_update(CurrentTime); net_hi_update(CurrentTime);
int windowW, windowH;
glfwGetWindowSize(GameWnd, &windowW, &windowH);
float alpha = fmodf(accumulator * GAME_TPS, 1.f); float alpha = fmodf(accumulator * GAME_TPS, 1.f);
vec3 cameraForwardDir = {0, 0, -1}; vec3 cameraForwardDir = {0, 0, -1};
@@ -493,7 +516,7 @@ int main(int argc_, char **argv_) {
glfwGetFramebufferSize(GameWnd, &width, &height); glfwGetFramebufferSize(GameWnd, &width, &height);
mat4 proj; mat4 proj;
glm_perspective(glm_rad(LuaapiFov), (float) width / height, 0.1f, 80.f, proj); glm_perspective(glm_rad(LuaapiFov), (float) width / height, LuaapiNear, LuaapiFar, proj);
/* Third-person camera movement */ /* Third-person camera movement */
struct LocalRay camray = {}; struct LocalRay camray = {};
@@ -565,6 +588,7 @@ int main(int argc_, char **argv_) {
glm_mat4_copy(cam, LuaapiCamMatrix); glm_mat4_copy(cam, LuaapiCamMatrix);
k3Update();
k3SetTime(glfwGetTime()); k3SetTime(glfwGetTime());
size_t lightCount; size_t lightCount;
@@ -590,12 +614,16 @@ int main(int argc_, char **argv_) {
if(c->cache) { if(c->cache) {
struct CBoned *b = game_getcomponent(c->entity, boned); struct CBoned *b = game_getcomponent(c->entity, boned);
k3Batch(c->cache, transform, b ? b->bones : NULL); if(b && b->animator.anim) {
k3AnimatorStep(&b->animator, dt);
}
k3Batch(c->cache, transform, b ? b->animator.bones : NULL);
} }
} }
if(!IrregularShadows) { if(!IrregularShadows) {
k3PassShadowmap(proj, cam, shadowmapOffscreen); k3PassShadowmap(proj, cam, shadowmapOffscreen, fmaxf(k3TexSzMax() / 8, 512));
} }
if(lowresOffscreen) { if(lowresOffscreen) {
@@ -640,13 +668,7 @@ int main(int argc_, char **argv_) {
glClear(GL_DEPTH_BUFFER_BIT); glClear(GL_DEPTH_BUFFER_BIT);
if(!k3IsCore) { k3BatchSetResolution(windowW, windowH);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 3600, 0, 2025, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
luaapi_render2d(); luaapi_render2d();

View File

@@ -114,7 +114,7 @@ static void interpret_pkt(ENetPacket *pkt) {
c->holding = b_ru16(&b); c->holding = b_ru16(&b);
} if(ctype == CMD_CTYPE_BONED) { } if(ctype == CMD_CTYPE_BONED) {
struct CBoned *c = game_ensurecomponent(ent, boned); struct CBoned *c = game_ensurecomponent(ent, boned);
c->anim.standard = b_ru8(&b); /*c->anim.standard =*/ b_ru8(&b);
} }
} else if(cmd == CMD_SC_POSUPDATE) { } else if(cmd == CMD_SC_POSUPDATE) {
uint16_t lastOurTick = b_ru16(&b); uint16_t lastOurTick = b_ru16(&b);

View File

@@ -121,7 +121,7 @@ static void send_full_state(ENetPeer **peers, size_t peerCount) {
b_wu16(&b, c->entity); b_wu16(&b, c->entity);
b_wu8(&b, c->anim.standard); b_wu8(&b, 0/*c->anim.standard*/);
} }
if(peers) { if(peers) {