formatting
This commit is contained in:
parent
a2f9f58143
commit
ab6761b733
@ -27,7 +27,7 @@
|
|||||||
#define DEFAULT_CAMERA_WIDTH (7.0)
|
#define DEFAULT_CAMERA_WIDTH (7.0)
|
||||||
#define DEFAULT_CAMERA_HEIGHT (DEFAULT_CAMERA_WIDTH / (16.0 / 9.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_FPS 50.0
|
||||||
#define GAME_TIMESCALE 1
|
#define GAME_TIMESCALE 1
|
||||||
|
|||||||
@ -623,7 +623,7 @@ INTERNAL void game_update(struct game_cmd_array game_cmds)
|
|||||||
/* Update sprite local xform */
|
/* Update sprite local xform */
|
||||||
{
|
{
|
||||||
struct sprite_sheet_slice slice = sprite_sheet_get_slice(sheet, STR("pivot"), ent->animation_frame);
|
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);
|
struct v2 dir = v2_mul_v2(sprite_size, slice.dir);
|
||||||
f32 rot = v2_angle(dir) + PI / 2;
|
f32 rot = v2_angle(dir) + PI / 2;
|
||||||
|
|||||||
@ -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. */
|
/* Returns a texture linking to the internal backbuffer. Lifetime is managed by renderer. */
|
||||||
struct renderer_texture renderer_get_backbuffer_texture(void);
|
struct renderer_texture renderer_backbuffer_recreate(struct v2i32 size);
|
||||||
|
|
||||||
void renderer_backbuffer_resize(struct v2i32 size);
|
|
||||||
|
|
||||||
void renderer_backbuffer_present(i32 vsync);
|
void renderer_backbuffer_present(i32 vsync);
|
||||||
|
|
||||||
|
|||||||
@ -518,11 +518,6 @@ struct renderer_startup_receipt renderer_startup(struct sys_window *window)
|
|||||||
shader_init(&G.shaders[i], i);
|
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 };
|
return (struct renderer_startup_receipt) { 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -824,19 +819,19 @@ struct v2i32 renderer_texture_get_size(struct renderer_texture texture)
|
|||||||
* Backbuffer
|
* Backbuffer
|
||||||
* ========================== */
|
* ========================== */
|
||||||
|
|
||||||
struct renderer_texture renderer_get_backbuffer_texture(void)
|
struct renderer_texture renderer_backbuffer_recreate(struct v2i32 size)
|
||||||
{
|
{
|
||||||
struct renderer_texture res = ZI;
|
struct renderer_texture res = ZI;
|
||||||
res.handle = (u64)&G.backbuffer_texture;
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
void renderer_backbuffer_resize(struct v2i32 size)
|
/* Resize */
|
||||||
{
|
if (G.backbuffer_texture.texture != 0) {
|
||||||
__prof;
|
ID3D11Texture2D_Release(G.backbuffer_texture.texture);
|
||||||
ID3D11Texture2D_Release(G.backbuffer_texture.texture);
|
}
|
||||||
IDXGISwapChain_ResizeBuffers(G.swapchain, 0, size.x, size.y, DXGI_FORMAT_UNKNOWN, 0);
|
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);
|
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)
|
void renderer_backbuffer_present(i32 vsync)
|
||||||
|
|||||||
@ -235,13 +235,13 @@ struct sprite_startup_receipt sprite_startup(struct renderer_startup_receipt *re
|
|||||||
|
|
||||||
/* Init loading sheet */
|
/* Init loading sheet */
|
||||||
G.loading_sheet = arena_push_zero(&G.perm_arena, struct sprite_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->image_size = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT);
|
||||||
G.loading_sheet->frame_size = V2(PIXELS_PER_UNIT, PIXELS_PER_UNIT);
|
G.loading_sheet->frame_size = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT);
|
||||||
|
|
||||||
/* Init nil sheet */
|
/* Init nil sheet */
|
||||||
G.nil_sheet = arena_push_zero(&G.perm_arena, struct sprite_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->image_size = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT);
|
||||||
G.nil_sheet->frame_size = V2(PIXELS_PER_UNIT, PIXELS_PER_UNIT);
|
G.nil_sheet->frame_size = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT);
|
||||||
G.nil_sheet->loaded = true;
|
G.nil_sheet->loaded = true;
|
||||||
}
|
}
|
||||||
arena_set_readonly(&G.perm_arena);
|
arena_set_readonly(&G.perm_arena);
|
||||||
|
|||||||
70
src/user.c
70
src/user.c
@ -152,7 +152,7 @@ struct user_startup_receipt user_startup(struct work_startup_receipt *work_sr,
|
|||||||
G.sys_events_arena = arena_alloc(GIGABYTE(64));
|
G.sys_events_arena = arena_alloc(GIGABYTE(64));
|
||||||
world_alloc(&G.world);
|
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.world_cmd_buffer = renderer_cmd_buffer_alloc();
|
||||||
G.ui_cmd_buffer = renderer_cmd_buffer_alloc();
|
G.ui_cmd_buffer = renderer_cmd_buffer_alloc();
|
||||||
G.final_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) {
|
if (G.debug_camera) {
|
||||||
G.world_to_ui_xf = xform_basis_with_rotation_world(G.world_to_ui_xf, 0);
|
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 */
|
/* Pan view */
|
||||||
if (G.bind_states[USER_BIND_KIND_PAN].is_held) {
|
if (G.bind_states[USER_BIND_KIND_PAN].is_held) {
|
||||||
if (!G.debug_camera_panning) {
|
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_neg(v2_sub(G.debug_camera_pan_start, world_cursor));
|
||||||
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, offset);
|
||||||
G.world_to_ui_xf = xform_translated(G.world_to_ui_xf, v2_neg(offset));
|
world_cursor = xform_invert_mul_v2(G.world_to_ui_xf, G.ui_cursor);
|
||||||
G.debug_camera_pan_start = xform_invert_mul_v2(G.world_to_ui_xf, G.ui_cursor);
|
G.debug_camera_pan_start = world_cursor;
|
||||||
} else {
|
} else {
|
||||||
G.debug_camera_panning = false;
|
G.debug_camera_panning = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Zoom view */
|
/* 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;
|
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) {
|
if (input_zooms != 0) {
|
||||||
/* Zoom to cursor */
|
/* Zoom to cursor */
|
||||||
f32 zoom_rate = 2;
|
f32 zoom_rate = 2;
|
||||||
f32 zoom = math_pow(zoom_rate, input_zooms);
|
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_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_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));
|
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);
|
size = v2_div_v2(size, camera_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
f32 scale = min_f32(size.x, size.y);
|
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, scale)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
struct trs trs = TRS(.t = v2_sub(G.ui_center, center), .r = rot, .s = V2(scale_ui, scale_ui));
|
||||||
struct v2 pivot = center;
|
struct v2 pivot = center;
|
||||||
G.world_to_ui_xf = XFORM_IDENT;
|
G.world_to_ui_xf = XFORM_IDENT;
|
||||||
G.world_to_ui_xf = xform_translated(G.world_to_ui_xf, pivot);
|
G.world_to_ui_xf = xform_translated(G.world_to_ui_xf, pivot);
|
||||||
@ -1598,39 +1596,39 @@ INTERNAL void user_update(void)
|
|||||||
|
|
||||||
{
|
{
|
||||||
__profscope(render);
|
__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);
|
struct rect backbuffer_viewport = RECT_FROM_V2(V2(0, 0), G.screen_size);
|
||||||
|
|
||||||
/* Allocate rt textures */
|
/* 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 ui_resolution = v2_round_to_int(ui_viewport.size);
|
||||||
struct v2i32 world_rt_resolution = ui_rt_resolution;
|
struct v2i32 backbuffer_resolution = v2_round_to_int(backbuffer_viewport.size);
|
||||||
struct v2i32 backbuffer_rt_resolution = v2_round_to_int(G.screen_size);
|
struct v2i32 world_resolution = ui_resolution;
|
||||||
|
|
||||||
{
|
{
|
||||||
/* World rt */
|
/* World texture */
|
||||||
if (!G.world_texture.handle || !v2i32_eq(renderer_texture_get_size(G.world_texture), world_rt_resolution)) {
|
if (!G.world_texture.handle || !v2i32_eq(renderer_texture_get_size(G.world_texture), world_resolution)) {
|
||||||
if (G.world_texture.handle) {
|
if (G.world_texture.handle) {
|
||||||
renderer_texture_release(G.world_texture);
|
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 */
|
/* Ui texture */
|
||||||
if (!G.ui_texture.handle || !v2i32_eq(renderer_texture_get_size(G.ui_texture), ui_rt_resolution)) {
|
if (!G.ui_texture.handle || !v2i32_eq(renderer_texture_get_size(G.ui_texture), ui_resolution)) {
|
||||||
if (G.ui_texture.handle) {
|
if (G.ui_texture.handle) {
|
||||||
renderer_texture_release(G.ui_texture);
|
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 */
|
/* Final texture */
|
||||||
if (!G.final_texture.handle || !v2i32_eq(renderer_texture_get_size(G.final_texture), ui_rt_resolution)) {
|
if (!G.final_texture.handle || !v2i32_eq(renderer_texture_get_size(G.final_texture), ui_resolution)) {
|
||||||
if (G.final_texture.handle) {
|
if (G.final_texture.handle) {
|
||||||
renderer_texture_release(G.final_texture);
|
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 */
|
/* Backbuffer texture */
|
||||||
if (!G.backbuffer_texture.handle || !v2i32_eq(renderer_texture_get_size(G.backbuffer_texture), backbuffer_rt_resolution)) {
|
if (!G.backbuffer_texture.handle || !v2i32_eq(renderer_texture_get_size(G.backbuffer_texture), backbuffer_resolution)) {
|
||||||
renderer_backbuffer_resize(backbuffer_rt_resolution);
|
G.backbuffer_texture = renderer_backbuffer_recreate(backbuffer_resolution);;
|
||||||
G.backbuffer_texture = renderer_get_backbuffer_texture();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1638,14 +1636,14 @@ INTERNAL void user_update(void)
|
|||||||
/* Draw world texture to final */
|
/* Draw world texture to final */
|
||||||
{
|
{
|
||||||
struct draw_texture_params params = DRAW_TEXTURE_PARAMS(.texture = G.world_texture);
|
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_quad_texture(G.final_cmd_buffer, params, quad);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw ui texture to final */
|
/* Draw ui texture to final */
|
||||||
{
|
{
|
||||||
struct draw_texture_params params = DRAW_TEXTURE_PARAMS(.texture = G.ui_texture);
|
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);
|
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));
|
renderer_texture_clear(G.backbuffer_texture, RGBA_32_F(0, 0, 0, 1));
|
||||||
|
|
||||||
/* Render to world texture */
|
/* 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 */
|
/* 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 */
|
/* 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 */
|
/* Render to backbuffer */
|
||||||
renderer_texture_render(G.backbuffer_texture, G.backbuffer_cmd_buffer, XFORM_IDENT, backbuffer_viewport, sprite_frame_scope);
|
renderer_texture_render(G.backbuffer_texture, G.backbuffer_cmd_buffer, XFORM_IDENT, backbuffer_viewport, sprite_frame_scope);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user