00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef header_display_fbdev
00016 #define header_display_fbdev
00017
00018 #ifdef USE_FBDEV
00019
00020 #include "Display/Display/Generic/displaycard_generic.h"
00021
00022 #include "target_fbdev.h"
00023
00024 #include <linux/fb.h>
00025
00026 class CL_FBDev_DisplayCard : public CL_DisplayCard_Generic
00027 {
00028 public:
00029 CL_FBDev_DisplayCard(int card_no);
00030 virtual ~CL_FBDev_DisplayCard();
00031
00032
00033
00034
00035 virtual void flip_display(bool sync=false);
00036 virtual void put_display(const class CL_Rect &rect);
00037 virtual void set_palette(CL_Palette *palette);
00038 virtual CL_Palette *get_palette();
00039 virtual void set_videomode(int width, int height, int bpp, bool fullscreen, bool allow_resize, bool video_memory);
00040 virtual bool is_initialized();
00041
00042 virtual std::string get_name() { return "FBDev Display"; }
00043 virtual const std::list<CL_VidMode*> &get_videomodes();
00044
00045
00046
00047
00048 virtual void push_clip_rect() { m_clip_stack.push_front(m_cur_clip); }
00049
00050 virtual void push_clip_rect(const CL_ClipRect &clip)
00051 {
00052 push_clip_rect();
00053 m_cur_clip = m_cur_clip.clip(clip);
00054 set_card_clip();
00055 }
00056 virtual void set_clip_rect(const CL_ClipRect &clip)
00057 {
00058 m_cur_clip = clip;
00059 set_card_clip();
00060 }
00061 virtual void pop_clip_rect()
00062 {
00063 m_cur_clip = m_clip_stack.front();
00064 m_clip_stack.pop_front();
00065 set_card_clip();
00066 }
00067
00068 virtual CL_Target *get_target() { return m_target; }
00069 virtual CL_Target *get_frontbuffer() { return m_target; }
00070
00071 virtual void fill_rect(int, int, int, int, float, float, float, float);
00072 virtual void draw_rect(int, int, int, int, float, float, float, float);
00073
00074 virtual int get_total_memory() { return fb_fix.smem_len; }
00075
00076
00077
00078 unsigned char* get_offscreen_mem();
00079 int yoffset;
00080
00081 unsigned int get_virt_width();
00082
00083 bool accel_alpha_ret() { return m_accel_alpha_rect; }
00084 bool accel_scale_blit() { return m_accel_scale_blit; }
00085
00086
00087 protected:
00088 virtual CL_Blitters create_hw_blitters(CL_SurfaceProvider *provider);
00089
00090 private:
00091 void set_card_clip();
00092
00093 volatile unsigned char *m_mmioaddr;
00094 bool doublebuffer;
00095 bool m_accel_alpha_rect;
00096 bool m_accel_scale_blit;
00097 fb_fix_screeninfo fb_fix;
00098 fb_var_screeninfo fb_var_orig;
00099 fb_var_screeninfo fb_var;
00100 unsigned char* fb_mem;
00101 int fd;
00102
00103
00104 bool m_initialized;
00105 CL_Palette *m_palette;
00106 CL_Target_FBDev *m_target;
00107
00108 std::string fb_try_accel;
00109 };
00110
00111 #endif
00112
00113 #endif