Kaydet (Commit) 212dfdbb authored tarafından weigao's avatar weigao Kaydeden (comit) Markus Mohrhard

add render fps rendering

Change-Id: Ic0c8c9a05079a4d4b715f90eccffb7c4ae8260c9
üst 05ecb52d
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#define BENCH_MARK_MODE false #define BENCH_MARK_MODE false
#define CLICK_EVENT_ID 1 #define CLICK_EVENT_ID 1
#define SHAPE_START_ID 10 #define SHAPE_START_ID 10
#define DATA_UPDATE_TIME 15
using namespace com::sun::star; using namespace com::sun::star;
...@@ -185,12 +186,7 @@ public: ...@@ -185,12 +186,7 @@ public:
, mbNeedFlyBack(false) , mbNeedFlyBack(false)
, mnStep(0) , mnStep(0)
, mnStepsTotal(0) , mnStepsTotal(0)
, miFrameCount(0)
{ {
osl_getSystemTime(&mafpsRenderStartTime);
osl_getSystemTime(&mafpsRenderEndTime);
osl_getSystemTime(&maScreenTextUpdateStartTime);
osl_getSystemTime(&maScreenTextUpdateEndTime);
osl_getSystemTime(&maClickFlyBackStartTime); osl_getSystemTime(&maClickFlyBackStartTime);
osl_getSystemTime(&maClickFlyBackEndTime); osl_getSystemTime(&maClickFlyBackEndTime);
} }
...@@ -204,8 +200,6 @@ private: ...@@ -204,8 +200,6 @@ private:
void MoveToCorner(); void MoveToCorner();
void ProcessScroll(); void ProcessScroll();
void UpdateScreenText(); void UpdateScreenText();
void UpdateFPS();
int CalcTimeInterval(TimeValue &startTime, TimeValue &endTime);
void ProcessClickFlyBack(); void ProcessClickFlyBack();
private: private:
glm::vec3 maStartPos; glm::vec3 maStartPos;
...@@ -216,13 +210,8 @@ private: ...@@ -216,13 +210,8 @@ private:
glm::vec3 maStepDirection; glm::vec3 maStepDirection;
size_t mnStep; size_t mnStep;
size_t mnStepsTotal; size_t mnStepsTotal;
TimeValue mafpsRenderStartTime;
TimeValue mafpsRenderEndTime;
TimeValue maScreenTextUpdateStartTime;
TimeValue maScreenTextUpdateEndTime;
TimeValue maClickFlyBackStartTime; TimeValue maClickFlyBackStartTime;
TimeValue maClickFlyBackEndTime; TimeValue maClickFlyBackEndTime;
int miFrameCount;
OUString maFPS; OUString maFPS;
}; };
...@@ -329,7 +318,7 @@ void RenderBenchMarkThread::ProcessClickFlyBack() ...@@ -329,7 +318,7 @@ void RenderBenchMarkThread::ProcessClickFlyBack()
if (!mbNeedFlyBack) if (!mbNeedFlyBack)
return; return;
osl_getSystemTime(&maClickFlyBackEndTime); osl_getSystemTime(&maClickFlyBackEndTime);
int aDeltaMs = CalcTimeInterval(maClickFlyBackStartTime, maClickFlyBackEndTime); int aDeltaMs = mpChart->calcTimeInterval(maClickFlyBackStartTime, maClickFlyBackEndTime);
if(aDeltaMs >= 10000) if(aDeltaMs >= 10000)
{ {
mpChart->maRenderEvent = EVENT_MOVE_TO_DEFAULT; mpChart->maRenderEvent = EVENT_MOVE_TO_DEFAULT;
...@@ -357,42 +346,18 @@ void RenderBenchMarkThread::ProcessMouseEvent() ...@@ -357,42 +346,18 @@ void RenderBenchMarkThread::ProcessMouseEvent()
} }
} }
int RenderBenchMarkThread::CalcTimeInterval(TimeValue &startTime, TimeValue &endTime)
{
TimeValue aTime;
aTime.Seconds = endTime.Seconds - startTime.Seconds - 1;
aTime.Nanosec = 1000000000 + endTime.Nanosec - startTime.Nanosec;
aTime.Seconds += aTime.Nanosec / 1000000000;
aTime.Nanosec %= 1000000000;
return aTime.Seconds * 1000+aTime.Nanosec / 1000000;
}
void RenderBenchMarkThread::UpdateFPS()
{
int aDeltaMs = CalcTimeInterval(mafpsRenderStartTime, mafpsRenderEndTime);
if(aDeltaMs >= 500)
{
osl_getSystemTime(&mafpsRenderEndTime);
aDeltaMs = CalcTimeInterval(mafpsRenderStartTime, mafpsRenderEndTime);
int iFPS = miFrameCount * 1000 / aDeltaMs;
maFPS = OUString("Render FPS: ") + OUString::number(iFPS);
miFrameCount = 0;
osl_getSystemTime(&mafpsRenderStartTime);
}
osl_getSystemTime(&mafpsRenderEndTime);
//will add the fps render code here later
}
void RenderBenchMarkThread::UpdateScreenText() void RenderBenchMarkThread::UpdateScreenText()
{ {
int aDeltaMs = CalcTimeInterval(maScreenTextUpdateStartTime, maScreenTextUpdateEndTime); if (mpChart->mbScreenTextNewRender)
if (aDeltaMs >= 20)
{ {
mpChart->mpRenderer->ReleaseScreenTextShapes(); mpChart->mpRenderer->ReleaseScreenTextTexture();
UpdateFPS(); for(boost::ptr_vector<opengl3D::Renderable3DObject>::iterator itr = mpChart->maScreenTextShapes.begin(),
osl_getSystemTime(&maScreenTextUpdateStartTime); itrEnd = mpChart->maScreenTextShapes.end(); itr != itrEnd; ++itr)
{
itr->render();
}
mpChart->mbScreenTextNewRender = false;
} }
osl_getSystemTime(&maScreenTextUpdateEndTime);
} }
void RenderBenchMarkThread::execute() void RenderBenchMarkThread::execute()
...@@ -406,6 +371,7 @@ void RenderBenchMarkThread::execute() ...@@ -406,6 +371,7 @@ void RenderBenchMarkThread::execute()
UpdateScreenText(); UpdateScreenText();
ProcessMouseEvent(); ProcessMouseEvent();
renderFrame(); renderFrame();
mpChart->miFrameCount++;
} }
#ifdef WNT #ifdef WNT
Sleep(1); Sleep(1);
...@@ -415,7 +381,6 @@ void RenderBenchMarkThread::execute() ...@@ -415,7 +381,6 @@ void RenderBenchMarkThread::execute()
nTV.Nanosec = 1000000; nTV.Nanosec = 1000000;
osl_waitThread(&nTV); osl_waitThread(&nTV);
#endif #endif
miFrameCount++;
} }
} }
...@@ -438,7 +403,10 @@ GL3DBarChart::GL3DBarChart( ...@@ -438,7 +403,10 @@ GL3DBarChart::GL3DBarChart(
maRenderEvent(EVENT_NONE), maRenderEvent(EVENT_NONE),
mSelectBarId(0), mSelectBarId(0),
miScrollRate(0), miScrollRate(0),
mbScrollFlg(false) miFrameCount(0),
mbScrollFlg(false),
mbScreenTextNewRender(false),
maFPS(OUString("Render FPS: 0"))
{ {
if (BENCH_MARK_MODE) if (BENCH_MARK_MODE)
{ {
...@@ -452,6 +420,11 @@ GL3DBarChart::GL3DBarChart( ...@@ -452,6 +420,11 @@ GL3DBarChart::GL3DBarChart(
mpRenderer->SetScroll(); mpRenderer->SetScroll();
} }
} }
maTimer.SetTimeout(DATA_UPDATE_TIME);
maTimer.SetTimeoutHdl(LINK(this, GL3DBarChart, updateTimer));
maTimer.Start();
osl_getSystemTime(&mafpsRenderStartTime);
osl_getSystemTime(&mafpsRenderEndTime);
} }
Size aSize = mrWindow.GetSizePixel(); Size aSize = mrWindow.GetSizePixel();
mpRenderer->SetSize(aSize); mpRenderer->SetSize(aSize);
...@@ -939,6 +912,54 @@ void GL3DBarChart::contextDestroyed() ...@@ -939,6 +912,54 @@ void GL3DBarChart::contextDestroyed()
mbValidContext = false; mbValidContext = false;
} }
void GL3DBarChart::updateRenderFPS()
{
int aDeltaMs = calcTimeInterval(mafpsRenderStartTime, mafpsRenderEndTime);
if(aDeltaMs >= 500)
{
osl_getSystemTime(&mafpsRenderEndTime);
aDeltaMs = calcTimeInterval(mafpsRenderStartTime, mafpsRenderEndTime);
int iFPS = miFrameCount * 1000 / aDeltaMs;
maFPS = OUString("Render FPS: ") + OUString::number(iFPS);
miFrameCount = 0;
osl_getSystemTime(&mafpsRenderStartTime);
}
osl_getSystemTime(&mafpsRenderEndTime);
maScreenTextShapes.push_back(new opengl3D::ScreenText(mpRenderer.get(), *mpTextCache, maFPS, 0));
opengl3D::TextCacheItem tmpTextCache = mpTextCache->getText(maFPS);
float rectWidth = (float)tmpTextCache.maSize.Width() / (float)tmpTextCache.maSize.Height() * 0.05;
opengl3D::ScreenText* pScreenText = static_cast<opengl3D::ScreenText*>(&maScreenTextShapes.back());
pScreenText->setPosition(glm::vec2(-0.99f, 0.99f), glm::vec2(-0.99f + rectWidth, 0.89f));
}
int GL3DBarChart::calcTimeInterval(TimeValue &startTime, TimeValue &endTime)
{
TimeValue aTime;
aTime.Seconds = endTime.Seconds - startTime.Seconds - 1;
aTime.Nanosec = 1000000000 + endTime.Nanosec - startTime.Nanosec;
aTime.Seconds += aTime.Nanosec / 1000000000;
aTime.Nanosec %= 1000000000;
return aTime.Seconds * 1000+aTime.Nanosec / 1000000;
}
void GL3DBarChart::updateScreenText()
{
osl::MutexGuard aGuard(maMutex);
maScreenTextShapes.clear();
mpRenderer->ReleaseScreenTextShapes();
updateRenderFPS();
mbScreenTextNewRender = true;
}
IMPL_LINK_NOARG(GL3DBarChart, updateTimer)
{
maTimer.Stop();
updateScreenText();
maTimer.SetTimeout(DATA_UPDATE_TIME);
maTimer.Start();
return 0;
}
} }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -85,7 +85,11 @@ private: ...@@ -85,7 +85,11 @@ private:
void moveToCorner(); void moveToCorner();
void moveToDefault(); void moveToDefault();
glm::vec3 getCornerPosition(sal_Int8 nCornerId); glm::vec3 getCornerPosition(sal_Int8 nCornerId);
void updateTimer();
void updateScreenText();
void updateRenderFPS();
DECL_LINK(updateTimer, void*);
int calcTimeInterval(TimeValue &startTime, TimeValue &endTime);
css::uno::Reference<css::chart2::XChartType> mxChartType; css::uno::Reference<css::chart2::XChartType> mxChartType;
boost::ptr_vector<opengl3D::Renderable3DObject> maShapes; boost::ptr_vector<opengl3D::Renderable3DObject> maShapes;
...@@ -139,6 +143,13 @@ private: ...@@ -139,6 +143,13 @@ private:
Point maClickPos; Point maClickPos;
sal_uInt32 miScrollRate; sal_uInt32 miScrollRate;
bool mbScrollFlg; bool mbScrollFlg;
Timer maTimer;
bool mbScreenTextNewRender;
boost::ptr_vector<opengl3D::Renderable3DObject> maScreenTextShapes;
OUString maFPS;
sal_uInt32 miFrameCount;
TimeValue mafpsRenderStartTime;
TimeValue mafpsRenderEndTime;
}; };
} }
......
...@@ -209,6 +209,7 @@ public: ...@@ -209,6 +209,7 @@ public:
void ReleaseShapes(); void ReleaseShapes();
void ReleaseScreenTextShapes(); void ReleaseScreenTextShapes();
void ReleaseTextTexture(); void ReleaseTextTexture();
void ReleaseScreenTextTexture();
void StartClick(sal_uInt32 &selectID); void StartClick(sal_uInt32 &selectID);
void EndClick(); void EndClick();
void SetScroll(); void SetScroll();
...@@ -462,6 +463,7 @@ private: ...@@ -462,6 +463,7 @@ private:
float m_fLightPower[MAX_LIGHT_NUM]; float m_fLightPower[MAX_LIGHT_NUM];
//for 3.0 end //for 3.0 end
std::vector<GLuint> m_Texturelist; std::vector<GLuint> m_Texturelist;
std::vector<GLuint> m_ScreenTexturelist;
bool m_bHighLighting; bool m_bHighLighting;
sal_uInt32 m_uiSelectID; sal_uInt32 m_uiSelectID;
float m_fScrollSpeed; float m_fScrollSpeed;
......
...@@ -1709,6 +1709,7 @@ void OpenGL3DRenderer::CreateScreenTextTexture( ...@@ -1709,6 +1709,7 @@ void OpenGL3DRenderer::CreateScreenTextTexture(
glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_2D, 0);
CHECK_GL_ERROR(); CHECK_GL_ERROR();
m_ScreenTextInfoList.push_back(aTextInfo); m_ScreenTextInfoList.push_back(aTextInfo);
m_ScreenTexturelist.push_back(aTextInfo.texture);
} }
void OpenGL3DRenderer::CreateTextTextureSingle(const boost::shared_array<sal_uInt8> &bitmapBuf, void OpenGL3DRenderer::CreateTextTextureSingle(const boost::shared_array<sal_uInt8> &bitmapBuf,
...@@ -1860,14 +1861,19 @@ void OpenGL3DRenderer::ReleaseTextTexture() ...@@ -1860,14 +1861,19 @@ void OpenGL3DRenderer::ReleaseTextTexture()
void OpenGL3DRenderer::ReleaseScreenTextShapes() void OpenGL3DRenderer::ReleaseScreenTextShapes()
{ {
for (size_t i = 0; i < m_ScreenTextInfoList.size(); i++) m_ScreenTextInfoList.clear();
}
void OpenGL3DRenderer::ReleaseScreenTextTexture()
{
for (size_t i = 0; i < m_ScreenTexturelist.size(); i++)
{ {
TextInfo &textInfo = m_ScreenTextInfoList[i]; glDeleteTextures(1, &m_ScreenTexturelist[i]);
glDeleteTextures(1, &textInfo.texture);
} }
m_ScreenTextInfoList.clear(); m_ScreenTexturelist.clear();
} }
void OpenGL3DRenderer::RenderScreenTextShape() void OpenGL3DRenderer::RenderScreenTextShape()
{ {
glUseProgram(maResources.m_ScreenTextProID); glUseProgram(maResources.m_ScreenTextProID);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment