15#ifndef __SOFTHDDEVICE_OPENGLOSD_H
16#define __SOFTHDDEVICE_OPENGLOSD_H
25#include FT_LCD_FILTER_H
29#define FT_ERRORDEF( e, v, s ) { e, s },
30#define FT_ERROR_START_LIST {
31#define FT_ERROR_END_LIST { 0, 0 } };
40#include <glm/gtc/matrix_transform.hpp>
52#define BORDERCOLOR 0x00000000
91 bool Compile(
const char *,
const char *);
156#define MIN_CHARCODE 32
157#define MAX_CHARCODE 255
217 static void Init(
void);
231 virtual bool Init(
void);
233 virtual void Unbind(
void);
260 virtual bool Init(
void);
261 virtual void Unbind(
void);
338 virtual const char*
Description(
void) {
return "InitOutputFramebuffer"; }
350 virtual const char*
Description(
void) {
return "InitFramebuffer"; }
361 virtual const char*
Description(
void) {
return "DeleteFramebuffer"; }
367 cOglCmdRenderFbToBufferFb(
cOglFb *
fb,
cOglFb *buffer,
GLint x,
GLint y,
GLint transparency,
GLint drawPortX,
GLint drawPortY,
GLint dirtyX,
GLint dirtyTop,
GLint dirtyWidth,
GLint dirtyHeight,
bool alphablending)
382 virtual const char*
Description(
void) {
return "Render Framebuffer to Buffer"; }
408 virtual const char*
Description(
void) {
return "Copy buffer to OutputFramebuffer"; }
602#define OGL_MAX_OSDIMAGES 512
603#define OGL_CMDQUEUE_SIZE 200
632 virtual void Action(
void);
675 virtual void Clear(
void);
717 virtual void Flush(
void);
Glyph on a Texture Atlas.
float OffsetY(void) const
float OffsetX(void) const
cOglAtlasGlyph(FT_ULong charCode, FT_BitmapGlyph ftGlyph, float offsetX, float offsetY)
virtual ~cOglCmdBufferFill(void)
cOglCmdBufferFill(cOglFb *fb, GLint color)
virtual const char * Description(void)
virtual const char * Description(void)
cOglOutputFb * m_pOutputFramebuffer
virtual ~cOglCmdCopyBufferToOutputFb(void)
bool NeedsLockingAgainstStateChange(void)
cOglCmdCopyBufferToOutputFb(cOglFb *fb, cOglOutputFb *oFb, GLint x, GLint y, int active, cSoftHdDevice *device)
cSoftHdDevice * m_pDevice
virtual ~cOglCmdDeleteFb(void)
virtual const char * Description(void)
cOglCmdDeleteFb(cOglFb *fb)
virtual ~cOglCmdDrawEllipse(void)
virtual const char * Description(void)
cOglCmdDrawEllipse(cOglFb *fb, GLint x, GLint y, GLint width, GLint height, GLint color, GLint quadrants)
virtual ~cOglCmdDrawImage(void)
virtual const char * Description(void)
cOglCmdDrawImage(cOglFb *fb, tColor *argb, GLint width, GLint height, GLint x, GLint y, bool overlay=true, double scaleX=1.0f, double scaleY=1.0f)
cOglCmdDrawRectangle(cOglFb *fb, GLint x, GLint y, GLint width, GLint height, GLint color)
virtual ~cOglCmdDrawRectangle(void)
virtual const char * Description(void)
virtual const char * Description(void)
virtual ~cOglCmdDrawSlope(void)
cOglCmdDrawSlope(cOglFb *fb, GLint x, GLint y, GLint width, GLint height, GLint color, GLint type)
cOglCmdDrawText(cOglFb *fb, GLint x, GLint y, unsigned int *symbols, GLint limitX, const char *name, int fontSize, tColor colorText, int length)
unsigned int * m_pSymbols
virtual ~cOglCmdDrawText(void)
virtual const char * Description(void)
virtual const char * Description(void)
virtual ~cOglCmdDrawTexture(void)
cOglCmdDrawTexture(cOglFb *fb, sOglImage *imageRef, GLint x, GLint y, double scaleX=1.0f, double scaleY=1.0f)
virtual ~cOglCmdDropImage(void)
cOglCmdDropImage(sOglImage *imageRef, cCondWait *wait)
virtual const char * Description(void)
virtual const char * Description(void)
cOglCmdFill(cOglFb *fb, GLint color)
virtual ~cOglCmdFill(void)
virtual ~cOglCmdInitFb(void)
cOglCmdInitFb(cOglFb *fb, cCondWait *wait=NULL)
virtual const char * Description(void)
virtual const char * Description(void)
cOglCmdInitOutputFb(cOglOutputFb *oFb)
cOglOutputFb * m_pOutputFramebuffer
virtual ~cOglCmdInitOutputFb(void)
virtual ~cOglCmdRenderFbToBufferFb(void)
virtual const char * Description(void)
cOglCmdRenderFbToBufferFb(cOglFb *fb, cOglFb *buffer, GLint x, GLint y, GLint transparency, GLint drawPortX, GLint drawPortY, GLint dirtyX, GLint dirtyTop, GLint dirtyWidth, GLint dirtyHeight, bool alphablending)
cOglCmdStoreImage(sOglImage *imageRef, tColor *argb)
virtual ~cOglCmdStoreImage(void)
virtual const char * Description(void)
virtual bool NeedsLockingAgainstStateChange(void)
virtual bool Execute(void)=0
virtual const char * Description(void)=0
OpenGL Framebuffer/ Texture Object.
GLint ViewportHeight(void)
void Blit(GLint, GLint, GLint, GLint)
GLint ViewportWidth(void)
Texture Atlas for a Font.
cOglAtlasGlyph * m_pGlyph[MAX_CHARCODE - MIN_CHARCODE+1]
OpenGL Representation of a VDR Font.
cOglFontAtlas * Atlas(void)
cList< cOglGlyph > m_glyphCache
unsigned char * m_pBuffer
int BearingTop(void) const
int BearingLeft(void) const
cVector< tKerning > m_pKerningCache
Hardware Accelerated OpenGL OSD Implementation.
std::shared_ptr< cOglThread > m_pOglThread
pointer to thread, which executes the commands
bool m_isSubtitleOsd
true, if this is a subtitle osd
cSoftHdDevice * m_pDevice
pointer to cSofthdDevice
cOglFb * m_pBufferFramebuffer
all pixmaps are composed onto this framebuffer after each other, before this one is blit onto the OSD...
cRect m_pDirtyViewport
the dirty viewport
virtual const cSize & MaxPixmapSize(void) const
cVector< cOglPixmap * > m_pOglPixmaps
array of pixmaps
cSize m_maxPixmapSize
maximum allowed size of a pixmap (depends on the maximum OpenGL texture size)
Main Framebuffer/ Texture Object for OSD.
cOglOutputFb(GLint width, GLint height)
OpenGL Implementation of a cPixmap.
virtual bool IsDirty(void)
cOglFb * m_pFramebuffer
everything is drawn onto this framebuffer (one per pixmap)
std::shared_ptr< cOglThread > m_pOglThread
cOglFb * Framebuffer(void)
virtual void SetDirty(bool dirty=true)
virtual void DrawScaledImage(const cPoint &, int, double FactorX=1.0f, double FactorY=1.0f, bool AntiAlias=false)
bool m_dirty
true, if there was draw activity on the pixmap
virtual void DrawScaledImage(const cPoint &, const cImage &, double FactorX=1.0f, double FactorY=1.0f, bool AntiAlias=false)
OpenGL Commands Processing Thread.
sOglImage m_imageCache[OGL_MAX_OSDIMAGES]
void UnlockOutputFb(void)
virtual ~cOglThread(void)
std::queue< cOglCmd * > m_commands
Output Device Implementation.
virtual bool Execute(void)
#define OGL_MAX_OSDIMAGES
static void Cleanup(void)
virtual void Unbind(void)
bool CheckCompileErrors(GLuint, bool program=false)
virtual void SetClean(void)
void EnableBlending(void)
virtual void Unbind(void)
virtual bool Execute(void)
#define BORDERCOLOR
This is needed for the GLES2 GL_CLAMP_TO_BORDER workaround.
virtual bool Execute(void)
cOglGlyph * Glyph(FT_ULong) const
virtual void DrawRectangle(const cRect &, tColor)
static cOglOutputFb * OutputFramebuffer
main OSD output framebuffer - this keeps our finished "OSD" (one per OSD)
bool InitVertexBuffers(void)
virtual bool Execute(void)
virtual void Pan(const cPoint &, const cRect &Source=cRect::Null)
virtual bool Execute(void)
virtual bool Execute(void)
void CleanupImageCache(void)
void SetMatrix4(const GLchar *, const glm::mat4 &)
virtual void DrawPixel(const cPoint &, tColor)
void DrawTextInternal(const cPoint &, const char *, tColor, tColor, const cFont *, int Width=0, int Height=0, int Alignment=taDefault, bool isGridText=false)
virtual void DrawImage(const cPoint &, const cImage &)
void SetVector4f(const GLchar *, GLfloat, GLfloat, GLfloat, GLfloat)
virtual ~cOglPixmap(void)
static cOglFont * Get(const char *, int)
GLfloat * CreateVerticesFull(int &)
GLfloat * CreateVerticesHalf(int &)
virtual bool Execute(void)
GLfloat * CreateVerticesQuadrant(int &)
void SetFloat(const GLchar *, GLfloat)
void SetKerningCache(FT_ULong, int)
void SetInteger(const GLchar *, GLint)
void SetShaderColor(GLint)
virtual eOsdError SetAreas(const tArea *, int)
int Kerning(cOglGlyph *glyph, FT_ULong prevSym) const
virtual void DrawSlope(const cRect &, tColor, int)
virtual void DrawText(const cPoint &, const char *, tColor, tColor, const cFont *, int Width=0, int Height=0, int Alignment=taDefault)
void SetShaderTexture(GLint)
virtual bool Execute(void)
void DisableBlending(void)
void SetVertexSubData(GLfloat *, int count=0)
virtual void SetTile(bool)
void SetVector3f(const GLchar *, GLfloat, GLfloat, GLfloat)
virtual void DrawScaledBitmap(int, int, const cBitmap &, double, double, bool AntiAlias=false)
void SetShaderProjectionMatrix(GLint, GLint)
virtual bool Execute(void)
virtual void MarkViewPortDirty(const cRect &)
virtual void Scroll(const cPoint &, const cRect &Source=cRect::Null)
void SetVertexData(GLfloat *, int count=0)
virtual bool Execute(void)
cOglAtlasGlyph * GetGlyph(int) const
virtual bool Execute(void)
void DrawArrays(int count=0)
virtual void Action(void)
virtual ~cOglFontAtlas(void)
void ActivateShader(void)
virtual bool Execute(void)
int StoreImage(const cImage &)
bool Compile(const char *, const char *)
virtual cPixmap * CreatePixmap(int, const cRect &, const cRect &DrawPort=cRect::Null)
virtual void SetLayer(int)
void SetVector2f(const GLchar *, GLfloat, GLfloat)
virtual void Fill(tColor)
sOglImage * GetImageRef(int)
void SetShaderAlpha(GLint)
int GetKerningCache(FT_ULong)
virtual bool Execute(void)
virtual void SetDrawPortPoint(const cPoint &, bool Dirty=true)
virtual void DrawBitmap(const cPoint &, const cBitmap &, tColor ColorFg=0, tColor ColorBg=0, bool Overlay=false)
static FT_Library s_ftLib
void DeleteVertexBuffers(void)
virtual void Render(const cPixmap *, const cRect &, const cPoint &)
virtual void Copy(const cPixmap *, const cRect &, const cPoint &)
virtual void DrawEllipse(const cRect &, tColor, int Quadrants=0)
virtual void SetAlpha(int)
virtual void SetViewPort(const cRect &)
virtual bool Execute(void)
void SetShaderBorderColor(GLint)
virtual void DestroyPixmap(cPixmap *)
void eglAcquireContext(void)
static cList< cOglFont > * s_pFonts
virtual bool Execute(void)
const struct @0 FT_Errors[]
tKerning(FT_ULong prevSym, GLfloat kerning=0.0f)