vdr-plugin-softhddevice-drm-gles 1.4.0
openglosd.h
Go to the documentation of this file.
1
22#ifndef __SOFTHDDEVICE_OPENGLOSD_H
23#define __SOFTHDDEVICE_OPENGLOSD_H
24
25#include <EGL/egl.h>
26#include <EGL/eglext.h>
27#include <EGL/eglplatform.h>
28/*
29 * Hack:
30 * xlib.h via eglplatform.h: #define Status int
31 * X.h via eglplatform.h: #define CurrentTime 0L
32 *
33 * revert it, because it conflicts with vdr variables.
34 */
35#undef Status
36#undef CurrentTime
37
38#include <GLES2/gl2.h>
39#include <GLES2/gl2ext.h>
40#include <gbm.h>
41#include <drm_fourcc.h>
42
43#include <glm/glm.hpp>
44#include <glm/gtc/matrix_transform.hpp>
45#include <glm/gtc/type_ptr.hpp>
46#include <math.h>
47
48#include <ft2build.h>
49#include FT_FREETYPE_H
50#include FT_LCD_FILTER_H
51#include FT_STROKER_H
52
53#undef __FTERRORS_H__
54#define FT_ERRORDEF( e, v, s ) { e, s },
55#define FT_ERROR_START_LIST {
56#define FT_ERROR_END_LIST { 0, 0 } };
57const struct {
58 int code;
59 const char* message;
60} FT_Errors[] =
61#include FT_ERRORS_H
62
63#include <memory>
64#include <queue>
65
66#include <vdr/plugin.h>
67#include <vdr/osd.h>
68#include <vdr/thread.h>
69
70#include <stdint.h>
71extern "C"
72{
73#include <libavcodec/avcodec.h>
74}
75
76#include "audio.h"
77#include "videorender.h"
78#include "videostream.h"
79
80#include "softhddevice.h"
81
82struct sOglImage {
83 GLuint texture;
84 GLint width;
85 GLint height;
86 bool used;
87};
88
89/****************************************************************************************
90* Helpers
91****************************************************************************************/
92
93void ConvertColor(const GLint &colARGB, glm::vec4 &col);
94
95/****************************************************************************************
96* cShader
97****************************************************************************************/
103 stCount
105
106class cShader {
107private:
109 GLuint id;
110 bool Compile(const char *vertexCode, const char *fragmentCode);
111 bool CheckCompileErrors(GLuint object, bool program = false);
112public:
113 cShader(void) {};
114 virtual ~cShader(void) {};
115 bool Load(eShaderType type);
116 void Use(void);
117 void SetFloat (const GLchar *name, GLfloat value);
118 void SetInteger (const GLchar *name, GLint value);
119 void SetVector2f (const GLchar *name, GLfloat x, GLfloat y);
120 void SetVector3f (const GLchar *name, GLfloat x, GLfloat y, GLfloat z);
121 void SetVector4f (const GLchar *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
122 void SetMatrix4 (const GLchar *name, const glm::mat4 &matrix);
123};
124
125/****************************************************************************************
126* cOglGlyph
127****************************************************************************************/
128class cOglGlyph : public cListObject {
129private:
130 struct tKerning {
131 public:
132 tKerning(FT_ULong prevSym, GLfloat kerning = 0.0f) {
133 this->prevSym = prevSym;
134 this->kerning = kerning;
135 }
136 FT_ULong prevSym;
137 GLfloat kerning;
138 };
139 FT_ULong charCode;
142 int width;
145 cVector<tKerning> kerningCache;
146 GLuint texture;
147 void LoadTexture(FT_BitmapGlyph ftGlyph);
148public:
149 cOglGlyph(FT_ULong charCode, FT_BitmapGlyph ftGlyph);
150 virtual ~cOglGlyph();
151 FT_ULong CharCode(void) { return charCode; }
152 int AdvanceX(void) { return advanceX; }
153 int BearingLeft(void) const { return bearingLeft; }
154 int BearingTop(void) const { return bearingTop; }
155 int Width(void) const { return width; }
156 int Height(void) const { return height; }
157 int GetKerningCache(FT_ULong prevSym);
158 void SetKerningCache(FT_ULong prevSym, int kerning);
159 void BindTexture(void);
160};
161
162/****************************************************************************************
163* cOglAtlasGlyph
164****************************************************************************************/
165class cOglAtlasGlyph : public cListObject {
166private:
167 struct tKerning {
168 public:
169 tKerning(FT_ULong prevSym, GLfloat kerning = 0.0f) {
170 this->prevSym = prevSym;
171 this->kerning = kerning;
172 }
173 FT_ULong prevSym;
174 GLfloat kerning;
175 };
176 FT_ULong charCode;
179 int width;
183 float xoffset;
184 float yoffset;
185 cVector<tKerning> kerningCache;
186public:
187 cOglAtlasGlyph(FT_ULong charCode, float advanceX, float advanceY, float width, float height, float bearingLeft, float bearingTop, float xoffset, float yoffset);
188 virtual ~cOglAtlasGlyph();
189 FT_ULong CharCode(void) { return charCode; }
190 int AdvanceX(void) { return advanceX; }
191 int AdvanceY(void) { return advanceY; }
192 int BearingLeft(void) const { return bearingLeft; }
193 int BearingTop(void) const { return bearingTop; }
194 int Width(void) const { return width; }
195 int Height(void) const { return height; }
196 float XOffset(void) const { return xoffset; }
197 float YOffset(void) const { return yoffset; }
198 int GetKerningCache(FT_ULong prevSym);
199 void SetKerningCache(FT_ULong prevSym, int kerning);
200};
201
202/****************************************************************************************
203* cOglFontAtlas
204****************************************************************************************/
205#define MIN_CHARCODE 32
206#define MAX_CHARCODE 255
208private:
209 GLuint tex;
210 int w;
211 int h;
214public:
215 cOglFontAtlas(FT_Face face, int height);
216 virtual ~cOglFontAtlas(void);
217 cOglAtlasGlyph* GetGlyph(int sym) const;
218 int FontHeight(void) const { return fontheight; }
219 int Height(void) const { return h; }
220 int Width(void) const { return w; }
221 void BindTexture(void);
222};
223
224/****************************************************************************************
225* cOglFont
226****************************************************************************************/
227class cOglFont : public cListObject {
228private:
229 static bool initiated;
230 cString name;
231 int size;
234 static FT_Library ftLib;
235 FT_Face face;
236 static cList<cOglFont> *fonts;
237 mutable cList<cOglGlyph> glyphCache;
238 cOglFont(const char *fontName, int charHeight);
239 static void Init(void);
241public:
242 virtual ~cOglFont(void);
243 static cOglFont *Get(const char *name, int charHeight);
244 cOglFontAtlas *Atlas(void) { return atlas; };
245 static void Cleanup(void);
246 const char *Name(void) { return *name; };
247 int Size(void) { return size; };
248 int Bottom(void) {return bottom; };
249 int Height(void) {return height; };
250 cOglGlyph* Glyph(FT_ULong charCode) const;
251 int Kerning(cOglGlyph *glyph, FT_ULong prevSym) const;
252 int AtlasKerning(cOglAtlasGlyph *glyph, FT_ULong prevSym) const;
253};
254
255/****************************************************************************************
256* cOglFb
257* Framebuffer Object - OpenGL part of a Pixmap
258****************************************************************************************/
259class cOglFb {
260protected:
262 GLuint fb;
263 GLuint texture;
264 GLint width, height;
267public:
268 cOglFb(GLint width, GLint height, GLint viewPortWidth, GLint viewPortHeight);
269 virtual ~cOglFb(void);
270 bool Initiated(void) { return initiated; }
271 virtual bool Init(void);
272 void Bind(void);
273 void BindRead(void);
274 virtual void BindWrite(void);
275 virtual void Unbind(void);
276 bool BindTexture(void);
277 void Blit(GLint destX1, GLint destY1, GLint destX2, GLint destY2);
278 GLint Width(void) { return width; };
279 GLint Height(void) { return height; };
280 bool Scrollable(void) { return scrollable; };
281 GLint ViewportWidth(void) { return viewPortWidth; };
282 GLint ViewportHeight(void) { return viewPortHeight; };
283};
284
285/****************************************************************************************
286* cOglOutputFb
287* Output Framebuffer Object - holds texture which is our "output framebuffer"
288****************************************************************************************/
289class cOglOutputFb : public cOglFb {
290private:
291public:
292 GLuint fb;
293 GLuint texture;
294 cOglOutputFb(GLint width, GLint height);
295 virtual ~cOglOutputFb(void);
296 virtual bool Init(void);
297 virtual void BindWrite(void);
298 virtual void Unbind(void);
299};
300
301/****************************************************************************************
302* cOglVb
303* Vertex Buffer - OpenGl Vertices for the different drawing commands
304****************************************************************************************/
312 vbCount
314
315class cOglVb {
316private:
319 GLuint vao;
320 GLuint vbo;
326 GLuint drawMode;
327public:
328 cOglVb(int type);
329 virtual ~cOglVb(void);
330 bool Init(void);
331 void Bind(void);
332 void Unbind(void);
333 void ActivateShader(void);
334 void EnableBlending(void);
335 void DisableBlending(void);
336 void SetShaderColor(GLint color);
337 void SetShaderBorderColor(GLint bcolor);
338 void SetShaderTexture(GLint value);
339 void SetShaderAlpha(GLint alpha);
340 void SetShaderProjectionMatrix(GLint width, GLint height);
341 void SetVertexSubData(GLfloat *vertices, int count = 0);
342 void SetVertexData(GLfloat *vertices, int count = 0);
343 void DrawArrays(int count = 0);
344};
345
346/****************************************************************************************
347* cOpenGLCmd
348****************************************************************************************/
349class cOglCmd {
350protected:
352public:
353 cOglCmd(cOglFb *fb) { this->fb = fb; };
354 virtual ~cOglCmd(void) {};
355 virtual const char* Description(void) = 0;
356 virtual bool Execute(void) = 0;
357};
358
360private:
362public:
364 virtual ~cOglCmdInitOutputFb(void) {};
365 virtual const char* Description(void) { return "InitOutputFramebuffer"; }
366 virtual bool Execute(void);
367};
368
369class cOglCmdInitFb : public cOglCmd {
370private:
371 cCondWait *wait;
372public:
373 cOglCmdInitFb(cOglFb *fb, cCondWait *wait = NULL);
374 virtual ~cOglCmdInitFb(void) {};
375 virtual const char* Description(void) { return "InitFramebuffer"; }
376 virtual bool Execute(void);
377};
378
379class cOglCmdDeleteFb : public cOglCmd {
380public:
382 virtual ~cOglCmdDeleteFb(void) {};
383 virtual const char* Description(void) { return "DeleteFramebuffer"; }
384 virtual bool Execute(void);
385};
386
388private:
390 GLfloat x, y;
393 GLint bcolor;
394 GLint dirtyX;
395 GLint dirtyTop;
400public:
401 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, cSoftHdDevice *device);
403 virtual const char* Description(void) { return "Render Framebuffer to Buffer"; }
404 virtual bool Execute(void);
405};
406
408private:
410 GLfloat x, y;
411 GLint bcolor;
415public:
416 cOglCmdCopyBufferToOutputFb(cOglFb *fb, cOglOutputFb *oFb, GLint x, GLint y, int active, cSoftHdDevice *device, cVideoRender *render);
418 virtual const char* Description(void) { return "Copy buffer to OutputFramebuffer"; }
419 virtual bool Execute(void);
420};
421
422class cOglCmdFill : public cOglCmd {
423private:
424 GLint color;
425public:
426 cOglCmdFill(cOglFb *fb, GLint color);
427 virtual ~cOglCmdFill(void) {};
428 virtual const char* Description(void) { return "Fill"; }
429 virtual bool Execute(void);
430};
431
433private:
434 GLint color;
435public:
437 virtual ~cOglCmdBufferFill(void) {};
438 virtual const char* Description(void) { return "Fill Buffer "; }
439 virtual bool Execute(void);
440};
441
443private:
444 GLint x, y;
445 GLint width, height;
446 GLint color;
447public:
448 cOglCmdDrawRectangle(cOglFb *fb, GLint x, GLint y, GLint width, GLint height, GLint color);
449 virtual ~cOglCmdDrawRectangle(void) {};
450 virtual const char* Description(void) { return "DrawRectangle"; }
451 virtual bool Execute(void);
452};
453
455private:
456 GLint x, y;
457 GLint width, height;
458 GLint color;
460 GLfloat *CreateVerticesFull(int &numVertices);
461 GLfloat *CreateVerticesQuadrant(int &numVertices);
462 GLfloat *CreateVerticesHalf(int &numVertices);
463public:
464 cOglCmdDrawEllipse(cOglFb *fb, GLint x, GLint y, GLint width, GLint height, GLint color, GLint quadrants);
465 virtual ~cOglCmdDrawEllipse(void) {};
466 virtual const char* Description(void) { return "DrawEllipse "; }
467 virtual bool Execute(void);
468};
469
470class cOglCmdDrawSlope : public cOglCmd {
471private:
472 GLint x, y;
473 GLint width, height;
474 GLint color;
475 GLint type;
476public:
477 cOglCmdDrawSlope(cOglFb *fb, GLint x, GLint y, GLint width, GLint height, GLint color, GLint type);
478 virtual ~cOglCmdDrawSlope(void) {};
479 virtual const char* Description(void) { return "DrawSlope "; }
480 virtual bool Execute(void);
481};
482
483class cOglCmdDrawText : public cOglCmd {
484private:
485 GLint x, y;
486 GLint limitX;
489 cString fontName;
491 unsigned int *symbols;
492public:
493 cOglCmdDrawText(cOglFb *fb, GLint x, GLint y, unsigned int *symbols, GLint limitX, const char *name, int fontSize, tColor colorText, int length);
494 virtual ~cOglCmdDrawText(void);
495 virtual const char* Description(void) { return "DrawText "; }
496 virtual bool Execute(void);
497};
498
499class cOglCmdDrawImage : public cOglCmd {
500private:
501 tColor *argb;
502 GLint x, y, width, height;
504 GLfloat scaleX, scaleY;
505 GLint bcolor;
506public:
507 cOglCmdDrawImage(cOglFb *fb, tColor *argb, GLint width, GLint height, GLint x, GLint y, bool overlay = true, double scaleX = 1.0f, double scaleY = 1.0f);
508 virtual ~cOglCmdDrawImage(void);
509 virtual const char* Description(void) { return "Draw Image"; }
510 virtual bool Execute(void);
511};
512
514private:
515 sOglImage *imageRef;
516 GLint x, y;
517 GLfloat scaleX, scaleY;
518 GLint bcolor;
519public:
520 cOglCmdDrawTexture(cOglFb *fb, sOglImage *imageRef, GLint x, GLint y, double scaleX = 1.0f, double scaleY = 1.0f);
521 virtual ~cOglCmdDrawTexture(void) {};
522 virtual const char* Description(void) { return "Draw Texture"; }
523 virtual bool Execute(void);
524};
525
527private:
528 sOglImage *imageRef;
529 tColor *data;
530public:
531 cOglCmdStoreImage(sOglImage *imageRef, tColor *argb);
532 virtual ~cOglCmdStoreImage(void);
533 virtual const char* Description(void) { return "Store Image"; }
534 virtual bool Execute(void);
535};
536
537class cOglCmdDropImage : public cOglCmd {
538private:
539 sOglImage *imageRef;
540 cCondWait *wait;
541public:
542 cOglCmdDropImage(sOglImage *imageRef, cCondWait *wait);
543 virtual ~cOglCmdDropImage(void) {};
544 virtual const char* Description(void) { return "Drop Image"; }
545 virtual bool Execute(void);
546};
547
548/******************************************************************************
549* cOglThread
550******************************************************************************/
551#define OGL_MAX_OSDIMAGES 512
552#define OGL_CMDQUEUE_SIZE 200
553
554class cOglThread : public cThread {
555private:
556 cCondWait *startWait;
557 cCondWait *wait;
559 std::queue<cOglCmd*> commands;
564 bool InitOpenGL(void);
565 bool InitShaders(void);
566 void DeleteShaders(void);
567 bool InitVertexBuffers(void);
568 void DeleteVertexBuffers(void);
569 void Cleanup(void);
570 int GetFreeSlot(void);
571 void ClearSlot(int slot);
572 void eglAcquireContext(void);
573 void eglReleaseContext(void);
575protected:
576 virtual void Action(void);
577public:
578 cOglThread(cCondWait *startWait, int maxCacheSize, cSoftHdDevice *device);
579 virtual ~cOglThread();
580 void Stop(void);
581 void DoCmd(cOglCmd* cmd);
582 int StoreImage(const cImage &image);
583 void DropImageData(int imageHandle);
584 sOglImage *GetImageRef(int slot);
585 int MaxTextureSize(void) { return maxTextureSize; };
586};
587
588/****************************************************************************************
589* cOglPixmap
590****************************************************************************************/
591class cOglPixmap : public cPixmap {
592private:
594 std::shared_ptr<cOglThread> oglThread;
595 bool dirty;
596#ifdef GRIDPOINTS
597 cFont *tinyfont;
598 void DrawGridRect(const cRect &Rect, int offset, int size, tColor clr, tColor bg, const cFont *Font);
599 void DrawGridText(const cPoint &Point, const char *s, tColor ColorFg, tColor ColorBg, const cFont *Font, int Width = 0, int Height = 0, int Alignment = taDefault);
600#endif
601public:
602 cOglPixmap(std::shared_ptr<cOglThread> oglThread, int Layer, const cRect &ViewPort, const cRect &DrawPort = cRect::Null);
603 virtual ~cOglPixmap(void);
604 cOglFb *Fb(void) { return fb; };
605 int X(void) { return ViewPort().X(); };
606 int Y(void) { return ViewPort().Y(); };
607 virtual bool IsDirty(void) { return dirty; }
608 virtual void SetDirty(bool dirty = true) { this->dirty = dirty; }
609 virtual void SetLayer(int Layer);
610 virtual void SetAlpha(int Alpha);
611 virtual void SetTile(bool Tile);
612 virtual void SetViewPort(const cRect &Rect);
613 virtual void SetDrawPortPoint(const cPoint &Point, bool Dirty = true);
614 virtual void Clear(void);
615 virtual void Fill(tColor Color);
616 virtual void DrawImage(const cPoint &Point, const cImage &Image);
617 virtual void DrawImage(const cPoint &Point, int ImageHandle);
618 virtual void DrawScaledImage(const cPoint &Point, const cImage &Image, double FactorX = 1.0f, double FactorY = 1.0f, bool AntiAlias = false);
619 virtual void DrawScaledImage(const cPoint &Point, int ImageHandle, double FactorX = 1.0f, double FactorY = 1.0f, bool AntiAlias = false);
620 virtual void DrawPixel(const cPoint &Point, tColor Color);
621 virtual void DrawBitmap(const cPoint &Point, const cBitmap &Bitmap, tColor ColorFg = 0, tColor ColorBg = 0, bool Overlay = false);
622 virtual void DrawText(const cPoint &Point, const char *s, tColor ColorFg, tColor ColorBg, const cFont *Font, int Width = 0, int Height = 0, int Alignment = taDefault);
623 virtual void DrawRectangle(const cRect &Rect, tColor Color);
624 virtual void DrawEllipse(const cRect &Rect, tColor Color, int Quadrants = 0);
625 virtual void DrawSlope(const cRect &Rect, tColor Color, int Type);
626 virtual void Render(const cPixmap *Pixmap, const cRect &Source, const cPoint &Dest);
627 virtual void Copy(const cPixmap *Pixmap, const cRect &Source, const cPoint &Dest);
628 virtual void Scroll(const cPoint &Dest, const cRect &Source = cRect::Null);
629 virtual void Pan(const cPoint &Dest, const cRect &Source = cRect::Null);
630 virtual void MarkViewPortDirty(const cRect &Rect);
631 virtual void SetClean(void);
632};
633
634/******************************************************************************
635* cOglOsd
636******************************************************************************/
637class cOglOsd : public cOsd {
638private:
640 std::shared_ptr<cOglThread> oglThread;
641 cVector<cOglPixmap *> oglPixmaps;
647protected:
648public:
649 cOglOsd(int Left, int Top, uint Level, std::shared_ptr<cOglThread> oglThread, cSoftHdDevice *device);
650 virtual ~cOglOsd();
651 virtual eOsdError SetAreas(const tArea *Areas, int NumAreas);
652 virtual cPixmap *CreatePixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort = cRect::Null);
653 virtual void DestroyPixmap(cPixmap *Pixmap);
654 virtual void Flush(void);
655 virtual const cSize &MaxPixmapSize(void) const;
656 virtual void DrawScaledBitmap(int x, int y, const cBitmap &Bitmap, double FactorX, double FactorY, bool AntiAlias = false);
658};
659
660#endif //__SOFTHDDEVICE_OPENGLOSD_H
Audio and alsa module header file.
int BearingTop(void) const
Definition: openglosd.h:193
FT_ULong CharCode(void)
Definition: openglosd.h:189
int Width(void) const
Definition: openglosd.h:194
void SetKerningCache(FT_ULong prevSym, int kerning)
Definition: openglosd.cpp:519
cVector< tKerning > kerningCache
Definition: openglosd.h:185
int AdvanceY(void)
Definition: openglosd.h:191
int BearingLeft(void) const
Definition: openglosd.h:192
int GetKerningCache(FT_ULong prevSym)
Definition: openglosd.cpp:511
float YOffset(void) const
Definition: openglosd.h:197
FT_ULong charCode
Definition: openglosd.h:176
cOglAtlasGlyph(FT_ULong charCode, float advanceX, float advanceY, float width, float height, float bearingLeft, float bearingTop, float xoffset, float yoffset)
Definition: openglosd.cpp:492
float XOffset(void) const
Definition: openglosd.h:196
virtual ~cOglAtlasGlyph()
Definition: openglosd.cpp:507
int Height(void) const
Definition: openglosd.h:195
int AdvanceX(void)
Definition: openglosd.h:190
virtual ~cOglCmdBufferFill(void)
Definition: openglosd.h:437
cOglCmdBufferFill(cOglFb *fb, GLint color)
Definition: openglosd.cpp:1370
virtual const char * Description(void)
Definition: openglosd.h:438
virtual bool Execute(void)
Definition: openglosd.cpp:1374
virtual const char * Description(void)
Definition: openglosd.h:418
cOglCmdCopyBufferToOutputFb(cOglFb *fb, cOglOutputFb *oFb, GLint x, GLint y, int active, cSoftHdDevice *device, cVideoRender *render)
Definition: openglosd.cpp:1292
virtual ~cOglCmdCopyBufferToOutputFb(void)
Definition: openglosd.h:417
cSoftHdDevice * Device
Definition: openglosd.h:413
virtual bool Execute(void)
Definition: openglosd.cpp:1302
virtual ~cOglCmdDeleteFb(void)
Definition: openglosd.h:382
virtual bool Execute(void)
Definition: openglosd.cpp:1209
virtual const char * Description(void)
Definition: openglosd.h:383
cOglCmdDeleteFb(cOglFb *fb)
Definition: openglosd.cpp:1206
GLfloat * CreateVerticesFull(int &numVertices)
Definition: openglosd.cpp:1477
virtual ~cOglCmdDrawEllipse(void)
Definition: openglosd.h:465
virtual const char * Description(void)
Definition: openglosd.h:466
GLfloat * CreateVerticesQuadrant(int &numVertices)
Definition: openglosd.cpp:1492
virtual bool Execute(void)
Definition: openglosd.cpp:1438
GLfloat * CreateVerticesHalf(int &numVertices)
Definition: openglosd.cpp:1558
cOglCmdDrawEllipse(cOglFb *fb, GLint x, GLint y, GLint width, GLint height, GLint color, GLint quadrants)
quadrants: 0 draws the entire ellipse 1..4 draws only the first, second, third or fourth quadrant,...
Definition: openglosd.cpp:1429
virtual bool Execute(void)
Definition: openglosd.cpp:1883
virtual const char * Description(void)
Definition: openglosd.h:509
cOglCmdDrawImage(cOglFb *fb, tColor *argb, GLint width, GLint height, GLint x, GLint y, bool overlay=true, double scaleX=1.0f, double scaleY=1.0f)
Definition: openglosd.cpp:1867
virtual ~cOglCmdDrawImage(void)
Definition: openglosd.cpp:1879
GLfloat scaleY
Definition: openglosd.h:504
GLfloat scaleX
Definition: openglosd.h:504
tColor * argb
Definition: openglosd.h:501
virtual bool Execute(void)
Definition: openglosd.cpp:1391
cOglCmdDrawRectangle(cOglFb *fb, GLint x, GLint y, GLint width, GLint height, GLint color)
Definition: openglosd.cpp:1383
virtual ~cOglCmdDrawRectangle(void)
Definition: openglosd.h:449
virtual const char * Description(void)
Definition: openglosd.h:450
virtual bool Execute(void)
Definition: openglosd.cpp:1631
virtual const char * Description(void)
Definition: openglosd.h:479
virtual ~cOglCmdDrawSlope(void)
Definition: openglosd.h:478
cOglCmdDrawSlope(cOglFb *fb, GLint x, GLint y, GLint width, GLint height, GLint color, GLint type)
type: 0: horizontal, rising, lower 1: horizontal, rising, upper 2: horizontal, falling,...
Definition: openglosd.cpp:1622
cOglCmdDrawText(cOglFb *fb, GLint x, GLint y, unsigned int *symbols, GLint limitX, const char *name, int fontSize, tColor colorText, int length)
Definition: openglosd.cpp:1699
cString fontName
Definition: openglosd.h:489
unsigned int * symbols
Definition: openglosd.h:491
virtual bool Execute(void)
Definition: openglosd.cpp:1715
virtual ~cOglCmdDrawText(void)
Definition: openglosd.cpp:1711
virtual const char * Description(void)
Definition: openglosd.h:495
virtual const char * Description(void)
Definition: openglosd.h:522
virtual bool Execute(void)
Definition: openglosd.cpp:1954
virtual ~cOglCmdDrawTexture(void)
Definition: openglosd.h:521
cOglCmdDrawTexture(cOglFb *fb, sOglImage *imageRef, GLint x, GLint y, double scaleX=1.0f, double scaleY=1.0f)
Definition: openglosd.cpp:1945
sOglImage * imageRef
Definition: openglosd.h:515
virtual ~cOglCmdDropImage(void)
Definition: openglosd.h:543
sOglImage * imageRef
Definition: openglosd.h:539
cOglCmdDropImage(sOglImage *imageRef, cCondWait *wait)
Definition: openglosd.cpp:2024
virtual const char * Description(void)
Definition: openglosd.h:544
virtual bool Execute(void)
Definition: openglosd.cpp:2029
cCondWait * wait
Definition: openglosd.h:540
virtual const char * Description(void)
Definition: openglosd.h:428
cOglCmdFill(cOglFb *fb, GLint color)
Definition: openglosd.cpp:1355
virtual ~cOglCmdFill(void)
Definition: openglosd.h:427
GLint color
Definition: openglosd.h:424
virtual bool Execute(void)
Definition: openglosd.cpp:1359
virtual ~cOglCmdInitFb(void)
Definition: openglosd.h:374
virtual bool Execute(void)
Definition: openglosd.cpp:1197
cOglCmdInitFb(cOglFb *fb, cCondWait *wait=NULL)
Definition: openglosd.cpp:1193
virtual const char * Description(void)
Definition: openglosd.h:375
cCondWait * wait
Definition: openglosd.h:371
virtual const char * Description(void)
Definition: openglosd.h:365
cOglCmdInitOutputFb(cOglOutputFb *oFb)
Definition: openglosd.cpp:1182
cOglOutputFb * oFb
Definition: openglosd.h:361
virtual ~cOglCmdInitOutputFb(void)
Definition: openglosd.h:364
virtual bool Execute(void)
Definition: openglosd.cpp:1186
virtual bool Execute(void)
Definition: openglosd.cpp:1233
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, cSoftHdDevice *device)
Definition: openglosd.cpp:1217
virtual ~cOglCmdRenderFbToBufferFb(void)
Definition: openglosd.h:402
virtual const char * Description(void)
Definition: openglosd.h:403
cSoftHdDevice * Device
Definition: openglosd.h:399
virtual bool Execute(void)
Definition: openglosd.cpp:2001
sOglImage * imageRef
Definition: openglosd.h:528
cOglCmdStoreImage(sOglImage *imageRef, tColor *argb)
Definition: openglosd.cpp:1992
virtual ~cOglCmdStoreImage(void)
Definition: openglosd.cpp:1997
virtual const char * Description(void)
Definition: openglosd.h:533
virtual bool Execute(void)=0
virtual ~cOglCmd(void)
Definition: openglosd.h:354
cOglFb * fb
Definition: openglosd.h:351
virtual const char * Description(void)=0
cOglCmd(cOglFb *fb)
Definition: openglosd.h:353
virtual void Unbind(void)
Definition: openglosd.cpp:954
GLint viewPortHeight
Definition: openglosd.h:265
GLint ViewportHeight(void)
Definition: openglosd.h:282
GLint height
Definition: openglosd.h:264
void Bind(void)
Definition: openglosd.cpp:939
GLint Height(void)
Definition: openglosd.h:279
GLint width
Definition: openglosd.h:264
virtual void BindWrite(void)
Definition: openglosd.cpp:950
virtual ~cOglFb(void)
Definition: openglosd.cpp:909
GLint ViewportWidth(void)
Definition: openglosd.h:281
GLint Width(void)
Definition: openglosd.h:278
bool Scrollable(void)
Definition: openglosd.h:280
bool initiated
Definition: openglosd.h:261
bool Initiated(void)
Definition: openglosd.h:270
bool scrollable
Definition: openglosd.h:266
GLuint fb
Definition: openglosd.h:262
GLint viewPortWidth
Definition: openglosd.h:265
bool BindTexture(void)
Definition: openglosd.cpp:959
void Blit(GLint destX1, GLint destY1, GLint destX2, GLint destY2)
void BindRead(void)
Definition: openglosd.cpp:946
cOglFb(GLint width, GLint height, GLint viewPortWidth, GLint viewPortHeight)
Definition: openglosd.cpp:895
virtual bool Init(void)
Definition: openglosd.cpp:916
GLuint texture
Definition: openglosd.h:263
GLuint tex
Definition: openglosd.h:209
cOglAtlasGlyph * GetGlyph(int sym) const
Definition: openglosd.cpp:708
int FontHeight(void) const
Definition: openglosd.h:218
int Width(void) const
Definition: openglosd.h:220
virtual ~cOglFontAtlas(void)
Definition: openglosd.cpp:696
cOglAtlasGlyph * Glyph[MAX_CHARCODE - MIN_CHARCODE+1]
Definition: openglosd.h:213
int Height(void) const
Definition: openglosd.h:219
void BindTexture(void)
Definition: openglosd.cpp:715
cOglFontAtlas(FT_Face face, int height)
Definition: openglosd.cpp:526
int Height(void)
Definition: openglosd.h:249
static cList< cOglFont > * fonts
Definition: openglosd.h:236
static void Cleanup(void)
Definition: openglosd.cpp:786
cOglFontAtlas * Atlas(void)
Definition: openglosd.h:244
int Bottom(void)
Definition: openglosd.h:248
static void Init(void)
Definition: openglosd.cpp:777
cOglFontAtlas * atlas
Definition: openglosd.h:240
int size
Definition: openglosd.h:231
FT_Face face
Definition: openglosd.h:235
static cOglFont * Get(const char *name, int charHeight)
Definition: openglosd.cpp:763
virtual ~cOglFont(void)
Definition: openglosd.cpp:758
int Size(void)
Definition: openglosd.h:247
cList< cOglGlyph > glyphCache
Definition: openglosd.h:237
int Kerning(cOglGlyph *glyph, FT_ULong prevSym) const
Definition: openglosd.cpp:860
int bottom
Definition: openglosd.h:233
cOglFont(const char *fontName, int charHeight)
Definition: openglosd.cpp:726
int AtlasKerning(cOglAtlasGlyph *glyph, FT_ULong prevSym) const
Definition: openglosd.cpp:876
cOglGlyph * Glyph(FT_ULong charCode) const
Definition: openglosd.cpp:797
static FT_Library ftLib
Definition: openglosd.h:234
static bool initiated
Definition: openglosd.h:229
cString name
Definition: openglosd.h:230
int height
Definition: openglosd.h:232
const char * Name(void)
Definition: openglosd.h:246
int AdvanceX(void)
Definition: openglosd.h:152
void BindTexture(void)
Definition: openglosd.cpp:457
void SetKerningCache(FT_ULong prevSym, int kerning)
Definition: openglosd.cpp:453
FT_ULong charCode
Definition: openglosd.h:139
GLuint texture
Definition: openglosd.h:146
int width
Definition: openglosd.h:142
int BearingTop(void) const
Definition: openglosd.h:154
int bearingTop
Definition: openglosd.h:141
int advanceX
Definition: openglosd.h:144
void LoadTexture(FT_BitmapGlyph ftGlyph)
Definition: openglosd.cpp:461
int Height(void) const
Definition: openglosd.h:156
virtual ~cOglGlyph()
Definition: openglosd.cpp:440
int height
Definition: openglosd.h:143
int BearingLeft(void) const
Definition: openglosd.h:153
int bearingLeft
Definition: openglosd.h:140
int Width(void) const
Definition: openglosd.h:155
FT_ULong CharCode(void)
Definition: openglosd.h:151
cOglGlyph(FT_ULong charCode, FT_BitmapGlyph ftGlyph)
Definition: openglosd.cpp:430
cVector< tKerning > kerningCache
Definition: openglosd.h:145
int GetKerningCache(FT_ULong prevSym)
Definition: openglosd.cpp:445
virtual ~cOglOsd()
Definition: openglosd.cpp:2754
static cOglOutputFb * oFb
Definition: openglosd.h:657
virtual cPixmap * CreatePixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort=cRect::Null)
Definition: openglosd.cpp:2795
cOglOsd(int Left, int Top, uint Level, std::shared_ptr< cOglThread > oglThread, cSoftHdDevice *device)
Definition: openglosd.cpp:2729
std::shared_ptr< cOglThread > oglThread
Definition: openglosd.h:640
cOglFb * bFb
Definition: openglosd.h:639
virtual void Flush(void)
Definition: openglosd.cpp:2836
cSize maxPixmapSize
Definition: openglosd.h:643
bool isSubtitleOsd
Definition: openglosd.h:642
cSoftHdDevice * Device
Definition: openglosd.h:645
virtual void DrawScaledBitmap(int x, int y, const cBitmap &Bitmap, double FactorX, double FactorY, bool AntiAlias=false)
Definition: openglosd.cpp:2905
cRect * dirtyViewport
Definition: openglosd.h:644
virtual const cSize & MaxPixmapSize(void) const
Definition: openglosd.cpp:2769
virtual eOsdError SetAreas(const tArea *Areas, int NumAreas)
Definition: openglosd.cpp:2773
cVideoRender * Render
Definition: openglosd.h:646
virtual void DestroyPixmap(cPixmap *Pixmap)
Definition: openglosd.cpp:2815
cVector< cOglPixmap * > oglPixmaps
Definition: openglosd.h:641
virtual ~cOglOutputFb(void)
Definition: openglosd.cpp:978
virtual void Unbind(void)
Definition: openglosd.cpp:1016
GLuint texture
Definition: openglosd.h:293
virtual bool Init(void)
Definition: openglosd.cpp:985
cOglOutputFb(GLint width, GLint height)
Definition: openglosd.cpp:970
GLuint fb
Definition: openglosd.h:292
virtual void BindWrite(void)
Definition: openglosd.cpp:1009
virtual void DrawScaledImage(const cPoint &Point, int ImageHandle, double FactorX=1.0f, double FactorY=1.0f, bool AntiAlias=false)
virtual void DrawImage(const cPoint &Point, const cImage &Image)
Definition: openglosd.cpp:2427
virtual void DrawScaledImage(const cPoint &Point, const cImage &Image, double FactorX=1.0f, double FactorY=1.0f, bool AntiAlias=false)
virtual void Clear(void)
Definition: openglosd.cpp:2409
virtual void SetClean(void)
Definition: openglosd.cpp:2375
virtual void Fill(tColor Color)
Definition: openglosd.cpp:2418
bool dirty
Definition: openglosd.h:595
virtual void Render(const cPixmap *Pixmap, const cRect &Source, const cPoint &Dest)
Definition: openglosd.cpp:2614
virtual void SetAlpha(int Alpha)
Definition: openglosd.cpp:2385
virtual void MarkViewPortDirty(const cRect &Rect)
Definition: openglosd.cpp:2370
int X(void)
Definition: openglosd.h:605
virtual bool IsDirty(void)
Definition: openglosd.h:607
virtual void Copy(const cPixmap *Pixmap, const cRect &Source, const cPoint &Dest)
Definition: openglosd.cpp:2618
virtual ~cOglPixmap(void)
Definition: openglosd.cpp:2361
virtual void SetDrawPortPoint(const cPoint &Point, bool Dirty=true)
Definition: openglosd.cpp:2403
virtual void DrawEllipse(const cRect &Rect, tColor Color, int Quadrants=0)
Definition: openglosd.cpp:2586
virtual void SetViewPort(const cRect &Rect)
Definition: openglosd.cpp:2398
int Y(void)
Definition: openglosd.h:606
virtual void Scroll(const cPoint &Dest, const cRect &Source=cRect::Null)
Definition: openglosd.cpp:2622
virtual void SetDirty(bool dirty=true)
Definition: openglosd.h:608
cOglPixmap(std::shared_ptr< cOglThread > oglThread, int Layer, const cRect &ViewPort, const cRect &DrawPort=cRect::Null)
Definition: openglosd.cpp:2340
virtual void Pan(const cPoint &Dest, const cRect &Source=cRect::Null)
Definition: openglosd.cpp:2626
virtual void DrawRectangle(const cRect &Rect, tColor Color)
Definition: openglosd.cpp:2572
virtual void DrawSlope(const cRect &Rect, tColor Color, int Type)
Definition: openglosd.cpp:2600
cOglFb * Fb(void)
Definition: openglosd.h:604
virtual void DrawText(const cPoint &Point, const char *s, tColor ColorFg, tColor ColorBg, const cFont *Font, int Width=0, int Height=0, int Alignment=taDefault)
Definition: openglosd.cpp:2502
virtual void DrawPixel(const cPoint &Point, tColor Color)
Definition: openglosd.cpp:2465
std::shared_ptr< cOglThread > oglThread
Definition: openglosd.h:594
virtual void DrawBitmap(const cPoint &Point, const cBitmap &Bitmap, tColor ColorFg=0, tColor ColorBg=0, bool Overlay=false)
Definition: openglosd.cpp:2475
virtual void SetLayer(int Layer)
Definition: openglosd.cpp:2380
virtual void SetTile(bool Tile)
Definition: openglosd.cpp:2393
cOglFb * fb
Definition: openglosd.h:593
std::queue< cOglCmd * > commands
Definition: openglosd.h:559
long maxCacheSize
Definition: openglosd.h:563
long memCached
Definition: openglosd.h:562
int StoreImage(const cImage &image)
Definition: openglosd.cpp:2091
cVideoRender * Render
Definition: openglosd.h:574
sOglImage * GetImageRef(int slot)
Definition: openglosd.cpp:2173
bool InitOpenGL(void)
Definition: openglosd.cpp:2273
bool InitVertexBuffers(void)
Definition: openglosd.cpp:2311
GLint maxTextureSize
Definition: openglosd.h:560
void eglReleaseContext(void)
Definition: openglosd.cpp:2268
sOglImage imageCache[OGL_MAX_OSDIMAGES]
Definition: openglosd.h:561
int GetFreeSlot(void)
Definition: openglosd.cpp:2148
cCondWait * startWait
Definition: openglosd.h:556
void Stop(void)
Definition: openglosd.cpp:2062
bool InitShaders(void)
Definition: openglosd.cpp:2295
virtual ~cOglThread()
Definition: openglosd.cpp:2057
cOglThread(cCondWait *startWait, int maxCacheSize, cSoftHdDevice *device)
Definition: openglosd.cpp:2039
void Cleanup(void)
Definition: openglosd.cpp:2328
void DeleteShaders(void)
Definition: openglosd.cpp:2306
bool stalled
Definition: openglosd.h:558
virtual void Action(void)
Definition: openglosd.cpp:2192
cCondWait * wait
Definition: openglosd.h:557
void ClearSlot(int slot)
Definition: openglosd.cpp:2161
void DoCmd(cOglCmd *cmd)
Definition: openglosd.cpp:2072
void DropImageData(int imageHandle)
Definition: openglosd.cpp:2180
int MaxTextureSize(void)
Definition: openglosd.h:585
void DeleteVertexBuffers(void)
Definition: openglosd.cpp:2322
void eglAcquireContext(void)
Definition: openglosd.cpp:2263
GLuint texCoordsLoc
Definition: openglosd.h:322
int sizeVertex1
Definition: openglosd.h:323
GLuint vao
Definition: openglosd.h:319
void EnableBlending(void)
Definition: openglosd.cpp:1122
void SetVertexSubData(GLfloat *vertices, int count=0)
Definition: openglosd.cpp:1156
void SetShaderProjectionMatrix(GLint width, GLint height)
Definition: openglosd.cpp:1151
void SetShaderTexture(GLint value)
Definition: openglosd.cpp:1143
int numVertices
Definition: openglosd.h:325
void SetShaderColor(GLint color)
Definition: openglosd.cpp:1131
void DisableBlending(void)
Definition: openglosd.cpp:1127
GLuint positionLoc
Definition: openglosd.h:321
void Bind(void)
Definition: openglosd.cpp:1104
void SetShaderBorderColor(GLint bcolor)
Definition: openglosd.cpp:1137
eShaderType shader
Definition: openglosd.h:318
void DrawArrays(int count=0)
Definition: openglosd.cpp:1172
void SetShaderAlpha(GLint alpha)
Definition: openglosd.cpp:1147
void ActivateShader(void)
Definition: openglosd.cpp:1118
void SetVertexData(GLfloat *vertices, int count=0)
Definition: openglosd.cpp:1164
GLuint vbo
Definition: openglosd.h:320
bool Init(void)
Definition: openglosd.cpp:1041
GLuint drawMode
Definition: openglosd.h:326
eVertexBufferType type
Definition: openglosd.h:317
cOglVb(int type)
Definition: openglosd.cpp:1027
void Unbind(void)
Definition: openglosd.cpp:1114
int sizeVertex2
Definition: openglosd.h:324
virtual ~cOglVb(void)
Definition: openglosd.cpp:1038
void SetMatrix4(const GLchar *name, const glm::mat4 &matrix)
Definition: openglosd.cpp:372
void Use(void)
Definition: openglosd.cpp:308
void SetInteger(const GLchar *name, GLint value)
Definition: openglosd.cpp:356
void SetVector2f(const GLchar *name, GLfloat x, GLfloat y)
Definition: openglosd.cpp:360
void SetFloat(const GLchar *name, GLfloat value)
Definition: openglosd.cpp:352
bool Compile(const char *vertexCode, const char *fragmentCode)
Definition: openglosd.cpp:376
void SetVector3f(const GLchar *name, GLfloat x, GLfloat y, GLfloat z)
Definition: openglosd.cpp:364
bool CheckCompileErrors(GLuint object, bool program=false)
Definition: openglosd.cpp:405
eShaderType type
Definition: openglosd.h:108
GLuint id
Definition: openglosd.h:109
void SetVector4f(const GLchar *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Definition: openglosd.cpp:368
cShader(void)
Definition: openglosd.h:113
virtual ~cShader(void)
Definition: openglosd.h:114
bool Load(eShaderType type)
Definition: openglosd.cpp:312
cVideoRender - Video render class
Definition: videorender.h:122
#define OGL_MAX_OSDIMAGES
Definition: openglosd.h:551
const char * message
Definition: openglosd.h:59
#define MIN_CHARCODE
Definition: openglosd.h:205
const struct @0 FT_Errors[]
int code
Definition: openglosd.h:58
eShaderType
Definition: openglosd.h:98
@ stText
Definition: openglosd.h:102
@ stCount
Definition: openglosd.h:103
@ stTextureSwapBR
Definition: openglosd.h:101
@ stRect
Definition: openglosd.h:99
@ stTexture
Definition: openglosd.h:100
void ConvertColor(const GLint &colARGB, glm::vec4 &col)
Definition: openglosd.cpp:161
eVertexBufferType
Definition: openglosd.h:305
@ vbSlope
Definition: openglosd.h:308
@ vbCount
Definition: openglosd.h:312
@ vbText
Definition: openglosd.h:311
@ vbTexture
Definition: openglosd.h:309
@ vbEllipse
Definition: openglosd.h:307
@ vbRect
Definition: openglosd.h:306
@ vbTextureSwapBR
Definition: openglosd.h:310
#define MAX_CHARCODE
Definition: openglosd.h:206
Device class header file.
tKerning(FT_ULong prevSym, GLfloat kerning=0.0f)
Definition: openglosd.h:169
tKerning(FT_ULong prevSym, GLfloat kerning=0.0f)
Definition: openglosd.h:132
Rendering class header file.
Videostream class header file.