Mercurial > hg > Members > e085722 > Cerium
diff Renderer/Engine/viewerPS3.cc @ 0:04e28d8d3c6f
first commit
author | Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 08 Nov 2010 01:23:25 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Renderer/Engine/viewerPS3.cc Mon Nov 08 01:23:25 2010 +0900 @@ -0,0 +1,105 @@ +#include "viewerPS3.h" +#include "fb.h" +#include "types.h" +#include "ps3fb/cp_vt.h" +#include "ps3fb/cp_fb.h" +#include <stdio.h> + +#define default_sdl_flag SDL_INIT_TIMER | SDL_INIT_JOYSTICK + +ViewerPS3::ViewerPS3() {} +ViewerPS3::~ViewerPS3() {} + +#if defined(__linux__) + +#define DEVICE_NAME "/dev/fb0" +#define DIV_BYTE 8 + +ScreenInfo +ViewerPS3::get_fbdev_addr() +{ + ScreenInfo info; + + cp_vt_open_graphics(&vt); + cp_fb_open(&fb); + + info.xres = fb.w; + info.yres = fb.h; + info.vbpp = 32; + info.fbptr[0] = (uint32_t *)fb.draw_addr[ 0 ]; + info.fbptr[1] = (uint32_t *)fb.draw_addr[ 1 ]; + + return info; +} + +#else /* !defined(__linux__) */ +ScreenInfo +ViewerPS3::get_fbdev_addr(void) { + ScreenInfo tmp = {0,0,0,0}; + return tmp; +} +#endif /* defined(__linux__) */ + + +Uint32 * +ViewerPS3::video_init(TaskManager *manager, int bpp, int width, int height) +{ + // Uint32 sdl_flag = default_sdl_flag | SDL_INIT_VIDEO; + Uint32 sdl_flag = default_sdl_flag ; + + if (SDL_Init(sdl_flag) < 0) { + fprintf(stderr,"Couldn't initialize SDL: %s\n",SDL_GetError()); + exit(1); + } + + screen_info = get_fbdev_addr(); + + uint32_t *pixels = screen_info.fbptr[frame_ndx]; + + if (pixels == 0) { + fprintf(stderr, "Cannot get frame buffer!\n"); + pixels = (new Uint32[width*height*32/8]); + } + this->width = screen_info.xres; + this->height = screen_info.yres; + this->bpp = screen_info.vbpp; + + return pixels; +} + +void +ViewerPS3::clean_pixels() +{ +} + +void +ViewerPS3::clear_screen() +{ +} + +uint32_t * +ViewerPS3::flip_screen(uint32_t *old) +{ + // At the vsync, the previous frame is finished sending to the CRT + // cp_fb_wait_vsync( &fb ); + + // Send the frame just drawn to the CRT by the next vblank +#ifdef __linux__ + cp_fb_flip( &fb, frame_ndx ); +#endif + + frame_ndx = frame_ndx ^ 0x01; + return (uint32_t*)fb.draw_addr[ frame_ndx ]; +} + + +void +ViewerPS3::free_device() +{ +#ifdef __linux__ + cp_vt_close(&vt); + cp_fb_close(&fb); +#endif +} + +/* end */