mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-28 07:51:19 +02:00
implement getWidth4FB_HW_ACC in fb_accel class
This helper to determine alignment for hardware blitting is now in system/helpers.h, where it does not really belong. Put it into the framebuffer class instead. Framebuffers that don't need it will just get a dummy function, the cs_hd2 framebuffer gets the real thing. Also add a bool function that indicates the need for alignment.
This commit is contained in:
committed by
M. Liebmann
parent
7fdc4c7178
commit
b6909fb815
@@ -127,6 +127,8 @@ class CFbAccelCSHD2
|
|||||||
void blitBox2FB(const fb_pixel_t* boxBuf, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff);
|
void blitBox2FB(const fb_pixel_t* boxBuf, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff);
|
||||||
void setBlendMode(uint8_t);
|
void setBlendMode(uint8_t);
|
||||||
void setBlendLevel(int);
|
void setBlendLevel(int);
|
||||||
|
uint32_t getWidth4FB_HW_ACC(const uint32_t x, const uint32_t w, const bool max=true);
|
||||||
|
bool needAlign4Blit() { return true; };
|
||||||
};
|
};
|
||||||
|
|
||||||
class CFbAccelGLFB
|
class CFbAccelGLFB
|
||||||
|
@@ -228,3 +228,20 @@ void CFbAccelCSHD2::setBlendLevel(int level)
|
|||||||
if (level == 100) // TODO: sucks.
|
if (level == 100) // TODO: sucks.
|
||||||
usleep(20000);
|
usleep(20000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* align for hw blit */
|
||||||
|
uint32_t CFbAccelCSHD2::getWidth4FB_HW_ACC(const uint32_t _x, const uint32_t _w, const bool max)
|
||||||
|
{
|
||||||
|
uint32_t ret = _w;
|
||||||
|
if ((_x + ret) >= xRes)
|
||||||
|
ret = xRes-_x-1;
|
||||||
|
if (ret%4 == 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
int add = (max) ? 3 : 0;
|
||||||
|
ret = ((ret + add) / 4) * 4;
|
||||||
|
if ((_x + ret) >= xRes)
|
||||||
|
ret -= 4;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@@ -48,7 +48,6 @@
|
|||||||
#include <gui/color.h>
|
#include <gui/color.h>
|
||||||
#include <gui/pictureviewer.h>
|
#include <gui/pictureviewer.h>
|
||||||
#include <system/debug.h>
|
#include <system/debug.h>
|
||||||
#include <system/helpers.h>
|
|
||||||
#include <global.h>
|
#include <global.h>
|
||||||
#include <video.h>
|
#include <video.h>
|
||||||
#include <cs_api.h>
|
#include <cs_api.h>
|
||||||
@@ -514,7 +513,7 @@ fb_pixel_t* CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, co
|
|||||||
|
|
||||||
#ifdef BOXMODEL_CS_HD2
|
#ifdef BOXMODEL_CS_HD2
|
||||||
if (_dx%4 != 0) {
|
if (_dx%4 != 0) {
|
||||||
w_align = GetWidth4FB_HW_ACC(x, _dx, true);
|
w_align = getWidth4FB_HW_ACC(x, _dx, true);
|
||||||
if (w_align < _dx)
|
if (w_align < _dx)
|
||||||
_dx = w_align;
|
_dx = w_align;
|
||||||
offs_align = w_align - _dx;
|
offs_align = w_align - _dx;
|
||||||
@@ -1770,3 +1769,8 @@ bool CFrameBuffer::_checkFbArea(int _x, int _y, int _dx, int _dy, bool prev)
|
|||||||
void CFrameBuffer::mark(int , int , int , int )
|
void CFrameBuffer::mark(int , int , int , int )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t CFrameBuffer::getWidth4FB_HW_ACC(const uint32_t /*x*/, const uint32_t w, const bool /*max*/)
|
||||||
|
{
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
@@ -185,6 +185,8 @@ class CFrameBuffer : public sigc::trackable
|
|||||||
bool getActive() const; // is framebuffer active?
|
bool getActive() const; // is framebuffer active?
|
||||||
void setActive(bool enable); // is framebuffer active?
|
void setActive(bool enable); // is framebuffer active?
|
||||||
virtual void setupGXA() { return; }; // reinitialize stuff
|
virtual void setupGXA() { return; }; // reinitialize stuff
|
||||||
|
virtual bool needAlign4Blit() { return false; };
|
||||||
|
virtual uint32_t getWidth4FB_HW_ACC(const uint32_t x, const uint32_t w, const bool max=true);
|
||||||
|
|
||||||
void setTransparency( int tr = 0 );
|
void setTransparency( int tr = 0 );
|
||||||
virtual void setBlendMode(uint8_t mode = 1);
|
virtual void setBlendMode(uint8_t mode = 1);
|
||||||
|
Reference in New Issue
Block a user