Kaydet (Commit) 9ac5aa94 authored tarafından Louis-Francis Ratté-Boulianne's avatar Louis-Francis Ratté-Boulianne Kaydeden (comit) Markus Mohrhard

vcl: Use new size when scaling with filter in OpenGL backend

Change-Id: Ib5d12b0e57b537bbd1798121e80cd517d9c8f751
üst dc189f79
......@@ -106,7 +106,7 @@ private:
GLuint mnConvKernelSizeUniform;
GLuint mnConvOffsetsUniform;
bool ImplScaleFilter( GLenum nFilter );
bool ImplScaleFilter( const double& rScaleX, const double& rScaleY, GLenum nFilter );
void ImplCreateKernel( const double& fScale, const Kernel& rKernel, GLfloat*& pWeights, sal_uInt32& aKernelSize );
bool ImplScaleConvolution( const double& rScaleX, const double& rScaleY, const Kernel& aKernel );
......
......@@ -81,12 +81,17 @@ GLuint OpenGLSalBitmap::ImplGetConvolutionProgram()
return mnConvProgram;
}
bool OpenGLSalBitmap::ImplScaleFilter( GLenum nFilter )
bool OpenGLSalBitmap::ImplScaleFilter(
const double& rScaleX,
const double& rScaleY,
GLenum nFilter )
{
OpenGLTexture* pNewTex;
GLuint nProgram;
GLuint nFramebufferId;
GLenum nOldFilter;
int nNewWidth( mnWidth * rScaleX );
int nNewHeight( mnHeight * rScaleY );
nProgram = ImplGetTextureProgram();
if( nProgram == 0 )
......@@ -97,7 +102,7 @@ bool OpenGLSalBitmap::ImplScaleFilter( GLenum nFilter )
glUseProgram( nProgram );
glUniform1i( mnTexSamplerUniform, 0 );
pNewTex = new OpenGLTexture( mnWidth, mnHeight );
pNewTex = new OpenGLTexture( nNewWidth, nNewHeight );
glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, pNewTex->Id(), 0 );
mpTexture->Bind();
......@@ -111,6 +116,8 @@ bool OpenGLSalBitmap::ImplScaleFilter( GLenum nFilter )
glBindFramebuffer( GL_FRAMEBUFFER, 0 );
glDeleteFramebuffers( 1, &nFramebufferId );
mnWidth = nNewWidth;
mnHeight = nNewHeight;
mpTexture.reset( pNewTex );
CHECK_GL_ERROR();
......@@ -241,11 +248,11 @@ bool OpenGLSalBitmap::ImplScale( const double& rScaleX, const double& rScaleY, s
if( nScaleFlag == BMP_SCALE_FAST )
{
return ImplScaleFilter( GL_NEAREST );
return ImplScaleFilter( rScaleX, rScaleY, GL_NEAREST );
}
if( nScaleFlag == BMP_SCALE_BILINEAR )
{
return ImplScaleFilter( GL_LINEAR );
return ImplScaleFilter( rScaleX, rScaleY, GL_LINEAR );
}
else if( nScaleFlag == BMP_SCALE_SUPER )
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment