Compare commits
30 Commits
96da001734
...
v2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b7c0b0780c | ||
|
|
46bd5e8d5e | ||
|
|
d614e2ced4 | ||
|
|
57fffeb0a3 | ||
|
|
def545450d | ||
|
|
9b7ecb3ae7 | ||
|
|
9c2e4ffae1 | ||
|
|
3e14195bf7 | ||
|
|
055ff4f5ce | ||
|
|
4d0e043f4c | ||
|
|
3da728c768 | ||
|
|
8857b93f90 | ||
|
|
cf0f402da3 | ||
|
|
db46d5506c | ||
|
|
e87417603e | ||
|
|
0f68c8c7ae | ||
|
|
2211193a96 | ||
|
|
6d821cb361 | ||
|
|
a2039557bb | ||
|
|
a1439664ca | ||
|
|
0453585751 | ||
|
|
5f6dc66a0f | ||
|
|
2e730baf33 | ||
|
|
462412c31a | ||
|
|
e4b5f8d361 | ||
|
|
f7a429cfbc | ||
|
|
3c372a3024 | ||
|
|
f65891932a | ||
|
|
177d259304 | ||
|
|
dbced43b2b |
@@ -14,9 +14,9 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
submodules: 'true'
|
submodules: 'true'
|
||||||
- run: mkdir build build/k3 build/k3/compr bin bin/assets
|
- run: mkdir build build/k3 build/k3/compr bin bin/assets
|
||||||
- run: CC="i686-w64-mingw32-gcc" CFLAGS="-I/usr/i686-w64-mingw32/include -I/usr/i686-w64-mingw32/include/lua5.3 -L/usr/i686-w64-mingw32/lib -Wno-error" make -B
|
- run: LIBS="-lfreetype -l:libz.a" CC="i686-w64-mingw32-gcc" CFLAGS="-I/usr/i686-w64-mingw32/include -I/usr/i686-w64-mingw32/include/lua5.3 -L/usr/i686-w64-mingw32/lib -Wno-error" make -B
|
||||||
- run: CC="i686-linux-gnu-gcc" CFLAGS="-I/usr/i686-linux-gnu/include -I/usr/i686-linux-gnu/include/lua5.3 -L/usr/i686-linux-gnu/lib -Wno-error -include /home/git/force_link_glibc_2.20.h" make -B
|
- run: cp /usr/lib/gcc/i686-w64-mingw32/14-win32/libgcc_s_dw2-1.dll /usr/lib/gcc/i686-w64-mingw32/14-win32/libstdc++-6.dll /usr/i686-w64-mingw32/lib/libportaudio-2.dll /usr/i686-w64-mingw32/lib/libwinpthread-1.dll /usr/lib/gcc/i686-w64-mingw32/14-win32/libgomp-1.dll bin/
|
||||||
- run: cp /usr/lib/gcc/i686-w64-mingw32/12-win32/libgcc_s_dw2-1.dll /usr/lib/gcc/i686-w64-mingw32/12-win32/libstdc++-6.dll /usr/i686-w64-mingw32/lib/libportaudio-2.dll /usr/i686-w64-mingw32/lib/libwinpthread-1.dll /usr/lib/gcc/i686-w64-mingw32/12-win32/libgomp-1.dll bin/
|
- run: curl "http://127.0.0.1:9898/build?root=${{ github.workspace }}"
|
||||||
- run: cp -r /home/git/k4templateassets/* bin/assets/
|
- run: cp -r /home/git/k4templateassets/* bin/assets/
|
||||||
- run: mv bin k4
|
- run: mv bin k4
|
||||||
- run: zip -9r "k4${{ github.ref_name }}.zip" k4/
|
- run: zip -9r "k4${{ github.ref_name }}.zip" k4/
|
||||||
|
|||||||
4
Makefile
4
Makefile
@@ -10,14 +10,14 @@ k3_HDRS := $(call rwildcard,k3/src,*.h)
|
|||||||
k3_OBJS := $(patsubst k3/src/%.c, build/k3/%.o, $(k3_SRCS))
|
k3_OBJS := $(patsubst k3/src/%.c, build/k3/%.o, $(k3_SRCS))
|
||||||
k3_DEPS := $(patsubst k3/src/%.c, build/k3/%.d, $(k3_SRCS))
|
k3_DEPS := $(patsubst k3/src/%.c, build/k3/%.d, $(k3_SRCS))
|
||||||
|
|
||||||
CFLAGS := $(CFLAGS) -D_GNU_SOURCE -D_DEFAULT_SOURCE -Ik3/src -O2 -fopenmp -flto -s
|
CFLAGS := $(CFLAGS) -D_GNU_SOURCE -D_DEFAULT_SOURCE -DGLCA_CUSTOM_GLYPH_DATA -Ik3/src -fopenmp -O2 -flto -fwhole-program -Wno-error=incompatible-pointer-types -Wno-error=int-conversion
|
||||||
|
|
||||||
ifneq (,$(findstring mingw,$(CC)))
|
ifneq (,$(findstring mingw,$(CC)))
|
||||||
CFLAGS := -static-libgcc -static-libstdc++ -std=gnu99 -march=pentium4 -D_WIN32_WINNT=0x600 -DENET_FEATURE_ADDRESS_MAPPING -fno-pic -no-pie -fms-extensions -fno-pie -Isrc $(CFLAGS)
|
CFLAGS := -static-libgcc -static-libstdc++ -std=gnu99 -march=pentium4 -D_WIN32_WINNT=0x600 -DENET_FEATURE_ADDRESS_MAPPING -fno-pic -no-pie -fms-extensions -fno-pie -Isrc $(CFLAGS)
|
||||||
LIBS := -l:libglfw3.a -lopengl32 -pthread -lm -l:libode.a -l:libvorbisfile.a -l:libvorbis.a -l:libogg.a -lportaudio -lgdi32 -lws2_32 -lwinmm -lstdc++ -lole32 -lsetupapi -lhid -l:liblua5.3.a -liphlpapi $(LIBS)
|
LIBS := -l:libglfw3.a -lopengl32 -pthread -lm -l:libode.a -l:libvorbisfile.a -l:libvorbis.a -l:libogg.a -lportaudio -lgdi32 -lws2_32 -lwinmm -lstdc++ -lole32 -lsetupapi -lhid -l:liblua5.3.a -liphlpapi $(LIBS)
|
||||||
else
|
else
|
||||||
CFLAGS := -march=opteron $(SAN) -std=gnu99 -DENET_FEATURE_ADDRESS_MAPPING -fms-extensions -fno-pic -no-pie -fno-pie -Isrc $(CFLAGS)
|
CFLAGS := -march=opteron $(SAN) -std=gnu99 -DENET_FEATURE_ADDRESS_MAPPING -fms-extensions -fno-pic -no-pie -fno-pie -Isrc $(CFLAGS)
|
||||||
LIBS := -lglfw3 -pthread -ldl -lm -lode -lstdc++ -llua5.3 -lvorbis -lvorbisfile -lportaudio $(LIBS)
|
LIBS := -lglfw3 -pthread -ldl -lm -lode -lstdc++ -llua5.3 -lvorbis -lvorbisfile -logg -lasound -lfreetype -lportaudio -lz $(LIBS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CFLAGS := $(CFLAGS) -DLOCALHOST_ONLY
|
CFLAGS := $(CFLAGS) -DLOCALHOST_ONLY
|
||||||
|
|||||||
20
README.md
20
README.md
@@ -1 +1,21 @@
|
|||||||
Homepage: https://mid.net.ua/k4.html
|
Homepage: https://mid.net.ua/k4.html
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
## v2
|
||||||
|
|
||||||
|
1. k3Menu objects now have stylable properties ala CSS
|
||||||
|
2. Exposed `game.ui.obj` "base object" which allows you to create your own widgets
|
||||||
|
3. Revamped the animation system to one with blend trees
|
||||||
|
4. Added scrollboxes and image objects to k3Menu
|
||||||
|
5. Replaced the font subsystem with one that uses TrueType fonts directly, and they are drawn using signed distance fields when possible
|
||||||
|
6. Added `game.near` and `game.far` values for editing the camera planes
|
||||||
|
7. Added vsync parameter to command line
|
||||||
|
8. Graphics bug fixes
|
||||||
|
9. Improved mipmapping
|
||||||
|
10. Frustum culling
|
||||||
|
11. Added support for 32-bit indices in models
|
||||||
|
|
||||||
|
## v1
|
||||||
|
|
||||||
|
Initial release.
|
||||||
|
|||||||
2
k3
2
k3
Submodule k3 updated: 4d74b5e3e9...56ecba05b1
2
k3ex.py
2
k3ex.py
@@ -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]))
|
||||||
|
|||||||
13
src/game.c
13
src/game.c
@@ -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;
|
||||||
|
|
||||||
@@ -1018,7 +1017,7 @@ void game_killentity(uint16_t eid) {
|
|||||||
if(cr) {
|
if(cr) {
|
||||||
if(cr->cache) {
|
if(cr->cache) {
|
||||||
if(resman_rev(cr->cache)) {
|
if(resman_rev(cr->cache)) {
|
||||||
resman_unref(RESMAN_MODEL, cr->cache);
|
resman_unref_ptr(RESMAN_MODEL, cr->cache);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
143
src/gl.h
@@ -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);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
2
src/k4.h
2
src/k4.h
@@ -45,3 +45,5 @@ void k4_set_texture_reduction(int);
|
|||||||
|
|
||||||
void k4_set_clipboard_text(const char *str);
|
void k4_set_clipboard_text(const char *str);
|
||||||
const char *k4_get_clipboard_text();
|
const char *k4_get_clipboard_text();
|
||||||
|
|
||||||
|
void k4_set_ui_mode(bool yes);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
1025
src/luaapi.c
1025
src/luaapi.c
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||||
|
|||||||
82
src/main.c
82
src/main.c
@@ -28,6 +28,7 @@
|
|||||||
#include"k3font.h"
|
#include"k3font.h"
|
||||||
#include"k3menu.h"
|
#include"k3menu.h"
|
||||||
#include"k3bloom.h"
|
#include"k3bloom.h"
|
||||||
|
#include"k3batch.h"
|
||||||
|
|
||||||
#include"resman.h"
|
#include"resman.h"
|
||||||
|
|
||||||
@@ -37,10 +38,13 @@
|
|||||||
|
|
||||||
#include"net_server.h"
|
#include"net_server.h"
|
||||||
#include"net_client.h"
|
#include"net_client.h"
|
||||||
|
#include"net_hi.h"
|
||||||
|
|
||||||
#include<ctype.h>
|
#include<ctype.h>
|
||||||
|
|
||||||
GLFWwindow *GameWnd;
|
GLFWwindow *GameWnd;
|
||||||
|
uint16_t GameWndW;
|
||||||
|
uint16_t GameWndH;
|
||||||
|
|
||||||
static int TextureResolutionReduction = 0;
|
static int TextureResolutionReduction = 0;
|
||||||
|
|
||||||
@@ -58,7 +62,7 @@ static double LastTime;
|
|||||||
|
|
||||||
#include"loaders.inc"
|
#include"loaders.inc"
|
||||||
|
|
||||||
void set_ui_mode(int yes) {
|
void k4_set_ui_mode(bool yes) {
|
||||||
glfwSetInputMode(GameWnd, GLFW_CURSOR, yes ? GLFW_CURSOR_NORMAL : GLFW_CURSOR_DISABLED);
|
glfwSetInputMode(GameWnd, GLFW_CURSOR, yes ? GLFW_CURSOR_NORMAL : GLFW_CURSOR_DISABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,9 +74,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 +81,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 +111,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,
|
||||||
@@ -134,7 +132,7 @@ static void motioncallback(GLFWwindow *GameWnd, double xpos, double ypos) {
|
|||||||
static void keycallback(GLFWwindow *GameWnd, int key, int scancode, int action, int mods) {
|
static void keycallback(GLFWwindow *GameWnd, int key, int scancode, int action, int mods) {
|
||||||
if(action == GLFW_RELEASE && key == GLFW_KEY_ESCAPE) {
|
if(action == GLFW_RELEASE && key == GLFW_KEY_ESCAPE) {
|
||||||
luaapi_escape();
|
luaapi_escape();
|
||||||
set_ui_mode(!!UiActive);
|
k4_set_ui_mode(!!UiActive);
|
||||||
} else {
|
} else {
|
||||||
if(UiActive) {
|
if(UiActive) {
|
||||||
struct k3MEvent ev = {
|
struct k3MEvent ev = {
|
||||||
@@ -172,8 +170,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 +195,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] ",
|
||||||
@@ -198,7 +207,7 @@ void k4k3LogCallback(enum k3LogLevel lvl, const char *str, size_t len) {
|
|||||||
|
|
||||||
//if(lvl == k3_ERR) raise(SIGINT);
|
//if(lvl == k3_ERR) raise(SIGINT);
|
||||||
|
|
||||||
fprintf(stderr, "%s : %s\n", prefixes[lvl], str);
|
fprintf(stdout, "%s : %s\n", prefixes[lvl], str);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct k4Control {
|
struct k4Control {
|
||||||
@@ -218,13 +227,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 +245,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 +279,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;
|
||||||
|
}
|
||||||
|
|
||||||
glfwSwapInterval(0);
|
if(k4_get_arg("vsync")) {
|
||||||
|
glfwSwapInterval(strtol(k4_get_arg("vsync"), NULL, 0));
|
||||||
|
} else {
|
||||||
|
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 +296,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();
|
||||||
|
|
||||||
@@ -300,7 +322,7 @@ static void fix_resol() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void eng_ui_init() {
|
static void eng_ui_init() {
|
||||||
set_ui_mode(!!UiActive);
|
k4_set_ui_mode(!!UiActive);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fps_counter_step(double newDT) {
|
static void fps_counter_step(double newDT) {
|
||||||
@@ -433,6 +455,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 +518,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 +590,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 +616,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, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lowresOffscreen) {
|
if(lowresOffscreen) {
|
||||||
@@ -640,13 +670,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();
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
#else
|
#else
|
||||||
#include<netdb.h>
|
#include<netdb.h>
|
||||||
#include<sys/socket.h>
|
#include<sys/socket.h>
|
||||||
#include<sys/random.h>
|
|
||||||
#include<arpa/inet.h>
|
#include<arpa/inet.h>
|
||||||
#include<ifaddrs.h>
|
#include<ifaddrs.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -36,6 +35,13 @@
|
|||||||
#define RAND(b, i) RtlGenRandom(b, i)
|
#define RAND(b, i) RtlGenRandom(b, i)
|
||||||
#else
|
#else
|
||||||
#define RAND(b, i) getrandom(b, i, 0)
|
#define RAND(b, i) getrandom(b, i, 0)
|
||||||
|
static void getrandom(void *buf, size_t amount, int flags) {
|
||||||
|
static FILE *f;
|
||||||
|
if(!f) {
|
||||||
|
f = fopen("/dev/urandom", "rb");
|
||||||
|
}
|
||||||
|
fread(buf, 1, amount, f);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct StunMsg {
|
struct StunMsg {
|
||||||
|
|||||||
Reference in New Issue
Block a user