diff options
Diffstat (limited to 'vcl/opengl/gdiimpl.cxx')
-rw-r--r-- | vcl/opengl/gdiimpl.cxx | 69 |
1 files changed, 44 insertions, 25 deletions
diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx index a92e5b3fca5e..58b4d62cca2e 100644 --- a/vcl/opengl/gdiimpl.cxx +++ b/vcl/opengl/gdiimpl.cxx @@ -544,8 +544,9 @@ bool OpenGLSalGraphicsImpl::UseSolid( SalColor nColor, sal_uInt8 nTransparency ) { if( nColor == SALCOLOR_NONE ) return false; - if( !UseProgram( "dumbVertexShader", "solidFragmentShader" ) ) + if (!UseProgram("combinedVertexShader", "combinedFragmentShader")) return false; + mpProgram->SetShaderType(DrawShaderType::Normal); mpProgram->SetColor( "color", nColor, nTransparency ); #ifdef DBG_UTIL mProgramIsSolidColor = true; @@ -560,8 +561,9 @@ bool OpenGLSalGraphicsImpl::UseSolid( SalColor nColor, double fTransparency ) { if( nColor == SALCOLOR_NONE ) return false; - if( !UseProgram( "dumbVertexShader", "solidFragmentShader" ) ) + if (!UseProgram("combinedVertexShader", "combinedFragmentShader")) return false; + mpProgram->SetShaderType(DrawShaderType::Normal); mpProgram->SetColorf( "color", nColor, fTransparency ); #ifdef DBG_UTIL mProgramIsSolidColor = true; @@ -925,12 +927,13 @@ bool OpenGLSalGraphicsImpl::UseLine(SalColor nColor, double fTransparency, GLflo { if( nColor == SALCOLOR_NONE ) return false; - if( !UseProgram( "lineVertexShader", "lineFragmentShader" ) ) + if (!UseProgram("combinedVertexShader", "combinedFragmentShader")) return false; + mpProgram->SetShaderType(DrawShaderType::Line); mpProgram->SetColorf("color", nColor, fTransparency); mpProgram->SetUniform1f("line_width", fLineWidth); // The width of the feather - area we make lineary transparent in VS. - // Good AA value is 0.5 + // Good AA value is 0.5f, no AA if feather 0.0f mpProgram->SetUniform1f("feather", bUseAA ? 0.5f : 0.0f); // We need blending or AA won't work correctly mpProgram->SetBlendMode( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); @@ -970,7 +973,7 @@ void OpenGLSalGraphicsImpl::DrawConvexPolygon( sal_uInt32 nPoints, const SalPoin #endif SalColor lastSolidColor = mProgramSolidColor; double lastSolidTransparency = mProgramSolidTransparency; - if (UseLine(lastSolidColor, lastSolidTransparency, 1.0f ,true)) + if (UseLine(lastSolidColor, lastSolidTransparency, 1.0f, true)) { for( i = 0; i < nPoints; ++i ) { @@ -1013,7 +1016,7 @@ void OpenGLSalGraphicsImpl::DrawConvexPolygon( const tools::Polygon& rPolygon, b #endif SalColor lastSolidColor = mProgramSolidColor; double lastSolidTransparency = mProgramSolidTransparency; - if (UseLine(lastSolidColor, lastSolidTransparency, 1.0f ,true)) + if (UseLine(lastSolidColor, lastSolidTransparency, 1.0f, true)) { for( i = 0; i < nPoints; ++i ) { @@ -1063,7 +1066,7 @@ void OpenGLSalGraphicsImpl::DrawTrapezoid( const basegfx::B2DTrapezoid& trapezoi #endif SalColor lastSolidColor = mProgramSolidColor; double lastSolidTransparency = mProgramSolidTransparency; - if (UseLine(lastSolidColor, lastSolidTransparency, 1.0f ,true)) + if (UseLine(lastSolidColor, lastSolidTransparency, 1.0f, true)) { for( i = 0; i < nPoints; ++i ) { @@ -1184,9 +1187,11 @@ void OpenGLSalGraphicsImpl::DrawTexture( OpenGLTexture& rTexture, const SalTwoRe SAL_INFO("vcl.opengl", "draw texture"); - if( !UseProgram( "textureVertexShader", "textureFragmentShader" ) ) + if (!UseProgram("combinedTextureVertexShader", "combinedTextureFragmentShader")) return; - mpProgram->SetTexture( "sampler", rTexture ); + mpProgram->SetShaderType(TextureShaderType::Normal); + mpProgram->SetIdentityTransform("transform"); + mpProgram->SetTexture("texture", rTexture); DrawTextureRect( rTexture, pPosAry, bInverted ); mpProgram->Clean(); } @@ -1393,9 +1398,11 @@ void OpenGLSalGraphicsImpl::DrawAlphaTexture( OpenGLTexture& rTexture, const Sal { OpenGLZone aZone; - if( !UseProgram( "textureVertexShader", "textureFragmentShader" ) ) + if (!UseProgram("combinedTextureVertexShader", "combinedTextureFragmentShader")) return; - mpProgram->SetTexture( "sampler", rTexture ); + mpProgram->SetShaderType(TextureShaderType::Normal); + mpProgram->SetIdentityTransform("transform"); + mpProgram->SetTexture("texture", rTexture); mpProgram->SetBlendMode( bPremultiplied ? GL_ONE : GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); DrawTextureRect( rTexture, rPosAry, bInverted ); @@ -1406,8 +1413,10 @@ void OpenGLSalGraphicsImpl::DrawTextureDiff( OpenGLTexture& rTexture, OpenGLText { OpenGLZone aZone; - if( !UseProgram( "maskedTextureVertexShader", "diffTextureFragmentShader" ) ) + if (!UseProgram("combinedTextureVertexShader", "combinedTextureFragmentShader")) return; + mpProgram->SetShaderType(TextureShaderType::Diff); + mpProgram->SetIdentityTransform("transform"); mpProgram->SetTexture( "texture", rTexture ); mpProgram->SetTexture( "mask", rMask ); mpProgram->SetBlendMode( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); @@ -1424,9 +1433,11 @@ void OpenGLSalGraphicsImpl::DrawTextureWithMask( OpenGLTexture& rTexture, OpenGL { OpenGLZone aZone; - if( !UseProgram( "maskedTextureVertexShader", "maskedTextureFragmentShader" ) ) + if (!UseProgram("combinedTextureVertexShader", "combinedTextureFragmentShader")) return; - mpProgram->SetTexture( "sampler", rTexture ); + mpProgram->SetShaderType(TextureShaderType::Masked); + mpProgram->SetIdentityTransform("transform"); + mpProgram->SetTexture( "texture", rTexture ); mpProgram->SetTexture( "mask", rMask ); mpProgram->SetBlendMode( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); @@ -1446,9 +1457,10 @@ void OpenGLSalGraphicsImpl::DrawBlendedTexture( OpenGLTexture& rTexture, OpenGLT { OpenGLZone aZone; - if( !UseProgram( "blendedTextureVertexShader", "blendedTextureFragmentShader" ) ) + if (!UseProgram("combinedTextureVertexShader", "combinedTextureFragmentShader")) return; - mpProgram->SetTexture( "sampler", rTexture ); + mpProgram->SetShaderType(TextureShaderType::Blend); + mpProgram->SetTexture( "texture", rTexture ); mpProgram->SetTexture( "mask", rMask ); mpProgram->SetTexture( "alpha", rAlpha ); @@ -1469,10 +1481,12 @@ void OpenGLSalGraphicsImpl::DrawMask( OpenGLTexture& rMask, SalColor nMaskColor, { OpenGLZone aZone; - if( !UseProgram( "textureVertexShader", "maskFragmentShader" ) ) + if (!UseProgram("combinedTextureVertexShader", "combinedTextureFragmentShader")) return; + mpProgram->SetShaderType(TextureShaderType::MaskedColor); + mpProgram->SetIdentityTransform("transform"); mpProgram->SetColor( "color", nMaskColor, 0 ); - mpProgram->SetTexture( "sampler", rMask ); + mpProgram->SetTexture("texture", rMask); mpProgram->SetBlendMode( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); DrawTextureRect( rMask, pPosAry ); mpProgram->Clean(); @@ -1530,15 +1544,16 @@ void OpenGLSalGraphicsImpl::FlushDeferredDrawing() } #endif - if( !UseProgram( "textureVertexShader", "maskFragmentShader" ) ) + if (!UseProgram("combinedTextureVertexShader", "combinedTextureFragmentShader")) return; - + mpProgram->SetShaderType(TextureShaderType::MaskedColor); + mpProgram->SetIdentityTransform("transform"); mpProgram->SetBlendMode(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); for (auto& rPair : mpAccumulatedTextures->getAccumulatedTexturesMap()) { OpenGLTexture& rTexture = rPair.second->maTexture; - mpProgram->SetTexture("sampler", rTexture); + mpProgram->SetTexture("texture", rTexture); for (auto& rColorTwoRectPair: rPair.second->maColorTextureDrawParametersMap) { mpProgram->SetColor("color", rColorTwoRectPair.first, 0); @@ -2048,11 +2063,13 @@ bool OpenGLSalGraphicsImpl::blendBitmap( VCL_GL_INFO( "::blendBitmap" ); PreDraw(); - if (!UseProgram("textureVertexShader", "textureFragmentShader")) + if (!UseProgram("combinedTextureVertexShader", "combinedTextureFragmentShader")) return true; + mpProgram->SetShaderType(TextureShaderType::Normal); + mpProgram->SetIdentityTransform("transform"); + mpProgram->SetTexture("texture", rTexture); mpProgram->SetBlendMode(GL_ZERO, GL_SRC_COLOR); - mpProgram->SetTexture("sampler", rTexture); DrawTextureRect(rTexture, rPosAry); mpProgram->Clean(); @@ -2332,12 +2349,14 @@ void OpenGLSalGraphicsImpl::doFlush() VCL_GL_INFO( "Texture height " << maOffscreenTex.GetHeight() << " vs. window height " << GetHeight() ); OpenGLProgram *pProgram = - mpWindowContext->UseProgram( "textureVertexShader", "textureFragmentShader", "// flush shader\n" ); // flush helps profiling + mpWindowContext->UseProgram("combinedTextureVertexShader", "combinedTextureFragmentShader", "// flush shader\n" ); // flush helps profiling if( !pProgram ) VCL_GL_INFO( "Can't compile simple copying shader !" ); else { - pProgram->SetTexture( "sampler", maOffscreenTex ); + pProgram->SetShaderType(TextureShaderType::Normal); + pProgram->SetIdentityTransform("transform"); + pProgram->SetTexture("texture", maOffscreenTex); SalTwoRect aPosAry( 0, 0, maOffscreenTex.GetWidth(), maOffscreenTex.GetHeight(), 0, 0, maOffscreenTex.GetWidth(), maOffscreenTex.GetHeight() ); |