diff --git a/src/driver/fbaccel.cpp b/src/driver/fbaccel.cpp index 4ca4af808..cd455a4ad 100644 --- a/src/driver/fbaccel.cpp +++ b/src/driver/fbaccel.cpp @@ -30,6 +30,7 @@ #endif #include +#include #include #include diff --git a/src/driver/fbaccel.h b/src/driver/fbaccel.h new file mode 100644 index 000000000..1d6fb3897 --- /dev/null +++ b/src/driver/fbaccel.h @@ -0,0 +1,78 @@ +/* + Copyright (C) 2007-2013 Stefan Seyfried + + License: GPL + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + private functions for the fbaccel class (only used in CFrameBuffer) +*/ + + +#ifndef __fbaccel__ +#define __fbaccel__ +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +class CFrameBuffer; +class CFbAccel + : public OpenThreads::Thread +{ + private: + CFrameBuffer *fb; + fb_pixel_t lastcol; + OpenThreads::Mutex mutex; +#ifdef USE_NEVIS_GXA + int devmem_fd; /* to access the GXA register we use /dev/mem */ + unsigned int smem_start; /* as aquired from the fbdev, the framebuffers physical start address */ + volatile uint8_t *gxa_base; /* base address for the GXA's register access */ + void add_gxa_sync_marker(void); +#endif /* USE_NEVIS_GXA */ + void setColor(fb_pixel_t col); + void run(void); + void _blit(void); + bool blit_thread; + bool blit_pending; + OpenThreads::Condition blit_cond; + OpenThreads::Mutex blit_mutex; + public: + fb_pixel_t *backbuffer; + fb_pixel_t *lbb; + CFbAccel(CFrameBuffer *fb); + ~CFbAccel(); + void paintPixel(int x, int y, const fb_pixel_t col); + void paintRect(const int x, const int y, const int dx, const int dy, const fb_pixel_t col); + void paintLine(int xa, int ya, int xb, int yb, const fb_pixel_t col); + void blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff, uint32_t xp, uint32_t yp, bool transp); + void waitForIdle(void); + void mark(int x, int y, int dx, int dy); + void blit(); + void update(); +#ifdef USE_NEVIS_GXA + void setupGXA(void); +#endif +}; + +#endif diff --git a/src/driver/framebuffer_ng.cpp b/src/driver/framebuffer_ng.cpp index c623eb44d..77960e369 100644 --- a/src/driver/framebuffer_ng.cpp +++ b/src/driver/framebuffer_ng.cpp @@ -26,6 +26,7 @@ #endif #include +#include #include #include @@ -1341,3 +1342,9 @@ bool CFrameBuffer::_checkFbArea(int _x, int _y, int _dx, int _dy, bool prev) return true; } + +/* TODO: can we get rid of that? */ +void CFrameBuffer::mark(int x, int y, int dx, int dy) +{ + accel->mark(x, y, dx, dy); +}; diff --git a/src/driver/framebuffer_ng.h b/src/driver/framebuffer_ng.h index 4b6c9c6cc..5346aa248 100644 --- a/src/driver/framebuffer_ng.h +++ b/src/driver/framebuffer_ng.h @@ -23,8 +23,8 @@ */ -#ifndef __framebuffer__ -#define __framebuffer__ +#ifndef __framebuffer_ng__ +#define __framebuffer_ng__ #include #include @@ -34,10 +34,6 @@ #include #include #include -#include -#include -#include -#include #define fb_pixel_t uint32_t @@ -65,45 +61,7 @@ typedef struct fb_var_screeninfo t_fb_var_screeninfo; #define USE_OPENGL 1 #endif -class CFrameBuffer; -class CFbAccel - : public OpenThreads::Thread -{ - private: - CFrameBuffer *fb; - fb_pixel_t lastcol; - OpenThreads::Mutex mutex; -#ifdef USE_NEVIS_GXA - int devmem_fd; /* to access the GXA register we use /dev/mem */ - unsigned int smem_start; /* as aquired from the fbdev, the framebuffers physical start address */ - volatile uint8_t *gxa_base; /* base address for the GXA's register access */ - void add_gxa_sync_marker(void); -#endif /* USE_NEVIS_GXA */ - void setColor(fb_pixel_t col); - void run(void); - void _blit(void); - bool blit_thread; - bool blit_pending; - OpenThreads::Condition blit_cond; - OpenThreads::Mutex blit_mutex; - public: - fb_pixel_t *backbuffer; - fb_pixel_t *lbb; - CFbAccel(CFrameBuffer *fb); - ~CFbAccel(); - void paintPixel(int x, int y, const fb_pixel_t col); - void paintRect(const int x, const int y, const int dx, const int dy, const fb_pixel_t col); - void paintLine(int xa, int ya, int xb, int yb, const fb_pixel_t col); - void blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff, uint32_t xp, uint32_t yp, bool transp); - void waitForIdle(void); - void mark(int x, int y, int dx, int dy); - void blit(); - void update(); -#ifdef USE_NEVIS_GXA - void setupGXA(void); -#endif -}; - +class CFbAccel; /** Ausfuehrung als Singleton */ class CFrameBuffer { @@ -269,7 +227,7 @@ class CFrameBuffer void blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff, uint32_t xp = 0, uint32_t yp = 0, bool transp = false); bool blitToPrimary(unsigned int * data, int dx, int dy, int sw, int sh); - void mark(int x, int y, int dx, int dy) { accel->mark(x, y, dx, dy); }; + void mark(int x, int y, int dx, int dy); void paintMuteIcon(bool paint, int ax, int ay, int dx, int dy, bool paintFrame=true); enum