From 0596c3990d77571389b47757ad2a90deb0e3fd9b Mon Sep 17 00:00:00 2001 From: David Rose Date: Fri, 8 Oct 2010 21:32:15 +0000 Subject: [PATCH] speedtree dx9 --- dtool/Config.pp | 2 +- panda/src/speedtree/Sources.pp | 2 +- panda/src/speedtree/config_speedtree.cxx | 2 +- panda/src/speedtree/speedTreeNode.cxx | 10 ++++++++++ panda/src/speedtree/speedtree_api.h | 10 +++++++++- 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/dtool/Config.pp b/dtool/Config.pp index 2f83212994..3508732d15 100644 --- a/dtool/Config.pp +++ b/dtool/Config.pp @@ -958,7 +958,7 @@ #defer SPEEDTREE_VERSION 5.1 #defer SPEEDTREE_LIB_SUFFIX _v$[SPEEDTREE_VERSION]_VC90MT_Static$[SPEEDTREE_DEBUG].lib #if $[WINDOWS_PLATFORM] -#defer SPEEDTREE_LIBS SpeedTreeCore$[SPEEDTREE_LIB_SUFFIX] SpeedTreeForest$[SPEEDTREE_LIB_SUFFIX] SpeedTreeOpenGLRenderer$[SPEEDTREE_LIB_SUFFIX] SpeedTreeRenderInterface$[SPEEDTREE_LIB_SUFFIX] $[if $[eq $[SPEEDTREE_API],OpenGL],glew32.lib] +#defer SPEEDTREE_LIBS SpeedTreeCore$[SPEEDTREE_LIB_SUFFIX] SpeedTreeForest$[SPEEDTREE_LIB_SUFFIX] SpeedTree$[SPEEDTREE_API]Renderer$[SPEEDTREE_LIB_SUFFIX] SpeedTreeRenderInterface$[SPEEDTREE_LIB_SUFFIX] $[if $[eq $[SPEEDTREE_API],OpenGL],glew32.lib] #else #defer SPEEDTREE_LIBS #endif diff --git a/panda/src/speedtree/Sources.pp b/panda/src/speedtree/Sources.pp index 3b6613c414..a5d2312167 100644 --- a/panda/src/speedtree/Sources.pp +++ b/panda/src/speedtree/Sources.pp @@ -9,7 +9,7 @@ #begin lib_target #define TARGET pandaspeedtree #define LOCAL_LIBS \ - display text pgraph gobj linmath putil + display text pgraph gobj linmath putil $[if $[eq $[SPEEDTREE_API],DirectX9],dxgsg9] #define COMBINED_SOURCES $[TARGET]_composite1.cxx diff --git a/panda/src/speedtree/config_speedtree.cxx b/panda/src/speedtree/config_speedtree.cxx index 39e7321835..a5bb39bc37 100644 --- a/panda/src/speedtree/config_speedtree.cxx +++ b/panda/src/speedtree/config_speedtree.cxx @@ -20,7 +20,7 @@ #include "loaderFileTypeRegistry.h" #include "dconfig.h" -Configure(config_speedtree); +ConfigureDef(config_speedtree); NotifyCategoryDef(speedtree, ""); ConfigureFn(config_speedtree) { diff --git a/panda/src/speedtree/speedTreeNode.cxx b/panda/src/speedtree/speedTreeNode.cxx index 656faf4916..39067f3e15 100644 --- a/panda/src/speedtree/speedTreeNode.cxx +++ b/panda/src/speedtree/speedTreeNode.cxx @@ -36,6 +36,10 @@ #include "glew/glew.h" #endif // SPEEDTREE_OPENGL +#ifdef SPEEDTREE_DIRECTX9 +#include "dxGraphicsStateGuardian9.h" +#endif + bool SpeedTreeNode::_authorized; bool SpeedTreeNode::_done_first_init; TypeHandle SpeedTreeNode::_type_handle; @@ -1076,6 +1080,12 @@ setup_for_render(GraphicsStateGuardian *gsg) { _done_first_init = true; } +#ifdef SPEEDTREE_DIRECTX9 + // In DirectX, we have to tell SpeedTree our device pointer. + DXGraphicsStateGuardian9 *dxgsg = DCAST(DXGraphicsStateGuardian9, gsg); + SpeedTree::DX9::SetDevice(dxgsg->_screen->_d3d_device); +#endif // SPEEDTREE_DIRECTX9 + if (_needs_repopulate) { repopulate(); diff --git a/panda/src/speedtree/speedtree_api.h b/panda/src/speedtree/speedtree_api.h index af107988e5..d1849d94fa 100644 --- a/panda/src/speedtree/speedtree_api.h +++ b/panda/src/speedtree/speedtree_api.h @@ -21,7 +21,15 @@ #include "speedtree_parameters.h" #include "Core/Core.h" #include "Forest/Forest.h" -#include "Renderers/OpenGL/OpenGLRenderer.h" + +#if defined(SPEEDTREE_OPENGL) + #include "Renderers/OpenGL/OpenGLRenderer.h" +#elif defined(SPEEDTREE_DIRECTX9) + #undef Configure + #include "Renderers/DirectX9/DirectX9Renderer.h" +#else + #error Unexpected graphics API. +#endif #endif // SPEEDTREE_API_H