// Adapted from the vrdashboard template (FrameAssistant commit 4a5b090), // verified on the Steam Frame. See docs/steamframe/DESIGN.md, section 3. #pragma once #include #include #include "RenderBackend.h" class OpenGLRenderBackend final : public RenderBackend { public: OpenGLRenderBackend() = default; ~OpenGLRenderBackend() override; QString name() const override { return QStringLiteral( "OpenGL" ); } QSGRendererInterface::GraphicsApi graphicsApi() const override { return QSGRendererInterface::OpenGL; } bool initialize( const RenderInterop& interop, QString* error ) override; void configureWindow( QQuickWindow* window ) override; bool attachWindow( QQuickWindow* window, QString* error ) override; void detachWindow() override { releaseRenderTarget(); } QString deviceName() const override { return m_deviceName; } bool makeCurrent() override; void doneCurrent() override; QQuickRenderTarget createRenderTarget( QSize size ) override; void releaseRenderTarget() override; void beginFrame() override {} void finishFrame() override; void waitForGpu() override; vr::Texture_t vrTexture() override; vr::VRTextureBounds_t vrTextureBounds() const override; QImage readback() override; private: std::unique_ptr m_context; std::unique_ptr m_surface; unsigned int m_texture = 0; // GLuint QSize m_size; QString m_deviceName; };