// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen // SPDX-License-Identifier: BSD-3-Clause /** * @class vtkWebAssemblyWebGPURenderWindow * @brief OpenGL rendering window * * vtkWebAssemblyWebGPURenderWindow is a concrete implementation of the abstract * class vtkRenderWindow. */ #ifndef vtkWebAssemblyWebGPURenderWindow_h #define vtkWebAssemblyWebGPURenderWindow_h #if !defined(__EMSCRIPTEN__) #error "vtkWebAssemblyWebGPURenderWindow cannot be built without emscripten!" #endif #include "vtkWebGPURenderWindow.h" #include "vtkRenderingWebGPUModule.h" // For export macro #include "vtkWrappingHints.h" // For VTK_MARSHALAUTO VTK_ABI_NAMESPACE_BEGIN class VTKRENDERINGWEBGPU_EXPORT VTK_MARSHALAUTO vtkWebAssemblyWebGPURenderWindow : public vtkWebGPURenderWindow { public: static vtkWebAssemblyWebGPURenderWindow* New(); vtkTypeMacro(vtkWebAssemblyWebGPURenderWindow, vtkWebGPURenderWindow); void PrintSelf(ostream& os, vtkIndent indent) override; /** * Initialize the rendering window. This will setup all system-specific * resources. This method and Finalize() must be symmetric and it * should be possible to call them multiple times, even changing WindowId * in-between. This is what WindowRemap does. */ bool WindowSetup() override; /** * Finalize the rendering window. This will shutdown all system-specific * resources. After having called this, it should be possible to destroy * a window that was used for a SetWindowId() call without any ill effects. */ void Finalize() override; /** * Change the window to fill the entire screen. */ void SetFullScreen(vtkTypeBool) override; ///@{ /** * Set the size of the window in pixels. */ void SetSize(int, int) override; void SetSize(int a[2]) override { this->SetSize(a[0], a[1]); } ///@} /** * Get the current size of the screen in pixels. */ int* GetScreenSize() VTK_SIZEHINT(2) override; /** * Get the position in screen coordinates of the window. */ int* GetPosition() VTK_SIZEHINT(2) override; void* GetGenericWindowId() override { return (void*)this->WindowId; } void* GetGenericDrawable() override { return (void*)this->WindowId; } void MakeCurrent() override {} void ReleaseCurrent() override {} /** * Tells if this window is the current OpenGL context for the calling thread. */ bool IsCurrent() override { return false; } /** * Clean up device contexts, rendering contexts, etc. */ void Clean(); /** * A termination method performed at the end of the rendering process * to do things like swapping buffers (if necessary) or similar actions. */ void Frame() override; /** * Get the size of the color buffer. * Returns 0 if not able to determine otherwise sets R G B and A into buffer. */ int GetColorBufferSizes(int* rgba) override; ///@{ /** * Hide or Show the mouse cursor, it is nice to be able to hide the * default cursor if you want VTK to display a 3D cursor instead. */ void HideCursor() override; void ShowCursor() override; ///@} /** * Specify the selector of the canvas element in the DOM. */ vtkGetStringMacro(CanvasSelector); vtkSetStringMacro(CanvasSelector); /** * Make the setter for UseOffscreenBuffers no-op. * Offscreen buffers end up displaying a black screen which is not very useful. */ void SetUseOffScreenBuffers(bool) override {} /** * Make the setter for ShowWindow no-op. * This property is meaningless in a web browser context. */ void SetShowWindow(bool) override {} protected: vtkWebAssemblyWebGPURenderWindow(); ~vtkWebAssemblyWebGPURenderWindow() override; void* WindowId = nullptr; char* CanvasSelector = nullptr; std::string MakeDefaultWindowNameWithBackend() override; void CleanUpRenderers(); void CreateAWindow() override; void DestroyWindow() override; private: vtkWebAssemblyWebGPURenderWindow(const vtkWebAssemblyWebGPURenderWindow&) = delete; void operator=(const vtkWebAssemblyWebGPURenderWindow&) = delete; }; VTK_ABI_NAMESPACE_END #endif