mirror of
				https://github.com/jojo61/vdr-plugin-softhdcuvid.git
				synced 2025-03-01 10:39:28 +00:00 
			
		
		
		
	Fix for Layer0 Pixmap alpha
This commit is contained in:
		| @@ -726,14 +726,15 @@ bool cOglCmdDeleteFb::Execute(void) { | ||||
|  | ||||
| //------------------ cOglCmdRenderFbToBufferFb -------------------- | ||||
| cOglCmdRenderFbToBufferFb::cOglCmdRenderFbToBufferFb(cOglFb *fb, cOglFb *buffer, GLint x, GLint y, GLint transparency, | ||||
|                                                      GLint drawPortX, GLint drawPortY) | ||||
|                                                      GLint drawPortX, GLint drawPortY, bool alphablending) | ||||
|     : cOglCmd(fb) { | ||||
|     this->buffer = buffer; | ||||
|     this->x = (GLfloat)x; | ||||
|     this->y = (GLfloat)y; | ||||
|     this->drawPortX = (GLfloat)drawPortX; | ||||
|     this->drawPortY = (GLfloat)drawPortY; | ||||
|     this->transparency = transparency; | ||||
|      this->transparency = (alphablending ? transparency : ALPHA_OPAQUE); | ||||
|     this->alphablending = alphablending; | ||||
| } | ||||
|  | ||||
| bool cOglCmdRenderFbToBufferFb::Execute(void) { | ||||
| @@ -773,11 +774,14 @@ bool cOglCmdRenderFbToBufferFb::Execute(void) { | ||||
|  | ||||
|     if (!fb->BindTexture()) | ||||
|         return false; | ||||
|  | ||||
|     if (!alphablending) | ||||
|         VertexBuffers[vbTexture]->DisableBlending(); | ||||
|     VertexBuffers[vbTexture]->Bind(); | ||||
|     VertexBuffers[vbTexture]->SetVertexData(quadVertices); | ||||
|     VertexBuffers[vbTexture]->DrawArrays(); | ||||
|     VertexBuffers[vbTexture]->Unbind(); | ||||
|     if (!alphablending) | ||||
|         VertexBuffers[vbTexture]->EnableBlending(); | ||||
|     buffer->Unbind(); | ||||
|  | ||||
|     return true; | ||||
| @@ -2096,6 +2100,14 @@ cPixmap *cOglOsd::CreatePixmap(int Layer, const cRect &ViewPort, const cRect &Dr | ||||
|     return NULL; | ||||
| } | ||||
|  | ||||
|  | ||||
| extern "C" {void VideoSetOsdSize(int, int ) ;} | ||||
|  | ||||
| void SetOsdPosition(int Left, int Top, int Width, int Height) { | ||||
|     printf("Set OSD Position %d %d\n",Width,Height); | ||||
|   VideoSetOsdSize( Width, Height) ;  | ||||
| } | ||||
|  | ||||
| void cOglOsd::DestroyPixmap(cPixmap *Pixmap) { | ||||
|     if (!oglThread->Active()) | ||||
|         return; | ||||
| @@ -2141,10 +2153,16 @@ void cOglOsd::Flush(void) { | ||||
|         for (int i = 0; i < oglPixmaps.Size(); i++) { | ||||
|             if (oglPixmaps[i]) { | ||||
|                 if (oglPixmaps[i]->Layer() == layer) { | ||||
|                     oglThread->DoCmd(new cOglCmdRenderFbToBufferFb( | ||||
|                         oglPixmaps[i]->Fb(), bFb, oglPixmaps[i]->ViewPort().X(), | ||||
|                         (!isSubtitleOsd) ? oglPixmaps[i]->ViewPort().Y() : 0, oglPixmaps[i]->Alpha(), | ||||
|                         oglPixmaps[i]->DrawPort().X(), oglPixmaps[i]->DrawPort().Y())); | ||||
|                     bool alphablending = layer == 0 ? false : true; // Decide wether to render (with alpha) or copy a pixmap | ||||
|                     oglThread->DoCmd(new cOglCmdRenderFbToBufferFb( oglPixmaps[i]->Fb(),  | ||||
|                                                                     bFb, | ||||
|                                                                     oglPixmaps[i]->ViewPort().X(),  | ||||
|                                                                     (!isSubtitleOsd) ? oglPixmaps[i]->ViewPort().Y() : 0, | ||||
|                                                                     oglPixmaps[i]->Alpha(),  | ||||
|                                                                     oglPixmaps[i]->DrawPort().X(),  | ||||
|                                                                     oglPixmaps[i]->DrawPort().Y(), | ||||
|                                                                     alphablending | ||||
|                                                                     )); | ||||
|                     oglPixmaps[i]->SetDirty(false); | ||||
|                 } | ||||
|             } | ||||
|   | ||||
| @@ -290,10 +290,11 @@ class cOglCmdRenderFbToBufferFb : public cOglCmd { | ||||
|     GLfloat x, y; | ||||
|     GLfloat drawPortX, drawPortY; | ||||
|     GLint transparency; | ||||
|     GLint alphablending; | ||||
|  | ||||
|   public: | ||||
|     cOglCmdRenderFbToBufferFb(cOglFb *fb, cOglFb *buffer, GLint x, GLint y, GLint transparency, GLint drawPortX, | ||||
|                               GLint drawPortY); | ||||
|                               GLint drawPortY, bool alphablending); | ||||
|     virtual ~cOglCmdRenderFbToBufferFb(void){}; | ||||
|     virtual const char *Description(void) { return "Render Framebuffer to Buffer"; } | ||||
|     virtual bool Execute(void); | ||||
| @@ -528,6 +529,7 @@ class cOglOsd : public cOsd { | ||||
|   public: | ||||
|     cOglOsd(int Left, int Top, uint Level, std::shared_ptr<cOglThread> oglThread); | ||||
|     virtual ~cOglOsd(); | ||||
|     static void SetOsdPosition(int Left, int Top, int Width, int Height); | ||||
|     virtual eOsdError SetAreas(const tArea *Areas, int NumAreas); | ||||
|     virtual cPixmap *CreatePixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort = cRect::Null); | ||||
|     virtual void DestroyPixmap(cPixmap *Pixmap); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user