diff options
Diffstat (limited to 'vcl/inc/opengl')
-rw-r--r-- | vcl/inc/opengl/bmpop.hxx | 35 | ||||
-rw-r--r-- | vcl/inc/opengl/salbmp.hxx | 48 | ||||
-rw-r--r-- | vcl/inc/opengl/texture.hxx | 54 |
3 files changed, 126 insertions, 11 deletions
diff --git a/vcl/inc/opengl/bmpop.hxx b/vcl/inc/opengl/bmpop.hxx new file mode 100644 index 000000000000..d19410b2f253 --- /dev/null +++ b/vcl/inc/opengl/bmpop.hxx @@ -0,0 +1,35 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_VCL_INC_OPENGL_BMPOP_H +#define INCLUDED_VCL_INC_OPENGL_BMPOP_H + +class OpenGLSalBitmapOp +{ +public: + OpenGLSalBitmapOp() {}; + virtual ~OpenGLSalBitmapOp() {}; + + virtual bool Execute() = 0; + virtual void GetSize( Size& rSize ) const = 0; +}; + +#endif // INCLUDED_VCL_INC_OPENGL_BMPOP_H + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 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 diff --git a/vcl/inc/opengl/texture.hxx b/vcl/inc/opengl/texture.hxx new file mode 100644 index 000000000000..f9d3ad864291 --- /dev/null +++ b/vcl/inc/opengl/texture.hxx @@ -0,0 +1,54 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_VCL_INC_OPENGL_TEXTURE_H +#define INCLUDED_VCL_INC_OPENGL_TEXTURE_H + +#include <boost/shared_ptr.hpp> +#include <GL/glew.h> + +class OpenGLTexture +{ +private: + GLuint mnTexture; + int mnWidth; + int mnHeight; + GLenum mnFilter; + +public: + OpenGLTexture(); + OpenGLTexture( int nWidth, int nHeight ); + OpenGLTexture( int nWidth, int nHeight, int nFormat, int nType, sal_uInt8* pData ); + OpenGLTexture( int nX, int nY, int nWidth, int nHeight ); + virtual ~OpenGLTexture(); + + GLuint Id() const; + void Bind(); + void Unbind(); + bool Draw(); + + GLenum GetFilter() const; + void SetFilter( GLenum nFilter ); +}; + +typedef boost::shared_ptr< OpenGLTexture > OpenGLTextureSharedPtr; + +#endif // INCLUDED_VCL_INC_OPENGL_TEXTURE_H + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |