Pioneer
GasGiant.h
Go to the documentation of this file.
1 // Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef _GASGIANT_H
5 #define _GASGIANT_H
6 
7 #include "BaseSphere.h"
8 #include "GasGiantJobs.h"
9 #include "JobQueue.h"
10 #include "vector3.h"
11 
12 #include <deque>
13 
14 namespace Graphics {
15  class Renderer;
16  class RenderTarget;
17  class Texture;
18 } // namespace Graphics
19 
20 class SystemBody;
21 class GasGiant;
22 class GasPatch;
23 class GasPatchContext;
24 class Camera;
25 
26 namespace {
27  class STextureFaceResult;
28  class SGPUGenResult;
29 } // namespace
30 
31 #define NUM_PATCHES 6
32 
33 class GasGiant : public BaseSphere {
34 public:
35  GasGiant(const SystemBody *body);
36  virtual ~GasGiant();
37 
38  virtual void Update() override;
39  virtual void Render(Graphics::Renderer *renderer, const matrix4x4d &modelView, vector3d campos, const float radius, const std::vector<Camera::Shadow> &shadows) override;
40 
41  virtual double GetHeight(const vector3d &p) const override final { return 0.0; }
42 
43  // in sbody radii
44  virtual double GetMaxFeatureHeight() const override { return 0.0; }
45 
46  virtual void Reset() override;
47 
49  static bool OnAddGPUGenResult(const SystemPath &path, GasGiantJobs::SGPUGenResult *res);
50  static void Init();
51  static void Uninit();
52  static void UpdateAllGasGiants();
53  static void OnChangeDetailLevel();
54 
55  static void CreateRenderTarget(const Uint16 width, const Uint16 height);
56  static void SetRenderTargetCubemap(const Uint32, Graphics::Texture *, const bool unBind = true);
57  static void BeginRenderTarget();
58  static void EndRenderTarget();
59 
60 private:
61  void BuildFirstPatches();
62  void GenerateTexture();
63  bool AddTextureFaceResult(GasGiantJobs::STextureFaceResult *res);
64  bool AddGPUGenResult(GasGiantJobs::SGPUGenResult *res);
65 
66  static RefCountedPtr<GasPatchContext> s_patchContext;
67 
68  static Graphics::RenderTarget *s_renderTarget;
69 
70  std::unique_ptr<GasPatch> m_patches[NUM_PATCHES];
71 
72  bool m_hasTempCampos;
73  vector3d m_tempCampos;
74 
75  virtual void SetUpMaterials() override;
76  RefCountedPtr<Graphics::Texture> m_surfaceTextureSmall;
77  RefCountedPtr<Graphics::Texture> m_surfaceTexture;
78  RefCountedPtr<Graphics::Texture> m_builtTexture;
79 
80  std::unique_ptr<Color[]> m_jobColorBuffers[NUM_PATCHES];
81  Job::Handle m_job[NUM_PATCHES];
82  bool m_hasJobRequest[NUM_PATCHES];
83 
84  Job::Handle m_gpuJob;
85  bool m_hasGpuJobRequest;
86 
87  float m_timeDelay;
88 };
89 
90 #endif /* _GASGIANT_H */
#define NUM_PATCHES
Definition: GasGiant.h:31
Definition: BaseSphere.h:21
Definition: Camera.h:80
Definition: GasGiantJobs.h:193
Definition: GasGiantJobs.h:82
Definition: GasGiant.h:33
static void CreateRenderTarget(const Uint16 width, const Uint16 height)
Definition: GasGiant.cpp:806
virtual ~GasGiant()
Definition: GasGiant.cpp:323
virtual double GetHeight(const vector3d &p) const override final
Definition: GasGiant.h:41
static void EndRenderTarget()
Definition: GasGiant.cpp:842
static void Init()
Definition: GasGiant.cpp:777
virtual void Reset() override
Definition: GasGiant.cpp:330
static void UpdateAllGasGiants()
Definition: GasGiant.cpp:276
static void SetRenderTargetCubemap(const Uint32, Graphics::Texture *, const bool unBind=true)
Definition: GasGiant.cpp:830
static bool OnAddGPUGenResult(const SystemPath &path, GasGiantJobs::SGPUGenResult *res)
Definition: GasGiant.cpp:371
static bool OnAddTextureFaceResult(const SystemPath &path, GasGiantJobs::STextureFaceResult *res)
Definition: GasGiant.cpp:353
virtual double GetMaxFeatureHeight() const override
Definition: GasGiant.h:44
GasGiant(const SystemBody *body)
Definition: GasGiant.cpp:299
virtual void Update() override
Definition: GasGiant.cpp:637
virtual void Render(Graphics::Renderer *renderer, const matrix4x4d &modelView, vector3d campos, const float radius, const std::vector< Camera::Shadow > &shadows) override
Definition: GasGiant.cpp:654
static void OnChangeDetailLevel()
Definition: GasGiant.cpp:285
static void Uninit()
Definition: GasGiant.cpp:800
static void BeginRenderTarget()
Definition: GasGiant.cpp:836
Definition: GasGiant.cpp:86
Definition: GasGiant.cpp:194
Definition: RenderTarget.h:38
Definition: Renderer.h:44
Definition: Texture.h:106
Definition: JobQueue.h:39
Definition: SystemBody.h:19
Definition: SystemPath.h:13
Definition: Background.h:14