[Libreoffice-commits] core.git: 2 commits - chart2/source
chart2/source/view/charttypes/GL3DBarChart.cxx | 102 ++--- chart2/source/view/inc/GL3DBarChart.hxx|5 + 2 files changed, 98 insertions(+), 9 deletions(-) New commits: commit b7c78772571933b34ff618f07161697c958ba60a Author: weigao Date: Wed Aug 20 13:01:19 2014 +0200 add screen text to auto fly Change-Id: I6a4549bf47f5126510c3ddb93733b2d56a4159e2 diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index be8a561..fb6e912 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -189,11 +189,11 @@ class RenderBenchMarkThread : public RenderThread public: RenderBenchMarkThread(GL3DBarChart * pChart) : RenderThread(pChart) +, mbAutoFlyExecuting(0) , mbExecuting(false) , mbNeedFlyBack(false) , mnStep(0) , mnStepsTotal(0) -, mbAutoFlyExecuting(0) { osl_getSystemTime(&maClickFlyBackStartTime); osl_getSystemTime(&maClickFlyBackEndTime); @@ -536,7 +536,6 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector& rDataSer if (BENCH_MARK_MODE) { mnColorRate = 0; -mnAutoFlyBarID = 0; } maShapes.push_back(new opengl3D::Camera(mpRenderer.get())); mpCamera = static_cast(&maShapes.back()); @@ -601,8 +600,8 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector& rDataSer recordBarHistory(nId, nVal); if (BENCH_MARK_MODE) { -std::map::const_iterator itr = maBarColorMap.find(nId); -if (itr == maBarColorMap.end()) +std::map::const_iterator it = maBarColorMap.find(nId); +if (it == maBarColorMap.end()) { maBarColorMap[nId] = nColor; } @@ -1070,9 +1069,10 @@ void GL3DBarChart::recordBarHistory(sal_uInt32 &nBarID, float &nVal) void GL3DBarChart::updateClickEvent() { -if (maRenderEvent == EVENT_CLICK) +if (maRenderEvent == EVENT_CLICK || maRenderEvent == EVENT_AUTO_FLY) { -std::list& aList = maBarHistory[mSelectBarId]; +sal_uInt32 nBarId = maRenderEvent == EVENT_CLICK ? mSelectBarId : mnAutoFlyBarID; +std::list& aList = maBarHistory[nBarId]; sal_uInt32 idex = 0; for (std::list::iterator it = aList.begin();it != aList.end();++it) { @@ -1083,7 +1083,7 @@ void GL3DBarChart::updateClickEvent() maScreenTextShapes.push_back(new opengl3D::ScreenText(mpRenderer.get(), *mpTextCache, aBarValue, CALC_POS_EVENT_ID)); const opengl3D::TextCacheItem& rTextCache = mpTextCache->getText(aBarValue); float nRectWidth = (float)rTextCache.maSize.Width() / (float)rTextCache.maSize.Height() * 0.03; -std::map::const_iterator itr = maBarMap.find(mSelectBarId); +std::map::const_iterator itr = maBarMap.find(nBarId); const BarInformation& rBarInfo = itr->second; glm::vec3 aTextPos = glm::vec3(rBarInfo.maPos.x + BAR_SIZE_X / 2.0f, rBarInfo.maPos.y + BAR_SIZE_Y / 2.0f, @@ -1240,7 +1240,7 @@ void GL3DBarChart::processAutoFly(sal_uInt32 nId, sal_uInt32 nColor) sal_uInt32 nPreColor = maBarColorMap[nId]; maBarColorMap[nId] = nColor; //if has manul event, just record the color and process manul event first -if ((maRenderEvent != EVENT_NONE) && (maRenderEvent != EVENT_AUTO_FLY)) +if ((maRenderEvent != EVENT_NONE)) { return; } commit 8434a2b6aaff9a1a9ce10d9eb9489ebf2929f724 Author: weigao Date: Tue Aug 19 19:24:06 2014 +0800 add auto fly code Change-Id: Id137892b855b4a70625335ede8015dfe6dce1e7e diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 8f9d8ec..be8a561 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -33,6 +33,7 @@ #define HISTORY_NUM 5 #define SHOW_VALUE_COUNT 15 #define SHOW_SCROLL_TEXT_DISTANCE 1000 +#define FLY_THRESHOLD 20 using namespace com::sun::star; @@ -192,6 +193,7 @@ public: , mbNeedFlyBack(false) , mnStep(0) , mnStepsTotal(0) +, mbAutoFlyExecuting(0) { osl_getSystemTime(&maClickFlyBackStartTime); osl_getSystemTime(&maClickFlyBackEndTime); @@ -207,9 +209,11 @@ private: void ProcessScroll(); void UpdateScreenText(); void ProcessClickFlyBack(); +void AutoMoveToBar(); private: glm::vec3 maStartPos; glm::vec3 maEndPos; +bool mbAutoFlyExecuting; bool mbExecuting; bool mbNeedFlyBack; glm::vec3 maStep; @@ -235,7 +239,8 @@ void RenderBenchMarkThread::MoveCamera() {
[Libreoffice-commits] core.git: 2 commits - chart2/opengl chart2/source
chart2/opengl/shape3DFragmentShaderBatch.glsl |3 chart2/source/view/charttypes/GL3DBarChart.cxx | 79 - chart2/source/view/inc/GL3DBarChart.hxx|2 chart2/source/view/main/GL3DRenderer.cxx | 18 - 4 files changed, 94 insertions(+), 8 deletions(-) New commits: commit a2282e290f3b1378021787c91d10207bf9389f9c Author: weigao Date: Sat Jul 19 20:14:52 2014 +0800 modify the light to make the sence looks better Change-Id: If6badae178ffc9be2192fcfdf41fc7d062dc32c4 diff --git a/chart2/opengl/shape3DFragmentShaderBatch.glsl b/chart2/opengl/shape3DFragmentShaderBatch.glsl index b7bdc7e..be24dbf 100644 --- a/chart2/opengl/shape3DFragmentShaderBatch.glsl +++ b/chart2/opengl/shape3DFragmentShaderBatch.glsl @@ -66,8 +66,7 @@ void main() vec3 lightAmbient = Lights.ambient.rgb * MaterialDiffuseColor * -Material.matralParameter.ambient.rgb -* 5.0; +Material.matralParameter.ambient.rgb; for (i = 0; i < Lights.lightNum; i++) { diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index d692e7b..f1769c1 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -31,8 +31,8 @@ namespace opengl3D { namespace { -const int CORNER_DIVION_Y = 10; -const int CORNER_DIVION_Z = 10; +const int CORNER_DIVION_Y = 20; +const int CORNER_DIVION_Z = 20; int static checkGLError(const char *file, int line) { @@ -855,6 +855,10 @@ void OpenGL3DRenderer::RenderPolygon3D(const Polygon3DInfo& polygon) size_t verticesNum = polygon.verticesList.size(); size_t normalsNum = polygon.normalsList.size(); //check whether the number of vertices and normals are equal +if (m_CameraInfo.cameraPos.z >= 0.0f) +glPolygonOffset(1.0, 1.0); +else +glPolygonOffset(-1.0, -1.0); if (verticesNum != normalsNum) { return ; @@ -1023,6 +1027,9 @@ void OpenGL3DRenderer::Set3DSenceInfo(sal_uInt32 nColor, bool twoSidesLighting) m_iLightNum = 0; m_Ambient = getColorAsVector(nColor);; } +SetLightInfo(true, 0xFF, glm::vec4(-1.0, -1.0, 1.0, 0.0)); +SetLightInfo(true, 0xFF, glm::vec4(-1.0, 1.0, 1.0, 0.0)); +SetLightInfo(true, 0xFF, glm::vec4(1.0, -1.0, 1.0, 0.0)); SetLightInfo(true, 0xFF, glm::vec4(1.0, 1.0, 1.0, 0.0)); } @@ -1038,7 +1045,7 @@ void OpenGL3DRenderer::SetLightInfo(bool lightOn, sal_uInt32 nColor, const glm:: } m_LightsInfo.light[m_LightsInfo.lightNum].lightColor = getColorAsVector(nColor); m_LightsInfo.light[m_LightsInfo.lightNum].positionWorldspace = direction; -m_LightsInfo.light[m_LightsInfo.lightNum].lightPower = 1.0; +m_LightsInfo.light[m_LightsInfo.lightNum].lightPower = 0.3f; m_LightsInfo.lightNum++; } else @@ -1049,7 +1056,7 @@ void OpenGL3DRenderer::SetLightInfo(bool lightOn, sal_uInt32 nColor, const glm:: } m_LightColor[m_iLightNum] = getColorAsVector(nColor); m_PositionWorldspace[m_iLightNum] = direction; -m_fLightPower[m_iLightNum] = 1.0; +m_fLightPower[m_iLightNum] = 0.3f; m_iLightNum++; } } @@ -2214,6 +2221,7 @@ void OpenGL3DRenderer::RenderBatchBars(bool bNewScene) glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); +glPolygonOffset(0.0f, 0.0f); glUseProgram(maResources.m_3DBatchProID); UpdateBatch3DUniformBlock(); glBindBuffer(GL_UNIFORM_BUFFER, m_Batch3DUBOBuffer); @@ -2268,7 +2276,7 @@ void OpenGL3DRenderer::RenderBatchBars(bool bNewScene) if (m_Extrude3DInfo.rounded) { glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_CubeElementBuf); -for (int i = 0; i < 3; i++) +for (int i = 0; i < 2; i++) { glBindBuffer(GL_ARRAY_BUFFER, m_BatchModelMatrixBuf); glBufferData(GL_ARRAY_BUFFER, sizeof(glm::mat4) * m_BarSurface[i].modelMatrixList.size(), &m_BarSurface[i].modelMatrixList[0][0], GL_DYNAMIC_DRAW); commit cd6029f2373c67ab39313fd6314610becb5095c5 Author: weigao Date: Sat Jul 19 20:12:37 2014 +0800 add benchmark render thread Change-Id: I0770db8e2cb5ecb1ef7d3706082196a8fd8f1ede diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 62e5ec9..733d46f 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -19,6 +19,13 @@ #include #include +#include +#ifdef WNT +#include +#endif + +#define BENCH_MARK_MODE 1 + using namespace com::sun::star; namespace chart { @@ -125,6 +132,57 @@ void RenderAnimationThread::execute() } } +class RenderBenchMarkThread : public Ren
[Libreoffice-commits] core.git: Branch 'feature/chart-3d-chart2' - 5 commits - chart2/opengl chart2/Package_opengl.mk chart2/source
chart2/Package_opengl.mk|2 chart2/opengl/screenTextFragmentShader.glsl |3 chart2/opengl/textFragmentShader.glsl |3 chart2/opengl/textFragmentShaderBatch.glsl | 20 + chart2/opengl/textVertexShaderBatch.glsl| 22 ++ chart2/source/view/inc/GL3DRenderer.hxx | 44 +++- chart2/source/view/main/3DChartObjects.cxx | 11 - chart2/source/view/main/GL3DRenderer.cxx| 288 +++- 8 files changed, 342 insertions(+), 51 deletions(-) New commits: commit e4939a72af3baff282a50bf1bce76c3184f26403 Author: weigao Date: Wed Jun 18 08:21:41 2014 -0700 add code to call batch texture render Change-Id: I09da7c49eb11da9ea2bc18a5e13f2fd2c0d6bd8f diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index 065b5fb..5f2167c 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -143,6 +143,23 @@ struct TextInfo float vertex[12]; }; +struct TextureArrayInfo +{ +size_t subTextureNum; +int textureArrayWidth; +int textureArrayHeight; +GLuint textureID; +}; +struct TextInfoBatch +{ +size_t batchNum; +std::vector idList; +std::vector texture; +std::vector vertexList; +std::vector textureCoordList; +}; + + struct BatchBarInfo { std::vector modelMatrixList; @@ -235,6 +252,18 @@ private: void UpdateBatch3DUniformBlock(); void RenderBatchBars(bool bNewScene); void CheckGLSLVersion(); +void RenderTextShapeBatch(); +void ReleaseTextShapesBatch(); +void CreateTextTextureSingle(const boost::shared_array &bitmapBuf, + ::Size maSizePixels, + glm::vec3 vTopLeft,glm::vec3 vTopRight, + glm::vec3 vBottomRight, glm::vec3 vBottomLeft, + sal_uInt32 nUniqueId); +void CreateTextTextureBatch(const boost::shared_array &bitmapBuf, + ::Size maSizePixels, + glm::vec3 vTopLeft,glm::vec3 vTopRight, + glm::vec3 vBottomRight, glm::vec3 vBottomLeft, + sal_uInt32 nUniqueId); private: struct ShaderResources @@ -290,6 +319,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(); @@ -362,7 +399,7 @@ private: std::vector m_TextInfoList; std::vector m_ScreenTextInfoList; GLuint m_TextTexCoordBuf; - +GLuint m_TextTexCoordBufBatch; int m_uiSelectFrameCounter; std::vector m_Vertices; @@ -392,6 +429,7 @@ private: MaterialParameters m_Batchmaterial; GLuint m_Batch3DUBOBuffer; GLint m_Batch3DActualSizeLight; +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 cf22a86..60b3cb2 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -88,6 +88,7 @@ OpenGL3DRenderer::OpenGL3DRenderer(): OpenGL3DRenderer::~OpenGL3DRenderer() { +ReleaseShapes(); // delete buffers glDeleteBuffers(1, &m_CubeVertexBuf); glDeleteBuffers(1, &m_CubeNormalBuf); @@ -103,10 +104,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() @@ -139,6 +148,12 @@ OpenGL3DRenderer::ShaderResources::ShaderResources() , m_3DBatchNormalID(0) , m_3DBatchColorID(0) , m_b330Support(false) +, m_BatchTextProID(0) +, m_BatchTextMatrixID(0) +, m_BatchTextVertexID(0) +, m_BatchTextTexCoordID(0) +, m_BatchTextTexID(0) +, mbTexBatchSupport(false) { } @@ -149,6 +164,7 @@ OpenGL3DRenderer::ShaderResources::~ShaderResources() glDeleteProgram(m_ScreenTextProID); glDeleteProgram(m_3DProID); glDeleteProgram(m_3DBatchProID); +glDeleteProgram(m_BatchTextProID); } void OpenGL3DRenderer::CheckGLSLVersion() @@ -204,6 +220,27 @@ void OpenGL3DRenderer::ShaderResources::LoadShaders() m_3
[Libreoffice-commits] core.git: 3 commits - chart2/opengl chart2/Package_opengl.mk chart2/source
chart2/Package_opengl.mk |2 chart2/opengl/shape3DFragmentShaderV300.glsl | 87 ++ chart2/opengl/shape3DVertexShaderV300.glsl | 29 +++ chart2/source/view/inc/GL3DRenderer.hxx | 20 ++ chart2/source/view/main/GL3DRenderer.cxx | 228 +-- 5 files changed, 321 insertions(+), 45 deletions(-) New commits: commit 7c5580874ccb403baec7a067a6fb55182a2bd354 Author: weigao Date: Sat Jun 14 08:59:07 2014 -0700 add codes for calling the 3.0 shaders Change-Id: I0e95879c04047ccb836543d801bda6a01ae469ef diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 3566fb3..4178467 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -195,6 +195,7 @@ void OpenGL3DRenderer::CheckGLSLVersion() if (iVersion > 3) { maResources.m_b330Support = true; +maResources.m_b330Support = false; return; } p++; @@ -834,11 +835,6 @@ void OpenGL3DRenderer::RenderPolygon3D(const Polygon3DInfo& polygon) { return ; } -//update ubo -Update3DUniformBlock(); -glBindBuffer(GL_UNIFORM_BUFFER, m_3DUBOBuffer); -glBufferSubData(GL_UNIFORM_BUFFER, m_3DActualSizeLight, sizeof(MaterialParameters), &polygon.material); -CHECK_GL_ERROR(); glBindBuffer(GL_UNIFORM_BUFFER, 0); if(mbPickingMode) { @@ -849,6 +845,31 @@ void OpenGL3DRenderer::RenderPolygon3D(const Polygon3DInfo& polygon) glUseProgram(maResources.m_3DProID); glUniformMatrix4fv(maResources.m_3DViewID, 1, GL_FALSE, &m_3DView[0][0]); glUniformMatrix4fv(maResources.m_3DProjectionID, 1, GL_FALSE, &m_3DProjection[0][0]); +if (maResources.m_b330Support) +{ +//update ubo +Update3DUniformBlock(); +glBindBuffer(GL_UNIFORM_BUFFER, m_3DUBOBuffer); +glBufferSubData(GL_UNIFORM_BUFFER, m_3DActualSizeLight, sizeof(MaterialParameters), &polygon.material); +CHECK_GL_ERROR(); +} +else +{ +//update light information +glUniform4fv(maResources.m_3DLightColorID, m_iLightNum, (GLfloat*)m_LightColor); +glUniform4fv(maResources.m_3DLightPosID, m_iLightNum, (GLfloat*)m_PositionWorldspace); +glUniform1fv(maResources.m_3DLightPowerID, m_iLightNum, m_fLightPower); +glUniform1i(maResources.m_3DLightNumID, m_iLightNum); +glUniform4fv(maResources.m_3DLightAmbientID, 1, &m_Ambient[0]); +//update meterial information +glUniform4fv(maResources.m_3DMaterialAmbientID, 1, &polygon.material.ambient[0]); +glUniform4fv(maResources.m_3DMaterialDiffuseID, 1, &polygon.material.diffuse[0]); +glUniform4fv(maResources.m_3DMaterialSpecularID, 1, &polygon.material.specular[0]); +glUniform4fv(maResources.m_3DMaterialColorID, 1, &polygon.material.materialColor[0]); +glUniform1i(maResources.m_3DMaterialTwoSidesID, polygon.material.twoSidesLighting); +glUniform1f(maResources.m_3DMaterialShininessID, polygon.material.shininess); +CHECK_GL_ERROR(); +} } for (size_t i = 0; i < verticesNum; i++) { @@ -968,26 +989,45 @@ void OpenGL3DRenderer::RenderPolygon3DObject() void OpenGL3DRenderer::Set3DSenceInfo(sal_uInt32 nColor, bool twoSidesLighting) { m_Polygon3DInfo.material.twoSidesLighting = twoSidesLighting; - -m_LightsInfo.ambient = getColorAsVector(nColor); - -m_LightsInfo.lightNum = 0; +if (maResources.m_b330Support) +{ +m_LightsInfo.ambient = getColorAsVector(nColor); +m_LightsInfo.lightNum = 0; +} +else +{ +m_iLightNum = 0; +m_Ambient = getColorAsVector(nColor);; +} SetLightInfo(true, 0xFF, glm::vec4(1.0, 1.0, 1.0, 0.0)); } void OpenGL3DRenderer::SetLightInfo(bool lightOn, sal_uInt32 nColor, const glm::vec4& direction) { -if (m_LightsInfo.lightNum >= MAX_LIGHT_NUM) -{ -return; -} - if (lightOn) { -m_LightsInfo.light[m_LightsInfo.lightNum].lightColor = getColorAsVector(nColor); -m_LightsInfo.light[m_LightsInfo.lightNum].positionWorldspace = direction; -m_LightsInfo.light[m_LightsInfo.lightNum].lightPower = 1.0; -m_LightsInfo.lightNum++; +if (maResources.m_b330Support) +{ +if (m_LightsInfo.lightNum >= MAX_LIGHT_NUM) +{ +return; +} +m_LightsInfo.light[m_LightsInfo.lightNum].lightColor = getColorAsVector(nColor); +m_LightsInfo.light[m_LightsInfo.lightNum].positionWorldspace = direction; +m_LightsInfo.light[m_LightsInfo.lightNum].lightPower = 1.0; +m_LightsInfo.lightNum++; +} +e
[Libreoffice-commits] core.git: Branch 'feature/chart-3d-chart2' - 8 commits - chart2/opengl chart2/Package_opengl.mk chart2/source
chart2/Package_opengl.mk |2 chart2/opengl/shape3DFragmentShaderV300.glsl | 87 + chart2/opengl/shape3DVertexShaderV300.glsl | 29 +++ chart2/source/view/charttypes/GL3DBarChart.cxx | 83 ++--- chart2/source/view/inc/GL3DBarChart.hxx|6 chart2/source/view/inc/GL3DRenderer.hxx| 20 ++ chart2/source/view/main/GL3DRenderer.cxx | 228 - 7 files changed, 387 insertions(+), 68 deletions(-) New commits: commit 796a9e97522ee1201a3f291f3c1c31d02541c789 Author: weigao Date: Sat Jun 14 08:59:07 2014 -0700 add codes for calling the 3.0 shaders Change-Id: I0e95879c04047ccb836543d801bda6a01ae469ef diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 1799396..9098cd1 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -172,6 +172,7 @@ void OpenGL3DRenderer::CheckGLSLVersion() if (iVersion > 3) { maResources.m_b330Support = true; +maResources.m_b330Support = false; return; } p++; @@ -810,11 +811,6 @@ void OpenGL3DRenderer::RenderPolygon3D(Polygon3DInfo &polygon) { return ; } -//update ubo -Update3DUniformBlock(); -glBindBuffer(GL_UNIFORM_BUFFER, m_3DUBOBuffer); -glBufferSubData(GL_UNIFORM_BUFFER, m_3DActualSizeLight, sizeof(MaterialParameters), &polygon.material); -CHECK_GL_ERROR(); glBindBuffer(GL_UNIFORM_BUFFER, 0); if(mbPickingMode) { @@ -825,6 +821,31 @@ void OpenGL3DRenderer::RenderPolygon3D(Polygon3DInfo &polygon) glUseProgram(maResources.m_3DProID); glUniformMatrix4fv(maResources.m_3DViewID, 1, GL_FALSE, &m_3DView[0][0]); glUniformMatrix4fv(maResources.m_3DProjectionID, 1, GL_FALSE, &m_3DProjection[0][0]); +if (maResources.m_b330Support) +{ +//update ubo +Update3DUniformBlock(); +glBindBuffer(GL_UNIFORM_BUFFER, m_3DUBOBuffer); +glBufferSubData(GL_UNIFORM_BUFFER, m_3DActualSizeLight, sizeof(MaterialParameters), &polygon.material); +CHECK_GL_ERROR(); +} +else +{ +//update light information +glUniform4fv(maResources.m_3DLightColorID, m_iLightNum, (GLfloat*)m_LightColor); +glUniform4fv(maResources.m_3DLightPosID, m_iLightNum, (GLfloat*)m_PositionWorldspace); +glUniform1fv(maResources.m_3DLightPowerID, m_iLightNum, m_fLightPower); +glUniform1i(maResources.m_3DLightNumID, m_iLightNum); +glUniform4fv(maResources.m_3DLightAmbientID, 1, &m_Ambient[0]); +//update meterial information +glUniform4fv(maResources.m_3DMaterialAmbientID, 1, &polygon.material.ambient[0]); +glUniform4fv(maResources.m_3DMaterialDiffuseID, 1, &polygon.material.diffuse[0]); +glUniform4fv(maResources.m_3DMaterialSpecularID, 1, &polygon.material.specular[0]); +glUniform4fv(maResources.m_3DMaterialColorID, 1, &polygon.material.materialColor[0]); +glUniform1i(maResources.m_3DMaterialTwoSidesID, polygon.material.twoSidesLighting); +glUniform1f(maResources.m_3DMaterialShininessID, polygon.material.shininess); +CHECK_GL_ERROR(); +} } for (size_t i = 0; i < verticesNum; i++) { @@ -942,26 +963,45 @@ void OpenGL3DRenderer::RenderPolygon3DObject() void OpenGL3DRenderer::Set3DSenceInfo(sal_uInt32 nColor, bool twoSidesLighting) { m_Polygon3DInfo.material.twoSidesLighting = twoSidesLighting; - -m_LightsInfo.ambient = getColorAsVector(nColor); - -m_LightsInfo.lightNum = 0; +if (maResources.m_b330Support) +{ +m_LightsInfo.ambient = getColorAsVector(nColor); +m_LightsInfo.lightNum = 0; +} +else +{ +m_iLightNum = 0; +m_Ambient = getColorAsVector(nColor);; +} SetLightInfo(true, 0xFF, glm::vec4(1.0, 1.0, 1.0, 0.0)); } void OpenGL3DRenderer::SetLightInfo(bool lightOn, sal_uInt32 nColor, const glm::vec4& direction) { -if (m_LightsInfo.lightNum >= MAX_LIGHT_NUM) -{ -return; -} - if (lightOn) { -m_LightsInfo.light[m_LightsInfo.lightNum].lightColor = getColorAsVector(nColor); -m_LightsInfo.light[m_LightsInfo.lightNum].positionWorldspace = direction; -m_LightsInfo.light[m_LightsInfo.lightNum].lightPower = 1.0; -m_LightsInfo.lightNum++; +if (maResources.m_b330Support) +{ +if (m_LightsInfo.lightNum >= MAX_LIGHT_NUM) +{ +return; +} +m_LightsInfo.light[m_LightsInfo.lightNum].lightColor = getColorAsVector(nColor); +m_LightsInfo.light[m_LightsInfo.lightNum].positionWorldspace = direction; +m_LightsInfo.light[m_LightsInfo.li
[Libreoffice-commits] core.git: 2 commits - chart2/source
chart2/source/view/inc/GL3DRenderer.hxx | 13 +++- chart2/source/view/main/GL3DRenderer.cxx | 93 --- 2 files changed, 70 insertions(+), 36 deletions(-) New commits: commit 74042bc601fdf3faf25541fb4959d061bbf6abd1 Author: weigao Date: Sun May 25 15:19:47 2014 +0800 add delete shape function Change-Id: Ided3902a45c6bb7bf79827849aeca3c40f83 diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index 0fcf437..cf95f30 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -83,8 +83,8 @@ struct Polygon3DInfo Vertices3D *vertices; UVs3D *uvs; Normals3D *normals; -std::list verticesList; -std::list normalsList; +std::vector verticesList; +std::vector normalsList; MaterialParameters material; }; @@ -208,6 +208,11 @@ private: int iSubDivZ, float width, float height, float depth); void CreateSceneBoxView(); void RenderTexture(GLuint TexID); + +void ReleaseShapes(); +void ReleasePolygonShapes(); +void ReleaseExtrude3DShapes(); +void ReleaseTextShapes(); private: struct ShaderResources @@ -319,7 +324,7 @@ private: Polygon3DInfo m_Polygon3DInfo; -std::list m_Polygon3DInfoList; +std::vector m_Polygon3DInfoList; glm::mat4 m_D3DTrasform; @@ -354,7 +359,7 @@ private: GLuint m_BoundBox; GLuint m_BoundBoxNormal; // add for text -std::list m_TextInfoList; +std::vector m_TextInfoList; GLuint m_TextTexCoordBuf; int m_uiSelectFrameCounter; diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index bb4d239..7d4db19 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -686,9 +686,7 @@ double OpenGL3DRenderer::GetTime() void OpenGL3DRenderer::RenderLine3D(Polygon3DInfo &polygon) { -size_t listNum = polygon.verticesList.size(); 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}; @@ -696,10 +694,10 @@ void OpenGL3DRenderer::RenderLine3D(Polygon3DInfo &polygon) m_3DMVP = m_3DProjection * m_3DView * m_Model; -for (size_t i = 0; i < listNum; i++) +for (size_t i = 0; i < polygon.verticesList.size(); i++) { //move the circle to the pos, and scale using the xScale and Y scale -Vertices3D *pointList = polygon.verticesList.front(); +Vertices3D *pointList = polygon.verticesList[i]; //if line only, using the common shader to render //fill vertex buffer @@ -726,8 +724,6 @@ void OpenGL3DRenderer::RenderLine3D(Polygon3DInfo &polygon) glDrawArrays(GL_LINE_STRIP, 0, pointList->size()); glDisableVertexAttribArray(maResources.m_2DVertexID); glBindBuffer(GL_ARRAY_BUFFER, 0); -delete pointList; -polygon.verticesList.pop_front(); } glUseProgram(0); } @@ -760,8 +756,8 @@ void OpenGL3DRenderer::RenderPolygon3D(Polygon3DInfo &polygon) for (size_t i = 0; i < verticesNum; i++) { //move the circle to the pos, and scale using the xScale and Y scale -Vertices3D *pointList = polygon.verticesList.front(); -Normals3D *normalList = polygon.normalsList.front(); +Vertices3D *pointList = polygon.verticesList[i]; +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}; @@ -819,21 +815,44 @@ void OpenGL3DRenderer::RenderPolygon3D(Polygon3DInfo &polygon) glDisableVertexAttribArray(maResources.m_3DNormalID); glBindBuffer(GL_ARRAY_BUFFER, 0); -delete pointList; -delete normalList; -polygon.verticesList.pop_front(); -polygon.normalsList.pop_front(); } glUseProgram(0); } +namespace { + +template< typename T > +struct DeletePointer +{ +void operator()(T* p) +{ +delete p; +} +}; + +} + +void OpenGL3DRenderer::ReleasePolygonShapes() +{ +for (size_t i = 0; i < m_Polygon3DInfoList.size(); i++) +{ +Polygon3DInfo &polygon = m_Polygon3DInfoList[i]; +std::for_each(polygon.verticesList.begin(), +polygon.verticesList.end(), DeletePointer()); +std::for_each(polygon.normalsList.begin(), +polygon.normalsList.end(), DeletePointer()); +delete polygon.vertices; +delete polygon.normals; +} +m_Polygon3DInfoList.clear(); +} + void OpenGL3DRenderer::RenderPolygon3DObject() { glDepthMask(GL_FALSE); -size_t polygonNum = m_Polygon3DInfoList.size(); -for (size_t i = 0; i < polygonNum; i++) +for
[Libreoffice-commits] core.git: Branch 'feature/chart-3d-chart2' - chart2/source
chart2/source/view/inc/GL3DRenderer.hxx | 15 -- chart2/source/view/main/GL3DRenderer.cxx | 73 ++- 2 files changed, 54 insertions(+), 34 deletions(-) New commits: commit 33921d26aabba22f24b2c49e9fedcea35ada81c6 Author: weigao Date: Sun May 25 15:19:47 2014 +0800 add delete shape function Change-Id: Ided3902a45c6bb7bf79827849aeca3c40f83 diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index b5a5c68..e0214a8 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -83,9 +83,9 @@ struct Polygon3DInfo Vertices3D *vertices; UVs3D *uvs; Normals3D *normals; -std::list verticesList; -std::list uvsList; -std::list normalsList; +std::vector verticesList; +std::vector uvsList; +std::vector normalsList; MaterialParameters material; }; @@ -209,6 +209,11 @@ private: int iSubDivZ, float width, float height, float depth); void CreateSceneBoxView(); void RenderTexture(GLuint TexID); + +void ReleaseShapes(); +void ReleasePolygonShapes(); +void ReleaseExtrude3DShapes(); +void ReleaseTextShapes(); private: struct ShaderResources @@ -297,7 +302,7 @@ private: Polygon3DInfo m_Polygon3DInfo; -std::list m_Polygon3DInfoList; +std::vector m_Polygon3DInfoList; glm::mat4 m_D3DTrasform; @@ -332,7 +337,7 @@ private: GLuint m_BoundBox; GLuint m_BoundBoxNormal; // add for text -std::list m_TextInfoList; +std::vector m_TextInfoList; GLuint m_TextTexCoordBuf; int m_uiSelectFrameCounter; diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index a658536..ecab037 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -685,9 +685,7 @@ double OpenGL3DRenderer::GetTime() void OpenGL3DRenderer::RenderLine3D(Polygon3DInfo &polygon) { -size_t listNum = polygon.verticesList.size(); 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}; @@ -695,10 +693,10 @@ void OpenGL3DRenderer::RenderLine3D(Polygon3DInfo &polygon) m_3DMVP = m_3DProjection * m_3DView * m_Model; -for (size_t i = 0; i < listNum; i++) +for (size_t i = 0; i < polygon.verticesList.size(); i++) { //move the circle to the pos, and scale using the xScale and Y scale -Vertices3D *pointList = polygon.verticesList.front(); +Vertices3D *pointList = polygon.verticesList[i]; //if line only, using the common shader to render //fill vertex buffer @@ -725,8 +723,6 @@ void OpenGL3DRenderer::RenderLine3D(Polygon3DInfo &polygon) glDrawArrays(GL_LINE_STRIP, 0, pointList->size()); glDisableVertexAttribArray(maResources.m_2DVertexID); glBindBuffer(GL_ARRAY_BUFFER, 0); -delete pointList; -polygon.verticesList.pop_front(); } glUseProgram(0); } @@ -759,8 +755,8 @@ void OpenGL3DRenderer::RenderPolygon3D(Polygon3DInfo &polygon) for (size_t i = 0; i < verticesNum; i++) { //move the circle to the pos, and scale using the xScale and Y scale -Vertices3D *pointList = polygon.verticesList.front(); -Normals3D *normalList = polygon.normalsList.front(); +Vertices3D *pointList = polygon.verticesList[i]; +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}; @@ -818,10 +814,6 @@ void OpenGL3DRenderer::RenderPolygon3D(Polygon3DInfo &polygon) glDisableVertexAttribArray(maResources.m_3DNormalID); glBindBuffer(GL_ARRAY_BUFFER, 0); -delete pointList; -delete normalList; -polygon.verticesList.pop_front(); -polygon.normalsList.pop_front(); } glUseProgram(0); } @@ -839,13 +831,26 @@ struct DeletePointer } +void OpenGL3DRenderer::ReleasePolygonShapes() +{ +for (size_t i = 0; i < m_Polygon3DInfoList.size(); i++) +{ +Polygon3DInfo &polygon = m_Polygon3DInfoList[i]; +std::for_each(polygon.verticesList.begin(), +polygon.verticesList.end(), DeletePointer()); +std::for_each(polygon.normalsList.begin(), +polygon.normalsList.end(), DeletePointer()); +delete polygon.vertices; +delete polygon.normals; +} +m_Polygon3DInfoList.clear(); +} void OpenGL3DRenderer::RenderPolygon3DObject() { glDepthMask(GL_FALSE); -size_t polygonNum = m_Polygon3DInfoList.size(); -for (size_t i = 0; i < polygonNum; i++) +for (size_t i = 0; i < m_Polygon3DInfoList.size()
[Libreoffice-commits] core.git: Branch 'feature/chart-3d-chart2' - chart2/source
chart2/source/view/main/GL3DRenderer.cxx |6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) New commits: commit 74544a356a5f69afe148405139ac783150e1b322 Author: weigao Date: Sun May 25 13:47:44 2014 +0800 fix the bar model generate Change-Id: I8df87b27dd93f0e11198998869b97754ded3bca1 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 75628da..a658536 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -329,7 +329,7 @@ void OpenGL3DRenderer::CreateActualRoundedCube(float fRadius, int iSubDivY, int { return; } -float topThreshold = height - 2 * fRadius; +float topThreshold = depth - 2 * fRadius; float bottomThreshold = fRadius; std::vector vertices; @@ -1002,7 +1002,8 @@ void OpenGL3DRenderer::AddShape3DExtrudeObject(bool roundedCorner, sal_uInt32 nC m_Extrude3DInfo.rounded = roundedCorner; if (m_Extrude3DInfo.rounded && (m_RoundBarMesh.iMeshSizes == 0)) { -CreateActualRoundedCube(0.1f, 30, 30, 1.0f, m_Extrude3DInfo.yScale / m_Extrude3DInfo.xScale, 1.2f); +float radius = 0.2f; +CreateActualRoundedCube(radius, 30, 30, 1.0f, m_Extrude3DInfo.yScale / m_Extrude3DInfo.xScale, 1 + 2 * radius); AddVertexData(m_CubeVertexBuf); AddNormalData(m_CubeNormalBuf); AddIndexData(m_CubeElementBuf); @@ -1197,7 +1198,6 @@ void OpenGL3DRenderer::RenderExtrudeTopSurface(const Extrude3DInfo& extrude3D) PosVecf3 trans = {extrude3D.xTransform, extrude3D.yTransform, extrude3D.zTransform}; - if (actualZTrans < 0.0f) { // the height of rounded corner is higher than the cube than use the org scale matrix ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: Branch 'feature/chart-3d-chart2' - 11 commits - chart2/source include/vcl vcl/source
chart2/source/view/charttypes/GL3DBarChart.cxx | 37 ++--- chart2/source/view/main/3DChartObjects.cxx |7 +++- chart2/source/view/main/GL3DRenderer.cxx | 31 include/vcl/opengl/OpenGLHelper.hxx|1 vcl/source/opengl/OpenGLHelper.cxx |6 5 files changed, 47 insertions(+), 35 deletions(-) New commits: commit 0b363b9e38adfe92ad905a298b1a5420783e0126 Author: weigao Date: Sat May 24 11:45:02 2014 +0800 modify the camera position to show the whole scene Change-Id: I0d197295046a478d59f4260f2931fbaec9a17a33 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index c61785d..6d6876b 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -1559,7 +1559,7 @@ void OpenGL3DRenderer::CreateSceneBoxView() m_SenceBox.maxZCoord *= m_fHeightWeight; m_SenceBox.minZCoord *= m_fHeightWeight; m_CameraInfo.cameraOrg = glm::vec3(m_SenceBox.minXCoord + senceBoxWidth / 2, - m_SenceBox.minYCoord + senceBoxDepth * 2, + m_SenceBox.minYCoord + senceBoxDepth / 2, m_SenceBox.minZCoord + senceBoxHeight * m_fHeightWeight/ 2);//update the camera position and org m_CameraInfo.cameraPos.x = m_CameraInfo.cameraOrg.x + distance * cos(veriticalAngle) * sin(horizontalAngle); m_CameraInfo.cameraPos.y = m_CameraInfo.cameraOrg.y + distance * cos(veriticalAngle) * cos(horizontalAngle); commit a207e3c174eb9eee3a68909f07c9822a28a19a01 Author: Markus Mohrhard Date: Sat May 24 10:41:00 2014 +0200 the destructor alreadz clears the vector Change-Id: I085e3463251a7d73be9724ae56bd6aa3fcf50a34 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 6b3a3a4..c61785d 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -733,7 +733,6 @@ void OpenGL3DRenderer::RenderLine3D(Polygon3DInfo &polygon) glDrawArrays(GL_LINE_STRIP, 0, pointList->size()); glDisableVertexAttribArray(maResources.m_2DVertexID); glBindBuffer(GL_ARRAY_BUFFER, 0); -pointList->clear(); delete pointList; polygon.verticesList.pop_front(); } @@ -827,8 +826,6 @@ void OpenGL3DRenderer::RenderPolygon3D(Polygon3DInfo &polygon) glDisableVertexAttribArray(maResources.m_3DNormalID); glBindBuffer(GL_ARRAY_BUFFER, 0); -pointList->clear(); -normalList->clear(); delete pointList; delete normalList; polygon.verticesList.pop_front(); commit 17ef5743d3974894fb1ea2f277393a6ac0152b27 Author: weigao Date: Fri May 23 05:07:38 2014 -0700 fix the calling of polygon API Change-Id: I14d7e8594dae86830ca05aeb28633feac0a258cc diff --git a/chart2/source/view/main/3DChartObjects.cxx b/chart2/source/view/main/3DChartObjects.cxx index aa77743..bf8c10b 100644 --- a/chart2/source/view/main/3DChartObjects.cxx +++ b/chart2/source/view/main/3DChartObjects.cxx @@ -53,6 +53,7 @@ void Line::render() mpRenderer->AddShapePolygon3DObject(0, true, maLineColor.GetColor(), 0, 0, mnUniqueId); mpRenderer->AddPolygon3DObjectPoint(maPosBegin.x, maPosBegin.y, maPosBegin.z); mpRenderer->AddPolygon3DObjectPoint(maPosEnd.x, maPosEnd.y, maPosEnd.z); +mpRenderer->EndAddPolygon3DObjectPoint(); mpRenderer->EndAddShapePolygon3DObject(); } @@ -131,6 +132,7 @@ void Rectangle::render() mpRenderer->AddPolygon3DObjectNormalPoint(normal.x, normal.y, normal.z); mpRenderer->EndAddPolygon3DObjectPoint(); mpRenderer->EndAddPolygon3DObjectNormalPoint(); +mpRenderer->EndAddShapePolygon3DObject(); //we should render the edge if the edge color is different from the fill color if (maColor.GetColor() != maLineColor.GetColor()) { @@ -140,8 +142,8 @@ void Rectangle::render() mpRenderer->AddPolygon3DObjectPoint(maTopLeft.x, maTopLeft.y, maTopLeft.z); mpRenderer->AddPolygon3DObjectPoint(bottomLeft.x, bottomLeft.y, bottomLeft.z); mpRenderer->EndAddPolygon3DObjectPoint(); +mpRenderer->EndAddShapePolygon3DObject(); } -mpRenderer->EndAddShapePolygon3DObject(); } void Rectangle::setPosition(const glm::vec3& rTopLeft, const glm::vec3& rTopRight, const glm::vec3& rBottomRight) commit e86abf0f00fee0f508cf35de9582de078e0e056e Author: weigao Date: Fri May 23 05:03:37 2014 -0700 fix the polygon normal Change-Id: I89f27b409cf04f98f90bdc61396a8c58ec91d7f7 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index bbeae20..6b3a3a4 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cx
[Libreoffice-commits] core.git: 11 commits - chart2/source include/vcl vcl/source
chart2/source/view/charttypes/GL3DBarChart.cxx | 37 ++--- chart2/source/view/main/3DChartObjects.cxx |7 +++- chart2/source/view/main/GL3DRenderer.cxx | 31 include/vcl/opengl/OpenGLHelper.hxx|1 vcl/source/opengl/OpenGLHelper.cxx |6 5 files changed, 47 insertions(+), 35 deletions(-) New commits: commit fed8631d31c4598466ef0d09f509bfabd5ce9dd7 Author: weigao Date: Sat May 24 11:45:02 2014 +0800 modify the camera position to show the whole scene Change-Id: I0d197295046a478d59f4260f2931fbaec9a17a33 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index f7af953..ffd89ad 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -1547,7 +1547,7 @@ void OpenGL3DRenderer::CreateSceneBoxView() m_SenceBox.maxZCoord *= m_fHeightWeight; m_SenceBox.minZCoord *= m_fHeightWeight; m_CameraInfo.cameraOrg = glm::vec3(m_SenceBox.minXCoord + senceBoxWidth / 2, - m_SenceBox.minYCoord + senceBoxDepth * 2, + m_SenceBox.minYCoord + senceBoxDepth / 2, m_SenceBox.minZCoord + senceBoxHeight * m_fHeightWeight/ 2);//update the camera position and org m_CameraInfo.cameraPos.x = m_CameraInfo.cameraOrg.x + distance * cos(veriticalAngle) * sin(horizontalAngle); m_CameraInfo.cameraPos.y = m_CameraInfo.cameraOrg.y + distance * cos(veriticalAngle) * cos(horizontalAngle); commit 08c1c406055f689ef70725a13770037d7d420d5b Author: Markus Mohrhard Date: Sat May 24 10:41:00 2014 +0200 the destructor alreadz clears the vector Change-Id: I085e3463251a7d73be9724ae56bd6aa3fcf50a34 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 8112ed1e..f7af953 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -734,7 +734,6 @@ void OpenGL3DRenderer::RenderLine3D(Polygon3DInfo &polygon) glDrawArrays(GL_LINE_STRIP, 0, pointList->size()); glDisableVertexAttribArray(maResources.m_2DVertexID); glBindBuffer(GL_ARRAY_BUFFER, 0); -pointList->clear(); delete pointList; polygon.verticesList.pop_front(); } @@ -828,8 +827,6 @@ void OpenGL3DRenderer::RenderPolygon3D(Polygon3DInfo &polygon) glDisableVertexAttribArray(maResources.m_3DNormalID); glBindBuffer(GL_ARRAY_BUFFER, 0); -pointList->clear(); -normalList->clear(); delete pointList; delete normalList; polygon.verticesList.pop_front(); commit 2d3d63a3da88373e15c0218a9a417ad20db8b85a Author: weigao Date: Fri May 23 05:07:38 2014 -0700 fix the calling of polygon API Change-Id: I14d7e8594dae86830ca05aeb28633feac0a258cc diff --git a/chart2/source/view/main/3DChartObjects.cxx b/chart2/source/view/main/3DChartObjects.cxx index aa77743..bf8c10b 100644 --- a/chart2/source/view/main/3DChartObjects.cxx +++ b/chart2/source/view/main/3DChartObjects.cxx @@ -53,6 +53,7 @@ void Line::render() mpRenderer->AddShapePolygon3DObject(0, true, maLineColor.GetColor(), 0, 0, mnUniqueId); mpRenderer->AddPolygon3DObjectPoint(maPosBegin.x, maPosBegin.y, maPosBegin.z); mpRenderer->AddPolygon3DObjectPoint(maPosEnd.x, maPosEnd.y, maPosEnd.z); +mpRenderer->EndAddPolygon3DObjectPoint(); mpRenderer->EndAddShapePolygon3DObject(); } @@ -131,6 +132,7 @@ void Rectangle::render() mpRenderer->AddPolygon3DObjectNormalPoint(normal.x, normal.y, normal.z); mpRenderer->EndAddPolygon3DObjectPoint(); mpRenderer->EndAddPolygon3DObjectNormalPoint(); +mpRenderer->EndAddShapePolygon3DObject(); //we should render the edge if the edge color is different from the fill color if (maColor.GetColor() != maLineColor.GetColor()) { @@ -140,8 +142,8 @@ void Rectangle::render() mpRenderer->AddPolygon3DObjectPoint(maTopLeft.x, maTopLeft.y, maTopLeft.z); mpRenderer->AddPolygon3DObjectPoint(bottomLeft.x, bottomLeft.y, bottomLeft.z); mpRenderer->EndAddPolygon3DObjectPoint(); +mpRenderer->EndAddShapePolygon3DObject(); } -mpRenderer->EndAddShapePolygon3DObject(); } void Rectangle::setPosition(const glm::vec3& rTopLeft, const glm::vec3& rTopRight, const glm::vec3& rBottomRight) commit 7c603d4a2313de4c870e0db792e2d7fd3dc02efa Author: weigao Date: Fri May 23 05:03:37 2014 -0700 fix the polygon normal Change-Id: I89f27b409cf04f98f90bdc61396a8c58ec91d7f7 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 6f4636b..8112ed1e 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/s
[Libreoffice-commits] core.git: Branch 'feature/chart-3d-chart2' - chart2/source
chart2/source/view/main/GL3DRenderer.cxx | 14 +++--- 1 file changed, 7 insertions(+), 7 deletions(-) New commits: commit 07ef1602dfc48301031dc92d1795a42c2b6d8769 Author: weigao Date: Sun May 18 04:09:13 2014 -0700 add reverse bars code Change-Id: I2db9edd9015bb10cffe58a44c379db0ab87e7d72 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index bcb87b2..f7867d5 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -340,7 +340,7 @@ void OpenGL3DRenderer::CreateActualRoundedCube(float fRadius, int iSubDivY, int glm::vec3 actualNormals[3]; std::vector indeices[5]; glm::vec3 externSurNormal; -glm::mat4 corrctCoord = glm::translate(glm::vec3(width / 2.0f, height / 2.0f, depth / 2.0f - fRadius)); +glm::mat4 corrctCoord = glm::translate(glm::vec3(0.0f, 0.0f, depth / 2.0f - fRadius)); m_RoundBarMesh.topThreshold = topThreshold; m_RoundBarMesh.bottomThreshold = bottomThreshold; m_RoundBarMesh.iMeshStartIndices = m_Vertices.size(); @@ -964,13 +964,14 @@ void OpenGL3DRenderer::AddShape3DExtrudeObject(bool roundedCorner, sal_uInt32 nC glm::vec4 DirX = modelMatrix * glm::vec4(1.0, 0.0, 0.0, 0.0); glm::vec4 DirY = modelMatrix * glm::vec4(0.0, 1.0, 0.0, 0.0); glm::vec4 DirZ = modelMatrix * glm::vec4(0.0, 0.0, 1.0, 0.0); +float crossZ = glm::normalize(glm::dot(glm::vec3(DirZ), glm::vec3(0.0, 0.0, 1.0))); +m_Extrude3DInfo.reverse = (crossZ > 0 ? 0 : 1); m_Extrude3DInfo.xScale = glm::length(DirX); m_Extrude3DInfo.yScale = glm::length(DirY); m_Extrude3DInfo.zScale = glm::length(DirZ); glm::mat4 transformMatrixInverse = glm::inverse(glm::translate(glm::vec3(tranform))); -glm::mat4 scaleMatrixInverse = glm::inverse(glm::scale(m_Extrude3DInfo.xScale, m_Extrude3DInfo.yScale, m_Extrude3DInfo.zScale)); +glm::mat4 scaleMatrixInverse = glm::inverse(glm::scale(m_Extrude3DInfo.xScale, m_Extrude3DInfo.yScale, m_Extrude3DInfo.zScale * crossZ)); m_Extrude3DInfo.rotation = transformMatrixInverse * modelMatrix * scaleMatrixInverse; - //color m_Extrude3DInfo.extrudeColor = getColorAsVector(nColor); m_Extrude3DInfo.material.materialColor = m_Extrude3DInfo.extrudeColor;//material color seems to be the same for all parts, so we use the polygon color @@ -1006,8 +1007,8 @@ void OpenGL3DRenderer::AddShape3DExtrudeObject(bool roundedCorner, sal_uInt32 nC m_SenceBox.minXCoord = std::min(m_SenceBox.minXCoord, m_Extrude3DInfo.xTransform); m_SenceBox.maxYCoord = std::max(m_SenceBox.maxYCoord, m_Extrude3DInfo.yTransform + m_Extrude3DInfo.yScale); m_SenceBox.minYCoord = std::min(m_SenceBox.minYCoord, m_Extrude3DInfo.yTransform ); -m_SenceBox.maxZCoord = std::max(m_SenceBox.maxZCoord, m_Extrude3DInfo.zTransform + m_Extrude3DInfo.zScale); -m_SenceBox.minZCoord = std::min(m_SenceBox.minZCoord, m_Extrude3DInfo.zTransform); +m_SenceBox.maxZCoord = std::max(m_SenceBox.maxZCoord, m_Extrude3DInfo.zTransform - (m_Extrude3DInfo.reverse - 1) * m_Extrude3DInfo.zScale); +m_SenceBox.minZCoord = std::min(m_SenceBox.minZCoord, m_Extrude3DInfo.zTransform - m_Extrude3DInfo.reverse * m_Extrude3DInfo.zScale); } void OpenGL3DRenderer::EndAddShape3DExtrudeObject() @@ -1114,7 +1115,7 @@ void OpenGL3DRenderer::RenderExtrudeBottomSurface(const Extrude3DInfo& extrude3D } else { -glm::mat4 topTrans = glm::translate(glm::vec3(0.0, 0.0, actualZTrans)); +glm::mat4 topTrans = glm::translate(glm::vec3(0.0, 0.0, -actualZTrans)); glm::mat4 topScale = glm::scale(xyScale, xyScale, xyScale); glm::mat4 aTranslationMatrix = glm::translate(glm::vec3(trans.x, trans.y, trans.z)); m_Model = aTranslationMatrix * extrude3D.rotation * topTrans * topScale; @@ -1326,7 +1327,6 @@ void OpenGL3DRenderer::RenderExtrude3DObject() CHECK_GL_ERROR(); glBindBuffer(GL_UNIFORM_BUFFER, 0); } -extrude3DInfo.reverse = 0; if (extrude3DInfo.rounded) { glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_CubeElementBuf); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: chart2/source
chart2/source/view/main/GL3DRenderer.cxx | 14 +++--- 1 file changed, 7 insertions(+), 7 deletions(-) New commits: commit 43716387ee437811b6b21b93d59171641906674f Author: weigao Date: Sun May 18 04:09:13 2014 -0700 add reverse bars code Change-Id: I2db9edd9015bb10cffe58a44c379db0ab87e7d72 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index bcb87b2..f7867d5 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -340,7 +340,7 @@ void OpenGL3DRenderer::CreateActualRoundedCube(float fRadius, int iSubDivY, int glm::vec3 actualNormals[3]; std::vector indeices[5]; glm::vec3 externSurNormal; -glm::mat4 corrctCoord = glm::translate(glm::vec3(width / 2.0f, height / 2.0f, depth / 2.0f - fRadius)); +glm::mat4 corrctCoord = glm::translate(glm::vec3(0.0f, 0.0f, depth / 2.0f - fRadius)); m_RoundBarMesh.topThreshold = topThreshold; m_RoundBarMesh.bottomThreshold = bottomThreshold; m_RoundBarMesh.iMeshStartIndices = m_Vertices.size(); @@ -964,13 +964,14 @@ void OpenGL3DRenderer::AddShape3DExtrudeObject(bool roundedCorner, sal_uInt32 nC glm::vec4 DirX = modelMatrix * glm::vec4(1.0, 0.0, 0.0, 0.0); glm::vec4 DirY = modelMatrix * glm::vec4(0.0, 1.0, 0.0, 0.0); glm::vec4 DirZ = modelMatrix * glm::vec4(0.0, 0.0, 1.0, 0.0); +float crossZ = glm::normalize(glm::dot(glm::vec3(DirZ), glm::vec3(0.0, 0.0, 1.0))); +m_Extrude3DInfo.reverse = (crossZ > 0 ? 0 : 1); m_Extrude3DInfo.xScale = glm::length(DirX); m_Extrude3DInfo.yScale = glm::length(DirY); m_Extrude3DInfo.zScale = glm::length(DirZ); glm::mat4 transformMatrixInverse = glm::inverse(glm::translate(glm::vec3(tranform))); -glm::mat4 scaleMatrixInverse = glm::inverse(glm::scale(m_Extrude3DInfo.xScale, m_Extrude3DInfo.yScale, m_Extrude3DInfo.zScale)); +glm::mat4 scaleMatrixInverse = glm::inverse(glm::scale(m_Extrude3DInfo.xScale, m_Extrude3DInfo.yScale, m_Extrude3DInfo.zScale * crossZ)); m_Extrude3DInfo.rotation = transformMatrixInverse * modelMatrix * scaleMatrixInverse; - //color m_Extrude3DInfo.extrudeColor = getColorAsVector(nColor); m_Extrude3DInfo.material.materialColor = m_Extrude3DInfo.extrudeColor;//material color seems to be the same for all parts, so we use the polygon color @@ -1006,8 +1007,8 @@ void OpenGL3DRenderer::AddShape3DExtrudeObject(bool roundedCorner, sal_uInt32 nC m_SenceBox.minXCoord = std::min(m_SenceBox.minXCoord, m_Extrude3DInfo.xTransform); m_SenceBox.maxYCoord = std::max(m_SenceBox.maxYCoord, m_Extrude3DInfo.yTransform + m_Extrude3DInfo.yScale); m_SenceBox.minYCoord = std::min(m_SenceBox.minYCoord, m_Extrude3DInfo.yTransform ); -m_SenceBox.maxZCoord = std::max(m_SenceBox.maxZCoord, m_Extrude3DInfo.zTransform + m_Extrude3DInfo.zScale); -m_SenceBox.minZCoord = std::min(m_SenceBox.minZCoord, m_Extrude3DInfo.zTransform); +m_SenceBox.maxZCoord = std::max(m_SenceBox.maxZCoord, m_Extrude3DInfo.zTransform - (m_Extrude3DInfo.reverse - 1) * m_Extrude3DInfo.zScale); +m_SenceBox.minZCoord = std::min(m_SenceBox.minZCoord, m_Extrude3DInfo.zTransform - m_Extrude3DInfo.reverse * m_Extrude3DInfo.zScale); } void OpenGL3DRenderer::EndAddShape3DExtrudeObject() @@ -1114,7 +1115,7 @@ void OpenGL3DRenderer::RenderExtrudeBottomSurface(const Extrude3DInfo& extrude3D } else { -glm::mat4 topTrans = glm::translate(glm::vec3(0.0, 0.0, actualZTrans)); +glm::mat4 topTrans = glm::translate(glm::vec3(0.0, 0.0, -actualZTrans)); glm::mat4 topScale = glm::scale(xyScale, xyScale, xyScale); glm::mat4 aTranslationMatrix = glm::translate(glm::vec3(trans.x, trans.y, trans.z)); m_Model = aTranslationMatrix * extrude3D.rotation * topTrans * topScale; @@ -1326,7 +1327,6 @@ void OpenGL3DRenderer::RenderExtrude3DObject() CHECK_GL_ERROR(); glBindBuffer(GL_UNIFORM_BUFFER, 0); } -extrude3DInfo.reverse = 0; if (extrude3DInfo.rounded) { glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_CubeElementBuf); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: 2 commits - chart2/source sc/source
chart2/source/view/main/GL3DRenderer.cxx |3 +-- sc/source/ui/view/gridwin.cxx|3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) New commits: commit 21162eab55e3ae6e21c5cef6f7fd1f35d71aac3e Author: weigao Date: Mon May 12 22:41:03 2014 +0200 some fixes for positioning problems Change-Id: I4e970837ebe6867458e4a75c7cc323f8f6b3ecc8 diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 69e961b..686413d 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -1287,7 +1287,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_MVP = m_Projection * m_View * m_Model; +m_MVP = m_3DProjection * m_3DView * m_Model; glBindBuffer(GL_ARRAY_BUFFER, m_VertexBuffer); CHECK_GL_ERROR(); glBufferData(GL_ARRAY_BUFFER, sizeof(textInfo.vertex), textInfo.vertex, GL_STATIC_DRAW); @@ -1401,7 +1401,6 @@ void OpenGL3DRenderer::ProcessUnrenderedShape() CreateSceneBoxView(); glViewport(0, 0, m_iWidth, m_iHeight); glClearDepth(1.0f); -glViewport(0, 0, m_iWidth, m_iHeight); glClearColor(1.0, 1.0, 1.0, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //Polygon commit 3dbd2968025ab51fb961d64093a14f910828f57f Author: Markus Mohrhard Date: Mon May 12 22:39:50 2014 +0200 only send mouse events if the window is visible Change-Id: I2564159cd21e068c0893fc96d1c7e90746788f39 diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 95ce9fd..d1194bf 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -1642,6 +1642,9 @@ void ScGridWindow::MouseButtonDown( const MouseEvent& rMEvt ) for(boost::ptr_vector::iterator itr = maChildWindows.begin(), itrEnd = maChildWindows.end(); itr != itrEnd; ++itr) { +if(!itr->IsVisible()) +continue; + Point aPoint = itr->GetPosPixel(); Size aSize = itr->GetSizePixel(); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits