formatting

This commit is contained in:
jacob 2025-01-20 14:26:12 -06:00
parent a2f9f58143
commit ab6761b733
6 changed files with 49 additions and 58 deletions

View File

@ -27,7 +27,7 @@
#define DEFAULT_CAMERA_WIDTH (7.0)
#define DEFAULT_CAMERA_HEIGHT (DEFAULT_CAMERA_WIDTH / (16.0 / 9.0))
#define PIXELS_PER_UNIT 256.0
#define IMAGE_PIXELS_PER_UNIT 256.0
#define GAME_FPS 50.0
#define GAME_TIMESCALE 1

View File

@ -623,7 +623,7 @@ INTERNAL void game_update(struct game_cmd_array game_cmds)
/* Update sprite local xform */
{
struct sprite_sheet_slice slice = sprite_sheet_get_slice(sheet, STR("pivot"), ent->animation_frame);
struct v2 sprite_size = v2_div(sheet->frame_size, (f32)PIXELS_PER_UNIT);
struct v2 sprite_size = v2_div(sheet->frame_size, (f32)IMAGE_PIXELS_PER_UNIT);
struct v2 dir = v2_mul_v2(sprite_size, slice.dir);
f32 rot = v2_angle(dir) + PI / 2;

View File

@ -85,9 +85,7 @@ struct v2i32 renderer_texture_get_size(struct renderer_texture texture);
* ========================== */
/* Returns a texture linking to the internal backbuffer. Lifetime is managed by renderer. */
struct renderer_texture renderer_get_backbuffer_texture(void);
void renderer_backbuffer_resize(struct v2i32 size);
struct renderer_texture renderer_backbuffer_recreate(struct v2i32 size);
void renderer_backbuffer_present(i32 vsync);

View File

@ -518,11 +518,6 @@ struct renderer_startup_receipt renderer_startup(struct sys_window *window)
shader_init(&G.shaders[i], i);
}
/* Set backbuffer texture */
MEMZERO_STRUCT(&G.backbuffer_texture);
IDXGISwapChain_GetBuffer(G.swapchain, 0, &IID_ID3D11Texture2D, (LPVOID *)&G.backbuffer_texture.texture);
G.backbuffer_texture.is_backbuffer = true;
return (struct renderer_startup_receipt) { 0 };
}
@ -824,19 +819,19 @@ struct v2i32 renderer_texture_get_size(struct renderer_texture texture)
* Backbuffer
* ========================== */
struct renderer_texture renderer_get_backbuffer_texture(void)
struct renderer_texture renderer_backbuffer_recreate(struct v2i32 size)
{
struct renderer_texture res = ZI;
res.handle = (u64)&G.backbuffer_texture;
return res;
}
void renderer_backbuffer_resize(struct v2i32 size)
{
__prof;
ID3D11Texture2D_Release(G.backbuffer_texture.texture);
/* Resize */
if (G.backbuffer_texture.texture != 0) {
ID3D11Texture2D_Release(G.backbuffer_texture.texture);
}
IDXGISwapChain_ResizeBuffers(G.swapchain, 0, size.x, size.y, DXGI_FORMAT_UNKNOWN, 0);
IDXGISwapChain_GetBuffer(G.swapchain, 0, &IID_ID3D11Texture2D, (LPVOID *)&G.backbuffer_texture.texture);
res.handle = (u64)&G.backbuffer_texture;
return res;
}
void renderer_backbuffer_present(i32 vsync)

View File

@ -235,13 +235,13 @@ struct sprite_startup_receipt sprite_startup(struct renderer_startup_receipt *re
/* Init loading sheet */
G.loading_sheet = arena_push_zero(&G.perm_arena, struct sprite_sheet);
G.loading_sheet->image_size = V2(PIXELS_PER_UNIT, PIXELS_PER_UNIT);
G.loading_sheet->frame_size = V2(PIXELS_PER_UNIT, PIXELS_PER_UNIT);
G.loading_sheet->image_size = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT);
G.loading_sheet->frame_size = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT);
/* Init nil sheet */
G.nil_sheet = arena_push_zero(&G.perm_arena, struct sprite_sheet);
G.nil_sheet->image_size = V2(PIXELS_PER_UNIT, PIXELS_PER_UNIT);
G.nil_sheet->frame_size = V2(PIXELS_PER_UNIT, PIXELS_PER_UNIT);
G.nil_sheet->image_size = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT);
G.nil_sheet->frame_size = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT);
G.nil_sheet->loaded = true;
}
arena_set_readonly(&G.perm_arena);

View File

@ -152,7 +152,7 @@ struct user_startup_receipt user_startup(struct work_startup_receipt *work_sr,
G.sys_events_arena = arena_alloc(GIGABYTE(64));
world_alloc(&G.world);
G.world_to_ui_xf = XFORM_TRS(.t = V2(0, 0), .r = 0, .s = V2(PIXELS_PER_UNIT, PIXELS_PER_UNIT));
G.world_to_ui_xf = XFORM_IDENT;
G.world_cmd_buffer = renderer_cmd_buffer_alloc();
G.ui_cmd_buffer = renderer_cmd_buffer_alloc();
G.final_cmd_buffer = renderer_cmd_buffer_alloc();
@ -802,26 +802,29 @@ INTERNAL void user_update(void)
if (G.debug_camera) {
G.world_to_ui_xf = xform_basis_with_rotation_world(G.world_to_ui_xf, 0);
struct v2 world_cursor = xform_invert_mul_v2(G.world_to_ui_xf, G.ui_cursor);
/* Pan view */
if (G.bind_states[USER_BIND_KIND_PAN].is_held) {
if (!G.debug_camera_panning) {
G.debug_camera_pan_start = xform_invert_mul_v2(G.world_to_ui_xf, G.ui_cursor);
G.debug_camera_pan_start = world_cursor;
G.debug_camera_panning = true;
}
G.debug_camera_panning = true;
struct v2 offset = v2_sub(G.debug_camera_pan_start, xform_invert_mul_v2(G.world_to_ui_xf, G.ui_cursor));
G.world_to_ui_xf = xform_translated(G.world_to_ui_xf, v2_neg(offset));
G.debug_camera_pan_start = xform_invert_mul_v2(G.world_to_ui_xf, G.ui_cursor);
struct v2 offset = v2_neg(v2_sub(G.debug_camera_pan_start, world_cursor));
G.world_to_ui_xf = xform_translated(G.world_to_ui_xf, offset);
world_cursor = xform_invert_mul_v2(G.world_to_ui_xf, G.ui_cursor);
G.debug_camera_pan_start = world_cursor;
} else {
G.debug_camera_panning = false;
}
/* Zoom view */
i32 input_zooms = G.bind_states[USER_BIND_KIND_ZOOM_IN].num_presses - G.bind_states[USER_BIND_KIND_ZOOM_OUT].num_presses;
if (input_zooms != 0) {
/* Zoom to cursor */
f32 zoom_rate = 2;
f32 zoom = math_pow(zoom_rate, input_zooms);
struct v2 world_cursor = xform_invert_mul_v2(G.world_to_ui_xf, G.ui_cursor);
G.world_to_ui_xf = xform_translated(G.world_to_ui_xf, world_cursor);
G.world_to_ui_xf = xform_scaled(G.world_to_ui_xf, V2(zoom, zoom));
G.world_to_ui_xf = xform_translated(G.world_to_ui_xf, v2_neg(world_cursor));
@ -841,14 +844,9 @@ INTERNAL void user_update(void)
size = v2_div_v2(size, camera_size);
}
}
f32 scale = min_f32(size.x, size.y);
struct trs trs = TRS(
.t = v2_sub(G.ui_center, center),
.r = rot,
.s = V2(scale, scale)
);
f32 scale_ui = min_f32(size.x, size.y);
struct trs trs = TRS(.t = v2_sub(G.ui_center, center), .r = rot, .s = V2(scale_ui, scale_ui));
struct v2 pivot = center;
G.world_to_ui_xf = XFORM_IDENT;
G.world_to_ui_xf = xform_translated(G.world_to_ui_xf, pivot);
@ -1598,39 +1596,39 @@ INTERNAL void user_update(void)
{
__profscope(render);
struct rect target_viewport = RECT_FROM_V2(V2(0, 0), G.ui_size);
struct rect ui_viewport = RECT_FROM_V2(V2(0, 0), G.ui_size);
struct rect backbuffer_viewport = RECT_FROM_V2(V2(0, 0), G.screen_size);
/* Allocate rt textures */
struct v2i32 ui_rt_resolution = v2_round_to_int(V2(target_viewport.width + target_viewport.x, target_viewport.height + target_viewport.y));
struct v2i32 world_rt_resolution = ui_rt_resolution;
struct v2i32 backbuffer_rt_resolution = v2_round_to_int(G.screen_size);
struct v2i32 ui_resolution = v2_round_to_int(ui_viewport.size);
struct v2i32 backbuffer_resolution = v2_round_to_int(backbuffer_viewport.size);
struct v2i32 world_resolution = ui_resolution;
{
/* World rt */
if (!G.world_texture.handle || !v2i32_eq(renderer_texture_get_size(G.world_texture), world_rt_resolution)) {
/* World texture */
if (!G.world_texture.handle || !v2i32_eq(renderer_texture_get_size(G.world_texture), world_resolution)) {
if (G.world_texture.handle) {
renderer_texture_release(G.world_texture);
}
G.world_texture = renderer_texture_alloc(RENDERER_TEXTURE_FORMAT_R8G8B8A8_UNORM, RENDERER_TEXTURE_FLAG_TARGET, world_rt_resolution, NULL);
G.world_texture = renderer_texture_alloc(RENDERER_TEXTURE_FORMAT_R8G8B8A8_UNORM, RENDERER_TEXTURE_FLAG_TARGET, world_resolution, NULL);
}
/* Ui rt */
if (!G.ui_texture.handle || !v2i32_eq(renderer_texture_get_size(G.ui_texture), ui_rt_resolution)) {
/* Ui texture */
if (!G.ui_texture.handle || !v2i32_eq(renderer_texture_get_size(G.ui_texture), ui_resolution)) {
if (G.ui_texture.handle) {
renderer_texture_release(G.ui_texture);
}
G.ui_texture = renderer_texture_alloc(RENDERER_TEXTURE_FORMAT_R8G8B8A8_UNORM, RENDERER_TEXTURE_FLAG_TARGET, ui_rt_resolution, NULL);
G.ui_texture = renderer_texture_alloc(RENDERER_TEXTURE_FORMAT_R8G8B8A8_UNORM, RENDERER_TEXTURE_FLAG_TARGET, ui_resolution, NULL);
}
/* Final rt */
if (!G.final_texture.handle || !v2i32_eq(renderer_texture_get_size(G.final_texture), ui_rt_resolution)) {
/* Final texture */
if (!G.final_texture.handle || !v2i32_eq(renderer_texture_get_size(G.final_texture), ui_resolution)) {
if (G.final_texture.handle) {
renderer_texture_release(G.final_texture);
}
G.final_texture = renderer_texture_alloc(RENDERER_TEXTURE_FORMAT_R8G8B8A8_UNORM, RENDERER_TEXTURE_FLAG_TARGET, ui_rt_resolution, NULL);
G.final_texture = renderer_texture_alloc(RENDERER_TEXTURE_FORMAT_R8G8B8A8_UNORM, RENDERER_TEXTURE_FLAG_TARGET, ui_resolution, NULL);
}
/* Backbuffer rt */
if (!G.backbuffer_texture.handle || !v2i32_eq(renderer_texture_get_size(G.backbuffer_texture), backbuffer_rt_resolution)) {
renderer_backbuffer_resize(backbuffer_rt_resolution);
G.backbuffer_texture = renderer_get_backbuffer_texture();
/* Backbuffer texture */
if (!G.backbuffer_texture.handle || !v2i32_eq(renderer_texture_get_size(G.backbuffer_texture), backbuffer_resolution)) {
G.backbuffer_texture = renderer_backbuffer_recreate(backbuffer_resolution);;
}
}
@ -1638,14 +1636,14 @@ INTERNAL void user_update(void)
/* Draw world texture to final */
{
struct draw_texture_params params = DRAW_TEXTURE_PARAMS(.texture = G.world_texture);
struct quad quad = quad_from_rect(RECT_FROM_V2(V2(0, 0), V2_FROM_V2I32(ui_rt_resolution)));
struct quad quad = quad_from_rect(RECT_FROM_V2(V2(0, 0), V2_FROM_V2I32(ui_resolution)));
draw_quad_texture(G.final_cmd_buffer, params, quad);
}
/* Draw ui texture to final */
{
struct draw_texture_params params = DRAW_TEXTURE_PARAMS(.texture = G.ui_texture);
struct quad quad = quad_from_rect(RECT_FROM_V2(V2(0, 0), V2_FROM_V2I32(ui_rt_resolution)));
struct quad quad = quad_from_rect(RECT_FROM_V2(V2(0, 0), V2_FROM_V2I32(ui_resolution)));
draw_quad_texture(G.final_cmd_buffer, params, quad);
}
@ -1672,13 +1670,13 @@ INTERNAL void user_update(void)
renderer_texture_clear(G.backbuffer_texture, RGBA_32_F(0, 0, 0, 1));
/* Render to world texture */
renderer_texture_render(G.world_texture, G.world_cmd_buffer, G.world_to_ui_xf, target_viewport, sprite_frame_scope);
renderer_texture_render(G.world_texture, G.world_cmd_buffer, G.world_to_ui_xf, ui_viewport, sprite_frame_scope);
/* Render to UI texture */
renderer_texture_render(G.ui_texture, G.ui_cmd_buffer, XFORM_IDENT, target_viewport, sprite_frame_scope);
renderer_texture_render(G.ui_texture, G.ui_cmd_buffer, XFORM_IDENT, ui_viewport, sprite_frame_scope);
/* Render to final texture */
renderer_texture_render(G.final_texture, G.final_cmd_buffer, XFORM_IDENT, target_viewport, sprite_frame_scope);
renderer_texture_render(G.final_texture, G.final_cmd_buffer, XFORM_IDENT, ui_viewport, sprite_frame_scope);
/* Render to backbuffer */
renderer_texture_render(G.backbuffer_texture, G.backbuffer_cmd_buffer, XFORM_IDENT, backbuffer_viewport, sprite_frame_scope);