VIEW* PP_Temp_View; // Temporärer View Pointer
VIEW* PP_Add(MATERIAL* Material,VIEW* View,BMAP* bmap) // Addiere einen Effekt zu einer View Stage Kette
{
PP_Temp_View = View; // Finde den letzten Vieweffekt und speichere ihn
while(PP_Temp_View.stage != NULL)
{
PP_Temp_View = PP_Temp_View.stage;
}
PP_Temp_View.stage = view_create(0); // Kreiere einen neuen View
set(PP_Temp_View.stage,PROCESS_TARGET);
PP_Temp_View = PP_Temp_View.stage; // Füge Material an den kreierten View
PP_Temp_View.material = Material;
if(bmap != NULL) // Wenn eine Bitmap übergeben wurde, rendere in diese
{
PP_Temp_View.bmap = bmap;
}
return(PP_Temp_View); // Gib den Pointer auf den View zurück
}
int PP_Remove(MATERIAL* Material,VIEW* View,VIEW* StageView) // Entferne einen Effekt von einer View Stage Kette
{
PP_Temp_View = View; // Finde den View mit dem übergebenen Material oder StageView und den vorherigen View
while(PP_Temp_View.material != Material && ((StageView == NULL)+(PP_Temp_View.stage != NULL)) != 0)
{
View = PP_Temp_View;
PP_Temp_View = PP_Temp_View.stage;
if(PP_Temp_View == NULL){return(1);} // Wenn der View nicht existiert, gib 1 zurück
}
View.stage = PP_Temp_View.stage; // Verbinde den View Stage mit dem Vorherigen
View.bmap = PP_Temp_View.bmap; // Setze rendertarget auf die vorherigen Bmap
PP_Temp_View.bmap = NULL; // Resette die Bmap des View`s auf null
ptr_remove(PP_Temp_View); // Entferne den View
return(0); // Gib 0 zurück wenn alles funktioniert hat
}
...
MATERIAL* mtl_Dof = {effect = dof_PP.fx;}
MATERIAL* mtl_Blur_dof = {effect = blur_dof_PP.fx;}
...
PP_Add(mtl_Blur_dof,camera,NULL);
PP_Add(mtl_Dof,camera,NULL);
...