Purpose of this plugin is to provide access to the Direct3D device and to the renderthread, so that custom Direct3D rendering can be achieved.
Use the installer or extract the files to your CryEngine SDK Folder so that the Code and BinXX/Plugins directory match up.
The plugin manager will automatically load up the plugin when the game/editor is restarted or if you directly load it.
Its recommended that you install the DirectX SDK
- Feature requests/bug reports on github: Wishes / Issues
- For patches and source contributions see Plugin SDK Wiki: Contribution Guideline
Follow these steps to integrate the D3D Plugin into your Plugin or GameDLL.
- Clone the repository to your local machine to your Code directory e.g.
C:\cryengine3_3.4.0\Code
. - Use a github UI version like Github for Windows
- or if you already have git installed
git clone https://github.com/hendrikp/Plugin_SDK.git
- Open the solution CryEngine_GameCodeOnly.sln
- or Open the solution of your plugin
- Open CryGame properties
- or Open the properties of your plugin
- Set the Dropdowns to All Configurations, All Platforms
- Add to C/C++ -> General -> Additional Include Directories
$(SolutionDir)..\Plugin_D3D\inc
- Apply those properties and close the dialog
- Use the supplied seperate solution to compile this project.
- Or use the supplied batch
tools\build.bat
to build this project only. - Or use the supplied batch
Plugin_SDK\build_all.bat
to build all plugins in the Code directory and the GameDll. - Or add the project file to your CryGame solution and the plugin manager as dependency for each plugin.
D3D_Plugin:Info
Retrieve Direct3D Informations- In
Get
Retrieve the infos - Out
Hooked
Is true when the Direct3D Plugin is working correctly - Out
Renderer
CryEngine Render Subsystem in use (DX9, DX11) - Out
Featurelevel
The FeatureLevel in use (9.3, 10.0, 10.1, 11.0) - Out
GPU
The name of the GPU in use
- In
The same method applies to DirectX 11 (exchange interface and header names)
- Open the file where you want to access DirectX
- Add behind the existing includes the following:
#include <IPluginManager.h>
#include <IPluginD3D.h>
#include <d3d9.h>
- To get the device use the following in the Plugin:
IDirect3DDevice9* pDevice = gD3DSystem ? static_cast<IDirect3DDevice9*>(gD3DSystem->GetDevice()) : NULL;
- or in the GameDLL the following :
IPluginD3D* pPlugin = PluginManager::safeGetPluginConcreteInterface<D3DPlugin::IPluginD3D*>( "D3D" );
IDirect3DDevice9* pDevice = pPlugin ? static_cast<IDirect3DDevice9*>(pPlugin->GetDevice()) : NULL;
- I recommend saving the device pointer somewhere for reuse. (it won't change anymore during this run)
To use the device at the correct moment you have to create a Listener class. Use this sample as your base by simply adding it to your project and creating an instance. This event listener runs in the renderthread.
This sample will make your rendering window green, but you are free to do something more meaningfull ;)
- Sample File DX9 (include into a cpp file of your choice or paste it there)