2022-08-20 16:32:37 +02:00
|
|
|
#include "level.h"
|
|
|
|
#include "generator.h"
|
2022-08-20 16:31:49 +02:00
|
|
|
#include "render.h"
|
2022-08-20 11:51:24 +02:00
|
|
|
#include <gint/display.h>
|
|
|
|
#include <gint/keyboard.h>
|
|
|
|
#include <gint/timer.h>
|
|
|
|
#include <azur/gint/render.h>
|
|
|
|
#include <gint/drivers/r61524.h>
|
2022-08-20 16:31:49 +02:00
|
|
|
#include <fxlibc/printf.h>
|
|
|
|
|
2022-08-20 11:51:24 +02:00
|
|
|
int main(void)
|
|
|
|
{
|
2022-08-20 16:31:49 +02:00
|
|
|
__printf_enable_fp();
|
2022-08-20 15:18:14 +02:00
|
|
|
prof_init();
|
2022-08-20 11:51:24 +02:00
|
|
|
azrp_config_scale(1);
|
|
|
|
azrp_shader_clear_configure();
|
2022-08-20 16:31:49 +02:00
|
|
|
// azrp_shader_image_rgb16_configure();
|
|
|
|
// azrp_shader_image_p8_configure();
|
|
|
|
// azrp_shader_image_p4_configure();
|
2022-08-20 11:51:24 +02:00
|
|
|
azrp_shader_triangle_configure();
|
|
|
|
|
2022-08-20 16:31:49 +02:00
|
|
|
level_t level = level_create(1);
|
|
|
|
|
|
|
|
/* int volatile need_frame = 1;
|
2022-08-20 11:51:24 +02:00
|
|
|
int timer = timer_configure(TIMER_ANY, 33000, GINT_CALL_SET(&need_frame));
|
|
|
|
timer_start(timer);
|
2022-08-20 16:31:49 +02:00
|
|
|
float t = 0.0; */
|
2022-08-20 11:51:24 +02:00
|
|
|
|
2022-08-20 16:31:49 +02:00
|
|
|
bool game_run = true;
|
|
|
|
while(game_run) {
|
|
|
|
/* float dt = 1.0 / 30;
|
|
|
|
t += dt; */
|
2022-08-20 11:51:24 +02:00
|
|
|
|
2022-08-20 16:31:49 +02:00
|
|
|
level_update(&level);
|
2022-08-20 11:51:24 +02:00
|
|
|
|
2022-08-20 16:31:49 +02:00
|
|
|
// TODO: display
|
2022-08-20 15:18:14 +02:00
|
|
|
azrp_perf_clear();
|
2022-08-20 11:51:24 +02:00
|
|
|
azrp_clear(C_WHITE);
|
2022-08-20 16:31:49 +02:00
|
|
|
// dclear(C_WHITE);
|
|
|
|
|
|
|
|
struct camera camera;
|
|
|
|
camera.pos = vec3(0, RENDER_CAMERA_DEPTH, 0);
|
|
|
|
vec2 screen_size(DWIDTH, DHEIGHT);
|
|
|
|
|
|
|
|
for(int i = 0; i < PLATFORM_COUNT; i++) {
|
|
|
|
int gray = i * 31 / PLATFORM_COUNT;
|
|
|
|
int color = C_RGB(gray, gray, gray);
|
|
|
|
|
|
|
|
struct prect p = render_platform_position(i, num(3.0));
|
|
|
|
camera_project_prect(&camera, &p, screen_size);
|
|
|
|
render_triangle(&p.nl, &p.fr, &p.fl, color);
|
|
|
|
render_triangle(&p.fr, &p.nl, &p.nr, color);
|
|
|
|
|
|
|
|
/* dprint(4, i*14+4, C_BLACK,
|
|
|
|
"%d (%d): nl=%d/%d nr=%d/%d z=%d|%d",
|
|
|
|
i, gray,
|
|
|
|
(int)p.nl.x, (int)p.nl.y,
|
|
|
|
(int)p.nr.x, (int)p.nr.y,
|
|
|
|
(int)p.nl.z, (int)p.fl.z);
|
|
|
|
extern float get_near_plane(void);
|
|
|
|
dprint(4, 180, C_BLACK, "FOV=%g", get_near_plane()); */
|
|
|
|
}
|
2022-08-20 11:51:24 +02:00
|
|
|
azrp_update();
|
2022-08-20 16:31:49 +02:00
|
|
|
// dupdate();
|
2022-08-20 11:51:24 +02:00
|
|
|
|
|
|
|
drect(0, DHEIGHT-20, DWIDTH-1, DHEIGHT-1, C_WHITE);
|
2022-08-20 15:18:14 +02:00
|
|
|
dprint(1, 210, C_BLACK, "cmdgen:%03dus sort:%03dus render:%4d+%4dus",
|
|
|
|
prof_time(azrp_perf_cmdgen),
|
|
|
|
prof_time(azrp_perf_sort),
|
|
|
|
prof_time(azrp_perf_render) - prof_time(azrp_perf_r61524),
|
|
|
|
prof_time(azrp_perf_r61524));
|
2022-08-20 11:51:24 +02:00
|
|
|
r61524_display(gint_vram, DHEIGHT-20, 20, R61524_DMA_WAIT);
|
|
|
|
|
2022-08-20 16:31:49 +02:00
|
|
|
// level_display(&level);
|
|
|
|
|
|
|
|
key_event_t ev;
|
|
|
|
while((ev = pollevent()).type != KEYEV_NONE) {
|
|
|
|
if(ev.type == KEYEV_UP)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if(ev.key == KEY_EXIT || ev.key == KEY_MENU)
|
|
|
|
game_run = false;
|
|
|
|
if(ev.key == KEY_EXE)
|
|
|
|
level_advance(&level);
|
|
|
|
if(ev.key == KEY_F1)
|
|
|
|
level = level_create(1);
|
|
|
|
if(ev.key == KEY_F2)
|
|
|
|
level = level_create(2);
|
|
|
|
if(ev.key == KEY_F3)
|
|
|
|
level = level_create(3);
|
|
|
|
}
|
2022-08-20 11:51:24 +02:00
|
|
|
}
|
|
|
|
|
2022-08-20 16:31:49 +02:00
|
|
|
// timer_stop(timer);
|
|
|
|
return 0;
|
2022-08-20 11:51:24 +02:00
|
|
|
}
|