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