diff options
Diffstat (limited to 'intern/cycles/hydra/display_driver.h')
-rw-r--r-- | intern/cycles/hydra/display_driver.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/intern/cycles/hydra/display_driver.h b/intern/cycles/hydra/display_driver.h new file mode 100644 index 00000000000..668f7d76eed --- /dev/null +++ b/intern/cycles/hydra/display_driver.h @@ -0,0 +1,61 @@ +/* SPDX-License-Identifier: Apache-2.0 + * Copyright 2022 NVIDIA Corporation + * Copyright 2022 Blender Foundation */ + +#pragma once + +#include "hydra/config.h" +#include "session/display_driver.h" +#include "util/thread.h" + +#include <pxr/imaging/hgi/hgi.h> +#include <pxr/imaging/hgi/texture.h> + +HDCYCLES_NAMESPACE_OPEN_SCOPE + +class HdCyclesDisplayDriver final : public CCL_NS::DisplayDriver { + public: + HdCyclesDisplayDriver(HdCyclesSession *renderParam, Hgi *hgi); + ~HdCyclesDisplayDriver(); + + private: + void next_tile_begin() override; + + bool update_begin(const Params ¶ms, int texture_width, int texture_height) override; + void update_end() override; + + void flush() override; + + CCL_NS::half4 *map_texture_buffer() override; + void unmap_texture_buffer() override; + + GraphicsInterop graphics_interop_get() override; + + void graphics_interop_activate() override; + void graphics_interop_deactivate() override; + + void clear() override; + + void draw(const Params ¶ms) override; + + HdCyclesSession *const _renderParam; + Hgi *const _hgi; + +#ifdef _WIN32 + void *hdc_ = nullptr; + void *gl_context_ = nullptr; +#endif + + CCL_NS::thread_mutex mutex_; + + PXR_NS::HgiTextureHandle texture_; + unsigned int gl_pbo_id_ = 0; + CCL_NS::int2 pbo_size_ = CCL_NS::make_int2(0, 0); + bool need_update_ = false; + std::atomic_bool need_clear_ = false; + + void *gl_render_sync_ = nullptr; + void *gl_upload_sync_ = nullptr; +}; + +HDCYCLES_NAMESPACE_CLOSE_SCOPE |