improve 3d renderer
This commit is contained in:
parent
f19b06d705
commit
59be43d80e
17 changed files with 556 additions and 486 deletions
57
src/pxl8.c
57
src/pxl8.c
|
|
@ -253,9 +253,6 @@ pxl8_result pxl8_update(pxl8* sys) {
|
|||
}
|
||||
|
||||
if (game->ui) {
|
||||
i32 render_width, render_height;
|
||||
pxl8_gfx_get_resolution_dimensions(game->resolution, &render_width, &render_height);
|
||||
|
||||
pxl8_ui_input_mousemove(game->ui, game->input.mouse_x, game->input.mouse_y);
|
||||
|
||||
if (game->input.mouse_wheel_x != 0 || game->input.mouse_wheel_y != 0) {
|
||||
|
|
@ -306,25 +303,23 @@ pxl8_result pxl8_frame(pxl8* sys) {
|
|||
} else {
|
||||
pxl8_clear(game->gfx, 32);
|
||||
|
||||
i32 render_width, render_height;
|
||||
pxl8_gfx_get_resolution_dimensions(game->resolution, &render_width, &render_height);
|
||||
pxl8_size render_size = pxl8_get_resolution_dimensions(game->resolution);
|
||||
|
||||
for (i32 y = 0; y < render_height; y += 24) {
|
||||
for (i32 x = 0; x < render_width; x += 32) {
|
||||
for (i32 y = 0; y < render_size.h; y += 24) {
|
||||
for (i32 x = 0; x < render_size.w; x += 32) {
|
||||
u32 color = ((x / 32) + (y / 24) + (i32)(game->time * 2)) % 8;
|
||||
pxl8_rect_fill(game->gfx, x, y, 31, 23, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
i32 render_width, render_height;
|
||||
pxl8_gfx_get_resolution_dimensions(game->resolution, &render_width, &render_height);
|
||||
pxl8_size render_size = pxl8_get_resolution_dimensions(game->resolution);
|
||||
|
||||
if (game->ui) {
|
||||
pxl8_ui_frame_end(game->ui);
|
||||
}
|
||||
|
||||
pxl8_gfx_set_viewport(game->gfx, pxl8_gfx_viewport(bounds, render_width, render_height));
|
||||
pxl8_gfx_set_viewport(game->gfx, pxl8_gfx_viewport(bounds, render_size.w, render_size.h));
|
||||
pxl8_gfx_upload_framebuffer(game->gfx);
|
||||
pxl8_gfx_upload_atlas(game->gfx);
|
||||
pxl8_gfx_present(game->gfx);
|
||||
|
|
@ -333,8 +328,12 @@ pxl8_result pxl8_frame(pxl8* sys) {
|
|||
memset(game->input.keys_released, 0, sizeof(game->input.keys_released));
|
||||
memset(game->input.mouse_buttons_pressed, 0, sizeof(game->input.mouse_buttons_pressed));
|
||||
memset(game->input.mouse_buttons_released, 0, sizeof(game->input.mouse_buttons_released));
|
||||
game->input.mouse_dx = 0;
|
||||
game->input.mouse_dy = 0;
|
||||
game->input.mouse_wheel_x = 0;
|
||||
game->input.mouse_wheel_y = 0;
|
||||
game->input.mouse_x = 0;
|
||||
game->input.mouse_y = 0;
|
||||
|
||||
game->frame_count++;
|
||||
|
||||
|
|
@ -378,14 +377,46 @@ f32 pxl8_get_fps(const pxl8* sys) {
|
|||
return (sys && sys->game) ? sys->game->fps : 0.0f;
|
||||
}
|
||||
|
||||
pxl8_gfx* pxl8_get_gfx(pxl8* sys) {
|
||||
pxl8_gfx* pxl8_get_gfx(const pxl8* sys) {
|
||||
return (sys && sys->game) ? sys->game->gfx : NULL;
|
||||
}
|
||||
|
||||
pxl8_input_state* pxl8_get_input(pxl8* sys) {
|
||||
pxl8_input_state* pxl8_get_input(const pxl8* sys) {
|
||||
return (sys && sys->game) ? &sys->game->input : NULL;
|
||||
}
|
||||
|
||||
pxl8_resolution pxl8_get_resolution(pxl8* sys) {
|
||||
pxl8_resolution pxl8_get_resolution(const pxl8* sys) {
|
||||
return (sys && sys->game) ? sys->game->resolution : PXL8_RESOLUTION_640x360;
|
||||
}
|
||||
|
||||
void pxl8_set_relative_mouse_mode(pxl8* sys, bool enabled) {
|
||||
if (!sys || !sys->hal || !sys->hal->set_relative_mouse_mode) return;
|
||||
sys->hal->set_relative_mouse_mode(sys->platform_data, enabled);
|
||||
if (sys->game) {
|
||||
sys->game->input.mouse_relative_mode = enabled;
|
||||
}
|
||||
}
|
||||
|
||||
u32 pxl8_get_palette_size(pxl8_color_mode mode) {
|
||||
switch (mode) {
|
||||
case PXL8_COLOR_MODE_HICOLOR: return 0;
|
||||
case PXL8_COLOR_MODE_FAMI: return 64;
|
||||
case PXL8_COLOR_MODE_MEGA: return 512;
|
||||
case PXL8_COLOR_MODE_GBA: return 32768;
|
||||
case PXL8_COLOR_MODE_SNES: return 32768;
|
||||
default: return 256;
|
||||
}
|
||||
}
|
||||
|
||||
pxl8_size pxl8_get_resolution_dimensions(pxl8_resolution resolution) {
|
||||
switch (resolution) {
|
||||
case PXL8_RESOLUTION_240x160: return (pxl8_size){240, 160};
|
||||
case PXL8_RESOLUTION_320x180: return (pxl8_size){320, 180};
|
||||
case PXL8_RESOLUTION_320x240: return (pxl8_size){320, 240};
|
||||
case PXL8_RESOLUTION_640x360: return (pxl8_size){640, 360};
|
||||
case PXL8_RESOLUTION_640x480: return (pxl8_size){640, 480};
|
||||
case PXL8_RESOLUTION_800x600: return (pxl8_size){800, 600};
|
||||
case PXL8_RESOLUTION_960x540: return (pxl8_size){960, 540};
|
||||
default: return (pxl8_size){640, 360};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue