Welcome to mirror list, hosted at ThFree Co, Russian Federation.

display_driver.h « hydra « cycles « intern - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 20086830e6a803eb1434dad1ddca0c3443f4fe2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/* 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 init();
  void deinit();

  void next_tile_begin() override;

  bool update_begin(const Params &params, 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 &params) 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