summaryrefslogtreecommitdiffstats
path: root/o3d/plugin/cross/o3d_glue.cc
diff options
context:
space:
mode:
Diffstat (limited to 'o3d/plugin/cross/o3d_glue.cc')
-rw-r--r--o3d/plugin/cross/o3d_glue.cc33
1 files changed, 19 insertions, 14 deletions
diff --git a/o3d/plugin/cross/o3d_glue.cc b/o3d/plugin/cross/o3d_glue.cc
index 7666c71..d3da84d 100644
--- a/o3d/plugin/cross/o3d_glue.cc
+++ b/o3d/plugin/cross/o3d_glue.cc
@@ -262,23 +262,28 @@ void PluginObject::CreateRenderer(const o3d::DisplayWindow& display_window) {
DeleteRenderer();
renderer_init_status_ = o3d::Renderer::UNINITIALIZED;
-#if !defined(FORCE_CAIRO)
- if (!o3d::CheckConfig(npp_)) {
- renderer_init_status_ = o3d::Renderer::GPU_NOT_UP_TO_SPEC;
- } else {
- renderer_ = o3d::Renderer::CreateDefaultRenderer(&service_locator_);
- DCHECK(renderer_);
+ if (features_->render_modes() != Renderer::RENDER_MODE_2D) {
+ if (!o3d::CheckConfig(npp_)) {
+ renderer_init_status_ = o3d::Renderer::GPU_NOT_UP_TO_SPEC;
+ } else {
+ renderer_ = o3d::Renderer::CreateDefaultRenderer(&service_locator_);
+ DCHECK(renderer_);
- // Attempt to initialize renderer.
- renderer_init_status_ = renderer_->Init(display_window, false);
- if (renderer_init_status_ != o3d::Renderer::SUCCESS) {
- DeleteRenderer();
+ // Attempt to initialize renderer.
+ renderer_init_status_ = renderer_->Init(display_window, false);
+ if (renderer_init_status_ != o3d::Renderer::SUCCESS) {
+ DeleteRenderer();
+ }
}
+#if !defined(SUPPORT_CAIRO)
+ } else {
+ // The caller requested 2D only mode, but this platform does not support 2d
+ renderer_init_status_ = o3d::Renderer::INITIALIZATION_ERROR;
}
-#endif
-
-#if defined(SUPPORT_CAIRO)
- if (renderer_init_status_ != o3d::Renderer::SUCCESS) {
+#else
+ }
+ if ((renderer_init_status_ != o3d::Renderer::SUCCESS) &&
+ (features_->render_modes() != Renderer::RENDER_MODE_3D)) {
// Attempt to fall back to o2d renderer
renderer_ = o3d::Renderer::Create2DRenderer(&service_locator_);
if (renderer_) {