示例#1
5
static void CALLBACK Paint(void)
{
	glViewport(0,0,windW,windH);
	glDisable(GL_SCISSOR_TEST);

	glPushAttrib(GL_COLOR_BUFFER_BIT);

	glColorMask(1,1,1,1);
	glIndexMask((GLuint)~0);

	glClearColor(0.0,0.0,0.0,0.0);
	glClear(GL_COLOR_BUFFER_BIT);

	glPopAttrib();

	if(mode1)glShadeModel(GL_SMOOTH);
	else glShadeModel(GL_FLAT);

	if(mode2)glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
	else glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);

	Viewport(0,0); Point();
	Viewport(0,1); Lines();
	Viewport(0,2); LineStrip();
	Viewport(0,3); LineLoop();

	Viewport(1,0); Bitmap();

	Viewport(1,1); TriangleFan();
	Viewport(1,2); Triangles();
	Viewport(1,3); TriangleStrip();
	Viewport(2,0); Rect();
	Viewport(2,1); xPolygon();
	Viewport(2,2); Quads();
	Viewport(2,3); QuadStrip();

	glFlush();

	if(doubleBuffer)auxSwapBuffers();
}
示例#2
0
文件: demo3.c 项目: aosm/X11apps
static void Draw(EGLDisplay dpy, EGLSurface surf)
{

    glViewport(0, 0, windW, windH);
    glDisable(GL_SCISSOR_TEST);

    glPushAttrib(GL_COLOR_BUFFER_BIT);

    glColorMask(1, 1, 1, 1);
    glIndexMask(~0);

    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);

    glPopAttrib();

    if (mode1) {
	glShadeModel(GL_SMOOTH);
    } else {
	glShadeModel(GL_FLAT);
    }

    if (mode2) {
	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    } else {
	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
    }

    Viewport(0, 0); Point();
    Viewport(0, 1); Lines();
    Viewport(0, 2); LineStrip();
    Viewport(0, 3); LineLoop();

    Viewport(1, 0); Bitmap();

    Viewport(1, 1); TriangleFan();
    Viewport(1, 2); Triangles();
    Viewport(1, 3); TriangleStrip();

    Viewport(2, 0); Rect();
    Viewport(2, 1); PolygonFunc();
    Viewport(2, 2); Quads();
    Viewport(2, 3); QuadStrip();

    glFlush();

    if (doubleBuffer) {
	eglSwapBuffers(dpy, surf);
    }
}
示例#3
0
/* metodo di avvio del parser; apre il file specificato e riga per riga aggiunge nelle strutture dati i corrispondenti elementi */
void Parser::start_parser(vector<Vertex> *v, Container<Triangles> *tr, Container<Quads> *qs, Container<Normal> *vn){
		
		bool boot_f = true, boot_vn = true;
		float f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12;
		
		if(!fp){
			cout << "ERROR : file not found or wrong declaration"<<endl;
			exit(0);
		}
		
		while (!feof(fp)) {
			
			memset(str, 0, 256);
			fgets(str, 256, fp);
			
			if( strncmp("vn ",str,3) == 0 )
			{
				if(boot_vn){
					vn->initiateData();
					boot_vn=false;
				}
				sscanf((str+2),"%f %f %f",&f1,&f2,&f3);
				Normal n = Normal(f1,f2,f3);
				vn->addData(n);
				
			}
			else if(strncmp("v ",str,2) == 0 )
			{
				
				sscanf((str+1),"%f %f %f",&f1,&f2,&f3);
				Vertex tmp = Vertex(f1,f2,f3);
				v->push_back(tmp);
			}
			else if(strncmp("f ",str,2) == 0 )
			{
				if (boot_f) {
					//attivare struttura dati
					tr->initiateData();
					qs->initiateData();
					boot_f=false;
				}
				int match = sscanf((str+1),"%f %f %f %f",&f1,&f2,&f3,&f4);		//triangolo o quadrato
				
				Triangles t;
				Quads q;
				
				if(match==3){
					t = Triangles(f1,f2,f3);
					tr->addData(t);
				}	
				if(match==4){
					q = Quads(f1,f2,f3,f4);
					qs->addData(q);	
				}
				int matchN = sscanf((str+1),"%f//%f %f//%f %f//%f %f//%f",&f1,&f2,&f3,&f4,&f5,&f6,&f7,&f8);  // triangolo/quadrato + normale
				if(matchN==6){
					t = Triangles(f1,f3,f5,f2,f4,f6);
					tr->addData(t);
				}
				if(matchN==8){
					q = Quads(f1,f3,f5,f7,f2,f4,f6,f8);
					qs->addData(q);
				}
				int matchNT = sscanf((str+1),"%f/%f/%f %f/%f/%f %f/%f/%f %f/%f/%f",&f1,&f2,&f3,&f4,&f5,&f6,&f7,&f8,&f9,&f10,&f11,&f12);  // triangolo/quadrato + texture + normale
				if(matchNT==9){
					t = Triangles(f1,f4,f7,f3,f6,f9);
					tr->addData(t);
				}
				if(matchNT==12){
					q = Quads(f1,f4,f7,f10,f3,f6,f9,f12);
					qs->addData(q);
				}
			}
		}
		fclose(fp);
};