nsfb_t * framebuffer_initialise(const char *fename, int width, int height, int bpp) { enum nsfb_frontend_e fetype; fetype = nsfb_frontend_from_name(fename); if (fetype == NSFB_FRONTEND_NONE) { LOG(("The %s frontend is not available from libnsfb\n", fename)); return NULL; } nsfb = nsfb_init(fetype); if (nsfb == NULL) { LOG(("Unable to initialise nsfb with %s frontend\n", fename)); return NULL; } if (nsfb_set_geometry(nsfb, width, height, bpp) == -1) { LOG(("Unable to set geometry\n")); nsfb_finalise(nsfb); return NULL; } nsfb_cursor_init(nsfb); if (nsfb_init_frontend(nsfb) == -1) { LOG(("Unable to initialise nsfb frontend\n")); nsfb_finalise(nsfb); return NULL; } return nsfb; }
nsfb_t * framebuffer_initialise(const char *fename, int width, int height, int bpp) { enum nsfb_type_e fbtype; enum nsfb_format_e fbfmt; /* bpp is a proxy for the framebuffer format */ if (framebuffer_format_from_bpp(bpp, &fbfmt) == false) { return NULL; } fbtype = nsfb_type_from_name(fename); if (fbtype == NSFB_SURFACE_NONE) { LOG("The %s surface is not available from libnsfb\n", fename); return NULL; } nsfb = nsfb_new(fbtype); if (nsfb == NULL) { LOG("Unable to create %s fb surface\n", fename); return NULL; } if (nsfb_set_geometry(nsfb, width, height, fbfmt) == -1) { LOG("Unable to set surface geometry\n"); nsfb_free(nsfb); return NULL; } nsfb_cursor_init(nsfb); if (nsfb_init(nsfb) == -1) { LOG("Unable to initialise nsfb surface\n"); nsfb_free(nsfb); return NULL; } return nsfb; }
nsfb_t * framebuffer_initialise(const char *fename, int width, int height, int bpp) { enum nsfb_type_e fbtype; enum nsfb_format_e fbfmt; /* bpp is a proxy for the framebuffer format */ switch (bpp) { case 32: fbfmt = NSFB_FMT_XRGB8888; break; case 24: fbfmt = NSFB_FMT_RGB888; break; case 16: fbfmt = NSFB_FMT_RGB565; break; case 8: fbfmt = NSFB_FMT_I8; break; case 4: fbfmt = NSFB_FMT_I4; break; case 1: fbfmt = NSFB_FMT_I1; break; default: LOG(("Bad bits per pixel (%d)\n", bpp)); return NULL; } fbtype = nsfb_type_from_name(fename); if (fbtype == NSFB_SURFACE_NONE) { LOG(("The %s surface is not available from libnsfb\n", fename)); return NULL; } nsfb = nsfb_new(fbtype); if (nsfb == NULL) { LOG(("Unable to create %s fb surface\n", fename)); return NULL; } if (nsfb_set_geometry(nsfb, width, height, fbfmt) == -1) { LOG(("Unable to set surface geometry\n")); nsfb_free(nsfb); return NULL; } nsfb_cursor_init(nsfb); if (nsfb_init(nsfb) == -1) { LOG(("Unable to initialise nsfb surface\n")); nsfb_free(nsfb); return NULL; } return nsfb; }