Just found an old project directory on my hdd. There was a small 3DGS-App: The Mandelbrot sample ported to a postprocessing shader for navigating in realtime over the set.

I created this long ago as I started to learn coding shaders:


The code:
Code:
#include <acknex.h>
#include "PP_Helper.c"

float m_x = -2.7,
	m_y = -1.5,
	m_width = 4.0;
var fps=0;
var screenshotcounter=0, locked=0;

MATERIAL* mat =
{
	effect="
float4 vecSkill1;
float4 vecViewPort;
float m_x_flt, m_y_flt, m_width_flt;

float4 JetColor(float v) 
{
	float d = 25.0;
	v = v/d + 0.5;
	int i = (int)v;
	int f = (int)(255*(v-i));
	int r=0, g=0, b=0;

	switch(i){
		case 0: r=0;    g=0;    b=f;    break;
		case 1: r=0;    g=f;    b=255;  break;
		case 2: r=f;    g=255;  b=255-f;break;
		case 3: r=255;  g=255-f;b=0;    break;
		case 4: r=255-f;g=0;    b=0;    break;
	}
	return float4(r/255.0,g/255.0,b/255.0,1.0);
}

float4 Shader(float2 tex : TEXCOORD0) : COLOR
{
	float m_x = m_x_flt,
	m_y = m_y_flt,
	m_width = m_width_flt;
	int w =0, h=0;
	
	int i,j;
	int times,inset;
	float x,y,zx,zy,zxs,zys;
	float4 Color = 0;
	
	w = (int)vecViewPort.x;
	h = (int)vecViewPort.y;
	
	i=tex.x*w;
	j=tex.y*h;
	
	x = m_x+((float)i)*m_width/w;
	y = m_y+((float)(h-j))*m_width/w;
	zx = 0.0;
	zy = 0.0;
	inset = 1;
	times = 0;
	while(inset && times<130)
	{
		times++;
		zxs = zx*zx;
		zys = zy*zy;
		zy = 2*zx*zy+y;
		zx = zxs-zys+x;
		
		if (zxs+zys >= 4.0) inset=0;
	}
		
	if(inset)
		Color=0;
	else
		Color= JetColor(times); 			
	
	return Color;
}

technique tech_00
{
	pass pass_00
	{
		VertexShader = null;
		PixelShader = compile ps_3_0 Shader();
	}
}
	";
}

PANEL* info = 
{
	digits(10,10,"FPS: %5.1f","Arial#18bi",16,fps);
	digits(10,30,"[Esc] Exit","Arial#14",1,0);
	digits(10,45,"[F1] 800x600 (Window)","Arial#14",1,0);
	digits(10,60,"[F2] 1024x768 (Window)","Arial#14",1,0);
	digits(10,75,"[F3] 1280x800 (Fullscreen)","Arial#14",1,0);
	digits(10,90,"[F4] 1440x900 (Fullscreen)","Arial#14",1,0);
	digits(10,105,"[F5] 1920x1080 (Fullscreen)","Arial#14",1,0);
	digits(10,120,"[F6] Screenshot","Arial#14",1,0);
	digits(10,135,"[F7] Back to Start","Arial#14",1,0);
	flags = SHOW;
}

void exit_mandel()
{
	sys_exit(NULL);
}

void keyaction(var taste)
{
	if(taste==64 && !locked) //F6 - screenshot
	{
		locked=1;
		BMAP* shot = bmap_createblack(screen_size.x,screen_size.y,24);
		toggle(info,SHOW);
		wait(1);
		bmap_for_screen(shot,1,0);
		wait(1);
		toggle(info,SHOW);
		bmap_save(shot,str_printf(NULL,"screenshot%d.png",(int)screenshotcounter));
		screenshotcounter++;
		locked=0;
		return;
	}
	
	if(taste==65)
	{
		m_width = 4.0;
		m_x = -2.7;
		m_y = -1.5;
	}
	
	//change resolution
	if(taste<59 || taste>63)
		return;
		
	int mode=7, screen=1;
	switch(taste)
	{
		case 59:
			screen=2;
			break;
		case 60:
			mode=8;
			screen=2;
			break;
		case 61:
			mode=9;
			break;
		case 62:
			mode=10;
			break;
		case 63:
			mode=12;
			break;
	}
	video_switch(mode,0,screen);
}

void main()
{
	video_window(NULL,NULL,0,"MandelView V1.3");
	level_load(NULL);
	PP_Add(mat, camera, NULL);
	
	mat.skill1=floatv(m_x);
	mat.skill2=floatv(m_y);
	mat.skill3=floatv(m_width);
	on_esc = exit_mandel;
	on_anykey = keyaction;
}

float saturate(float f)
{
	if(f>0)		
		return 1.0;	
	if(f<0)	
		return -1.0;
	return 0.0;
}

void zoom_startup()
{
	while(1)
	{
		fps = 0.9*fps+0.1/time_frame;
		
		if(mickey.x!=0||mickey.y!=0||mickey.z!=0 && !locked)
		{
			m_x += m_width*(float)mickey.x*(float)0.001;
			m_y -= m_width*(float)mickey.y*(float)0.001;
			m_width -= m_width*0.03*saturate(mickey.z);
		}
		wait(1);
	}
}



YouŽll also need SlinŽs PP_Helper.c:
Code:
//////////////////////////////////////////////////
//////////Postprocessing Helperfunctions//////////
//////////////////////////////////////////////////
////08.03.2008////////////////by Nils Daumann/////
/////////////slindev.wordpress.com////////////////
//////////////////////////////////////////////////


//temporary pointers
VIEW* PP_Temp_View;


//Add an effect to a views stage chain
VIEW* PP_Add(MATERIAL* Material,VIEW* View,BMAP* bmap)
{
	//find the last view of "View"s effectchain and store its pointer
	PP_Temp_View = View;
	while(PP_Temp_View.stage != NULL)
	{
		PP_Temp_View = PP_Temp_View.stage;
	}
	
	//create a new view as the stored views stage
	PP_Temp_View.stage = view_create(0);
	set(PP_Temp_View.stage,PROCESS_TARGET);
	
	//assign "Material" to the just created view
	PP_Temp_View = PP_Temp_View.stage;
	PP_Temp_View.material = Material;
	
	//if a bmap is given, render the view into it
	if(bmap != NULL)
	{
		PP_Temp_View.bmap = bmap;
	}
	
	//return the pointer to the new view
	return(PP_Temp_View);
}


//remove an effect from a views stage chain
int PP_Remove(MATERIAL* Material,VIEW* View,VIEW* StageView)
{
	//find the view with the material selected or "StageView" and the previous view
	PP_Temp_View = 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;
		
		//return one if the stage doesnŽt exist
		if(PP_Temp_View == NULL){return(1);}
	}
	
	//pass the views stage to the previous view
	View.stage = PP_Temp_View.stage;
	
	//pass the render target
	View.bmap = PP_Temp_View.bmap;
	
	//reset the views bmap to null
	PP_Temp_View.bmap = NULL;
	
	//remove the view
	ptr_remove(PP_Temp_View);
	
	//return null if everything worked
	return(0);
}


//remove all postprocessing from the view
void PP_Remove_All(VIEW* View)
{
	if(View.stage == NULL){return;}
	PP_Temp_View = View.stage;
	View.stage = NULL;
	View.bmap = NULL;
	while(PP_Temp_View.stage != NULL)
	{
		View = PP_Temp_View;
		PP_Temp_View = View.stage;
		
		//pass the views stage to the previous view
		View.stage = NULL;
		
		//reset the views bmap to null
		View.bmap = NULL;
		
		//remove the view
		ptr_remove(View);
	}
}


//returns the pointer to the viewchains last view
VIEW* PP_LastView(VIEW* View)
{
	//find the last view of "View"s effectchain and store its pointer
	PP_Temp_View = View;
	while(PP_Temp_View.stage != NULL)
	{
		PP_Temp_View = PP_Temp_View.stage;
	}
	
	//return the pointer
	return(PP_Temp_View);
}



Of course, GameStudio Com or Pro is needed in order to run it.
For the others I want to provide compiled binaries. Download