IShaderSystem* myShaderSystem;
...

// Shader aus einer Datei laden
IShader* myShader = myShaderSystem->LoadShader("MeinShader", "C:/MeineShader/Shader.hlsl");

/*
Shader auf Fehler prüfen.
Sollte myShader nicht belegt worden sein so liegt eine Fehlerquelle 
meist am Shadernamen selbst, dieser sollte einzigartig sein.
*/
if (myShader == NULL)
	Fehler("Shader nicht geladen!");

// Shaderinterne Fehler können einfach abgerufen werden mit Hilfe von get_ShaderErrors()
else if (!myShader->isValid())
	Fehler(myShader->get_ShaderErrors());

...
// Shader entfernen
if (!myShaderSystem->RemoveShader(myShader))
	Fehler("Shader existierte nicht!");

// Die Benutzung des Shaders zur Laufzeit ist denkbar einfach aber dennoch Flexibel.
// Hier ist ein Beispielausschnitt für einen relativ simplen Renderablauf, welcher dennoch alle Möglichkeiten ausschöpft:

// Anzahl Passes sammeln
unsigned int Passes = myShader->get_PassCount();
// Benutzung des Shaders starten
myShader->Begin();
for(int CurrentPass = 0; CurrentPass<Passes; ++CurrentPass)
{
	RenderPassReturnValue::Enumeration ReturnValue;
	do
	{
		// einen Pass aktivieren (mehrfache Aktivierung ohne Deaktivierung hat keine Probleme zur Folge)
		ReturnValue = myShader->BeginPass(CurrentPass);
		// Modell rendern
		if (ReturnValue != RenderPassReturnValue::RenderAndCallNot)
			Mesh->Render();
	} while(ReturnValue == RenderPassReturnValue::RenderAndCallAgain);
	// den Pass wieder deaktivieren
	mySimpleShader->EndPass(); 
}
// Benutzung des Shaders wieder beenden 
myShader->End(); 