Subversion Repositories gelsvn

Rev

Rev 399 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 399 Rev 401
1
/*
1
/*
2
 *  ManifoldRenderer.h
2
 *  ManifoldRenderer.h
3
 *  GEL
3
 *  GEL
4
 *
4
 *
5
 *  Created by J. Andreas Bærentzen on 20/09/08.
5
 *  Created by J. Andreas Bærentzen on 20/09/08.
6
 *  Copyright 2008 __MyCompanyName__. All rights reserved.
6
 *  Copyright 2008 __MyCompanyName__. All rights reserved.
7
 *
7
 *
8
 */
8
 */
9
#ifndef __MESHEDIT_RENDERER_H__
9
#ifndef __MESHEDIT_RENDERER_H__
10
#define __MESHEDIT_RENDERER_H__
10
#define __MESHEDIT_RENDERER_H__
11
 
11
 
12
#include <GL/glew.h>
12
#include <GL/glew.h>
13
#include "harmonics.h"
13
#include "harmonics.h"
14
#include <GLGraphics/draw.h>
14
#include <GLGraphics/draw.h>
15
#include <GLGraphics/IDBufferWireFrameRenderer.h>
15
#include <GLGraphics/IDBufferWireFrameRenderer.h>
16
 
16
 
17
class ManifoldRenderer
17
class ManifoldRenderer
18
	{
18
	{
19
	protected:
19
	protected:
20
		GLuint display_list;
20
		GLuint display_list;
21
	public:
21
	public:
22
		ManifoldRenderer(): display_list(glGenLists(1))	{}
22
		ManifoldRenderer(): display_list(glGenLists(1))	{}
23
		virtual ~ManifoldRenderer()
23
		virtual ~ManifoldRenderer()
24
		{
24
		{
25
			glDeleteLists(display_list, 1);
25
			glDeleteLists(display_list, 1);
26
		}
26
		}
27
		virtual void draw()
27
		virtual void draw()
28
		{
28
		{
29
			glCallList(display_list);
29
			glCallList(display_list);
30
		}
30
		}
31
	};
31
	};
32
 
32
 
33
class NormalRenderer: public ManifoldRenderer
33
class NormalRenderer: public ManifoldRenderer
34
	{
34
	{
35
	public:
35
	public:
36
		NormalRenderer(HMesh::Manifold& m, bool flat)
36
		NormalRenderer(HMesh::Manifold& m, bool flat)
37
		{
37
		{
38
			glNewList(display_list,GL_COMPILE);
38
			glNewList(display_list,GL_COMPILE);
39
			GLGraphics::draw(m,flat);
39
			GLGraphics::draw(m,flat);
40
			glEndList();
40
			glEndList();
41
		}
41
		}
42
	};
42
	};
43
 
43
 
44
class WireframeRenderer: public ManifoldRenderer
44
class WireframeRenderer: public ManifoldRenderer
45
	{
45
	{
46
		GLGraphics::IDBufferWireframeRenderer* idbuff_renderer;
46
		GLGraphics::IDBufferWireframeRenderer* idbuff_renderer;
47
		
47
		
48
		int maximum_face_valency(HMesh::Manifold& m);
48
		int maximum_face_valency(HMesh::Manifold& m);
49
		
49
		
50
	public:
50
	public:
51
		~WireframeRenderer()
51
		~WireframeRenderer()
52
		{
52
		{
53
			delete idbuff_renderer;
53
			delete idbuff_renderer;
54
		}
54
		}
55
		
55
		
56
		WireframeRenderer(HMesh::Manifold& m, bool flat);
56
		WireframeRenderer(HMesh::Manifold& m, bool flat);
57
		
57
		
58
		void draw();
58
		void draw();
59
	};
59
	};
60
 
60
 
61
 
61
 
62
class HarmonicsRenderer: public ManifoldRenderer
62
class HarmonicsRenderer: public ManifoldRenderer
63
	{
63
	{
64
		
64
		
65
	public:
65
	public:
66
		HarmonicsRenderer(Harmonics* h)
66
		HarmonicsRenderer(Harmonics* h)
67
		{
67
		{
68
			glNewList(display_list,GL_COMPILE);
68
			glNewList(display_list,GL_COMPILE);
69
			if(h) h->draw();
69
			if(h) h->draw();
70
			glEndList();
70
			glEndList();
71
		}
71
		}
72
	};
72
	};
73
 
73
 
74
 
74
 
75
 
75
 
76
class SimpleShaderRenderer: public ManifoldRenderer
76
class SimpleShaderRenderer: public ManifoldRenderer
77
	{
77
	{
78
		GLuint prog,vs,fs;
78
		GLuint prog,vs,fs;
79
	public:
79
	public:
80
		SimpleShaderRenderer(HMesh::Manifold& m, const std::string& vss, const std::string& fss);
80
		SimpleShaderRenderer(HMesh::Manifold& m, const std::string& vss, const std::string& fss);
81
		~SimpleShaderRenderer()
81
		~SimpleShaderRenderer()
82
		{
82
		{
83
			glDeleteProgram(prog);
83
			glDeleteProgram(prog);
84
			glDeleteShader(vs);
84
			glDeleteShader(vs);
85
			glDeleteShader(fs);
85
			glDeleteShader(fs);
86
		}
86
		}
87
		virtual void draw();
87
		virtual void draw();
88
	
88
	
89
	};
89
	};
90
 
90
 
91
class ReflectionLineRenderer: public SimpleShaderRenderer
91
class ReflectionLineRenderer: public SimpleShaderRenderer
92
	{
92
	{
93
		const static std::string vss;
93
		const static std::string vss;
94
		const static std::string fss;
94
		const static std::string fss;
95
	public:
95
	public:
96
		ReflectionLineRenderer(HMesh::Manifold& m):
96
		ReflectionLineRenderer(HMesh::Manifold& m):
97
			SimpleShaderRenderer(m, vss, fss) {}
97
			SimpleShaderRenderer(m, vss, fss) {}
98
		
98
		
99
	};
99
	};
100
 
100
 
101
class IsophoteLineRenderer: public SimpleShaderRenderer
101
class IsophoteLineRenderer: public SimpleShaderRenderer
102
	{
102
	{
103
		const static std::string vss;
103
		const static std::string vss;
104
		const static std::string fss;
104
		const static std::string fss;
105
	public:
105
	public:
106
		IsophoteLineRenderer(HMesh::Manifold& m):
106
		IsophoteLineRenderer(HMesh::Manifold& m):
107
		SimpleShaderRenderer(m, vss, fss) {}
107
		SimpleShaderRenderer(m, vss, fss) {}
108
		
108
		
109
	};
109
	};
110
 
110
 
111
class MetallicRenderer: public SimpleShaderRenderer
111
class MetallicRenderer: public SimpleShaderRenderer
112
	{
112
	{
113
		const static std::string vss;
113
		const static std::string vss;
114
		const static std::string fss;
114
		const static std::string fss;
115
	public:
115
	public:
116
		MetallicRenderer(HMesh::Manifold& m):
116
		MetallicRenderer(HMesh::Manifold& m):
117
		SimpleShaderRenderer(m, vss, fss) {}
117
		SimpleShaderRenderer(m, vss, fss) {}
118
		
118
		
119
	};
119
	};
120
 
120
 
-
 
121
class GlazedRenderer: public SimpleShaderRenderer
-
 
122
	{
-
 
123
		const static std::string vss;
-
 
124
		const static std::string fss;
-
 
125
	public:
-
 
126
		GlazedRenderer(HMesh::Manifold& m):
-
 
127
		SimpleShaderRenderer(m, vss, fss) {}
-
 
128
		
-
 
129
	};
-
 
130
 
121
 
131
 
122
 
132
 
123
#endif
133
#endif
124
 
134
 
125

Generated by GNU Enscript 1.6.6.
135

Generated by GNU Enscript 1.6.6.
126
 
136
 
127
 
137
 
128
 
138