void Rectangle::draw()
{
	getShader()->beginShader();
    if (getShader()->drawShaded()) {
		getShader()->beginShading();
    	beginList();
    	if(!isCached())
    	{
			glRectf(x, y, width, height);
		}
    	endList();
 	    getShader()->endShading();
	}
    if (getShader()->drawOutline()) {
    	getShader()->beginOutline();
		beginList();
    	if(!isCached())
    	{
			glRectf(x, y, width, height);
		}
    	endList();
    	getShader()->endOutline();

    }
    getShader()->endShader();
}
Exemple #2
0
GLuint SGLFlObj::Compile(bool draw,bool free)
{
	is_free=free;
	GLboolean	restoreCullFaces=false;// ,doBlend=false ;
	GLint		CullFace;
	int i;
	bool EnableClip[5];

	SGLFlMetaObj *meta=dynamic_cast<SGLFlMetaObj*>(this);
	if(meta)
		meta->compileSubObjects();

	if(!VisMode)
	{
		GLint MasterPolyMode[2];
		glGetIntegerv(GL_POLYGON_MODE,MasterPolyMode);
		VisMode=GLenum(MasterPolyMode[0]);
	}

	GLuint error=0;
	while((error=glGetError()))
	{
		SGLprintError("%s [GLerror] vor dem Zeichnen von %s",gluErrorString(GLenum(error)),guesType());
	}

	//NVIDIA optimiert Setzoperationen komplett raus aus den Listen, wenn der Wert schon gesetzt ist
	//Deshalb bringt das vorsorgliche glPolygonMode nix mehr (es kann nicht garantiert werden, da�es
	//auch in der Liste landet)
	//Behandle GL_FILL jetzt als Normfall, und alle anderen setzen ihren Modus UND nehmen ihn auch
	//wieder raus
	beginList(draw);
		for(i=0;i<5;i++)
			if((EnableClip[i]=(IgnoreClip && glIsEnabled(GLenum(GL_CLIP_PLANE0+i)))))
				glDisable(GLenum(GL_CLIP_PLANE0+i));
		if(IgnoreLight)glDisable(GL_LIGHTING);

		if(VisMode!=GL_FILL)
		{
			glPolygonMode(GL_FRONT_AND_BACK,VisMode);
		}

		if(	glIsEnabled(GL_CULL_FACE) &&
			(VisMode!=GL_FILL || twoSideRender)
		)
		{
			glGetIntegerv(GL_CULL_FACE_MODE,&CullFace);
			glDisable(GL_CULL_FACE);restoreCullFaces=true;
		}

		if(Mat)
		{
			//Wenn Lightning aus ist, scheint er Material-Settings zu ignorieren
			if(IgnoreLight)// @todo nochmal überlegen wie Textur, Material und Farbe sich untereinander verhalten
			{
				
				if(Mat->tex)
					Mat->tex->loadTex();
				else 
				{
					glColor4f(
					Mat->Aussen.Farbe.Glow[0],
					Mat->Aussen.Farbe.Glow[1],
					Mat->Aussen.Farbe.Glow[2],
					1-Mat->Transparenz);//Wenn Selbstleuchtend, und keine Textur
					SGLMaterial::MatLoaded=true; //really dirty Hack :-) (sorgt dafür, daß er denkt er hätte ein Mat. -> DrawVertex heult nich rum)
				}
			}
			else Mat->loadMat();
		}
		metaGenerate();
		if(Mat)
		{
			//Wenn Lightning aus ist, scheint er Material-Settings zu ignorieren
			if(IgnoreLight)// @todo Tex NUR hier laden - is sauberer
			{
				if(Mat->tex)Mat->tex->unloadTex();
				SGLMaterial::MatLoaded=false; //yadh (yet another dirty Hack) :-)
			}
			else Mat->unloadMat();
		}

		if(VisMode!=GL_FILL)
		{
			glPolygonMode(GL_FRONT,GL_FILL);
			glPolygonMode(GL_BACK,GL_FILL);
		}
		if(restoreCullFaces)
		{
			glEnable(GL_CULL_FACE);
			glCullFace(GLenum(CullFace));
		}
		if(IgnoreLight)glEnable(GL_LIGHTING);
		for(i=0;i<5;i++)if(EnableClip[i])
			glDisable(GLenum(GL_CLIP_PLANE0+i));
		glColor4f(1,1,1,1);
	endList();

	while((error=glGetError()))
	{
		SGLprintError("%s [GLerror] beim Zeichnen von %s",gluErrorString(GLenum(error)),guesType());
	}
	return ID;
}