revolver

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit efcc620832e3f1851f4798cf501c5f3305633eb7
parent a40998cc4dc159ac44f7e5437c57f042d7c90a04
Author: Samdal <samdal@protonmail.com>
Date:   Sun, 23 Mar 2025 02:10:30 +0100

fix xcb, instancing uniform

Diffstat:
Mbuild.sh | 8++++----
Mexamples/instancing.c | 8++++++--
Msrc/platform/gfx/xcb_impl.c | 9++++++++-
3 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/build.sh b/build.sh @@ -35,16 +35,16 @@ compiler_flags=( -Isrc/ - -DRV_WIN_X11=0 + #-DRV_WIN_X11=0 -D_GNU_SOURCE=1 ) common_flags=( -fsanitize=address,float-divide-by-zero,float-cast-overflow -fno-sanitize=null,alignment -fno-sanitize-recover=all -fno-omit-frame-pointer ) linker_flags=( - -lm -lxcb -lxcb-xkb -lEGL -lGL - #-lxcb -lxcb-xkb -lEGL -lGL - -lX11 -lXi + -lm + -lxcb -lxcb-xkb -lEGL -lGL + #-lX11 -lXi -fuse-ld=mold ) diff --git a/examples/instancing.c b/examples/instancing.c @@ -18,10 +18,11 @@ rv_str8 v_src = S("#version 330 core\n" rv_strify( layout(location = 1) in vec3 a_color; layout(location = 2) in vec2 a_offset; precision mediump float; + uniform vec2 u_offset; out vec3 f_color; void main() { - gl_Position = vec4(a_pos + a_offset, 0.0, 1.0); + gl_Position = vec4(a_pos + a_offset + u_offset, 0.0, 1.0); f_color = a_color; } )); @@ -71,6 +72,7 @@ int main(void) { rv_pipeline_push_vattr(arena, pip, RV_VATTR_TYPE_FLOAT2, 0, 0); rv_pipeline_push_vattr(arena, pip, RV_VATTR_TYPE_FLOAT3, 0, 0); rv_pipeline_push_vattr(arena, pip, RV_VATTR_TYPE_FLOAT2, 1, 1); + rv_uniform_t* u_offset = rv_pipeline_push_uniform(arena, pip, S("u_offset"), RV_UNIFORM_VEC2); // instructions to create render objects rv_command_list_t create_instructions = {0}; @@ -121,7 +123,9 @@ int main(void) { { // draw custom shader // copy render commands - rv_render_copy_commands(scratch.arena, &rpass->commands, &render_instructions); + rv_command_t* rcmd = rv_render_copy_commands(scratch.arena, &rpass->commands, &render_instructions); + rv_vec2 extra_offset = rv_v2(sinf(rv_time()*10) * 0.05, cosf(rv_time()*10) * 0.05); + rv_cmd_insert_uniform_update(scratch.arena, &rpass->commands, rcmd, u_offset, {.v_vec2 = extra_offset}); } if (window) { // render screen diff --git a/src/platform/gfx/xcb_impl.c b/src/platform/gfx/xcb_impl.c @@ -562,7 +562,14 @@ RV_GLOBAL rv_window_handle_t* rv_create_window(rv_window_desc_t desc) if (done) break; } - res->last_size = rv_window_size(res); + { + xcb_get_geometry_cookie_t geom_cookie = xcb_get_geometry(xcb_context.connection, res->window_id); + xcb_get_geometry_reply_t* reply = xcb_get_geometry_reply(xcb_context.connection, geom_cookie, NULL); + if (reply) { + res->last_size = rv_v2(reply->width, reply->height); + free(reply); + } + } rv_llist_stack_push(xcb_context.window_list, res);