Subversion Repositories gelsvn

Rev

Rev 417 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 417 Rev 456
Line 634... Line 634...
634
"	\n"
634
"	\n"
635
"   float diff = max(0.0,dot(n,vec3(0.0, 0.0, 1.0)));\n"
635
"   float diff = max(0.0,dot(n,vec3(0.0, 0.0, 1.0)));\n"
636
"	gl_FragColor.rgb = vec3(1)*diff*I*(1.0/13.0);\n"
636
"	gl_FragColor.rgb = vec3(1)*diff*I*(1.0/13.0);\n"
637
"	gl_FragColor.a = 1.0;\n"
637
"	gl_FragColor.a = 1.0;\n"
638
"}\n";
638
"}\n";
-
 
639
 
-
 
640
const string DualVertexRenderer::vss = 
-
 
641
"#version 120\n"
-
 
642
"#extension GL_EXT_gpu_shader4 : enable\n"
-
 
643
"varying vec4 diffuseIn;\n"
-
 
644
"varying vec3 normalIn;\n"
-
 
645
"void main(void)\n"
-
 
646
"{\n"
-
 
647
"   diffuseIn = gl_Color;\n"
-
 
648
"   normalIn = normalize(gl_NormalMatrix*gl_Normal);\n"
-
 
649
"   gl_Position =  ftransform();\n"
-
 
650
"}\n";
-
 
651
 
-
 
652
const string DualVertexRenderer::gss = 
-
 
653
"#version 120\n"
-
 
654
"#extension GL_EXT_gpu_shader4 : enable\n"
-
 
655
"#extension GL_EXT_geometry_shader4 : enable\n"
-
 
656
"\n"
-
 
657
"varying in vec4 diffuseIn[3];\n"
-
 
658
"varying in vec3 normalIn[3];\n"
-
 
659
"varying vec4 diffuse[3];\n"
-
 
660
"varying float f;\n"
-
 
661
"varying vec3 normal;\n"
-
 
662
"void main(void)\n"
-
 
663
"{\n"
-
 
664
"  diffuse[0] = diffuseIn[0];\n"
-
 
665
"  diffuse[1] = diffuseIn[1];\n"
-
 
666
"  diffuse[2] = diffuseIn[2];\n"
-
 
667
"\n"
-
 
668
"  f = diffuseIn[0].a;\n"
-
 
669
"  gl_Position = gl_PositionIn[0];\n"
-
 
670
"  normal = normalIn[0];\n"
-
 
671
"  EmitVertex();\n"
-
 
672
"	\n"
-
 
673
"  f = diffuseIn[1].a;\n"
-
 
674
"  gl_Position = gl_PositionIn[1];\n"
-
 
675
"  normal = normalIn[1];\n"
-
 
676
"  EmitVertex();\n"
-
 
677
"\n"
-
 
678
"  f = diffuseIn[2].a;\n"
-
 
679
"  gl_Position = gl_PositionIn[2];\n"
-
 
680
"  normal = normalIn[2];\n"
-
 
681
"  EmitVertex();\n"
-
 
682
"\n"
-
 
683
"  EndPrimitive();\n"
-
 
684
"}\n";
-
 
685
 
-
 
686
const string DualVertexRenderer::fss =
-
 
687
"#version 120\n"
-
 
688
"#extension GL_EXT_gpu_shader4 : enable\n"
-
 
689
"\n"
-
 
690
"varying float f;\n"
-
 
691
"varying vec4 diffuse[3];\n"
-
 
692
"varying vec3 normal;\n"
-
 
693
"\n"
-
 
694
"void main(void)\n"
-
 
695
"{\n"
-
 
696
"   float col_idx=0;\n"
-
 
697
"   if(f>diffuse[0].g && f<diffuse[0].b)\n"
-
 
698
"      col_idx = diffuse[0].r;\n"
-
 
699
"   else if(f>diffuse[1].g && f<diffuse[1].b)\n"
-
 
700
"      col_idx = diffuse[1].r;\n"
-
 
701
"   else if(f>diffuse[2].g && f<diffuse[2].b)\n"
-
 
702
"      col_idx = diffuse[2].r;\n"
-
 
703
"   vec4 col = col_idx < .5 ? vec4(1,0,0,0) : vec4(0,0,1,0);\n"
-
 
704
"\n"
-
 
705
" 	gl_FragColor =col*dot(normal, vec3(0,0,1));\n"
-
 
706
"}\n";
-
 
707
 
-
 
708
 
-
 
709
 
-
 
710
 
-
 
711
	DualVertexRenderer::DualVertexRenderer(HMesh::Manifold& m, std::vector<Vec4d>& field)
-
 
712
	{		
-
 
713
		// Create the program
-
 
714
		static GLuint prog = glCreateProgram();
-
 
715
 
-
 
716
		static bool was_here = false;
-
 
717
		if(!was_here)
-
 
718
		{
-
 
719
			was_here = true;
-
 
720
			// Create s	haders directly from file
-
 
721
			static GLuint vs = create_glsl_shader(GL_VERTEX_SHADER, vss);
-
 
722
			static GLuint gs = create_glsl_shader(GL_GEOMETRY_SHADER_EXT, gss);
-
 
723
			static GLuint fs = create_glsl_shader(GL_FRAGMENT_SHADER, fss);
-
 
724
			
-
 
725
			// Attach all shaders
-
 
726
			if(vs) glAttachShader(prog, vs);
-
 
727
			if(gs) glAttachShader(prog, gs);
-
 
728
			if(fs) glAttachShader(prog, fs);
-
 
729
			
-
 
730
			// Specify input and output for the geometry shader. Note that this must be
-
 
731
			// done before linking the program.
-
 
732
			glProgramParameteriEXT(prog,GL_GEOMETRY_INPUT_TYPE_EXT,GL_TRIANGLES);
-
 
733
			glProgramParameteriEXT(prog,GL_GEOMETRY_VERTICES_OUT_EXT,3);
-
 
734
			glProgramParameteriEXT(prog,GL_GEOMETRY_OUTPUT_TYPE_EXT,GL_TRIANGLE_STRIP);
-
 
735
			
-
 
736
			// Link the program object and print out the info log
-
 
737
			glLinkProgram(prog);
-
 
738
		}
-
 
739
		
-
 
740
		
-
 
741
		
-
 
742
		GLint old_prog;
-
 
743
		glGetIntegerv(GL_CURRENT_PROGRAM, &old_prog);
-
 
744
		
-
 
745
		glNewList(display_list,GL_COMPILE);
-
 
746
		glUseProgram(prog);
-
 
747
		for(FaceIter f=m.faces_begin(); f != m.faces_end(); ++f)
-
 
748
		{
-
 
749
			FaceCirculator fc(f);
-
 
750
			if(no_edges(f) != 3) 
-
 
751
				continue;
-
 
752
			else 
-
 
753
				glBegin(GL_TRIANGLES);
-
 
754
			
-
 
755
			while(!fc.end())
-
 
756
			{
-
 
757
				Vec3d n(normal(fc.get_vertex()));
-
 
758
				glNormal3dv(n.get());
-
 
759
				int i = fc.get_vertex()->touched;
-
 
760
				glColor4dv(field[i].get());
-
 
761
				glVertex3fv(fc.get_vertex()->pos.get());
-
 
762
				++fc;
-
 
763
			}
-
 
764
			glEnd();
-
 
765
		}
-
 
766
		glUseProgram(old_prog);
-
 
767
		glEndList();	
-
 
768
		
-
 
769
	}
-
 
770
 
-
 
771
 
-
 
772
	
639
 
773