Bug 546515: Part 2: Use D3D9 layers backend as the preferred hardware backend for Windows. r=roc

This commit is contained in:
Bas Schouten 2010-05-24 17:28:54 +02:00
parent 5c0ef5136a
commit c2804730fc
3 changed files with 56 additions and 0 deletions

View File

@ -2813,6 +2813,12 @@ pref("mozilla.widget.render-mode", -1);
// Initialize default accelerated layers
pref("mozilla.widget.accelerated-layers", true);
#ifdef XP_WIN
#ifndef WINCE
pref("mozilla.layers.prefer-opengl", false);
#endif
#endif
// Enable/Disable the geolocation API for content
pref("geo.enabled", true);

View File

@ -125,6 +125,7 @@
#include "nsIDOMNSUIEvent.h"
#include "nsITheme.h"
#include "nsIPrefBranch.h"
#include "nsIPrefBranch2.h"
#include "nsIPrefService.h"
#include "nsIObserverService.h"
#include "nsIScreenManager.h"
@ -167,6 +168,10 @@
#include "nsWindowGfx.h"
#include "gfxWindowsPlatform.h"
#include "Layers.h"
#ifndef WINCE
#include "LayerManagerD3D9.h"
#include "LayerManagerOGL.h"
#endif
#if !defined(WINCE)
#include "nsUXThemeConstants.h"
@ -2917,6 +2922,41 @@ nsWindow::GetLayerManager()
mLayerManager = NULL;
mUseAcceleratedRendering = topWindow->GetAcceleratedRendering();
}
#ifndef WINCE
if (!mLayerManager) {
if (mUseAcceleratedRendering) {
nsCOMPtr<nsIPrefBranch2> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID);
PRBool allowAcceleration = PR_TRUE;
PRBool preferOpenGL = PR_FALSE;
if (prefs) {
prefs->GetBoolPref("mozilla.widget.accelerated-layers",
&allowAcceleration);
prefs->GetBoolPref("mozilla.layers.prefer-opengl",
&preferOpenGL);
}
if (allowAcceleration) {
if (preferOpenGL) {
nsRefPtr<mozilla::layers::LayerManagerOGL> layerManager =
new mozilla::layers::LayerManagerOGL(this);
if (layerManager->Initialize()) {
mLayerManager = layerManager;
}
}
if (!mLayerManager) {
nsRefPtr<mozilla::layers::LayerManagerD3D9> layerManager =
new mozilla::layers::LayerManagerD3D9(this);
if (layerManager->Initialize()) {
mLayerManager = layerManager;
}
}
}
}
}
#endif
return nsBaseWidget::GetLayerManager();
}

View File

@ -71,6 +71,9 @@ using mozilla::plugins::PluginInstanceParent;
#include "prmem.h"
#include "LayerManagerOGL.h"
#ifndef WINCE
#include "LayerManagerD3D9.h"
#endif
#ifndef WINCE
#include "nsUXThemeData.h"
@ -677,6 +680,13 @@ DDRAW_FAILED:
SetClippingRegion(event.region);
result = DispatchWindowEvent(&event, eventStatus);
break;
#ifndef WINCE
case LayerManager::LAYERS_D3D9:
static_cast<mozilla::layers::LayerManagerD3D9*>(GetLayerManager())->
SetClippingRegion(event.region);
result = DispatchWindowEvent(&event, eventStatus);
break;
#endif
default:
NS_ERROR("Unknown layers backend used!");
break;