/* A complete CPU-rendered window. Build instructions: docs/getting-started.md. */ #include #include static bool failed; static enum yasl_app_result event(void *ud, const struct yasl_event *event) { (void)ud; return event->type == YASL_EVENT_WINDOW_CLOSE ? YASL_APP_QUIT : YASL_APP_CONTINUE; } static void draw(void *ud, struct yasl_surface *surface, struct yasl_frame_context *frame) { (void)ud; size_t count = (size_t)frame->size.x * frame->size.y; for (size_t i = 0; i < count; i++) frame->cpu.pixels[i] = 0xff306090; /* Opaque premultiplied ARGB. */ if (!yasl_frame_present_cpu(frame, NULL, 0)) { fprintf(stderr, "Could not present the draw target\n"); failed = true; } if (failed) yasl_surface_destroy(surface); } int main(void) { struct yasl_window_spec window = {.title = "Hello YASL", .size = {640, 480}}; struct yasl_app_desc desc = { .app_id = "org.example.hello", .window = &window, .event = event, .frame = draw, }; int result = yasl_run(&desc); if (result) fprintf(stderr, "Could not run the application\n"); return result || failed ? 1 : 0; }