Mercurial > hg > Members > e085722 > Cerium
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:04e28d8d3c6f |
---|---|
1 #include "viewerPS3.h" | |
2 #include "fb.h" | |
3 #include "types.h" | |
4 #include "ps3fb/cp_vt.h" | |
5 #include "ps3fb/cp_fb.h" | |
6 #include <stdio.h> | |
7 | |
8 #define default_sdl_flag SDL_INIT_TIMER | SDL_INIT_JOYSTICK | |
9 | |
10 ViewerPS3::ViewerPS3() {} | |
11 ViewerPS3::~ViewerPS3() {} | |
12 | |
13 #if defined(__linux__) | |
14 | |
15 #define DEVICE_NAME "/dev/fb0" | |
16 #define DIV_BYTE 8 | |
17 | |
18 ScreenInfo | |
19 ViewerPS3::get_fbdev_addr() | |
20 { | |
21 ScreenInfo info; | |
22 | |
23 cp_vt_open_graphics(&vt); | |
24 cp_fb_open(&fb); | |
25 | |
26 info.xres = fb.w; | |
27 info.yres = fb.h; | |
28 info.vbpp = 32; | |
29 info.fbptr[0] = (uint32_t *)fb.draw_addr[ 0 ]; | |
30 info.fbptr[1] = (uint32_t *)fb.draw_addr[ 1 ]; | |
31 | |
32 return info; | |
33 } | |
34 | |
35 #else /* !defined(__linux__) */ | |
36 ScreenInfo | |
37 ViewerPS3::get_fbdev_addr(void) { | |
38 ScreenInfo tmp = {0,0,0,0}; | |
39 return tmp; | |
40 } | |
41 #endif /* defined(__linux__) */ | |
42 | |
43 | |
44 Uint32 * | |
45 ViewerPS3::video_init(TaskManager *manager, int bpp, int width, int height) | |
46 { | |
47 // Uint32 sdl_flag = default_sdl_flag | SDL_INIT_VIDEO; | |
48 Uint32 sdl_flag = default_sdl_flag ; | |
49 | |
50 if (SDL_Init(sdl_flag) < 0) { | |
51 fprintf(stderr,"Couldn't initialize SDL: %s\n",SDL_GetError()); | |
52 exit(1); | |
53 } | |
54 | |
55 screen_info = get_fbdev_addr(); | |
56 | |
57 uint32_t *pixels = screen_info.fbptr[frame_ndx]; | |
58 | |
59 if (pixels == 0) { | |
60 fprintf(stderr, "Cannot get frame buffer!\n"); | |
61 pixels = (new Uint32[width*height*32/8]); | |
62 } | |
63 this->width = screen_info.xres; | |
64 this->height = screen_info.yres; | |
65 this->bpp = screen_info.vbpp; | |
66 | |
67 return pixels; | |
68 } | |
69 | |
70 void | |
71 ViewerPS3::clean_pixels() | |
72 { | |
73 } | |
74 | |
75 void | |
76 ViewerPS3::clear_screen() | |
77 { | |
78 } | |
79 | |
80 uint32_t * | |
81 ViewerPS3::flip_screen(uint32_t *old) | |
82 { | |
83 // At the vsync, the previous frame is finished sending to the CRT | |
84 // cp_fb_wait_vsync( &fb ); | |
85 | |
86 // Send the frame just drawn to the CRT by the next vblank | |
87 #ifdef __linux__ | |
88 cp_fb_flip( &fb, frame_ndx ); | |
89 #endif | |
90 | |
91 frame_ndx = frame_ndx ^ 0x01; | |
92 return (uint32_t*)fb.draw_addr[ frame_ndx ]; | |
93 } | |
94 | |
95 | |
96 void | |
97 ViewerPS3::free_device() | |
98 { | |
99 #ifdef __linux__ | |
100 cp_vt_close(&vt); | |
101 cp_fb_close(&fb); | |
102 #endif | |
103 } | |
104 | |
105 /* end */ |