chart2/Package_opengl.mk | 2 chart2/opengl/screenTextFragmentShader.glsl | 3 chart2/opengl/textFragmentShader.glsl | 3 chart2/opengl/textFragmentShaderBatch.glsl | 23 + chart2/opengl/textVertexShaderBatch.glsl | 23 + chart2/source/controller/main/ChartController.cxx | 50 -- chart2/source/controller/main/ChartController.hxx | 46 -- chart2/source/controller/main/ChartController_Window.cxx | 34 - chart2/source/view/charttypes/GL3DBarChart.cxx | 10 chart2/source/view/inc/GL3DRenderer.hxx | 44 ++ chart2/source/view/main/3DChartObjects.cxx | 11 chart2/source/view/main/GL3DRenderer.cxx | 315 +++++++++++---- sdext/source/pdfimport/wrapper/wrapper.cxx | 2 13 files changed, 367 insertions(+), 199 deletions(-)
New commits: commit ac0989d5eaad3f8ab52b0288e345f30527dc45a4 Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sat Jun 21 04:20:49 2014 +0200 avoid manual OpenGL extension checking Change-Id: I75faa82fc2eef7f3bfd3546d64f47dee6a0b7d08 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 06a1163..090685b 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -200,34 +200,7 @@ OpenGL3DRenderer::ShaderResources::~ShaderResources() void OpenGL3DRenderer::CheckGLSLVersion() { - char version[256] = {0}; - strcpy(version, (char *)glGetString(GL_SHADING_LANGUAGE_VERSION)); - char *p = version; - int iVersion = 0; - //get the first point - while ((*p != '\0') && (*p != '.')) - { - iVersion = iVersion * 10 + ((*p) - 0x30); - p++; - } - if (iVersion < 3) - { - maResources.m_b330Support = false; - return; - } - if (iVersion > 3) - { - maResources.m_b330Support = true; - return; - } - p++; - iVersion = *p - 0x30; - if (iVersion >= 3) - { - maResources.m_b330Support = true; - return; - } - maResources.m_b330Support = false; + maResources.m_b330Support = GLEW_VERSION_3_3 == 1; } void OpenGL3DRenderer::ShaderResources::LoadShaders() @@ -252,17 +225,7 @@ void OpenGL3DRenderer::ShaderResources::LoadShaders() m_3DBatchNormalID = glGetAttribLocation(m_3DBatchProID, "vertexNormalModelspace"); m_3DBatchColorID = glGetAttribLocation(m_3DBatchProID, "barColor"); //check whether the texture array is support - GLint numExtensions = 0; - glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions); - for( GLint i = 0; i < numExtensions; ++i ) - { - OUString currExt = ::rtl::OUString::createFromAscii((char*)glGetStringi(GL_EXTENSIONS, i)); - if (currExt == "GL_EXT_texture_array") - { - mbTexBatchSupport = true; - break; - } - } + mbTexBatchSupport = GLEW_EXT_texture_array == 1; if (mbTexBatchSupport) { m_BatchTextProID = OpenGLHelper::LoadShaders("textVertexShaderBatch", "textFragmentShaderBatch"); commit 00272efc1c71bdbd7fc0126f411765f482eaa2fb Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sat Jun 21 03:58:43 2014 +0200 I don't see a good reason for marking private methods with SAL_CALL Change-Id: I9b73b6b6073b3249317f4e1124d840930cbe558f diff --git a/chart2/source/controller/main/ChartController.hxx b/chart2/source/controller/main/ChartController.hxx index 40cae9c..ee8b60a 100644 --- a/chart2/source/controller/main/ChartController.hxx +++ b/chart2/source/controller/main/ChartController.hxx @@ -541,12 +541,12 @@ private: void impl_deleteDrawViewController(); //executeDispatch methods - void SAL_CALL executeDispatch_ObjectProperties(); - void SAL_CALL executeDispatch_FormatObject( const OUString& rDispatchCommand ); - void SAL_CALL executeDlg_ObjectProperties( const OUString& rObjectCID ); + void executeDispatch_ObjectProperties(); + void executeDispatch_FormatObject( const OUString& rDispatchCommand ); + void executeDlg_ObjectProperties( const OUString& rObjectCID ); bool executeDlg_ObjectProperties_withoutUndoGuard( const OUString& rObjectCID, bool bOkClickOnUnchangedDialogSouldBeRatedAsSuccessAlso ); - void SAL_CALL executeDispatch_ChartType(); + void executeDispatch_ChartType(); void executeDispatch_InsertTitles(); void executeDispatch_InsertLegend(); @@ -588,16 +588,16 @@ private: void executeDispatch_DeleteMajorGrid(); void executeDispatch_DeleteMinorGrid(); - void SAL_CALL executeDispatch_InsertSpecialCharacter(); - void SAL_CALL executeDispatch_EditText( const Point* pMousePixel = NULL ); - void SAL_CALL executeDispatch_SourceData(); - void SAL_CALL executeDispatch_MoveSeries( bool bForward ); + void executeDispatch_InsertSpecialCharacter(); + void executeDispatch_EditText( const Point* pMousePixel = NULL ); + void executeDispatch_SourceData(); + void executeDispatch_MoveSeries( bool bForward ); void StartTextEdit( const Point* pMousePixel = NULL ); bool EndTextEdit(); - void SAL_CALL executeDispatch_View3D(); - void SAL_CALL executeDispatch_PositionAndSize(); + void executeDispatch_View3D(); + void executeDispatch_PositionAndSize(); void executeDispatch_EditData(); commit 374160d659c9790f24165e62dd89128fa5f7295e Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sat Jun 21 03:56:25 2014 +0200 volatile does not make any sense here Change-Id: I337d845e05007efb29f1c1fa39cdcc046b156281 diff --git a/chart2/source/controller/main/ChartController.hxx b/chart2/source/controller/main/ChartController.hxx index 6d673fa..40cae9c 100644 --- a/chart2/source/controller/main/ChartController.hxx +++ b/chart2/source/controller/main/ChartController.hxx @@ -443,7 +443,7 @@ private: void acquire(); void release(); private: - sal_Int32 volatile m_nRefCount; + sal_Int32 m_nRefCount; }; class TheModel : public RefCountable { @@ -466,7 +466,7 @@ private: //the ownership between model and controller is not clear at first //each controller might consider himself as owner of the model first - bool volatile m_bOwnership; + bool m_bOwnership; }; class TheModelRef { @@ -487,8 +487,8 @@ private: mutable ::apphelper::LifeTimeManager m_aLifeTimeManager; mutable ::osl::Mutex m_aControllerMutex; - bool volatile m_bSuspended; - bool volatile m_bCanClose; + bool m_bSuspended; + bool m_bCanClose; ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext> m_xCC; @@ -509,10 +509,10 @@ private: SdrDragMode m_eDragMode; Timer m_aDoubleClickTimer; - bool volatile m_bWaitingForDoubleClick; - bool volatile m_bWaitingForMouseUp; + bool m_bWaitingForDoubleClick; + bool m_bWaitingForMouseUp; - bool volatile m_bConnectingToView; + bool m_bConnectingToView; ::com::sun::star::uno::Reference< ::com::sun::star::document::XUndoManager > m_xUndoManager; ::std::auto_ptr< UndoGuard > m_pTextActionUndoGuard; commit 7fd1fd1dead9799e50641bc920b5bcbe409d330f Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sat Jun 21 03:55:06 2014 +0200 remove unneeded code for 3D charts in controller Change-Id: I5c1f624cc05a90878f717abc8ffb0b2220ce94d5 diff --git a/chart2/source/controller/main/ChartController.cxx b/chart2/source/controller/main/ChartController.cxx index ef1d606..1045ec2 100644 --- a/chart2/source/controller/main/ChartController.cxx +++ b/chart2/source/controller/main/ChartController.cxx @@ -105,7 +105,6 @@ ChartController::ChartController(uno::Reference<uno::XComponentContext> const & m_bWaitingForDoubleClick(false), m_bWaitingForMouseUp(false), m_bConnectingToView(false), - m_bGL3DChart(false), m_xUndoManager( 0 ), m_aDispatchContainer( m_xCC, this ), m_eDrawMode( CHARTDRAW_SELECT ) @@ -480,8 +479,6 @@ void SAL_CALL ChartController::modeChanged( const util::ModeChangeEvent& rEvent } m_bConnectingToView = false; - - queryGL3DChart(); } } } @@ -577,8 +574,6 @@ sal_Bool SAL_CALL ChartController::attachModel( const uno::Reference< frame::XMo uno::Reference< document::XUndoManagerSupplier > xSuppUndo( getModel(), uno::UNO_QUERY_THROW ); m_xUndoManager.set( xSuppUndo->getUndoManager(), uno::UNO_QUERY_THROW ); - queryGL3DChart(); - return sal_True; } @@ -1389,51 +1384,6 @@ DrawViewWrapper* ChartController::GetDrawViewWrapper() return m_pDrawViewWrapper; } -void ChartController::queryGL3DChart() -{ - m_bGL3DChart = false; - - uno::Reference<frame::XModel> xModel; - { // it's possible that model was cleared by a different thread! - osl::MutexGuard g(m_aModelMutex); - if (!m_aModel.is()) - return; - xModel = m_aModel->getModel(); - } - - uno::Reference<XChartDocument> xChartDoc(xModel, uno::UNO_QUERY); - if (!xChartDoc.is()) - return; - - uno::Reference<chart2::XDiagram> xDiagram = xChartDoc->getFirstDiagram(); - m_bGL3DChart = GL3DHelper::isGL3DDiagram(xDiagram); -} - -void ChartController::executeGL3D_Tracking( const TrackingEvent& /*rTEvt*/ ) -{ -} - -void ChartController::executeGL3D_Command( const CommandEvent& /*rCEvt*/ ) -{ -} - -bool ChartController::executeGL3D_KeyInput( const KeyEvent& /*rKEvt*/ ) -{ - return false; -} - -void ChartController::executeGL3D_MouseButtonUp( const MouseEvent& /*rMEvt*/ ) -{ -} - -void ChartController::executeGL3D_MouseButtonDown( const MouseEvent& /*rMEvt*/ ) -{ -} - -void ChartController::executeGL3D_MouseMove( const MouseEvent& /*rMEvt*/ ) -{ -} - uno::Reference< XAccessible > ChartController::CreateAccessible() { uno::Reference< XAccessible > xResult = new AccessibleChartView( m_xCC, GetDrawViewWrapper() ); diff --git a/chart2/source/controller/main/ChartController.hxx b/chart2/source/controller/main/ChartController.hxx index 41bc763..6d673fa 100644 --- a/chart2/source/controller/main/ChartController.hxx +++ b/chart2/source/controller/main/ChartController.hxx @@ -432,16 +432,6 @@ private: DrawModelWrapper* GetDrawModelWrapper(); DrawViewWrapper* GetDrawViewWrapper(); - void queryGL3DChart(); - - void executeGL3D_Tracking( const TrackingEvent& rTEvt ); - void executeGL3D_Command( const CommandEvent& rCEvt ); - bool executeGL3D_KeyInput( const KeyEvent& rKEvt ); - - void executeGL3D_MouseButtonUp( const MouseEvent& rMEvt ); - void executeGL3D_MouseButtonDown( const MouseEvent& rMEvt ); - void executeGL3D_MouseMove( const MouseEvent& rMEvt ); - private: class TheModelRef; friend class ChartController::TheModelRef; @@ -524,8 +514,6 @@ private: bool volatile m_bConnectingToView; - bool m_bGL3DChart; - ::com::sun::star::uno::Reference< ::com::sun::star::document::XUndoManager > m_xUndoManager; ::std::auto_ptr< UndoGuard > m_pTextActionUndoGuard; /// needed for dispatching URLs in FeatureStateEvents diff --git a/chart2/source/controller/main/ChartController_Window.cxx b/chart2/source/controller/main/ChartController_Window.cxx index a05c685..905bcaa 100644 --- a/chart2/source/controller/main/ChartController_Window.cxx +++ b/chart2/source/controller/main/ChartController_Window.cxx @@ -562,12 +562,6 @@ IMPL_LINK_NOARG(ChartController, DoubleClickWaitingHdl) void ChartController::execute_MouseButtonDown( const MouseEvent& rMEvt ) { - if (m_bGL3DChart) - { - executeGL3D_MouseButtonDown(rMEvt); - return; - } - SolarMutexGuard aGuard; m_bWaitingForMouseUp = true; @@ -714,12 +708,6 @@ void ChartController::execute_MouseButtonDown( const MouseEvent& rMEvt ) void ChartController::execute_MouseMove( const MouseEvent& rMEvt ) { - if (m_bGL3DChart) - { - executeGL3D_MouseMove(rMEvt); - return; - } - SolarMutexGuard aGuard; DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; @@ -740,23 +728,12 @@ void ChartController::execute_MouseMove( const MouseEvent& rMEvt ) impl_SetMousePointer( rMEvt ); } -void ChartController::execute_Tracking( const TrackingEvent& rTEvt ) +void ChartController::execute_Tracking( const TrackingEvent& ) { - if (m_bGL3DChart) - { - executeGL3D_Tracking(rTEvt); - return; - } } void ChartController::execute_MouseButtonUp( const MouseEvent& rMEvt ) { - if (m_bGL3DChart) - { - executeGL3D_MouseButtonUp(rMEvt); - return; - } - ControllerLockGuardUNO aCLGuard( getModel() ); bool bMouseUpWithoutMouseDown = !m_bWaitingForMouseUp; m_bWaitingForMouseUp = false; @@ -987,12 +964,6 @@ void ChartController::execute_LoseFocus() void ChartController::execute_Command( const CommandEvent& rCEvt ) { - if (m_bGL3DChart) - { - executeGL3D_Command(rCEvt); - return; - } - bool bIsAction = false; { SolarMutexGuard aGuard; @@ -1308,9 +1279,6 @@ void ChartController::execute_Command( const CommandEvent& rCEvt ) bool ChartController::execute_KeyInput( const KeyEvent& rKEvt ) { - if (m_bGL3DChart) - return executeGL3D_KeyInput(rKEvt); - bool bReturn=false; DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; commit 6ef4565efe0393bde8e792d66287a532aea82d31 Author: weigao <wei...@multicorewareinc.com> Date: Wed Jun 18 08:21:41 2014 -0700 add code to call batch texture render Includes warning fixes from Markus Mohrhard. Conflicts: chart2/source/view/inc/GL3DRenderer.hxx chart2/source/view/main/GL3DRenderer.cxx Change-Id: I09da7c49eb11da9ea2bc18a5e13f2fd2c0d6bd8f diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index 0821cfe..9c4c03f 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -141,6 +141,26 @@ struct TextInfo float vertex[12]; }; +struct TextureArrayInfo +{ + size_t subTextureNum; + int textureArrayWidth; + int textureArrayHeight; + GLuint textureID; + + TextureArrayInfo(); +}; + +struct TextInfoBatch +{ + size_t batchNum; + std::vector<glm::vec4> idList; + std::vector<TextureArrayInfo> texture; + std::vector<glm::vec3> vertexList; + std::vector<glm::vec3> textureCoordList; +}; + + struct BatchBarInfo { std::vector <glm::mat4> modelMatrixList; @@ -231,6 +251,18 @@ private: void UpdateBatch3DUniformBlock(); void RenderBatchBars(bool bNewScene); void CheckGLSLVersion(); + void RenderTextShapeBatch(); + void ReleaseTextShapesBatch(); + void CreateTextTextureSingle(const boost::shared_array<sal_uInt8> &bitmapBuf, + ::Size maSizePixels, + glm::vec3 vTopLeft,glm::vec3 vTopRight, + glm::vec3 vBottomRight, glm::vec3 vBottomLeft, + sal_uInt32 nUniqueId); + void CreateTextTextureBatch(const boost::shared_array<sal_uInt8> &bitmapBuf, + ::Size maSizePixels, + glm::vec3 vTopLeft,glm::vec3 vTopRight, + glm::vec3 vBottomRight, glm::vec3 vBottomLeft, + sal_uInt32 nUniqueId); private: struct ShaderResources @@ -286,6 +318,14 @@ private: GLint m_3DBatchNormalID; GLint m_3DBatchColorID; + //Batch render text + bool mbTexBatchSupport; + GLint m_BatchTextProID; + GLint m_BatchTextMatrixID; + GLint m_BatchTextVertexID; + GLint m_BatchTextTexCoordID; + GLint m_BatchTextTexID; + ShaderResources(); ~ShaderResources(); @@ -358,6 +398,7 @@ private: std::vector <TextInfo> m_TextInfoList; std::vector <TextInfo> m_ScreenTextInfoList; GLuint m_TextTexCoordBuf; + GLuint m_TextTexCoordBufBatch; std::vector<glm::vec3> m_Vertices; @@ -388,6 +429,7 @@ private: GLint m_Batch3DActualSizeLight; glm::mat4 m_GlobalScaleMatrix; + TextInfoBatch m_TextInfoBatch; //for 3.0 version int m_iLightNum; glm::vec4 m_Ambient; diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index d3db57c..06a1163 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -71,6 +71,14 @@ glm::vec4 getColorAsVector(sal_uInt32 nColor) } +TextureArrayInfo::TextureArrayInfo(): + subTextureNum(0), + textureArrayWidth(0), + textureArrayHeight(0), + textureID(0) +{ +} + OpenGL3DRenderer::OpenGL3DRenderer(): m_iWidth(0) , m_iHeight(0) @@ -111,6 +119,7 @@ OpenGL3DRenderer::OpenGL3DRenderer(): OpenGL3DRenderer::~OpenGL3DRenderer() { + ReleaseShapes(); // delete buffers glDeleteBuffers(1, &m_CubeVertexBuf); glDeleteBuffers(1, &m_CubeNormalBuf); @@ -126,10 +135,18 @@ OpenGL3DRenderer::~OpenGL3DRenderer() glDeleteBuffers(1, &m_Batch3DUBOBuffer); glDeleteBuffers(1, &m_3DUBOBuffer); glDeleteBuffers(1, &m_3DUBOBuffer); + glDeleteBuffers(1, &m_TextTexCoordBufBatch); glDeleteFramebuffers(1, &mnPickingFbo); glDeleteRenderbuffers(1, &mnPickingRboDepth); glDeleteRenderbuffers(1, &mnPickingRboColor); + + for (size_t i = 0; i < m_TextInfoBatch.texture.size(); i++) + { + glDeleteTextures(1, &m_TextInfoBatch.texture[i].textureID); + } + m_TextInfoBatch.texture.clear(); + } OpenGL3DRenderer::ShaderResources::ShaderResources() @@ -162,6 +179,12 @@ OpenGL3DRenderer::ShaderResources::ShaderResources() , m_3DBatchVertexID(0) , m_3DBatchNormalID(0) , m_3DBatchColorID(0) + , mbTexBatchSupport(false) + , m_BatchTextProID(0) + , m_BatchTextMatrixID(0) + , m_BatchTextVertexID(0) + , m_BatchTextTexCoordID(0) + , m_BatchTextTexID(0) { } @@ -172,6 +195,7 @@ OpenGL3DRenderer::ShaderResources::~ShaderResources() glDeleteProgram(m_ScreenTextProID); glDeleteProgram(m_3DProID); glDeleteProgram(m_3DBatchProID); + glDeleteProgram(m_BatchTextProID); } void OpenGL3DRenderer::CheckGLSLVersion() @@ -227,6 +251,27 @@ void OpenGL3DRenderer::ShaderResources::LoadShaders() m_3DBatchVertexID = glGetAttribLocation(m_3DBatchProID, "vertexPositionModelspace"); m_3DBatchNormalID = glGetAttribLocation(m_3DBatchProID, "vertexNormalModelspace"); m_3DBatchColorID = glGetAttribLocation(m_3DBatchProID, "barColor"); + //check whether the texture array is support + GLint numExtensions = 0; + glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions); + for( GLint i = 0; i < numExtensions; ++i ) + { + OUString currExt = ::rtl::OUString::createFromAscii((char*)glGetStringi(GL_EXTENSIONS, i)); + if (currExt == "GL_EXT_texture_array") + { + mbTexBatchSupport = true; + break; + } + } + if (mbTexBatchSupport) + { + m_BatchTextProID = OpenGLHelper::LoadShaders("textVertexShaderBatch", "textFragmentShaderBatch"); + m_BatchTextMatrixID = glGetUniformLocation(m_BatchTextProID, "MVP"); + m_BatchTextTexID = glGetUniformLocation(m_BatchTextProID, "texArray"); + m_BatchTextVertexID = glGetAttribLocation(m_BatchTextProID, "vPosition"); + m_BatchTextTexCoordID = glGetAttribLocation(m_BatchTextProID, "texCoord"); + } + mbTexBatchSupport = m_BatchTextProID ? true : false; } else { @@ -250,11 +295,14 @@ void OpenGL3DRenderer::ShaderResources::LoadShaders() m_3DVertexID = glGetAttribLocation(m_3DProID, "vertexPositionModelspace"); m_3DNormalID = glGetAttribLocation(m_3DProID, "vertexNormalModelspace"); } - m_TextProID = OpenGLHelper::LoadShaders("textVertexShader", "textFragmentShader"); - m_TextMatrixID = glGetUniformLocation(m_TextProID, "MVP"); - m_TextVertexID = glGetAttribLocation(m_TextProID, "vPosition"); - m_TextTexCoordID = glGetAttribLocation(m_TextProID, "texCoord"); - m_TextTexID = glGetUniformLocation(m_TextProID, "TextTex"); + if (!mbTexBatchSupport) + { + m_TextProID = OpenGLHelper::LoadShaders("textVertexShader", "textFragmentShader"); + m_TextMatrixID = glGetUniformLocation(m_TextProID, "MVP"); + m_TextVertexID = glGetAttribLocation(m_TextProID, "vPosition"); + m_TextTexCoordID = glGetAttribLocation(m_TextProID, "texCoord"); + m_TextTexID = glGetUniformLocation(m_TextProID, "TextTex"); + } m_ScreenTextProID = OpenGLHelper::LoadShaders("screenTextVertexShader", "screenTextFragmentShader"); m_ScreenTextVertexID = glGetAttribLocation(m_ScreenTextProID, "vPosition"); @@ -326,6 +374,7 @@ void OpenGL3DRenderer::init() glGenBuffers(1, &m_BatchModelMatrixBuf); glGenBuffers(1, &m_BatchNormalMatrixBuf); glGenBuffers(1, &m_BatchColorBuf); + glGenBuffers(1, &m_TextTexCoordBufBatch); glGenBuffers(1, &m_BoundBox); glBindBuffer(GL_ARRAY_BUFFER, m_BoundBox); glBufferData(GL_ARRAY_BUFFER, sizeof(boundBox), boundBox, GL_STATIC_DRAW); @@ -367,6 +416,7 @@ void OpenGL3DRenderer::init() Init3DUniformBlock(); InitBatch3DUniformBlock(); } + m_TextInfoBatch.batchNum = 512; CHECK_GL_ERROR(); glViewport(0, 0, m_iWidth, m_iHeight); Set3DSenceInfo(0xFFFFFF, true); @@ -1631,11 +1681,11 @@ void OpenGL3DRenderer::CreateScreenTextTexture( m_ScreenTextInfoList.push_back(aTextInfo); } -void OpenGL3DRenderer::CreateTextTexture(const boost::shared_array<sal_uInt8> &bitmapBuf, - ::Size maSizePixels, - const glm::vec3& vTopLeft, const glm::vec3& vTopRight, - const glm::vec3& vBottomRight, const glm::vec3& vBottomLeft, - sal_uInt32 nUniqueId) +void OpenGL3DRenderer::CreateTextTextureSingle(const boost::shared_array<sal_uInt8> &bitmapBuf, + ::Size maSizePixels, + glm::vec3 vTopLeft,glm::vec3 vTopRight, + glm::vec3 vBottomRight, glm::vec3 vBottomLeft, + sal_uInt32 nUniqueId) { long bmpWidth = maSizePixels.Width(); long bmpHeight = maSizePixels.Height(); @@ -1676,6 +1726,92 @@ void OpenGL3DRenderer::CreateTextTexture(const boost::shared_array<sal_uInt8> &b glBindTexture(GL_TEXTURE_2D, 0); CHECK_GL_ERROR(); m_TextInfoList.push_back(aTextInfo); + +} + + +void OpenGL3DRenderer::CreateTextTextureBatch(const boost::shared_array<sal_uInt8> &bitmapBuf, + ::Size maSizePixels, + glm::vec3 vTopLeft,glm::vec3 vTopRight, + glm::vec3 vBottomRight, glm::vec3 vBottomLeft, + sal_uInt32 nUniqueId) +{ + long bmpWidth = maSizePixels.Width(); + long bmpHeight = maSizePixels.Height(); + glm::vec4 id = getColorAsVector(nUniqueId); + m_TextInfoBatch.idList.push_back(id); + m_TextInfoBatch.vertexList.push_back(glm::vec3(vBottomRight.x, vBottomRight.y, vBottomRight.z)); + m_TextInfoBatch.vertexList.push_back(glm::vec3(vTopRight.x, vTopRight.y, vTopRight.z)); + m_TextInfoBatch.vertexList.push_back(glm::vec3(vTopLeft.x, vTopLeft.y, vTopLeft.z)); + m_TextInfoBatch.vertexList.push_back(glm::vec3(vBottomLeft.x, vBottomLeft.y, vBottomLeft.z)); + //find the last vector, which size is small than default batch number; + size_t index = 0; + while ((m_TextInfoBatch.texture.size() > 0) && + (m_TextInfoBatch.texture[index].subTextureNum >= m_TextInfoBatch.batchNum) && + (index < m_TextInfoBatch.texture.size() - 1)) + { + index++; + } + //if the sub texture number of the last texture array reach the largest, create a new textur array + if ((m_TextInfoBatch.texture.size() == 0) || + (m_TextInfoBatch.texture[index].subTextureNum >= m_TextInfoBatch.batchNum)) + { + TextureArrayInfo textureArray; + glGenTextures(1, &textureArray.textureID); + CHECK_GL_ERROR(); + glBindTexture(GL_TEXTURE_2D_ARRAY, textureArray.textureID); + glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + CHECK_GL_ERROR(); + textureArray.textureArrayWidth = bmpHeight * 8; + textureArray.textureArrayHeight = bmpHeight; + glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGB, textureArray.textureArrayWidth, textureArray.textureArrayHeight, + m_TextInfoBatch.batchNum, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); + CHECK_GL_ERROR(); + if (m_TextInfoBatch.texture.size() > 0) + { + index++; + } + m_TextInfoBatch.texture.push_back(textureArray); + glBindTexture(GL_TEXTURE_2D_ARRAY, 0); + } + glBindTexture(GL_TEXTURE_2D_ARRAY, m_TextInfoBatch.texture[index].textureID); + CHECK_GL_ERROR(); + glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, m_TextInfoBatch.texture[index].subTextureNum, bmpWidth, bmpHeight, 1, GL_RGB, GL_UNSIGNED_BYTE, bitmapBuf.get()); + CHECK_GL_ERROR(); + //calc texture coordinate + m_TextInfoBatch.textureCoordList.push_back(glm::vec3((float)bmpWidth / (float)m_TextInfoBatch.texture[index].textureArrayWidth, + 0, + m_TextInfoBatch.texture[index].subTextureNum)); + m_TextInfoBatch.textureCoordList.push_back(glm::vec3((float)bmpWidth / (float)m_TextInfoBatch.texture[index].textureArrayWidth, + (float)bmpHeight/ (float)m_TextInfoBatch.texture[index].textureArrayHeight, + m_TextInfoBatch.texture[index].subTextureNum)); + m_TextInfoBatch.textureCoordList.push_back(glm::vec3(0, + (float)bmpHeight/ (float)m_TextInfoBatch.texture[index].textureArrayHeight, + m_TextInfoBatch.texture[index].subTextureNum)); + m_TextInfoBatch.textureCoordList.push_back(glm::vec3(0, + 0, + m_TextInfoBatch.texture[index].subTextureNum)); + m_TextInfoBatch.texture[index].subTextureNum++; + glBindTexture(GL_TEXTURE_2D_ARRAY, 0); +} + +void OpenGL3DRenderer::CreateTextTexture(const boost::shared_array<sal_uInt8> &bitmapBuf, + ::Size maSizePixels, + const glm::vec3& vTopLeft, const glm::vec3& vTopRight, + const glm::vec3& vBottomRight, const glm::vec3& vBottomLeft, + sal_uInt32 nUniqueId) +{ + if (maResources.mbTexBatchSupport) + { + CreateTextTextureBatch(bitmapBuf, maSizePixels, vTopLeft, vTopRight, vBottomRight, vBottomLeft, nUniqueId); + } + else + { + CreateTextTextureSingle(bitmapBuf, maSizePixels, vTopLeft, vTopRight, vBottomRight, vBottomLeft, nUniqueId); + } } void OpenGL3DRenderer::ReleaseTextShapes() @@ -1753,7 +1889,67 @@ void OpenGL3DRenderer::RenderScreenTextShape() } CHECK_GL_ERROR(); } +void OpenGL3DRenderer::ReleaseTextShapesBatch() +{ + for (size_t i = 0; i < m_TextInfoBatch.texture.size(); i++) + { + m_TextInfoBatch.texture[i].subTextureNum = 0; + } + m_TextInfoBatch.vertexList.clear(); + m_TextInfoBatch.textureCoordList.clear(); + m_TextInfoBatch.idList.clear(); +} +void OpenGL3DRenderer::RenderTextShapeBatch() +{ + glm::mat4 aMVP = m_3DProjection * m_3DView * m_GlobalScaleMatrix; + glUseProgram(maResources.m_BatchTextProID); + CHECK_GL_ERROR(); + glUniformMatrix4fv(maResources.m_BatchTextMatrixID, 1, GL_FALSE, &aMVP[0][0]); + glEnableVertexAttribArray(maResources.m_BatchTextVertexID); + glBindBuffer(GL_ARRAY_BUFFER, m_VertexBuffer); + glVertexAttribPointer( + maResources.m_BatchTextVertexID, + 3, // size + GL_FLOAT, // type + GL_FALSE, // normalized? + 0, // stride + (void*)0 // array buffer offset + ); + //tex coord + CHECK_GL_ERROR(); + glEnableVertexAttribArray(maResources.m_BatchTextTexCoordID); + glBindBuffer(GL_ARRAY_BUFFER, m_TextTexCoordBufBatch); + glVertexAttribPointer( + maResources.m_BatchTextTexCoordID, + 3, // size + GL_FLOAT, // type + GL_FALSE, // normalized? + 0, // stride + (void*)0 // array buffer offset + ); + //use texture array to get the vertex + for (size_t i = 0; i < m_TextInfoBatch.texture.size(); i++) + { + int vertexNum = m_TextInfoBatch.texture[i].subTextureNum; + glBindBuffer(GL_ARRAY_BUFFER, m_VertexBuffer); + glBufferData(GL_ARRAY_BUFFER, 4 * vertexNum * sizeof(glm::vec3), &m_TextInfoBatch.vertexList[4 * i * m_TextInfoBatch.batchNum], GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER, m_TextTexCoordBufBatch); + glBufferData(GL_ARRAY_BUFFER, 4 * vertexNum * sizeof(glm::vec3), &m_TextInfoBatch.textureCoordList[4 * i * m_TextInfoBatch.batchNum], GL_STATIC_DRAW); + glBindTexture(GL_TEXTURE_2D_ARRAY, m_TextInfoBatch.texture[i].textureID); + CHECK_GL_ERROR(); + glUniform1i(maResources.m_BatchTextTexID, 0); + CHECK_GL_ERROR(); + //TODO: moggi: get rid fo GL_QUADS + glDrawArrays(GL_QUADS, 0, 4 * vertexNum); + } + glDisableVertexAttribArray(maResources.m_BatchTextVertexID); + CHECK_GL_ERROR(); + glDisableVertexAttribArray(maResources.m_BatchTextTexCoordID); + CHECK_GL_ERROR(); + glBindTexture(GL_TEXTURE_2D_ARRAY, 0); + glUseProgram(0); +} void OpenGL3DRenderer::RenderTextShape() { CHECK_GL_ERROR(); @@ -1869,7 +2065,14 @@ void OpenGL3DRenderer::ProcessUnrenderedShape(bool bNewScene) } } //render text - RenderTextShape(); + if (maResources.mbTexBatchSupport) + { + RenderTextShapeBatch(); + } + else + { + RenderTextShape(); + } // render screen text RenderScreenTextShape(); #if DEBUG_FBO @@ -1929,6 +2132,7 @@ void OpenGL3DRenderer::ReleaseShapes() ReleaseTextShapes(); ReleaseScreenTextShapes(); ReleaseBatchBarInfo(); + ReleaseTextShapesBatch(); } void OpenGL3DRenderer::GetBatchMiddleInfo(const Extrude3DInfo &extrude3D) commit 50a5739cee2b26d9a70c321664f7166a32fa8647 Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sat Jun 21 03:31:33 2014 +0200 small whitespace changes Change-Id: I10aa08268bf148eb792440f13bcf044b350d6937 diff --git a/chart2/opengl/textFragmentShaderBatch.glsl b/chart2/opengl/textFragmentShaderBatch.glsl index d7bd4ae..7008883 100644 --- a/chart2/opengl/textFragmentShaderBatch.glsl +++ b/chart2/opengl/textFragmentShaderBatch.glsl @@ -6,15 +6,18 @@ * 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/. */ + #version 330 core #extension GL_EXT_texture_array : enable + uniform sampler2DArray texArray; in vec3 vTexCoord; out vec4 actualColor; void main() { - vec3 color = texture2DArray(texArray, vTexCoord.xyz).rgb; + vec3 color = texture2DArray(texArray, vTexCoord.xyz).rgb; actualColor = vec4(color, 1.0 - color.r); } + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/opengl/textVertexShaderBatch.glsl b/chart2/opengl/textVertexShaderBatch.glsl index f894333..e61beb6 100644 --- a/chart2/opengl/textVertexShaderBatch.glsl +++ b/chart2/opengl/textVertexShaderBatch.glsl @@ -6,6 +6,7 @@ * 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/. */ + #version 330 core in vec3 vPosition; in vec3 texCoord; commit 016467d8a54bc5ed4990236dc990824b3efefa9c Author: weigao <wei...@multicorewareinc.com> Date: Wed Jun 18 08:01:46 2014 -0700 add batch render texture shaders Change-Id: I922d24bc63ed7c1f16318c25da0b6b3401d24b6f diff --git a/chart2/Package_opengl.mk b/chart2/Package_opengl.mk index 3d68a93..6e1e298 100644 --- a/chart2/Package_opengl.mk +++ b/chart2/Package_opengl.mk @@ -32,6 +32,8 @@ $(eval $(call gb_Package_add_files,chart2_opengl_shader,$(LIBO_BIN_FOLDER)/openg shape3DVertexShaderBatch.glsl \ shape3DFragmentShaderV300.glsl \ shape3DVertexShaderV300.glsl \ + textFragmentShaderBatch.glsl \ + textVertexShaderBatch.glsl \ )) # vim: set noet sw=4 ts=4: diff --git a/chart2/opengl/textFragmentShaderBatch.glsl b/chart2/opengl/textFragmentShaderBatch.glsl new file mode 100644 index 0000000..d7bd4ae --- /dev/null +++ b/chart2/opengl/textFragmentShaderBatch.glsl @@ -0,0 +1,20 @@ +/* -*- 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/. + */ +#version 330 core +#extension GL_EXT_texture_array : enable +uniform sampler2DArray texArray; +in vec3 vTexCoord; + +out vec4 actualColor; +void main() +{ + vec3 color = texture2DArray(texArray, vTexCoord.xyz).rgb; + actualColor = vec4(color, 1.0 - color.r); +} +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/opengl/textVertexShaderBatch.glsl b/chart2/opengl/textVertexShaderBatch.glsl new file mode 100644 index 0000000..f894333 --- /dev/null +++ b/chart2/opengl/textVertexShaderBatch.glsl @@ -0,0 +1,22 @@ +/* -*- 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/. + */ +#version 330 core +in vec3 vPosition; +in vec3 texCoord; + +out vec3 vTexCoord; +uniform mat4 MVP; + +void main() +{ + gl_Position = MVP * vec4(vPosition, 1); + vTexCoord = texCoord; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit 87e23f425f60b0b7459c63b824bc8bdc17796ad2 Author: weigao <wei...@multicorewareinc.com> Date: Wed Jun 18 01:10:05 2014 -0700 use shader to calculate alpha channel Conflicts: chart2/source/view/main/GL3DRenderer.cxx Change-Id: I3cf9636b36ffd47589dd3ab61278802ca73644ce diff --git a/chart2/opengl/screenTextFragmentShader.glsl b/chart2/opengl/screenTextFragmentShader.glsl index a848103..7e2bd26 100644 --- a/chart2/opengl/screenTextFragmentShader.glsl +++ b/chart2/opengl/screenTextFragmentShader.glsl @@ -11,7 +11,8 @@ varying vec2 vTexCoord; uniform sampler2D TextTex; void main() { - gl_FragColor = vec4(texture2D(TextTex, vTexCoord).rgba); + vec3 color = texture2D(TextTex, vTexCoord).rgb; + gl_FragColor = vec4(color, 1.0 - color.r); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/opengl/textFragmentShader.glsl b/chart2/opengl/textFragmentShader.glsl index ef8d44d..c1d44bc 100644 --- a/chart2/opengl/textFragmentShader.glsl +++ b/chart2/opengl/textFragmentShader.glsl @@ -11,7 +11,8 @@ uniform sampler2D TextTex; varying vec2 vTexCoord; void main() { - gl_FragColor = vec4(texture2D(TextTex, vTexCoord).rgba); + vec3 color = texture2D(TextTex, vTexCoord).rgb; + gl_FragColor = vec4(color, 1.0 - color.r); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index 6218fbc..0821cfe 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -373,8 +373,6 @@ private: float m_fViewAngle; - float m_fHeightWeight; - bool mbPickingMode; GLuint mnPickingFbo; diff --git a/chart2/source/view/main/3DChartObjects.cxx b/chart2/source/view/main/3DChartObjects.cxx index 1b962c6..f1db16f 100644 --- a/chart2/source/view/main/3DChartObjects.cxx +++ b/chart2/source/view/main/3DChartObjects.cxx @@ -12,6 +12,7 @@ #include <vcl/svapp.hxx> #include <vcl/opengl/OpenGLHelper.hxx> +#include <vcl/bmpacc.hxx> namespace chart { @@ -90,7 +91,15 @@ const TextCacheItem& TextCache::getText(OUString const & rText) aDevice.DrawText(Point(0,0), rText); BitmapEx aText(aDevice.GetBitmapEx(Point(0,0), aDevice.GetOutputSize())); - TextCacheItem *pItem = new TextCacheItem(OpenGLHelper::ConvertBitmapExToRGBABuffer(aText), aText.GetSizePixel()); +// TextCacheItem *pItem = new TextCacheItem(OpenGLHelper::ConvertBitmapExToRGBABuffer(aText), aText.GetSizePixel()); + Bitmap aBitmap (aText.GetBitmap()); + BitmapReadAccess *pAcc = aBitmap.AcquireReadAccess(); + sal_uInt8 *buf = (sal_uInt8 *)pAcc->GetBuffer(); + long nBmpWidth = aText.GetSizePixel().Width(); + long nBmpHeight = aText.GetSizePixel().Height(); + sal_uInt8* pBitmapBuf(new sal_uInt8[3* nBmpWidth * nBmpHeight]); + memcpy(pBitmapBuf, buf, 3* nBmpWidth * nBmpHeight); + TextCacheItem *pItem = new TextCacheItem(pBitmapBuf, aText.GetSizePixel()); maTextCache.insert(rText, pItem); return *maTextCache.find(rText)->second; diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 1291230..d3db57c 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -55,10 +55,10 @@ int static checkGLError(const char *file, int line) #define CHECK_GL_ERROR() checkGLError(__FILE__, __LINE__) GLfloat texCoords[] = { - 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, - 0.0f, 1.0f + 0.0f, 1.0f, + 0.0f, 0.0f }; glm::vec4 getColorAsVector(sal_uInt32 nColor) @@ -88,7 +88,6 @@ OpenGL3DRenderer::OpenGL3DRenderer(): , m_RenderVertexBuf(0) , m_RenderTexCoordBuf(0) , m_fViewAngle(30.0f) - , m_fHeightWeight(1.0f) , mbPickingMode(false) , mnPickingFbo(0) , mnPickingRboDepth(0) @@ -786,7 +785,7 @@ void OpenGL3DRenderer::RenderLine3D(const Polygon3DInfo& polygon) glUseProgram(maResources.m_CommonProID); PosVecf3 trans = {0.0f, 0, 0.0}; PosVecf3 angle = {0.0f, 0.0f, 0.0f}; - PosVecf3 scale = {1.0f, 1.0f, m_fHeightWeight}; + PosVecf3 scale = {1.0f, 1.0f, 1.0f}; MoveModelf(trans, angle, scale); m_Model = m_GlobalScaleMatrix * m_Model; m_3DMVP = m_3DProjection * m_3DView * m_Model; @@ -877,7 +876,7 @@ void OpenGL3DRenderer::RenderPolygon3D(const Polygon3DInfo& polygon) Normals3D *normalList = polygon.normalsList[i]; PosVecf3 trans = {0.0f, 0.0f, 0.0}; PosVecf3 angle = {0.0f, 0.0f, 0.0f}; - PosVecf3 scale = {1.0f, 1.0f, m_fHeightWeight}; + PosVecf3 scale = {1.0f, 1.0f, 1.0f}; MoveModelf(trans, angle, scale); m_Model = m_GlobalScaleMatrix * m_Model; glm::mat3 normalMatrix(m_Model); @@ -1546,8 +1545,6 @@ void OpenGL3DRenderer::RenderExtrude3DObject() (void*)0 // array buffer offset ); } - extrude3DInfo.zTransform *= m_fHeightWeight; - extrude3DInfo.zScale *= m_fHeightWeight; if(!mbPickingMode) { if (maResources.m_b330Support) @@ -1598,22 +1595,22 @@ void OpenGL3DRenderer::CreateScreenTextTexture( TextInfo aTextInfo; aTextInfo.id = getColorAsVector(nUniqueId); - aTextInfo.vertex[0] = vTopLeft.x; - aTextInfo.vertex[1] = vTopLeft.y; + aTextInfo.vertex[0] = vBottomRight.x; + aTextInfo.vertex[1] = vBottomRight.y; aTextInfo.vertex[2] = 0; aTextInfo.vertex[3] = vBottomRight.x; aTextInfo.vertex[4] = vTopLeft.y; aTextInfo.vertex[5] = 0; + aTextInfo.vertex[6] = vTopLeft.x; + aTextInfo.vertex[7] = vTopLeft.y; + aTextInfo.vertex[8] = 0; + aTextInfo.vertex[9] = vTopLeft.x; aTextInfo.vertex[10] = vBottomRight.y; aTextInfo.vertex[11] = 0; - aTextInfo.vertex[6] = vBottomRight.x; - aTextInfo.vertex[7] = vBottomRight.y; - aTextInfo.vertex[8] = 0; - CHECK_GL_ERROR(); glGenTextures(1, &aTextInfo.texture); CHECK_GL_ERROR(); @@ -1627,7 +1624,7 @@ void OpenGL3DRenderer::CreateScreenTextTexture( CHECK_GL_ERROR(); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); CHECK_GL_ERROR(); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bmpWidth, bmpHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, bitmapBuf.get()); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bmpWidth, bmpHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapBuf.get()); CHECK_GL_ERROR(); glBindTexture(GL_TEXTURE_2D, 0); CHECK_GL_ERROR(); @@ -1645,21 +1642,21 @@ void OpenGL3DRenderer::CreateTextTexture(const boost::shared_array<sal_uInt8> &b TextInfo aTextInfo; aTextInfo.id = getColorAsVector(nUniqueId); - aTextInfo.vertex[0] = vTopLeft.x; - aTextInfo.vertex[1] = vTopLeft.y; - aTextInfo.vertex[2] = vTopLeft.z * m_fHeightWeight; + aTextInfo.vertex[0] = vBottomRight.x; + aTextInfo.vertex[1] = vBottomRight.y; + aTextInfo.vertex[2] = vBottomRight.z; aTextInfo.vertex[3] = vTopRight.x; aTextInfo.vertex[4] = vTopRight.y; - aTextInfo.vertex[5] = vTopRight.z * m_fHeightWeight; + aTextInfo.vertex[5] = vTopRight.z; aTextInfo.vertex[9] = vBottomLeft.x; aTextInfo.vertex[10] = vBottomLeft.y; - aTextInfo.vertex[11] = vBottomLeft.z * m_fHeightWeight; + aTextInfo.vertex[11] = vBottomLeft.z; - aTextInfo.vertex[6] = vBottomRight.x; - aTextInfo.vertex[7] = vBottomRight.y; - aTextInfo.vertex[8] = vBottomRight.z * m_fHeightWeight; + aTextInfo.vertex[6] = vTopLeft.x; + aTextInfo.vertex[7] = vTopLeft.y; + aTextInfo.vertex[8] = vTopLeft.z; CHECK_GL_ERROR(); glGenTextures(1, &aTextInfo.texture); @@ -1674,7 +1671,7 @@ void OpenGL3DRenderer::CreateTextTexture(const boost::shared_array<sal_uInt8> &b CHECK_GL_ERROR(); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); CHECK_GL_ERROR(); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bmpWidth, bmpHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, bitmapBuf.get()); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bmpWidth, bmpHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapBuf.get()); CHECK_GL_ERROR(); glBindTexture(GL_TEXTURE_2D, 0); CHECK_GL_ERROR(); @@ -2013,8 +2010,6 @@ void OpenGL3DRenderer::GetBatchBarsInfo() for (size_t i = 0; i < m_Extrude3DList.size(); i++) { Extrude3DInfo &extrude3DInfo = m_Extrude3DList[i]; - extrude3DInfo.zTransform *= m_fHeightWeight; - extrude3DInfo.zScale *= m_fHeightWeight; if (m_Extrude3DInfo.rounded) { GetBatchTopAndFlatInfo(extrude3DInfo); commit f4436dcb95b341dbb8d2c58e6c7bf1ceb2ffbc10 Author: weigao <wei...@multicorewareinc.com> Date: Wed Jun 18 00:04:08 2014 -0700 add global scale matrix Conflicts: chart2/source/view/main/GL3DRenderer.cxx Change-Id: I23b9929dd3f0f1b0a070091ed9c1fe920edfcbf9 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 8f6bc27..1291230 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -788,7 +788,7 @@ void OpenGL3DRenderer::RenderLine3D(const Polygon3DInfo& polygon) PosVecf3 angle = {0.0f, 0.0f, 0.0f}; PosVecf3 scale = {1.0f, 1.0f, m_fHeightWeight}; MoveModelf(trans, angle, scale); - m_Model =m_GlobalScaleMatrix * m_Model; + m_Model = m_GlobalScaleMatrix * m_Model; m_3DMVP = m_3DProjection * m_3DView * m_Model; for (size_t i = 0; i < polygon.verticesList.size(); i++) @@ -879,7 +879,7 @@ void OpenGL3DRenderer::RenderPolygon3D(const Polygon3DInfo& polygon) PosVecf3 angle = {0.0f, 0.0f, 0.0f}; PosVecf3 scale = {1.0f, 1.0f, m_fHeightWeight}; MoveModelf(trans, angle, scale); - m_Model =m_GlobalScaleMatrix * m_Model; + m_Model = m_GlobalScaleMatrix * m_Model; glm::mat3 normalMatrix(m_Model); glm::mat3 normalInverseTranspos = glm::inverseTranspose(normalMatrix); @@ -1279,7 +1279,7 @@ void OpenGL3DRenderer::RenderExtrudeFlatSurface(const Extrude3DInfo& extrude3D, extrude3D.zTransform}; glm::mat4 aTranslationMatrix = glm::translate(glm::vec3(trans.x, trans.y, trans.z)); glm::mat4 flatScale = glm::scale(glm::vec3(xyScale, xyScale, xyScale)); - m_Model = aTranslationMatrix * extrude3D.rotation * flatScale; + m_Model = m_GlobalScaleMatrix * aTranslationMatrix * extrude3D.rotation * flatScale; if(!mbPickingMode) { glm::mat3 normalMatrix(m_Model); @@ -1323,7 +1323,7 @@ void OpenGL3DRenderer::RenderExtrudeBottomSurface(const Extrude3DInfo& extrude3D glm::mat4 aTranslationMatrix = glm::translate(glm::vec3(trans.x, trans.y, trans.z)); m_Model = aTranslationMatrix * extrude3D.rotation * topTrans * topScale; } - m_Model =m_GlobalScaleMatrix * m_Model; + m_Model = m_GlobalScaleMatrix * m_Model; if(!mbPickingMode) { glm::mat3 normalMatrix(m_Model); @@ -1368,7 +1368,7 @@ void OpenGL3DRenderer::RenderExtrudeMiddleSurface(const Extrude3DInfo& extrude3D glm::mat4 reverseMatrix = glm::translate(glm::vec3(0.0, 0.0, -1.0)); m_Model = m_Model * reverseMatrix; } - m_Model =m_GlobalScaleMatrix * m_Model; + m_Model = m_GlobalScaleMatrix * m_Model; if(!mbPickingMode) { glm::mat3 normalMatrix(m_Model); @@ -1413,7 +1413,7 @@ void OpenGL3DRenderer::RenderExtrudeTopSurface(const Extrude3DInfo& extrude3D) glm::mat4 aTranslationMatrix = glm::translate(glm::vec3(trans.x, trans.y, trans.z)); m_Model = aTranslationMatrix * extrude3D.rotation * topTrans * topScale * orgTrans; } - m_Model =m_GlobalScaleMatrix * m_Model; + m_Model = m_GlobalScaleMatrix * m_Model; if(!mbPickingMode) { glm::mat3 normalMatrix(m_Model); @@ -1443,7 +1443,7 @@ void OpenGL3DRenderer::RenderNonRoundedBar(const Extrude3DInfo& extrude3D) glm::mat4 reverseMatrix = glm::translate(glm::vec3(0.0, 0.0, -1.0)); m_Model = m_Model * reverseMatrix; } - m_Model =m_GlobalScaleMatrix * m_Model; + m_Model = m_GlobalScaleMatrix * m_Model; if(!mbPickingMode) { glm::mat3 normalMatrix(m_Model); @@ -1767,7 +1767,7 @@ void OpenGL3DRenderer::RenderTextShape() PosVecf3 angle = {0.0f, 0.0f, 0.0f}; PosVecf3 scale = {1.0, 1.0, 1.0f}; MoveModelf(trans, angle, scale); - m_Model =m_GlobalScaleMatrix * m_Model; + m_Model = m_GlobalScaleMatrix * m_Model; glm::mat4 aMVP = m_3DProjection * m_3DView * m_Model; glBindBuffer(GL_ARRAY_BUFFER, m_VertexBuffer); CHECK_GL_ERROR(); @@ -1952,7 +1952,8 @@ void OpenGL3DRenderer::GetBatchMiddleInfo(const Extrude3DInfo &extrude3D) glm::mat4 aTranslationMatrix = glm::translate(glm::vec3(trans.x, trans.y, trans.z)); m_Model = aTranslationMatrix * extrude3D.rotation * scale; } - m_Model =m_GlobalScaleMatrix * m_Model; + + m_Model = m_GlobalScaleMatrix * m_Model; glm::mat3 normalMatrix(m_Model); glm::mat3 normalInverseTranspos = glm::inverseTranspose(normalMatrix); m_BarSurface[MIDDLE_SURFACE].modelMatrixList.push_back(m_Model); @@ -1987,7 +1988,8 @@ void OpenGL3DRenderer::GetBatchTopAndFlatInfo(const Extrude3DInfo &extrude3D) glm::mat4 aTranslationMatrix = glm::translate(glm::vec3(trans.x, trans.y, trans.z)); m_Model = aTranslationMatrix * extrude3D.rotation * topTrans * topScale * orgTrans; } - m_Model =m_GlobalScaleMatrix * m_Model; + + m_Model = m_GlobalScaleMatrix * m_Model; glm::mat3 normalMatrix(m_Model); glm::mat3 normalInverseTranspos = glm::inverseTranspose(normalMatrix); m_BarSurface[TOP_SURFACE].modelMatrixList.push_back(m_Model); @@ -1997,7 +1999,7 @@ void OpenGL3DRenderer::GetBatchTopAndFlatInfo(const Extrude3DInfo &extrude3D) glm::mat4 aTranslationMatrix = glm::translate(glm::vec3(trans.x, trans.y, trans.z)); glm::mat4 flatScale = glm::scale(glm::vec3(xyScale, xyScale, xyScale)); m_Model = aTranslationMatrix * extrude3D.rotation * flatScale; - m_Model =m_GlobalScaleMatrix * m_Model; + m_Model = m_GlobalScaleMatrix * m_Model; normalMatrix = glm::mat3(m_Model); normalInverseTranspos = glm::inverseTranspose(normalMatrix); commit 4444e6cf7979b646d655c438c5f7c16fd4e7bcdc Author: weigao <wei...@multicorewareinc.com> Date: Tue Jun 17 23:29:09 2014 -0700 fix the using 3.0 version bug Change-Id: Ie197d0156a2d8b54fe6b08a905d82a63d31513f2 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 2fc70f9..8f6bc27 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -195,7 +195,6 @@ void OpenGL3DRenderer::CheckGLSLVersion() if (iVersion > 3) { maResources.m_b330Support = true; - maResources.m_b330Support = false; return; } p++; commit c7d390bf21623c148ff5c3955561b903d9581da8 Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sat Jun 21 03:20:20 2014 +0200 remove old comment Change-Id: I427b408f898b4f4697f460a61fc306f65d68e12a diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 1de3a3a..d61162a 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -111,11 +111,6 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer // Each series of data flows from left to right, and multiple series are // stacked vertically along y axis. - // NOTE: These objects are created and positioned in a totally blind - // fashion since we don't even have a way to see them on screen. So, no - // guarantee they are positioned correctly. In fact, they are guaranteed - // to be positioned incorrectly. - sal_uInt32 nId = 1; float nXEnd = 0.0; float nYPos = 0.0; commit d3e15ac8df0d6a2bc634686c1f2993f5abbd9451 Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Sat Jun 21 03:19:42 2014 +0200 add disabled code for square bars Change-Id: I4b315d9a4a6fb384eaec4d58c53291e473fb6d85 diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 29a6fbd..1de3a3a 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -70,8 +70,13 @@ const size_t STEPS = 200; const sal_uLong TIMEOUT = 5; const sal_uInt32 ID_STEP = 10; +#if 0 +const float BAR_SIZE_X = 15.0f; +const float BAR_SIZE_Y = 15.0f; +#else const float BAR_SIZE_X = 30.0f; const float BAR_SIZE_Y = 5.0f; +#endif const float BAR_DISTANCE_X = 5.0f; const float BAR_DISTANCE_Y = 5.0; commit 0c7c8aa5f690a4e751076a774feffcf6f95769f7 Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Fri Jun 20 22:13:56 2014 +0200 prevent invalid memory access e.g. fdo26139-1.pdf Change-Id: Ic5854e2056c246d48e2962dfe0a91f67c2c30c04 diff --git a/sdext/source/pdfimport/wrapper/wrapper.cxx b/sdext/source/pdfimport/wrapper/wrapper.cxx index 08519a5..c60a141 100644 --- a/sdext/source/pdfimport/wrapper/wrapper.cxx +++ b/sdext/source/pdfimport/wrapper/wrapper.cxx @@ -553,7 +553,7 @@ void Parser::parseFontFamilyName( FontAttributes& rResult ) nLen -= nAttribLen; pCopy += nAttribLen; } - else + else if(nLen > 0) { if( *pCopy != '-' ) aNewFamilyName.append( *pCopy ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits