C# & OpenGL - 01 - Einführung

Einführung

Um OpenGL in C# nutzen zu können benötigen wir eine passende Bibliothek, die als Wrapper für die OpenGL Libraries fungiert. Im laufe der Zeit haben sich verschiedene Gruppen und Personen an diese Aufgabe gewagt (CsGL, Tao, glgen). Die Tao Bindings werden mitlerweile in dem mono CVS geführt, daher werden wir uns hier darauf konzentrieren.

Tao bietet Bindings für mehrere Libraries:
Tao.OpenAl - Für die OpenAL Audio Library
Tao.Cg - Für die OpenGL Shader Sprache CG
Tao.DevIl - Für die DevIL Image Library
Tao.Glut - Für Glut
Tao.Sdl - Für die SDL
Tao.OpenGl - Und natürlich unsere OpenGL Library

Tao benutzen

Die Offizielle Webseite von Tao findet sich unter TaoFramework.com. Leider ist dort schon seit langer Zeit ein Platzhalter. Der Library Download auf der Webseite funktioniert Problemlos unter Windows mit Visual.Net versagt aber bei mono und Linux, wegen Problemen mit dem Library Entry Point. Ebenso ist die Version dort wohl nicht mehr sehr aktuell, daher werden wir uns eine eigene Plattformunabhänige Library aus den Sourcen bauen.

UPDATE: Die neue Webseite ist jetzt online und in Kürze sollen fertige Librarys zum Download verfügbar sein.

CVS Download

Zuerst müssen wir uns die Sources aus dem CVS Repository holen:

export CVSROOT=:pserver:anonymous@anoncvs.go-mono.com:/mono
cvs login
cvs -z3 co tao

Wer keinen Linux CVS zur Hand hat kann sich einen unter den zahlreichen Windows Clients aussuchen.

Kompilieren

Ganz wichtig ist das wir den Sourcecode mit mono bauen und nicht mit Visual.net
Die Librarys lassen sich alle nach dem gleichen Muster kompilieren, exemplarisch werde ich das hier anhand der OpenGL Library zeigen.

Der Code befindet sich in "tao/Framework/Projects/Tao.OpenGl"

Compiliert wird er mit:

mcs -t:library -out:Tao.OpenGl.dll -d:LINUX /clscheck- -unsafe *.cs

Sollte ein Fehler der Art:

Gl.cs(33) error CS0579: Duplicate 'CLSCompliantAttribute' attribute

auftreten muss die Reihe 33 auskommentiert werden.

Probleme mit Windows DLL Namen

Es gibt zwei Wege die Probleme mit den Windows DLLs (opengl32.dll, ...) in Linux zu umgehen.

Der harte Weg

Vor dem Kompilieren müssen alle vorkommen der DLLs angepasst werden.

Der Config Weg

In der Datei "/etc/mono/config" werden folgende Einträge angelegt:

<dllmap dll="opengl32.dll" target="libGL.so"></dllmap>
<dllmap dll="glu32.dll" target="libGLU.so"></dllmap>
<dllmap dll="devil.dll" target="libIL.so"></dllmap>
<dllmap dll="ilu.dll" target="libILU.so"></dllmap>