-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdpatch.h
More file actions
119 lines (93 loc) · 2.82 KB
/
Copy pathdpatch.h
File metadata and controls
119 lines (93 loc) · 2.82 KB
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#ifndef DSCAPE_H
#define DSCAPE_H
#include <list>
using namespace std;
#include "SDL/SDL_opengl.h"
#include "types.h"
#include "quadtritree.h"
#include "quadstack.h"
#include "camera.h"
#include "vertexmorph.h"
#include "wtimer.h"
// These are for our multitexture defines
#define GL_TEXTURE0_ARB 0x84C0
#define GL_TEXTURE1_ARB 0x84C1
#define GL_COMBINE_ARB 0x8570
#define GL_RGB_SCALE_ARB 0x8573
// Here are the multitexture function prototypes
typedef void (APIENTRY * PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
typedef void (APIENTRY * PFNGLACTIVETEXTUREARBPROC) (GLenum target);
// Here we extern our function pointers for multitexturing capabilities
extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
class Volume;
class VertexMorph;
class Camera;
class DPatch{
public:
DPatch();
~DPatch();
void Initialize(Volume*, int, int);
void SetTextureCoord(float , float );
int Render(const Camera*, WTimer *timer);
void Tesselate(const Camera*);
#ifdef GEOMORPH
void Update();
#endif
void SetPriority(float);
void SetTextureIDs(int, int, int);
void RenderWater(WTimer *timer);
void ToggleSplitOnly();
void DrawNormals(int);
float GetPriority();
int NumTri();
int NumVertices();
Vertex* newVertex();
#ifdef GEOMORPH
static void NewGeoMorph(VertexMorph&);
#endif
protected:
void InitMesh();
void InitVariance();
void Reset();
void ResetMesh();
void ResetQueues();
// Recursive Split
void Split(QuadTriTree*, const Camera*);
// Recursive Merge
void Merge(QuadTriTree*, const Camera*);
bool InMergeQ(QuadTriTree*);
bool InSplitQ(QuadTriTree*);
int ComputeVariance(int, int, int, int, int, int, int, unsigned char*);
void PriorityEnqueue(QuadTriTree*, int);
protected:
Volume* volume;
QuadTriTree base1, base2;
unsigned char* variance1, *variance2;
LARGE_INTEGER TimeStart;
float anim;
int varsize;
float splitpriority;
bool drawNormals;
bool ResetDiamond;
bool SplitOnly;
int TextureID_base, TextureID_detail, TextureID_water;
QuadStack SplitAbove;
QuadStack SplitBelow;
QuadStack MergeAbove;
QuadStack MergeBelow;
#ifdef GEOMORPH
static list<VertexMorph> Morph;
#endif
};
class DScape {
public:
void Initialize(Volume*);
void Tessellate();
void Render();
private:
void Reset();
protected:
// static DPatch TriPool[][];
};
#endif