commit efcc620832e3f1851f4798cf501c5f3305633eb7
parent a40998cc4dc159ac44f7e5437c57f042d7c90a04
Author: Samdal <samdal@protonmail.com>
Date: Sun, 23 Mar 2025 02:10:30 +0100
fix xcb, instancing uniform
Diffstat:
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);