VTK  9.5.20250715
vtkWin32OpenGLDXRenderWindow.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
15#ifndef vtkWin32OpenGLDXRenderWindow_h
16#define vtkWin32OpenGLDXRenderWindow_h
17
18#include "vtkRenderingOpenGL2Module.h" // For export macro
20
21#include <memory> // For std::unique_ptr
22
23struct ID3D11Device;
24struct ID3D11DeviceContext;
25struct ID3D11Texture2D;
26
27VTK_ABI_NAMESPACE_BEGIN
28class VTKRENDERINGOPENGL2_EXPORT vtkWin32OpenGLDXRenderWindow : public vtkWin32OpenGLRenderWindow
29{
30public:
33 void PrintSelf(ostream& os, vtkIndent indent) override;
34
36
47 void SetD3DDeviceContext(ID3D11DeviceContext* context);
48 void SetD3DDeviceContext(void* context);
50
54 void Initialize() override;
55
57
61 void Lock();
62 void Unlock();
64
66
70 void RegisterSharedTexture(unsigned int colorId, unsigned int depthId = 0);
73
78
83
85
88 void SetSize(int width, int height) override;
90
92
95 vtkSetMacro(SharedTextureSamples, int);
96 vtkGetMacro(SharedTextureSamples, int);
98
100
106 void BlitToTexture(ID3D11Texture2D* color, ID3D11Texture2D* depth = nullptr);
107 void BlitToTexture(void* color, void* depth = nullptr);
109
111
114 ID3D11Device* GetDevice();
116
118
121 ID3D11Texture2D* GetD3DSharedTexture();
122 ID3D11Texture2D* GetD3DSharedDepthTexture();
124
126
130 void SetAdapterId(LUID uid);
132
141 void SetColorTextureFormat(UINT format);
142
143protected:
146
151
152private:
154 void operator=(const vtkWin32OpenGLDXRenderWindow&) = delete;
155
156 bool CreateTexture(UINT format, UINT bindFlags, ID3D11Texture2D** output);
157 void UpdateTextures();
158
159 class vtkInternals;
160 std::unique_ptr<vtkInternals> Impl;
161
162 // Number of multisamples used by shared textures for hardware antialiasing
163 int SharedTextureSamples = 0;
164};
165VTK_ABI_NAMESPACE_END
166#endif
a simple class to control print indentation
Definition vtkIndent.h:108
VTK render window providing OpenGL-DirectX interop.
void Unlock()
Lock/Unlock the shared texture.
void Initialize() override
Overridden to create the D3D device, context and texture.
void SetColorTextureFormat(UINT format)
Specify the DXGI format of the D3D color texture shared with this render window.
void BlitToTexture(ID3D11Texture2D *color, ID3D11Texture2D *depth=nullptr)
Blits the internal D3D shared texture into color and optionally depth.
void RegisterSharedDisplayFramebuffer()
Register the DisplayFramebuffer of this window as a D3D shared texture.
void SetD3DDeviceContext(void *context)
Use external D3D11DeviceContext.
void InitializeDX()
Initialize D3D adapter, device and shared texture.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
~vtkWin32OpenGLDXRenderWindow() override
ID3D11Device * GetDevice()
Returns the D3D device associated to this render window.
void RegisterSharedTexture(unsigned int colorId, unsigned int depthId=0)
Register/Unregister the OpenGL textures designated by colorId and depthId with this render window int...
void Lock()
Lock/Unlock the shared texture.
static vtkWin32OpenGLDXRenderWindow * New()
ID3D11Texture2D * GetD3DSharedDepthTexture()
Returns the D3D texture shared with this render window.
void SetAdapterId(LUID uid)
Specify the DGXI adapter to be used for initialization.
ID3D11Texture2D * GetD3DSharedTexture()
Returns the D3D texture shared with this render window.
void SetD3DDeviceContext(ID3D11DeviceContext *context)
Use external D3D11DeviceContext.
void SetSize(int width, int height) override
Overridden to resize the internal D3D shared texture.
void UnregisterSharedTexture()
Register/Unregister the OpenGL textures designated by colorId and depthId with this render window int...
void BlitToTexture(void *color, void *depth=nullptr)
Blits the internal D3D shared texture into color and optionally depth.
void RegisterSharedRenderFramebuffer()
Register the RenderFramebuffer of this window as a D3D shared texture.