vcl/inc/opengl/salbmp.hxx | 2 vcl/inc/opengl/texture.hxx | 3 + vcl/inc/openglgdiimpl.hxx | 17 +++++- vcl/opengl/gdiimpl.cxx | 127 ++++++++++++++++++++++++++++++++------------- vcl/opengl/salbmp.cxx | 15 +++-- vcl/opengl/texture.cxx | 10 +++ vcl/opengl/x11/gdiimpl.cxx | 7 +- 7 files changed, 137 insertions(+), 44 deletions(-)
New commits: commit cde6111a538b11e30112a727ea777b36664c4c82 Author: Louis-Francis Ratté-Boulianne <[email protected]> Date: Mon Nov 10 13:46:12 2014 -0500 vcl: Use a different FBO when rendering using a VirtualDevice Change-Id: I8cb97a4057c06ca09adfcac8dcd3f61ac9508430 diff --git a/vcl/inc/opengl/salbmp.hxx b/vcl/inc/opengl/salbmp.hxx index 6f7a03a..77ac90b 100644 --- a/vcl/inc/opengl/salbmp.hxx +++ b/vcl/inc/opengl/salbmp.hxx @@ -81,7 +81,7 @@ public: public: - bool Create( OpenGLContext& rContext, long nX, long nY, long nWidth, long nHeight ); + bool Create( OpenGLContext& rContext, OpenGLTextureSharedPtr pTex, long nX, long nY, long nWidth, long nHeight ); bool Draw( OpenGLContext& rContext, const SalTwoRect& rPosAry ); GLuint GetTexture( OpenGLContext& rContext ) const; diff --git a/vcl/inc/opengl/texture.hxx b/vcl/inc/opengl/texture.hxx index f9d3ad8..c0b6541 100644 --- a/vcl/inc/opengl/texture.hxx +++ b/vcl/inc/opengl/texture.hxx @@ -39,6 +39,9 @@ public: virtual ~OpenGLTexture(); GLuint Id() const; + int GetWidth() const; + int GetHeight() const; + void Bind(); void Unbind(); bool Draw(); diff --git a/vcl/inc/openglgdiimpl.hxx b/vcl/inc/openglgdiimpl.hxx index cd1b7d4..5a11952 100644 --- a/vcl/inc/openglgdiimpl.hxx +++ b/vcl/inc/openglgdiimpl.hxx @@ -23,6 +23,8 @@ #include "salgdiimpl.hxx" #include <vcl/dllapi.h> +#include "opengl/texture.hxx" + #include <vcl/opengl/OpenGLContext.hxx> class SalFrame; @@ -36,6 +38,10 @@ protected: SalFrame* mpFrame; SalVirtualDevice* mpVDev; + bool mbOffscreen; + GLuint mnFramebufferId; + OpenGLTextureSharedPtr mpOffscreenTex; + SalColor mnLineColor; SalColor mnFillColor; @@ -90,6 +96,9 @@ protected: // operations to do after painting virtual void PostDraw(); + // enable/disable offscreen rendering + virtual void SetOffscreen( bool bOffscreen ); + public: virtual ~OpenGLSalGraphicsImpl (); diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx index dcc8af4..9a1b1d7 100644 --- a/vcl/opengl/gdiimpl.cxx +++ b/vcl/opengl/gdiimpl.cxx @@ -58,16 +58,21 @@ OpenGLSalGraphicsImpl::~OpenGLSalGraphicsImpl() void OpenGLSalGraphicsImpl::PreDraw() { maContext.makeCurrent(); + // TODO: lfrb: make sure the render target has the right size + if( mbOffscreen ) + glBindFramebuffer( GL_FRAMEBUFFER, mnFramebufferId ); glViewport( 0, 0, GetWidth(), GetHeight() ); } void OpenGLSalGraphicsImpl::PostDraw() { + if( mbOffscreen ) + glBindFramebuffer( GL_FRAMEBUFFER, 0 ); } void OpenGLSalGraphicsImpl::freeResources() { - // Delete shaders, programs and textures if not shared + // TODO Delete shaders, programs and textures if not shared } bool OpenGLSalGraphicsImpl::setClipRegion( const vcl::Region& rClip ) @@ -170,6 +175,38 @@ void OpenGLSalGraphicsImpl::SetROPFillColor( SalROPColor /*nROPColor*/ ) { } +// enable/disbale offscreen rendering +void OpenGLSalGraphicsImpl::SetOffscreen( bool bOffscreen ) +{ + if( bOffscreen == mbOffscreen ) + { + // Already disabled + if( !mbOffscreen ) + return; + + // Already enabled and same size + if( mpOffscreenTex->GetWidth() == GetWidth() && + mpOffscreenTex->GetHeight() == GetHeight() ) + return; + } + else + { + mbOffscreen = bOffscreen; + if( bOffscreen ) + glGenFramebuffers( 1, &mnFramebufferId ); + else + glDeleteFramebuffers( 1, &mnFramebufferId ); + } + + if( mbOffscreen ) + { + glBindFramebuffer( GL_FRAMEBUFFER, mnFramebufferId ); + mpOffscreenTex.reset( new OpenGLTexture( GetWidth(), GetHeight() ) ); + glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mpOffscreenTex->Id(), 0 ); + CHECK_GL_ERROR(); + } +} + bool OpenGLSalGraphicsImpl::CreateSolidProgram( void ) { mnSolidProgram = OpenGLHelper::LoadShaders( "solidVertexShader", "solidFragmentShader" ); @@ -861,7 +898,7 @@ SalBitmap* OpenGLSalGraphicsImpl::getBitmap( long nX, long nY, long nWidth, long SAL_INFO( "vcl.opengl", "::getBitmap " << nX << "," << nY << " " << nWidth << "x" << nHeight ); PreDraw(); - if( !pBitmap->Create( maContext, nX, nY, nWidth, nHeight ) ) + if( !pBitmap->Create( maContext, mpOffscreenTex, nX, nY, nWidth, nHeight ) ) { delete pBitmap; pBitmap = NULL; diff --git a/vcl/opengl/salbmp.cxx b/vcl/opengl/salbmp.cxx index 564426c..97dca8b 100644 --- a/vcl/opengl/salbmp.cxx +++ b/vcl/opengl/salbmp.cxx @@ -52,7 +52,7 @@ OpenGLSalBitmap::~OpenGLSalBitmap() SAL_INFO( "vcl.opengl", "~OpenGLSalBitmap" ); } -bool OpenGLSalBitmap::Create( OpenGLContext& rContext, long nX, long nY, long nWidth, long nHeight ) +bool OpenGLSalBitmap::Create( OpenGLContext& rContext, OpenGLTextureSharedPtr pTex, long nX, long nY, long nWidth, long nHeight ) { static const BitmapPalette aEmptyPalette; @@ -60,7 +60,6 @@ bool OpenGLSalBitmap::Create( OpenGLContext& rContext, long nX, long nY, long nW SAL_INFO( "vcl.opengl", "OpenGLSalBitmap::Create from FBO" ); mpContext = &rContext; - mpContext->makeCurrent(); mnWidth = nWidth; mnHeight = nHeight; mnBufWidth = 0; @@ -70,8 +69,13 @@ bool OpenGLSalBitmap::Create( OpenGLContext& rContext, long nX, long nY, long nW mnBits = 32; maPalette = aEmptyPalette; - mpTexture.reset( new OpenGLTexture( nX, nY, nWidth, nHeight ) ); + // TODO: lfrb: Crop texture if size doesn't match the texture one + if( pTex ) + mpTexture = pTex; + else + mpTexture.reset( new OpenGLTexture( nX, nY, nWidth, nHeight ) ); mbDirtyTexture = false; + SAL_INFO( "vcl.opengl", "Created texture " << mpTexture->Id() ); return true; } @@ -154,6 +158,7 @@ GLuint OpenGLSalBitmap::GetTexture( OpenGLContext& rContext ) const const_cast<OpenGLSalBitmap*>(this)->mpContext = &rContext; if( !mpTexture || mbDirtyTexture ) const_cast<OpenGLSalBitmap*>(this)->CreateTexture(); + SAL_INFO( "vcl.opengl", "Got texture " << mpTexture->Id() ); return mpTexture->Id(); } @@ -383,9 +388,9 @@ GLuint OpenGLSalBitmap::CreateTexture() } } - SAL_INFO( "vcl.opengl", "::CreateTexture" ); mpContext->makeCurrent(); mpTexture.reset( new OpenGLTexture (mnBufWidth, mnBufHeight, nFormat, nType, pData ) ); + SAL_INFO( "vcl.opengl", "Created texture " << mpTexture->Id() ); if( bAllocated ) delete pData; @@ -407,6 +412,8 @@ bool OpenGLSalBitmap::ReadTexture() GLuint nFramebufferId, nRenderbufferDepthId, nRenderbufferColorId; sal_uInt8* pData = maUserBuffer.get(); + SAL_INFO( "vcl.opengl", "::ReadTexture" ); + // TODO Check mnTexWidth and mnTexHeight mpContext->makeCurrent(); diff --git a/vcl/opengl/texture.cxx b/vcl/opengl/texture.cxx index 2770c20..0c8dc1d 100644 --- a/vcl/opengl/texture.cxx +++ b/vcl/opengl/texture.cxx @@ -95,6 +95,16 @@ GLuint OpenGLTexture::Id() const return mnTexture; } +int OpenGLTexture::GetWidth() const +{ + return mnWidth; +} + +int OpenGLTexture::GetHeight() const +{ + return mnHeight; +} + GLenum OpenGLTexture::GetFilter() const { return mnFilter; diff --git a/vcl/opengl/x11/gdiimpl.cxx b/vcl/opengl/x11/gdiimpl.cxx index 353ec76..6e803bd 100644 --- a/vcl/opengl/x11/gdiimpl.cxx +++ b/vcl/opengl/x11/gdiimpl.cxx @@ -64,12 +64,14 @@ void X11OpenGLSalGraphicsImpl::Init() { Window aWin = dynamic_cast<X11WindowProvider*>(mrParent.m_pFrame)->GetX11Window(); maContext.init( mrParent.GetXDisplay(), aWin, mrParent.m_nXScreen.getXScreen()); + SetOffscreen( false ); } else if( mrParent.m_pVDev ) { maContext.init( mrParent.GetXDisplay(), mrParent.m_pVDev->GetDrawable(), mrParent.m_pVDev->GetWidth(), mrParent.m_pVDev->GetHeight(), mrParent.m_nXScreen.getXScreen() ); + SetOffscreen( true ); } else { commit 5bb610be2f67e1752789c0f1b1a0ec6741751907 Author: Louis-Francis Ratté-Boulianne <[email protected]> Date: Mon Nov 10 13:29:52 2014 -0500 vcl: Remove unused shaders list Change-Id: I13a25a39cceb184c2bb2b48bc143a951ee982b26 diff --git a/vcl/inc/openglgdiimpl.hxx b/vcl/inc/openglgdiimpl.hxx index a1764f1..cd1b7d4 100644 --- a/vcl/inc/openglgdiimpl.hxx +++ b/vcl/inc/openglgdiimpl.hxx @@ -39,8 +39,6 @@ protected: SalColor mnLineColor; SalColor mnFillColor; - std::vector< GLuint > maShaders; - GLuint mnSolidProgram; GLuint mnColorUniform; commit 5a8e5e0e9e642c47cd988aa7d10fb8c717b7c7a7 Author: Louis-Francis Ratté-Boulianne <[email protected]> Date: Mon Nov 10 13:06:38 2014 -0500 vcl: Add methods to call before and after OpenGL rendering Change-Id: I937907a3e8eb8f841a2eed6199e86d022be7dc16 diff --git a/vcl/inc/openglgdiimpl.hxx b/vcl/inc/openglgdiimpl.hxx index 34c2607..a1764f1 100644 --- a/vcl/inc/openglgdiimpl.hxx +++ b/vcl/inc/openglgdiimpl.hxx @@ -86,6 +86,12 @@ protected: // get the height of the device virtual GLfloat GetHeight() const = 0; + // operations to do before painting + virtual void PreDraw(); + + // operations to do after painting + virtual void PostDraw(); + public: virtual ~OpenGLSalGraphicsImpl (); diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx index dcee9e8..dcc8af4 100644 --- a/vcl/opengl/gdiimpl.cxx +++ b/vcl/opengl/gdiimpl.cxx @@ -55,6 +55,16 @@ OpenGLSalGraphicsImpl::~OpenGLSalGraphicsImpl() { } +void OpenGLSalGraphicsImpl::PreDraw() +{ + maContext.makeCurrent(); + glViewport( 0, 0, GetWidth(), GetHeight() ); +} + +void OpenGLSalGraphicsImpl::PostDraw() +{ +} + void OpenGLSalGraphicsImpl::freeResources() { // Delete shaders, programs and textures if not shared @@ -489,11 +499,11 @@ void OpenGLSalGraphicsImpl::drawPixel( long nX, long nY ) SAL_INFO( "vcl.opengl", "::drawPixel" ); if( mnLineColor != SALCOLOR_NONE ) { - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); BeginSolid( mnLineColor ); DrawPoint( nX, nY ); EndSolid(); + PostDraw(); } } @@ -502,11 +512,11 @@ void OpenGLSalGraphicsImpl::drawPixel( long nX, long nY, SalColor nSalColor ) SAL_INFO( "vcl.opengl", "::drawPixel" ); if( nSalColor != SALCOLOR_NONE ) { - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); BeginSolid( nSalColor ); DrawPoint( nX, nY ); EndSolid(); + PostDraw(); } } @@ -515,19 +525,18 @@ void OpenGLSalGraphicsImpl::drawLine( long nX1, long nY1, long nX2, long nY2 ) SAL_INFO( "vcl.opengl", "::drawLine" ); if( mnLineColor != SALCOLOR_NONE ) { - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); BeginSolid( mnLineColor ); DrawLine( nX1, nY1, nX2, nY2 ); EndSolid(); + PostDraw(); } } void OpenGLSalGraphicsImpl::drawRect( long nX, long nY, long nWidth, long nHeight ) { SAL_INFO( "vcl.opengl", "::drawRect" ); - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); if( mnFillColor != SALCOLOR_NONE ) { @@ -549,19 +558,21 @@ void OpenGLSalGraphicsImpl::drawRect( long nX, long nY, long nWidth, long nHeigh DrawLines( 4, aPoints, true ); EndSolid(); } + + PostDraw(); } void OpenGLSalGraphicsImpl::drawPolyLine( sal_uInt32 nPoints, const SalPoint* pPtAry ) { SAL_INFO( "vcl.opengl", "::drawPolyLine" ); - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); if( mnLineColor != SALCOLOR_NONE && nPoints > 1 ) { + PreDraw(); BeginSolid( mnLineColor ); DrawLines( nPoints, pPtAry, false ); EndSolid(); + PostDraw(); } } @@ -582,8 +593,7 @@ void OpenGLSalGraphicsImpl::drawPolygon( sal_uInt32 nPoints, const SalPoint* pPt return; } - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); if( mnFillColor != SALCOLOR_NONE ) { @@ -598,6 +608,8 @@ void OpenGLSalGraphicsImpl::drawPolygon( sal_uInt32 nPoints, const SalPoint* pPt DrawLines( nPoints, pPtAry, true ); EndSolid(); } + + PostDraw(); } void OpenGLSalGraphicsImpl::drawPolyPolygon( sal_uInt32 nPoly, const sal_uInt32* pPoints, PCONSTSALPOINT* pPtAry ) @@ -606,8 +618,7 @@ void OpenGLSalGraphicsImpl::drawPolyPolygon( sal_uInt32 nPoly, const sal_uInt32* if( nPoly <= 0 ) return; - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); if( mnFillColor != SALCOLOR_NONE ) { @@ -625,6 +636,8 @@ void OpenGLSalGraphicsImpl::drawPolyPolygon( sal_uInt32 nPoly, const sal_uInt32* DrawLines( pPoints[i], pPtAry[i], true ); EndSolid(); } + + PostDraw(); } bool OpenGLSalGraphicsImpl::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPolygon, double fTransparency ) @@ -633,8 +646,7 @@ bool OpenGLSalGraphicsImpl::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rP if( rPolyPolygon.count() <= 0 ) return true; - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); if( mnFillColor != SALCOLOR_NONE ) { @@ -647,6 +659,8 @@ bool OpenGLSalGraphicsImpl::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rP EndSolid(); } + PostDraw(); + return true; } @@ -718,8 +732,7 @@ bool OpenGLSalGraphicsImpl::drawPolyLine( aPolygon.transform(basegfx::tools::createScaleB2DHomMatrix(1.0, rLineWidth.getY() / rLineWidth.getX())); } - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); BeginSolid( mnLineColor, fTransparency ); for( sal_uInt32 i = 0; i < aAreaPolyPoly.count(); i++ ) { @@ -727,6 +740,7 @@ bool OpenGLSalGraphicsImpl::drawPolyLine( DrawPolyPolygon( aOnePoly ); } EndSolid(); + PostDraw(); return true; } @@ -798,9 +812,9 @@ void OpenGLSalGraphicsImpl::drawBitmap( const SalTwoRect& rPosAry, const SalBitm const Size aSize = rSalBitmap.GetSize(); SAL_INFO( "vcl.opengl", "::drawBitmap" ); - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); DrawTexture( nTexture, aSize, rPosAry ); + PostDraw(); } void OpenGLSalGraphicsImpl::drawBitmap( @@ -822,9 +836,9 @@ void OpenGLSalGraphicsImpl::drawBitmap( const GLuint nMask( rMask.GetTexture( maContext ) ); SAL_INFO( "vcl.opengl", "::drawBitmap with MASK" ); - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); DrawTextureWithMask( nTexture, nMask, rBitmap.GetSize(), rPosAry ); + PostDraw(); } void OpenGLSalGraphicsImpl::drawMask( @@ -836,9 +850,9 @@ void OpenGLSalGraphicsImpl::drawMask( const GLuint nTexture( rBitmap.GetTexture( maContext ) ); SAL_INFO( "vcl.opengl", "::drawMask" ); - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); DrawMask( nTexture, nMaskColor, rPosAry ); + PostDraw(); } SalBitmap* OpenGLSalGraphicsImpl::getBitmap( long nX, long nY, long nWidth, long nHeight ) @@ -846,11 +860,13 @@ SalBitmap* OpenGLSalGraphicsImpl::getBitmap( long nX, long nY, long nWidth, long OpenGLSalBitmap* pBitmap = new OpenGLSalBitmap; SAL_INFO( "vcl.opengl", "::getBitmap " << nX << "," << nY << " " << nWidth << "x" << nHeight ); + PreDraw(); if( !pBitmap->Create( maContext, nX, nY, nWidth, nHeight ) ) { delete pBitmap; pBitmap = NULL; } + PostDraw(); return pBitmap; } @@ -858,9 +874,9 @@ SalColor OpenGLSalGraphicsImpl::getPixel( long nX, long nY ) { char pixel[3]; - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); glReadPixels( nX, nY, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel); + PostDraw(); return MAKE_SALCOLOR( pixel[0], pixel[1], pixel[2] ); } @@ -874,8 +890,7 @@ void OpenGLSalGraphicsImpl::invert( // * SAL_INVERT_50 (50/50 pattern?) // * SAL_INVERT_TRACKFRAME (dash-line rectangle?) - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); if( nFlags & SAL_INVERT_TRACKFRAME ) { @@ -891,12 +906,13 @@ void OpenGLSalGraphicsImpl::invert( DrawRect( nX, nY, nWidth, nHeight ); EndInvert(); } + + PostDraw(); } void OpenGLSalGraphicsImpl::invert( sal_uInt32 nPoints, const SalPoint* pPtAry, SalInvert nFlags ) { - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); if( nFlags & SAL_INVERT_TRACKFRAME ) { @@ -912,6 +928,8 @@ void OpenGLSalGraphicsImpl::invert( sal_uInt32 nPoints, const SalPoint* pPtAry, DrawPolygon( nPoints, pPtAry ); EndInvert(); } + + PostDraw(); } bool OpenGLSalGraphicsImpl::drawEPS( @@ -946,9 +964,9 @@ bool OpenGLSalGraphicsImpl::drawAlphaBitmap( const GLuint nAlpha( rAlpha.GetTexture( maContext ) ); SAL_INFO( "vcl.opengl", "::drawAlphaBitmap" ); - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); DrawTextureWithMask( nTexture, nAlpha, rBitmap.GetSize(), rPosAry ); + PostDraw(); return true; } @@ -977,9 +995,11 @@ bool OpenGLSalGraphicsImpl::drawAlphaRect( SAL_INFO( "vcl.opengl", "::drawAlphaRect" ); if( mnFillColor != SALCOLOR_NONE && nTransparency < 100 ) { + PreDraw(); BeginSolid( mnFillColor, nTransparency ); DrawRect( nX, nY, nWidth, nHeight ); EndSolid(); + PostDraw(); } return true; diff --git a/vcl/opengl/x11/gdiimpl.cxx b/vcl/opengl/x11/gdiimpl.cxx index 11735edb..353ec76 100644 --- a/vcl/opengl/x11/gdiimpl.cxx +++ b/vcl/opengl/x11/gdiimpl.cxx @@ -114,8 +114,7 @@ bool X11OpenGLSalGraphicsImpl::RenderPixmapToScreen( X11Pixmap* pPixmap, int nX, pGlxPixmap = glXCreatePixmap( pDisplay, pFbConfig, pPixmap->GetPixmap(), aAttribs); XSync( pDisplay, 0 ); - maContext.makeCurrent(); - glViewport( 0, 0, GetWidth(), GetHeight() ); + PreDraw(); glGenTextures( 1, &nTexture ); glActiveTexture( GL_TEXTURE0 ); @@ -133,6 +132,8 @@ bool X11OpenGLSalGraphicsImpl::RenderPixmapToScreen( X11Pixmap* pPixmap, int nX, glDeleteTextures( 1, &nTexture ); glXDestroyPixmap( pDisplay, pGlxPixmap ); + PostDraw(); + return true; } commit aa40d569de20cec64b534fa513b811891d81ccc8 Author: Louis-Francis Ratté-Boulianne <[email protected]> Date: Mon Nov 10 10:12:20 2014 -0500 vcl: Fix pixel drawing with OpenGL Change-Id: I5d8e80baec9537e0c5913d821e26566409fe5261 diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx index 7094727..dcee9e8 100644 --- a/vcl/opengl/gdiimpl.cxx +++ b/vcl/opengl/gdiimpl.cxx @@ -278,7 +278,7 @@ void OpenGLSalGraphicsImpl::DrawPoint( long nX, long nY ) pPoint[1] = 2 * (GetHeight() - nY) / GetHeight() - 1.0f; glEnableVertexAttribArray( GL_ATTRIB_POS ); - glVertexAttribPointer( GL_ATTRIB_POS, 2, GL_UNSIGNED_SHORT, GL_FALSE, 0, pPoint ); + glVertexAttribPointer( GL_ATTRIB_POS, 2, GL_FLOAT, GL_FALSE, 0, pPoint ); glDrawArrays( GL_POINTS, 0, 1 ); glDisableVertexAttribArray( GL_ATTRIB_POS ); }
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
