--- a/windowing/windowserverplugins/openwfc/src/fbrenderstage.cpp Wed Mar 31 23:34:07 2010 +0300
+++ b/windowing/windowserverplugins/openwfc/src/fbrenderstage.cpp Wed Apr 14 17:19:46 2010 +0300
@@ -19,6 +19,7 @@
#include <graphics/wsdisplaycontrol.h>
#include "displaypolicy.h"
#include "utils.h"
+#include <graphics/sgutils.h>
#if defined(__WINS__) && defined(_DEBUG)
#define DEBUGOSB iRenderTarget->UpdateDebugWin();
@@ -154,7 +155,18 @@
if (iniFile->FindVar(iNextScreenDevice->ScreenNumber(), KFlickerBufferMode, flickerBufferModeName))
displayMode = ParseDisplayMode(flickerBufferModeName);
if (displayMode == ENone)
- displayMode = iNextScreenDevice->DisplayMode();
+ {
+ // Display render stage MWsScreenDevice::DisplayMode now reports the supported screendriver display mode in 32bpp.
+ // It is necessary in order to maintain BC with 3rd party apps and DSA framework.
+ // The reported display mode may be different from the actual UI surface pixel format, so flicker buffer
+ // must not rely on DisplayMode() to determine pixel format for its rendering target.
+ //
+ MWsUiBuffer* uiBuf = aNextStage->ObjectInterface<MWsUiBuffer>();
+ if (uiBuf)
+ {
+ displayMode = SgUtils::PixelFormatToDisplayMode(uiBuf->PixelFormat());
+ }
+ }
STD_ASSERT_DEBUG(displayMode!=ENone, EPluginPanicNoDisplayModeFound);
const TUint32 usage = ESgUsageDirectGdiTarget | ESgUsageWindowGcSource;