Subversion Repositories gelsvn

Rev

Rev 399 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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