Pioneer
GasGiant.h
Go to the documentation of this file.
1 // Copyright © 2008-2021 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 RenderState;
17  class RenderTarget;
18  class Texture;
19 }
20 
21 class SystemBody;
22 class GasGiant;
23 class GasPatch;
24 class GasPatchContext;
25 class Camera;
26 
27 namespace {
28  class STextureFaceResult;
29  class SGPUGenResult;
30 } // namespace
31 
32 #define NUM_PATCHES 6
33 
34 class GasGiant : public BaseSphere {
35 public:
36  GasGiant(const SystemBody *body);
37  virtual ~GasGiant();
38 
39  virtual void Update() override;
40  virtual void Render(Graphics::Renderer *renderer, const matrix4x4d &modelView, vector3d campos, const float radius, const std::vector<Camera::Shadow> &shadows) override;
41 
42  virtual double GetHeight(const vector3d &p) const override final { return 0.0; }
43 
44  // in sbody radii
45  virtual double GetMaxFeatureHeight() const override { return 0.0; }
46 
47  virtual void Reset() override;
48 
50  static bool OnAddGPUGenResult(const SystemPath &path, GasGiantJobs::SGPUGenResult *res);
51  static void Init();
52  static void Uninit();
53  static void UpdateAllGasGiants();
54  static void OnChangeDetailLevel();
55 
56  static void CreateRenderTarget(const Uint16 width, const Uint16 height);
57  static void SetRenderTargetCubemap(const Uint32, Graphics::Texture *, const bool unBind = true);
58  static void BeginRenderTarget();
59  static void EndRenderTarget();
60 
61 private:
62  void BuildFirstPatches();
63  void GenerateTexture();
64  bool AddTextureFaceResult(GasGiantJobs::STextureFaceResult *res);
65  bool AddGPUGenResult(GasGiantJobs::SGPUGenResult *res);
66 
67  static RefCountedPtr<GasPatchContext> s_patchContext;
68 
69  static Graphics::RenderTarget *s_renderTarget;
70  static Graphics::RenderState *s_quadRenderState;
71 
72  std::unique_ptr<GasPatch> m_patches[NUM_PATCHES];
73 
74  bool m_hasTempCampos;
75  vector3d m_tempCampos;
76 
77  virtual void SetUpMaterials() override;
78  RefCountedPtr<Graphics::Texture> m_surfaceTextureSmall;
79  RefCountedPtr<Graphics::Texture> m_surfaceTexture;
80  RefCountedPtr<Graphics::Texture> m_builtTexture;
81 
82  std::unique_ptr<Color[]> m_jobColorBuffers[NUM_PATCHES];
83  Job::Handle m_job[NUM_PATCHES];
84  bool m_hasJobRequest[NUM_PATCHES];
85 
86  Job::Handle m_gpuJob;
87  bool m_hasGpuJobRequest;
88 
89  float m_timeDelay;
90 };
91 
92 #endif /* _GASGIANT_H */
#define NUM_PATCHES
Definition: GasGiant.h:32
Definition: BaseSphere.h:21
Definition: Camera.h:76
Definition: GasGiantJobs.h:186
Definition: GasGiantJobs.h:73
Definition: GasGiant.h:34
static void CreateRenderTarget(const Uint16 width, const Uint16 height)
Definition: GasGiant.cpp:827
virtual ~GasGiant()
Definition: GasGiant.cpp:330
virtual double GetHeight(const vector3d &p) const override final
Definition: GasGiant.h:42
static void EndRenderTarget()
Definition: GasGiant.cpp:868
static void Init()
Definition: GasGiant.cpp:798
virtual void Reset() override
Definition: GasGiant.cpp:337
static void UpdateAllGasGiants()
Definition: GasGiant.cpp:283
static void SetRenderTargetCubemap(const Uint32, Graphics::Texture *, const bool unBind=true)
Definition: GasGiant.cpp:856
static bool OnAddGPUGenResult(const SystemPath &path, GasGiantJobs::SGPUGenResult *res)
Definition: GasGiant.cpp:378
static bool OnAddTextureFaceResult(const SystemPath &path, GasGiantJobs::STextureFaceResult *res)
Definition: GasGiant.cpp:360
virtual double GetMaxFeatureHeight() const override
Definition: GasGiant.h:45
GasGiant(const SystemBody *body)
Definition: GasGiant.cpp:306
virtual void Update() override
Definition: GasGiant.cpp:642
virtual void Render(Graphics::Renderer *renderer, const matrix4x4d &modelView, vector3d campos, const float radius, const std::vector< Camera::Shadow > &shadows) override
Definition: GasGiant.cpp:659
static void OnChangeDetailLevel()
Definition: GasGiant.cpp:292
static void Uninit()
Definition: GasGiant.cpp:821
static void BeginRenderTarget()
Definition: GasGiant.cpp:862
Definition: GasGiant.cpp:85
Definition: GasGiant.cpp:193
Definition: RenderState.h:25
Definition: RenderTarget.h:38
Definition: Renderer.h:39
Definition: Texture.h:106
Definition: JobQueue.h:37
Definition: SystemBody.h:19
Definition: SystemPath.h:13
Definition: Background.h:13