#include "konwinlib.h" #include "konsofren.h" #include "kontime.h" #define GAME_WIDTH 320 #define GAME_HEIGHT 180 int main(void) { kon_window_t *window; kon_display_t *display; kon_camera_t camera; kon_material_t material; kon_light_t light; kon_time last; float angle = 0.0f; if (!kon_init()) return 1; window = kon_createWindow("engine", 0, 0, 800, 600, KON_WINDOW_CENTER | KON_WINDOW_RESIZABLE); if (!window) return 1; kon_setExitKey(window, KON_KEY_ESCAPE); display = kon_createDisplay(GAME_WIDTH, GAME_HEIGHT, 800, 600); if (!display) return 1; camera = kon_cameraDefault(); camera.position = KON_VEC3(3, 3, 6); material = kon_materialColor(0xFFC8C8FF); light = kon_lightDefault(); last = kon_getTime(); while (!kon_windowShouldClose(window)) { kon_event_t ev; kon_time now; kon_mat4_t model, viewProjection; while (kon_pollEvent(window, &ev)) { if (ev.type == KON_EVENT_RESIZE) { kon_resizeDisplay(display, ev.width, ev.height); } if (ev.type == KON_EVENT_KEY_DOWN && ev.key == KON_KEY_O) { camera.projection = (camera.projection == KON_PROJECTION_PERSPECTIVE) ? KON_PROJECTION_ORTHOGRAPHIC : KON_PROJECTION_PERSPECTIVE; } } now = kon_getTime(); angle += (float)(now - last); last = now; model = kon_mat4Identity(); model = kon_mat4Rotate(model, KON_VEC3(angle * 0.5f, angle, 0)); viewProjection = kon_cameraViewProjection(&camera, display->game->width, display->game->height); kon_clearFramebuffer(display->game, KON_BACKGROUND_COLOR); kon_drawMesh(display->game, viewProjection, model, &kon_cubeMesh, &material, &light, KON_RENDER_DEFAULT); kon_presentDisplay(display); kon_blitPixels(window, display->screen->data, display->screen->width, display->screen->height); kon_sleep(0.008); } kon_freeDisplay(display); kon_destroyWindow(window); kon_deinit(); return 0; }