[Libreoffice-commits] core.git: Branch 'feature/opengl-vcl' - 5 commits - vcl/inc vcl/opengl vcl/unx vcl/workben
Markus Mohrhard
markus.mohrhard at collabora.co.uk
Sat Nov 8 11:13:33 PST 2014
vcl/inc/openglgdiimpl.hxx | 3 +++
vcl/inc/salgdiimpl.hxx | 3 +++
vcl/opengl/gdiimpl.cxx | 34 ++++++++++++++++++++++++++++------
vcl/unx/generic/gdi/gdiimpl.cxx | 6 ++++++
vcl/unx/generic/gdi/gdiimpl.hxx | 2 ++
vcl/unx/generic/gdi/salgdi.cxx | 3 ++-
vcl/workben/vcldemo.cxx | 27 +++++++++++++--------------
7 files changed, 57 insertions(+), 21 deletions(-)
New commits:
commit 79d3cc082de625a6691302c4b0bc0bfe3dcf2a9c
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date: Sat Nov 8 20:12:34 2014 +0100
improvement for ellipse rendering
Change-Id: I0ce74b77e0b08ddde5b93cf9e9da2ee7e0a1fdea
diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx
index d9a676f..161de3a 100644
--- a/vcl/opengl/gdiimpl.cxx
+++ b/vcl/opengl/gdiimpl.cxx
@@ -363,18 +363,20 @@ void OpenGLSalGraphicsImpl::DrawPolygon( sal_uInt32 nPoints, const SalPoint* pPt
{
const ::basegfx::B2DPolygon& aResult(
::basegfx::triangulator::triangulate( aPolygon ) );
- std::vector<GLushort> aVertices(aResult.count() * 2);
+ std::vector<GLfloat> aVertices(aResult.count() * 2);
sal_uInt32 j( 0 );
+ float nHeight = GetHeight();
+ float nWidth = GetWidth();
for( sal_uInt32 i = 0; i < aResult.count(); i++ )
{
const ::basegfx::B2DPoint& rPt( aResult.getB2DPoint(i) );
- aVertices[j++] = rPt.getX();
- aVertices[j++] = rPt.getY();
+ aVertices[j++] = 2 * rPt.getX() / nWidth - 1.0f;
+ aVertices[j++] = 2 * rPt.getY() / nHeight - 1.0f;
}
glEnableVertexAttribArray( GL_ATTRIB_POS );
- glVertexAttribPointer( GL_ATTRIB_POS, 2, GL_UNSIGNED_SHORT, GL_FALSE, 0, &aVertices[0] );
+ glVertexAttribPointer( GL_ATTRIB_POS, 2, GL_FLOAT, GL_FALSE, 0, &aVertices[0] );
glDrawArrays( GL_TRIANGLES, 0, aResult.count() );
glDisableVertexAttribArray( GL_ATTRIB_POS );
}
commit 817d12955d114c502a5c4b355dce34f9f95a837e
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date: Sat Nov 8 19:57:41 2014 +0100
use different line and fill colors
makes it easier to see if one is missing
Change-Id: I983fdf2edf22c431d601a63dbf90902a3f8657f2
diff --git a/vcl/workben/vcldemo.cxx b/vcl/workben/vcldemo.cxx
index 2d457de..d753c0d 100644
--- a/vcl/workben/vcldemo.cxx
+++ b/vcl/workben/vcldemo.cxx
@@ -126,6 +126,8 @@ public:
}
void drawEllipse(Rectangle r)
{
+ SetLineColor(Color(COL_RED));
+ SetFillColor(Color(COL_GREEN));
DrawEllipse(r);
}
void drawCheckered(Rectangle r)
commit eeb338abd203c06969d2d7d9734624551a79f371
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date: Sat Nov 8 19:38:15 2014 +0100
fix comment
Change-Id: I5d0f4a1ae8ac56e9da8d19b7b433513271e7a705
diff --git a/vcl/workben/vcldemo.cxx b/vcl/workben/vcldemo.cxx
index 2ab4b3f..2d457de 100644
--- a/vcl/workben/vcldemo.cxx
+++ b/vcl/workben/vcldemo.cxx
@@ -121,8 +121,7 @@ public:
tools::PolyPolygon aPPoly(aPoly);
SetLineColor(Color(COL_RED));
SetFillColor(Color(COL_RED));
- // This hits the 'drawAlphaRect' code-path
- // FIXME: not alpha ...
+ // This hits the optional 'drawPolyPolygon' code-path
DrawTransparent(aPPoly, 64);
}
void drawEllipse(Rectangle r)
commit c311d0269f6437ebb6ca88a483ecd8b4ec7537de
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date: Sat Nov 8 19:23:16 2014 +0100
get size correct for virtual devices
Change-Id: I8fff04f561d57083c65a87ad5bd0e04cb9b9ed2c
diff --git a/vcl/inc/openglgdiimpl.hxx b/vcl/inc/openglgdiimpl.hxx
index 688a8d9..ef80d34 100644
--- a/vcl/inc/openglgdiimpl.hxx
+++ b/vcl/inc/openglgdiimpl.hxx
@@ -26,6 +26,7 @@
#include <vcl/opengl/OpenGLContext.hxx>
class SalFrame;
+class SalVirtualDevice;
class VCL_PLUGIN_PUBLIC OpenGLSalGraphicsImpl : public SalGraphicsImpl
{
@@ -33,6 +34,7 @@ private:
OpenGLContext maContext;
SalFrame* mpFrame;
+ SalVirtualDevice* mpVDev;
SalColor mnLineColor;
SalColor mnFillColor;
@@ -88,6 +90,7 @@ public:
virtual void freeResources() SAL_OVERRIDE;
virtual void Init( SalFrame* pFrame ) SAL_OVERRIDE;
+ virtual void Init( SalVirtualDevice* pVDev ) SAL_OVERRIDE;
virtual bool setClipRegion( const vcl::Region& ) SAL_OVERRIDE;
//
diff --git a/vcl/inc/salgdiimpl.hxx b/vcl/inc/salgdiimpl.hxx
index ba54f9f..dc8c580 100644
--- a/vcl/inc/salgdiimpl.hxx
+++ b/vcl/inc/salgdiimpl.hxx
@@ -36,6 +36,7 @@ class SalGraphics;
class SalBitmap;
class SalFrame;
class Gradient;
+class SalVirtualDevice;
class VCL_PLUGIN_PUBLIC SalGraphicsImpl
{
@@ -45,6 +46,8 @@ public:
virtual void Init( SalFrame* pFrame ) = 0;
+ virtual void Init( SalVirtualDevice* pVDev ) = 0;
+
virtual void freeResources() = 0;
virtual bool setClipRegion( const vcl::Region& ) = 0;
diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx
index 4865379..d9a676f 100644
--- a/vcl/opengl/gdiimpl.cxx
+++ b/vcl/opengl/gdiimpl.cxx
@@ -21,6 +21,7 @@
#include <vcl/gradient.hxx>
#include <salframe.hxx>
+#include "salvd.hxx"
#include <basegfx/polygon/b2dpolygontools.hxx>
#include <basegfx/polygon/b2dpolygontriangulator.hxx>
@@ -53,6 +54,11 @@ void OpenGLSalGraphicsImpl::Init( SalFrame* pFrame )
mpFrame = pFrame;
}
+void OpenGLSalGraphicsImpl::Init(SalVirtualDevice* pVDev)
+{
+ mpVDev = pVDev;
+}
+
bool OpenGLSalGraphicsImpl::setClipRegion( const vcl::Region& rClip )
{
const basegfx::B2DPolyPolygon aClip( rClip.GetAsB2DPolyPolygon() );
@@ -92,14 +98,28 @@ inline GLfloat OpenGLSalGraphicsImpl::GetWidth() const
{
if( mpFrame )
return mpFrame->maGeometry.nWidth;
- return 0;
+ else if (mpVDev)
+ {
+ long nWidth = 0;
+ long nHeight = 0;
+ mpVDev->GetSize(nWidth, nHeight);
+ return nWidth;
+ }
+ return 1;
}
inline GLfloat OpenGLSalGraphicsImpl::GetHeight() const
{
if( mpFrame )
return mpFrame->maGeometry.nHeight;
- return 0;
+ else if (mpVDev)
+ {
+ long nWidth = 0;
+ long nHeight = 0;
+ mpVDev->GetSize(nWidth, nHeight);
+ return nHeight;
+ }
+ return 1;
}
// set the clip region to empty
diff --git a/vcl/unx/generic/gdi/gdiimpl.cxx b/vcl/unx/generic/gdi/gdiimpl.cxx
index 6b90220..f2ccf90 100644
--- a/vcl/unx/generic/gdi/gdiimpl.cxx
+++ b/vcl/unx/generic/gdi/gdiimpl.cxx
@@ -159,6 +159,12 @@ void X11SalGraphicsImpl::Init( SalFrame* /*pFrame*/ )
mnBrushPixel = mrParent.GetPixel( mnBrushColor );
}
+void X11SalGraphicsImpl::Init( SalVirtualDevice* /*pVDev*/ )
+{
+ mnPenPixel = mrParent.GetPixel( mnPenColor );
+ mnBrushPixel = mrParent.GetPixel( mnBrushColor );
+}
+
XID X11SalGraphicsImpl::GetXRenderPicture()
{
XRenderPeer& rRenderPeer = XRenderPeer::GetInstance();
diff --git a/vcl/unx/generic/gdi/gdiimpl.hxx b/vcl/unx/generic/gdi/gdiimpl.hxx
index b4fb21c..799e05c 100644
--- a/vcl/unx/generic/gdi/gdiimpl.hxx
+++ b/vcl/unx/generic/gdi/gdiimpl.hxx
@@ -110,6 +110,8 @@ public:
virtual void Init( SalFrame* pFrame ) SAL_OVERRIDE;
+ virtual void Init( SalVirtualDevice* pVDev ) SAL_OVERRIDE;
+
virtual bool setClipRegion( const vcl::Region& ) SAL_OVERRIDE;
//
// get the depth of the device
diff --git a/vcl/unx/generic/gdi/salgdi.cxx b/vcl/unx/generic/gdi/salgdi.cxx
index bce86256..0607cac 100644
--- a/vcl/unx/generic/gdi/salgdi.cxx
+++ b/vcl/unx/generic/gdi/salgdi.cxx
@@ -150,17 +150,18 @@ void X11SalGraphics::SetDrawable( Drawable aDrawable, SalX11Screen nXScreen )
Window aWin = dynamic_cast<X11WindowProvider*>(m_pFrame)->GetX11Window();
pOpenGLImpl->GetOpenGLContext().init(GetXDisplay(),
aWin, m_nXScreen.getXScreen());
+ mpImpl->Init( m_pFrame );
}
else if (m_pVDev)
{
pOpenGLImpl->GetOpenGLContext().init(GetXDisplay(),
m_pVDev->GetDrawable(), m_pVDev->GetWidth(), m_pVDev->GetHeight(), m_nXScreen.getXScreen());
+ mpImpl->Init(m_pVDev);
}
else
SAL_WARN("vcl.opengl", "what happened here?");
}
- mpImpl->Init( m_pFrame );
// TODO: moggi: FIXME nTextPixel_ = GetPixel( nTextColor_ );
}
}
commit f8ca2ab3efa9d89799cfe3dbc76f7d8ae4f8223f
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date: Sat Nov 8 19:22:31 2014 +0100
make these explicit
That makes it easier to debug as even if you uncomment some lines the
rectangle will still be at the same position
Change-Id: I5576b2702962bb15663e0170cadb0d49ef33c0ab
diff --git a/vcl/workben/vcldemo.cxx b/vcl/workben/vcldemo.cxx
index b3c488c..2ab4b3f 100644
--- a/vcl/workben/vcldemo.cxx
+++ b/vcl/workben/vcldemo.cxx
@@ -263,19 +263,17 @@ void DemoWin::Paint( const Rectangle& rRect )
std::vector<Rectangle> aRegions(partitionAndClear(4,3));
- int i = 0;
- drawRadialLines(aRegions[i++]);
- drawText(aRegions[i++]);
- drawPoly(aRegions[i++]);
- drawEllipse(aRegions[i++]);
- drawCheckered(aRegions[i++]);
- drawBitmapEx(aRegions[i++]);
- drawBitmap(aRegions[i++]);
- drawGradient(aRegions[i++]);
- drawPolyPolgons(aRegions[i++]);
+ drawRadialLines(aRegions[0]);
+ drawText(aRegions[1]);
+ drawPoly(aRegions[2]);
+ drawEllipse(aRegions[3]);
+ drawCheckered(aRegions[4]);
+ drawBitmapEx(aRegions[5]);
+ drawBitmap(aRegions[6]);
+ drawGradient(aRegions[7]);
+ drawPolyPolgons(aRegions[8]);
// last - thumbnail all the above
- fetchDrawBitmap(aRegions[i++]);
- assert(i<=12);
+ fetchDrawBitmap(aRegions[9]);
}
class DemoApp : public Application
More information about the Libreoffice-commits
mailing list