src/driver/framebuffer.cpp: fix fb for Threads use

This commit is contained in:
satbaby
2013-01-02 15:55:19 +01:00
parent 099d0181b6
commit 3bbaddec39
2 changed files with 11 additions and 1 deletions

View File

@@ -632,7 +632,9 @@ void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int
int corner_bl = (type & CORNER_BOTTOM_LEFT) ? 1 : 0; int corner_bl = (type & CORNER_BOTTOM_LEFT) ? 1 : 0;
int corner_br = (type & CORNER_BOTTOM_RIGHT) ? 1 : 0; int corner_br = (type & CORNER_BOTTOM_RIGHT) ? 1 : 0;
#ifndef USE_NEVIS_GXA #ifdef USE_NEVIS_GXA
OpenThreads::ScopedLock<OpenThreads::Mutex> m_lock(mutex);
#else
int swidth = stride / sizeof(fb_pixel_t); int swidth = stride / sizeof(fb_pixel_t);
fb_pixel_t *fbp = getFrameBufferPointer() + (swidth * y); fb_pixel_t *fbp = getFrameBufferPointer() + (swidth * y);
#endif #endif
@@ -763,6 +765,7 @@ void CFrameBuffer::paintVLine(int x, int ya, int yb, const fb_pixel_t col)
return; return;
#ifdef USE_NEVIS_GXA #ifdef USE_NEVIS_GXA
OpenThreads::ScopedLock<OpenThreads::Mutex> m_lock(mutex);
/* draw a single vertical line from point x/ya to x/yb */ /* draw a single vertical line from point x/ya to x/yb */
unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA;
@@ -788,6 +791,7 @@ void CFrameBuffer::paintVLineRel(int x, int y, int dy, const fb_pixel_t col)
return; return;
#ifdef USE_NEVIS_GXA #ifdef USE_NEVIS_GXA
OpenThreads::ScopedLock<OpenThreads::Mutex> m_lock(mutex);
/* draw a single vertical line from point x/y with hight dx */ /* draw a single vertical line from point x/y with hight dx */
unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA;
@@ -811,6 +815,7 @@ void CFrameBuffer::paintHLine(int xa, int xb, int y, const fb_pixel_t col)
return; return;
#ifdef USE_NEVIS_GXA #ifdef USE_NEVIS_GXA
OpenThreads::ScopedLock<OpenThreads::Mutex> m_lock(mutex);
/* draw a single horizontal line from point xa/y to xb/y */ /* draw a single horizontal line from point xa/y to xb/y */
unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA;
@@ -835,6 +840,7 @@ void CFrameBuffer::paintHLineRel(int x, int dx, int y, const fb_pixel_t col)
return; return;
#ifdef USE_NEVIS_GXA #ifdef USE_NEVIS_GXA
OpenThreads::ScopedLock<OpenThreads::Mutex> m_lock(mutex);
/* draw a single horizontal line from point x/y with width dx */ /* draw a single horizontal line from point x/y with width dx */
unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA;
@@ -1698,6 +1704,7 @@ void CFrameBuffer::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32
//printf("CFrameBuffer::blit2FB: data %x Kva %x\n", (int) fbbuff, (int) uKva); //printf("CFrameBuffer::blit2FB: data %x Kva %x\n", (int) fbbuff, (int) uKva);
if(uKva != NULL) { if(uKva != NULL) {
OpenThreads::ScopedLock<OpenThreads::Mutex> m_lock(mutex);
cmd = GXA_CMD_BLT | GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(1) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(3); cmd = GXA_CMD_BLT | GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(1) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(3);
_write_gxa(gxa_base, GXA_BMP1_TYPE_REG, (3 << 16) | width); _write_gxa(gxa_base, GXA_BMP1_TYPE_REG, (3 << 16) | width);

View File

@@ -32,6 +32,8 @@
#include <string> #include <string>
#include <map> #include <map>
#include <OpenThreads/Mutex>
#include <OpenThreads/ScopedLock>
#define fb_pixel_t uint32_t #define fb_pixel_t uint32_t
@@ -57,6 +59,7 @@ class CFrameBuffer
private: private:
CFrameBuffer(); CFrameBuffer();
OpenThreads::Mutex mutex;
struct rgbData struct rgbData
{ {