public:
bool m_damaged;
+ bool m_forceComposition;
};
#endif /* _BASEWINDOWSYSTEM_H_ */
m_currentLayer->damaged = false;
- if (!(m_baseWindowSystem->m_damaged && m_currentLayer->getLayerType() != Hardware))
+ if (!m_baseWindowSystem->m_forceComposition && (!m_baseWindowSystem->m_damaged || m_currentLayer->getLayerType() == Hardware))
{
if (m_currentLayer->renderPropertyChanged)
{
m_currentLayer->damaged = false;
- if (!(m_baseWindowSystem->m_damaged && m_currentLayer->getLayerType() != Hardware))
+ if (!m_baseWindowSystem->m_forceComposition && (!m_baseWindowSystem->m_damaged || m_currentLayer->getLayerType() == Hardware))
{
if (m_currentLayer->renderPropertyChanged)
{
void WaylandBaseWindowSystem::RedrawAllLayers()
{
std::list<Layer*> layers = m_pScene->getCurrentRenderOrder();
- bool bRedraw = m_damaged || (m_systemState == REDRAW_STATE);
+ bool bRedraw = m_forceComposition || m_damaged || (m_systemState == REDRAW_STATE);
// m_damaged represents that SW composition is required
// At this point if a layer has damaged = true then it must be a HW layer that needs update.
{
if ((*current)->getLayerType() == Hardware)
{
- if ((*current)->damaged)
+ if (m_forceComposition || (*current)->damaged)
{
renderHWLayer(*current);
(*current)->damaged = false;
m_pScene->unlockScene();
- if (m_damaged || (m_systemState == REDRAW_STATE))
+ if (m_forceComposition || m_damaged || (m_systemState == REDRAW_STATE))
{
// TODO: This block won't be executed for HW only changes
// Is that acceptable?
calculateFps();
/* Reset the damage flag, all is up to date */
+ m_forceComposition = false;
m_damaged = false;
m_systemState = IDLE_STATE;
}
// m_damaged represents that SW composition is required
// At this point if a layer has damaged = true then it must be a HW layer that needs update.
// A SW layer which needs update will make m_damaged = true
- if (m_damaged)
+ if (m_forceComposition || m_damaged)
{
graphicSystem->activateGraphicContext();
graphicSystem->clearBackground();
{
if ((*current)->getLayerType() == Hardware)
{
- if ((*current)->damaged)
+ if (m_forceComposition || (*current)->damaged)
{
renderHWLayer(*current);
(*current)->damaged = false;
}
}
- else if (m_damaged)
+ else if (m_forceComposition || m_damaged)
{
graphicSystem->beginLayer(*current);
graphicSystem->renderSWLayer();
graphicSystem->endLayer();
}
}
- if (m_damaged)
+ if (m_forceComposition || m_damaged)
{
graphicSystem->swapBuffers();
graphicSystem->releaseGraphicContext();
m_pScene->unlockScene();
- if (m_damaged)
+ if (m_forceComposition || m_damaged)
{
// TODO: This block won't be executed for HW only changes
// Is that acceptable?
calculateFps();
/* Reset the damage flag, all is up to date */
+ m_forceComposition = false;
m_damaged = false;
}
}
void X11GLXRenderer::forceCompositionWindowSystem()
{
- m_pWindowSystem->m_damaged = true;
+ m_pWindowSystem->m_forceComposition = true;
}
extern "C" IRenderer* createX11GLXRenderer(Scene* pScene) {
uint* WaylandGLESRenderer::getScreenResolution(uint screenID)
{
uint screen_id;
- screen_id = screenID;
+ screen_id = screenID;
// TODO provide value of real screen here
uint * resolution = new uint[2];
resolution[0] = m_width;
{
// TODO necessary to implement
uint* screenIDS = new uint[1];
- screenIDS[0] = 0;
+ screenIDS[0] = 0;
*length = 1;
return screenIDS;
}
void WaylandGLESRenderer::forceCompositionWindowSystem()
{
- m_pWindowSystem->m_damaged = true;
+ m_pWindowSystem->m_forceComposition = true;
}
Shader* WaylandGLESRenderer::createShader(const string* vertexName, const string* fragmentName)
{
Shader *result = NULL;
m_pWindowSystem->setSystemState(WAKEUP_STATE);
- m_pWindowSystem->wakeUpRendererThread();
+ m_pWindowSystem->wakeUpRendererThread();
m_pGraphicSystem->activateGraphicContext();
result = Shader::createShader(*vertexName,*fragmentName);
m_pGraphicSystem->releaseGraphicContext();
- m_pWindowSystem->setSystemState(IDLE_STATE);
+ m_pWindowSystem->setSystemState(IDLE_STATE);
return result;
}
void X11GLESRenderer::forceCompositionWindowSystem()
{
- m_pWindowSystem->m_damaged = true;
+ m_pWindowSystem->m_forceComposition = true;
}
Shader* X11GLESRenderer::createShader(const string* vertexName, const string* fragmentName)
{
Shader *result = NULL;
m_pWindowSystem->setSystemState(WAKEUP_STATE);
- m_pWindowSystem->wakeUpRendererThread();
+ m_pWindowSystem->wakeUpRendererThread();
m_pGraphicSystem->activateGraphicContext();
result = Shader::createShader(*vertexName,*fragmentName);
m_pGraphicSystem->releaseGraphicContext();
- m_pWindowSystem->setSystemState(IDLE_STATE);
+ m_pWindowSystem->setSystemState(IDLE_STATE);
return result;
}