Subversion Repositories gelsvn

Rev

Rev 409 | Rev 416 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 409 Rev 412
Line 34... Line 34...
34
using namespace std;
34
using namespace std;
35
using namespace HMesh;
35
using namespace HMesh;
36
using namespace Geometry;
36
using namespace Geometry;
37
using namespace GLGraphics;
37
using namespace GLGraphics;
38
using namespace LinAlg;
38
using namespace LinAlg;
-
 
39
using namespace CVarUtils;
39
 
40
 
40
bool Harmonics::is_initialized=false;
41
bool Harmonics::is_initialized=false;
41
GLuint Harmonics::prog_P0;
42
GLuint Harmonics::prog_P0;
42
 
43
 
43
 
44
 
Line 227... Line 228...
227
{
228
{
228
	for(int es=E0;es<=E1;++es)
229
	for(int es=E0;es<=E1;++es)
229
		add_frequency(es, scale);
230
		add_frequency(es, scale);
230
}
231
}
231
 
232
 
232
 
-
 
233
template<typename T>
-
 
234
T& get_CVar_ref(const std::string& s)
-
 
235
{
-
 
236
	return *reinterpret_cast<T*> (GetCVarData(s));
-
 
237
}
-
 
238
 
-
 
239
void Harmonics::parse_key(unsigned char key)
233
void Harmonics::parse_key(unsigned char key)
240
{
234
{
241
		int& display_eigenvalue = get_CVar_ref<int>("display.harmonics.eigenvalue");
235
		int& display_eigenvalue = GetCVarRef<int>("display.harmonics.eigenvalue");
242
		int& display_diffuse = get_CVar_ref<int>("display.harmonics.diffuse");
236
		int& display_diffuse = GetCVarRef<int>("display.harmonics.diffuse");
243
		int& display_highlight = get_CVar_ref<int>("display.harmonics.highlight");
237
		int& display_highlight = GetCVarRef<int>("display.harmonics.highlight");
244
		switch(key) {
238
		switch(key) {
245
			case '+': 
239
			case '+': 
246
				display_eigenvalue = min(display_eigenvalue+1, maximum_eigenvalue); 
240
				display_eigenvalue = min(display_eigenvalue+1, maximum_eigenvalue); 
247
				break;
241
				break;
248
			case '-': 
242
			case '-': 
Line 258... Line 252...
258
 
252
 
259
}
253
}
260
 
254
 
261
void Harmonics::draw()
255
void Harmonics::draw()
262
{
256
{
263
	int& display_eigen = get_CVar_ref<int>("display.harmonics.eigenvalue");
257
	int& display_eigen = GetCVarRef<int>("display.harmonics.eigenvalue");
264
	int& display_eigen2 = get_CVar_ref<int>("display.harmonics.eigenvalue");
258
	int& display_eigen2 = GetCVarRef<int>("display.harmonics.eigenvalue");
265
	int& do_diffuse = get_CVar_ref<int>("display.harmonics.diffuse");
259
	int& do_diffuse = GetCVarRef<int>("display.harmonics.diffuse");
266
	int& do_highlight = get_CVar_ref<int>("display.harmonics.highlight");
260
	int& do_highlight = GetCVarRef<int>("display.harmonics.highlight");
267
 
261
 
268
 
262
 
269
	glUseProgram(prog_P0);
263
	glUseProgram(prog_P0);
270
	glUniform1f(glGetUniformLocation(prog_P0,"eig_max"),max_eig_values[display_eigen]);
264
	glUniform1f(glGetUniformLocation(prog_P0,"eig_max"),max_eig_values[display_eigen]);
271
	glUniform1f(glGetUniformLocation(prog_P0,"eig_max2"),max_eig_values[display_eigen2]);
265
	glUniform1f(glGetUniformLocation(prog_P0,"eig_max2"),max_eig_values[display_eigen2]);
Line 313... Line 307...
313
	print_glsl_program_log(prog_P0);
307
	print_glsl_program_log(prog_P0);
314
	
308
	
315
	// Install program object as part of current state
309
	// Install program object as part of current state
316
	glUseProgram(0);
310
	glUseProgram(0);
317
	
311
	
318
	static CVar<int> display_eigen("display.harmonics.eigenvalue",0);
312
	CreateCVar("display.harmonics.eigenvalue",0);
319
	static CVar<int> display_eigen2("display.harmonics.eigenvalue2",0);
313
	CreateCVar("display.harmonics.eigenvalue2",0);
320
	static CVar<int> do_highlight("display.harmonics.highlight",1);
314
	CreateCVar("display.harmonics.highlight",1);
321
	static CVar<int> do_diffuse("display.harmonics.diffuse",1);
315
	CreateCVar("display.harmonics.diffuse",1);
322
 
316
 
323
}
317
}