Pioneer
Loading...
Searching...
No Matches
GasGiantJobs.h
Go to the documentation of this file.
1// Copyright © 2008-2015 Pioneer Developers. See AUTHORS.txt for details
2// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3
4#ifndef _GASGIANTJOBS_H
5#define _GASGIANTJOBS_H
6
7#include <SDL_stdinc.h>
8
9#include "JobQueue.h"
10#include "graphics/Material.h"
13#include "profiler/Profiler.h"
14#include "terrain/Terrain.h"
15#include "vector3.h"
16
17#include <deque>
18
19namespace Graphics {
20 class Renderer;
21} // namespace Graphics
22
23namespace GasGiantJobs {
24 //#define DUMP_PARAMS 1
25
30 // technically Ice Giants not Gas Giants...
34 };
35
36 // generate root face patches of the cube/sphere
37 static const vector3d p1 = (vector3d(1, 1, 1)).Normalized();
38 static const vector3d p2 = (vector3d(-1, 1, 1)).Normalized();
39 static const vector3d p3 = (vector3d(-1, -1, 1)).Normalized();
40 static const vector3d p4 = (vector3d(1, -1, 1)).Normalized();
41 static const vector3d p5 = (vector3d(1, 1, -1)).Normalized();
42 static const vector3d p6 = (vector3d(-1, 1, -1)).Normalized();
43 static const vector3d p7 = (vector3d(-1, -1, -1)).Normalized();
44 static const vector3d p8 = (vector3d(1, -1, -1)).Normalized();
45
46 const vector3d &GetPatchFaces(const Uint32 patch, const Uint32 face);
47
49 public:
50 STextureFaceRequest(const vector3d *v_, const SystemPath &sysPath_, const Sint32 face_, const Sint32 uvDIMs_, Terrain *pTerrain_);
51
52 // RUNS IN ANOTHER THREAD!! MUST BE THREAD SAFE!
53 // Use only data local to this object
54 void OnRun();
55
56 Sint32 Face() const { return face; }
57 inline Sint32 UVDims() const { return uvDIMs; }
58 Color *Colors() const { return colors; }
59 const SystemPath &SysPath() const { return sysPath; }
60
61 protected:
62 // deliberately prevent copy constructor access
64
65 inline Sint32 NumTexels() const { return uvDIMs * uvDIMs; }
66
67 // in patch surface coords, [0,1]
68 inline vector3d GetSpherePoint(const double x, const double y) const
69 {
70 return (corners[0] + x * (1.0 - y) * (corners[1] - corners[0]) + x * y * (corners[2] - corners[0]) + (1.0 - x) * y * (corners[3] - corners[0])).Normalized();
71 }
72
73 // these are created with the request and are given to the resulting patches
75
78 const Sint32 face;
79 const Sint32 uvDIMs;
81 };
82
84 public:
87 STextureFaceData(Color *c_, Sint32 uvDims_) :
88 colors(c_),
89 uvDims(uvDims_) {}
91 Sint32 uvDims;
92 };
93
94 STextureFaceResult(const int32_t face_) :
95 mFace(face_) {}
96
97 void addResult(Color *c_, Sint32 uvDims_)
98 {
99 PROFILE_SCOPED()
100 mData = STextureFaceData(c_, uvDims_);
101 }
102
103 inline const STextureFaceData &data() const { return mData; }
104 inline int32_t face() const { return mFace; }
105
106 void OnCancel()
107 {
108 if (mData.colors) {
109 delete[] mData.colors;
110 mData.colors = NULL;
111 }
112 }
113
114 protected:
115 // deliberately prevent copy constructor access
117
118 const int32_t mFace;
120 };
121
122 // ********************************************************************************
123 // Overloaded PureJob class to handle generating the mesh for each patch
124 // ********************************************************************************
125 class SingleTextureFaceJob : public Job {
126 public:
128 mData(data),
129 mpResults(nullptr)
130 { /* empty */
131 }
132 virtual ~SingleTextureFaceJob();
133
134 virtual void OnRun();
135 virtual void OnFinish();
136 virtual void OnCancel() {}
137
138 private:
139 // deliberately prevent copy constructor access
141
142 std::unique_ptr<STextureFaceRequest> mData;
143 STextureFaceResult *mpResults;
144 };
145
146 // ********************************************************************************
147 // a quad with reversed winding
149 public:
150 GenFaceQuad(Graphics::Renderer *r, const vector2f &size, const Uint32 GGQuality);
151 virtual void Draw(Graphics::Renderer *r);
152
154 {
155 assert(mat);
156 m_material.reset(mat);
157 }
158 Graphics::Material *GetMaterial() const { return m_material.get(); }
159
160 private:
161 std::unique_ptr<Graphics::Material> m_material;
162 std::unique_ptr<Graphics::MeshObject> m_quadMesh;
163 };
164
165 // ********************************************************************************
167 public:
168 SGPUGenRequest(const SystemPath &sysPath_, const Sint32 uvDIMs_, Terrain *pTerrain_, const float planetRadius_, const float hueAdjust_, GenFaceQuad *pQuad_, Graphics::Texture *pTex_);
169
170 inline Sint32 UVDims() const { return uvDIMs; }
171 Graphics::Texture *Texture() const { return m_texture.Get(); }
172 GenFaceQuad *Quad() const { return pQuad.get(); }
173 const SystemPath &SysPath() const { return sysPath; }
174 void SetupMaterialParams(const int face);
175
176 protected:
177 // deliberately prevent copy constructor access
178 SGPUGenRequest(const SGPUGenRequest &r) = delete;
179
180 inline Sint32 NumTexels() const { return uvDIMs * uvDIMs; }
181
182 // this is created with the request and are given to the resulting patches
184
186 const Sint32 uvDIMs;
188 const float planetRadius;
189 const float hueAdjust;
190 std::unique_ptr<GenFaceQuad> pQuad;
191 };
192
193 // ********************************************************************************
195 public:
196 struct SGPUGenData {
198 SGPUGenData(Graphics::Texture *t_, Sint32 uvDims_) :
199 texture(t_),
200 uvDims(uvDims_) {}
202 Sint32 uvDims;
203 };
204
206
207 void addResult(Graphics::Texture *t_, Sint32 uvDims_);
208
209 inline const SGPUGenData &data() const { return mData; }
210
211 void OnCancel();
212
213 protected:
214 // deliberately prevent copy constructor access
215 SGPUGenResult(const SGPUGenResult &r) = delete;
216
218 };
219
220 // ********************************************************************************
221 // Overloaded JobGPU class to handle generating the mesh for each patch
222 // ********************************************************************************
223 class SingleGPUGenJob : public Job {
224 public:
226 virtual ~SingleGPUGenJob();
227
228 virtual void OnRun();
229 virtual void OnFinish();
230 virtual void OnCancel() {}
231
232 private:
233 SingleGPUGenJob() {}
234 // deliberately prevent copy constructor access
235 SingleGPUGenJob(const SingleGPUGenJob &r) = delete;
236
237 std::unique_ptr<SGPUGenRequest> mData;
238 SGPUGenResult *mpResults;
239 };
240} // namespace GasGiantJobs
241
242#endif /* _GASGIANTJOBS_H */
Definition: GasGiantJobs.h:148
Graphics::Material * GetMaterial() const
Definition: GasGiantJobs.h:158
void SetMaterial(Graphics::Material *mat)
Definition: GasGiantJobs.h:153
virtual void Draw(Graphics::Renderer *r)
Definition: GasGiantJobs.cpp:184
Definition: GasGiantJobs.h:166
std::unique_ptr< GenFaceQuad > pQuad
Definition: GasGiantJobs.h:190
RefCountedPtr< Graphics::Texture > m_texture
Definition: GasGiantJobs.h:183
Terrain * pTerrain
Definition: GasGiantJobs.h:187
Sint32 UVDims() const
Definition: GasGiantJobs.h:170
void SetupMaterialParams(const int face)
Definition: GasGiantJobs.cpp:204
const Sint32 uvDIMs
Definition: GasGiantJobs.h:186
const float hueAdjust
Definition: GasGiantJobs.h:189
Sint32 NumTexels() const
Definition: GasGiantJobs.h:180
Graphics::Texture * Texture() const
Definition: GasGiantJobs.h:171
const SystemPath sysPath
Definition: GasGiantJobs.h:185
SGPUGenRequest(const SGPUGenRequest &r)=delete
const float planetRadius
Definition: GasGiantJobs.h:188
GenFaceQuad * Quad() const
Definition: GasGiantJobs.h:172
const SystemPath & SysPath() const
Definition: GasGiantJobs.h:173
Definition: GasGiantJobs.h:194
const SGPUGenData & data() const
Definition: GasGiantJobs.h:209
SGPUGenData mData
Definition: GasGiantJobs.h:217
void addResult(Graphics::Texture *t_, Sint32 uvDims_)
Definition: GasGiantJobs.cpp:224
void OnCancel()
Definition: GasGiantJobs.cpp:230
SGPUGenResult()
Definition: GasGiantJobs.h:205
SGPUGenResult(const SGPUGenResult &r)=delete
Definition: GasGiantJobs.h:48
const SystemPath & SysPath() const
Definition: GasGiantJobs.h:59
void OnRun()
Definition: GasGiantJobs.cpp:48
RefCountedPtr< Terrain > pTerrain
Definition: GasGiantJobs.h:80
Color * colors
Definition: GasGiantJobs.h:74
const vector3d * corners
Definition: GasGiantJobs.h:76
const Sint32 uvDIMs
Definition: GasGiantJobs.h:79
const Sint32 face
Definition: GasGiantJobs.h:78
Sint32 NumTexels() const
Definition: GasGiantJobs.h:65
Sint32 UVDims() const
Definition: GasGiantJobs.h:57
vector3d GetSpherePoint(const double x, const double y) const
Definition: GasGiantJobs.h:68
const SystemPath sysPath
Definition: GasGiantJobs.h:77
Color * Colors() const
Definition: GasGiantJobs.h:58
STextureFaceRequest(const STextureFaceRequest &r)=delete
Sint32 Face() const
Definition: GasGiantJobs.h:56
Definition: GasGiantJobs.h:83
void OnCancel()
Definition: GasGiantJobs.h:106
void addResult(Color *c_, Sint32 uvDims_)
Definition: GasGiantJobs.h:97
STextureFaceResult(const int32_t face_)
Definition: GasGiantJobs.h:94
STextureFaceData mData
Definition: GasGiantJobs.h:119
STextureFaceResult(const STextureFaceResult &r)=delete
const STextureFaceData & data() const
Definition: GasGiantJobs.h:103
int32_t face() const
Definition: GasGiantJobs.h:104
const int32_t mFace
Definition: GasGiantJobs.h:118
Definition: GasGiantJobs.h:223
virtual void OnCancel()
Definition: GasGiantJobs.h:230
virtual ~SingleGPUGenJob()
Definition: GasGiantJobs.cpp:245
virtual void OnFinish()
Definition: GasGiantJobs.cpp:293
virtual void OnRun()
Definition: GasGiantJobs.cpp:255
Definition: GasGiantJobs.h:125
virtual void OnRun()
Definition: GasGiantJobs.cpp:88
virtual ~SingleTextureFaceJob()
Definition: GasGiantJobs.cpp:78
virtual void OnCancel()
Definition: GasGiantJobs.h:136
SingleTextureFaceJob(STextureFaceRequest *data)
Definition: GasGiantJobs.h:127
virtual void OnFinish()
Definition: GasGiantJobs.cpp:101
Definition: Material.h:148
Definition: Renderer.h:45
Definition: Texture.h:103
Definition: JobQueue.h:33
Definition: RefCounted.h:36
T * Get() const
Definition: SmartPtr.h:37
Definition: SystemPath.h:13
Definition: Terrain.h:25
vector3 Normalized() const
Definition: vector3.h:136
Definition: GasGiantJobs.cpp:23
const vector3d & GetPatchFaces(const Uint32 patch, const Uint32 face)
Definition: GasGiantJobs.cpp:34
GasGiantTexture
Definition: GasGiantJobs.h:26
@ GEN_NEPTUNE_TEXTURE
Definition: GasGiantJobs.h:31
@ GEN_URANUS_TEXTURE
Definition: GasGiantJobs.h:33
@ GEN_JUPITER_TEXTURE
Definition: GasGiantJobs.h:27
@ GEN_SATURN_TEXTURE
Definition: GasGiantJobs.h:28
@ GEN_SATURN2_TEXTURE
Definition: GasGiantJobs.h:29
@ GEN_NEPTUNE2_TEXTURE
Definition: GasGiantJobs.h:32
Definition: Background.h:14
Definition: Color.h:66
Definition: GasGiantJobs.h:196
RefCountedPtr< Graphics::Texture > texture
Definition: GasGiantJobs.h:201
Sint32 uvDims
Definition: GasGiantJobs.h:202
SGPUGenData(Graphics::Texture *t_, Sint32 uvDims_)
Definition: GasGiantJobs.h:198
SGPUGenData()
Definition: GasGiantJobs.h:197
STextureFaceData()
Definition: GasGiantJobs.h:86
Color * colors
Definition: GasGiantJobs.h:90
Sint32 uvDims
Definition: GasGiantJobs.h:91
STextureFaceData(Color *c_, Sint32 uvDims_)
Definition: GasGiantJobs.h:87
vector3< double > vector3d
Definition: vector3.h:329