vcl/Library_vcl.mk | 1 vcl/opengl/gdiimpl.cxx | 8 ++-- vcl/opengl/texture.cxx | 86 +++++++++++++++++++++++++++++++++++++++++++++++++ vcl/opengl/texture.hxx | 48 +++++++++++++++++++++++++++ 4 files changed, 139 insertions(+), 4 deletions(-)
New commits: commit 00d4466d599f1b2a2577010e643cb5ed7c224041 Author: Louis-Francis Ratté-Boulianne <[email protected]> Date: Wed Nov 5 16:36:22 2014 -0500 vcl: OpenGL coordinates are the inverse of VCL ones Change-Id: I6c45673d3f438323d43b042e41d3401be280f6a4 diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx index d2e2780..ef398b7 100644 --- a/vcl/opengl/gdiimpl.cxx +++ b/vcl/opengl/gdiimpl.cxx @@ -310,9 +310,9 @@ void OpenGLSalGraphicsImpl::DrawConvexPolygon( sal_uInt32 nPoints, const SalPoin void OpenGLSalGraphicsImpl::DrawRect( long nX, long nY, long nWidth, long nHeight ) { long nX1( nX ); - long nY1( nY ); + long nY1( GetHeight() - nY ); long nX2( nX + nWidth ); - long nY2( nY + nHeight ); + long nY2( GetHeight() - nY - nHeight ); const SalPoint aPoints[] = { { nX1, nY2 }, { nX1, nY1 }, { nX2, nY1 }, { nX2, nY2 }}; @@ -386,8 +386,8 @@ void OpenGLSalGraphicsImpl::DrawTextureRect( const Size& rSize, const SalTwoRect aTexCoord[0] = aTexCoord[2] = rPosAry.mnSrcX / (double) rSize.Width(); aTexCoord[4] = aTexCoord[6] = (rPosAry.mnSrcX + rPosAry.mnSrcWidth) / (double) rSize.Width(); - aTexCoord[3] = aTexCoord[5] = rPosAry.mnSrcY / (double) rSize.Height(); - aTexCoord[1] = aTexCoord[7] = (rPosAry.mnSrcY + rPosAry.mnSrcHeight) / (double) rSize.Height(); + aTexCoord[3] = aTexCoord[5] = (rSize.Height() - rPosAry.mnSrcY) / (double) rSize.Height(); + aTexCoord[1] = aTexCoord[7] = (rSize.Height() - rPosAry.mnSrcY - rPosAry.mnSrcHeight) / (double) rSize.Height(); glEnableVertexAttribArray( GL_ATTRIB_TEX ); glVertexAttribPointer( GL_ATTRIB_TEX, 2, GL_FLOAT, GL_FALSE, 0, aTexCoord ); commit 11899e969e4c6409548414c506cce044d9d3f63b Author: Louis-Francis Ratté-Boulianne <[email protected]> Date: Wed Nov 5 16:21:17 2014 -0500 vcl: Add class to control a OpenGL texture Change-Id: I76f3a27dfb4343db27804dacc98bd3dd57279d82 diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk index c085df8..28e6328 100644 --- a/vcl/Library_vcl.mk +++ b/vcl/Library_vcl.mk @@ -124,6 +124,7 @@ $(eval $(call gb_Library_use_externals,vcl,\ $(eval $(call gb_Library_add_exception_objects,vcl,\ vcl/opengl/gdiimpl \ vcl/opengl/salbmp \ + vcl/opengl/texture \ vcl/source/opengl/OpenGLContext \ vcl/source/opengl/OpenGLHelper \ vcl/source/window/openglwin \ diff --git a/vcl/opengl/texture.cxx b/vcl/opengl/texture.cxx new file mode 100644 index 0000000..5968cf7 --- /dev/null +++ b/vcl/opengl/texture.cxx @@ -0,0 +1,86 @@ +/* -*- 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 . + */ + +#include "texture.hxx" + +OpenGLTexture::OpenGLTexture() +: mnTexture( 0 ) +, mnWidth( -1 ) +, mnHeight( -1 ) +{ +} + +OpenGLTexture::OpenGLTexture( int nWidth, int nHeight ) +: mnTexture( 0 ) +, mnWidth( nWidth ) +, mnHeight( nHeight ) +{ + glGenTextures( 1, &mnTexture ); + glBindTexture( GL_TEXTURE_2D, mnTexture ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); + glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, nWidth, nHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL ); + glBindTexture( GL_TEXTURE_2D, 0 ); +} + +OpenGLTexture::~OpenGLTexture() +{ + if( mnTexture != 0 ) + glDeleteTextures( 1, &mnTexture ); +} + +GLuint OpenGLTexture::Id() const +{ + return mnTexture; +} + +void OpenGLTexture::Bind() +{ + glBindTexture( GL_TEXTURE_2D, mnTexture ); +} + +void OpenGLTexture::Unbind() +{ + glBindTexture( GL_TEXTURE_2D, 0 ); +} + +bool OpenGLTexture::Draw() +{ + const GLfloat aPosition[8] = { -1, -1, -1, 1, 1, 1, 1, -1 }; + const GLfloat aTexCoord[8] = { 0, 0, 0, 1, 1, 1, 1, 0 }; + + if( mnTexture == 0 ) + return false; + + glBindTexture( GL_TEXTURE_2D, mnTexture ); + glEnableVertexAttribArray( 0 ); + glVertexAttribPointer( 0, 2, GL_FLOAT, GL_FALSE, 0, aPosition ); + glEnableVertexAttribArray( 1 ); + glVertexAttribPointer( 1, 2, GL_FLOAT, GL_FALSE, 0, aTexCoord ); + glDrawArrays( GL_TRIANGLE_FAN, 0, 4 ); + glDisableVertexAttribArray( 0 ); + glDisableVertexAttribArray( 1 ); + glBindTexture( GL_TEXTURE_2D, 0 ); + + return true; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/opengl/texture.hxx b/vcl/opengl/texture.hxx new file mode 100644 index 0000000..6eb2473 --- /dev/null +++ b/vcl/opengl/texture.hxx @@ -0,0 +1,48 @@ +/* -*- 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_OPENGL_TEXTURE_H +#define INCLUDED_VCL_OPENGL_TEXTURE_H + +#include <boost/shared_ptr.hpp> +#include <GL/glew.h> + +class OpenGLTexture +{ +private: + GLuint mnTexture; + int mnWidth; + int mnHeight; + +public: + OpenGLTexture(); + OpenGLTexture( int nWidth, int nHeight ); + virtual ~OpenGLTexture(); + + GLuint Id() const; + void Bind(); + void Unbind(); + bool Draw(); +}; + +typedef boost::shared_ptr< OpenGLTexture > OpenGLTextureSharedPtr; + +#endif // INCLUDED_VCL_OPENGL_TEXTURE_H + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
