diff options
author | Louis-Francis Ratté-Boulianne <lfrb@collabora.com> | 2014-11-06 14:17:24 -0500 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@collabora.co.uk> | 2014-11-10 07:59:11 +0100 |
commit | 6282509c2fe81b7218af955639f01fc06ccd33cd (patch) | |
tree | 6d3f4cfb99672ed57a6ed172d1b3c5a89bf927cf /vcl/inc/opengl/salbmp.hxx | |
parent | b4daf82f84dc142c7b8ef14fc4110afae0da79e7 (diff) |
vcl: Add a way to resize an image using the GPU
Change-Id: I949e13277fa176d64d7fba9a57e3ca6f3f0dd732
Diffstat (limited to 'vcl/inc/opengl/salbmp.hxx')
-rw-r--r-- | vcl/inc/opengl/salbmp.hxx | 48 |
1 files changed, 37 insertions, 11 deletions
diff --git a/vcl/inc/opengl/salbmp.hxx b/vcl/inc/opengl/salbmp.hxx index 74c0fda4e9cb..6f7a03af09d4 100644 --- a/vcl/inc/opengl/salbmp.hxx +++ b/vcl/inc/opengl/salbmp.hxx @@ -24,9 +24,13 @@ #include <vcl/opengl/OpenGLContext.hxx> #include "vcl/salbtype.hxx" +#include "opengl/bmpop.hxx" +#include "opengl/texture.hxx" #include <salbmp.hxx> +#include <deque> + // - SalBitmap - struct BitmapBuffer; @@ -35,17 +39,18 @@ class BitmapPalette; class VCL_PLUGIN_PUBLIC OpenGLSalBitmap : public SalBitmap { private: - OpenGLContext* mpContext; - GLuint mnTexture; - bool mbDirtyTexture; - BitmapPalette maPalette; - basebmp::RawMemorySharedArray maUserBuffer; - sal_uInt16 mnBits; - sal_uInt16 mnBytesPerRow; - int mnWidth; - int mnHeight; - int mnTexWidth; - int mnTexHeight; + OpenGLContext* mpContext; + OpenGLTextureSharedPtr mpTexture; + bool mbDirtyTexture; + BitmapPalette maPalette; + basebmp::RawMemorySharedArray maUserBuffer; + sal_uInt16 mnBits; + sal_uInt16 mnBytesPerRow; + int mnWidth; + int mnHeight; + int mnBufWidth; + int mnBufHeight; + std::deque< OpenGLSalBitmapOp* > maPendingOps; public: OpenGLSalBitmap(); @@ -87,6 +92,27 @@ private: void DrawTexture( GLuint nTexture, const SalTwoRect& rPosAry ); bool AllocateUserData(); bool ReadTexture(); + +private: + + GLuint ImplGetTextureProgram(); + GLuint mnTexProgram; + GLuint mnTexSamplerUniform; + + GLuint ImplGetConvolutionProgram(); + GLuint mnConvProgram; + GLuint mnConvSamplerUniform; + GLuint mnConvKernelUniform; + GLuint mnConvKernelSizeUniform; + GLuint mnConvOffsetsUniform; + + bool ImplScaleFilter( 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 ); + +public: + + bool ImplScale( const double& rScaleX, const double& rScaleY, sal_uInt32 nScaleFlag ); }; #endif // INCLUDED_VCL_INC_OPENGL_SALBMP_H |