Betreff des Beitrags: OpenGL Header (letzte Aktualisierung : siehe Wiki)
Verfasst: Di Sep 09, 2003 15:26
DGL Member
Registriert: Mo Sep 23, 2002 20:27 Beiträge: 5044
Die aktuelle Version und das aktuelle Changelog findet man im Wiki. siehe dglOpenGL.pas
Der Header wurde so ausgelegt, das ein Umstieg von z.B. Mike Lischkes OpenGL12.pas einfach fallen sollte, denn er enthält sowohl die dort verwendeten Datentypen (z.b. TGLFloat), also auch selbige ohne vorangestelltes "T".Darüberhinaus beherbergt diese Unit auch die an Mike Lischkes Unit angelehnten Helferfunktionen wie z.B. CreateRenderContext und ActivateRendercontext (ersteres mit leicht veränderter Parameteranzahl).
Und auch euer Feedback wurde erhöhrt, und die Probleme mit der bisherigen Unit sollten allesamt behoben sein, auch fehlende Extensions bzw. Konstanten wurden hinzugefügt.
Viel Spaß also mit der neuen Unit, die ihr jetzt getrost als Ersatz für die Unit von ML nutzen könnt (hab meinen Basecode auch schon komplett umgestellt).Aber vergesst bitte nicht, das wir immernoch auf euer Feedback angewiesen sind, weshalb ihr etwaige Probleme oder fehlende Dinge hier posten solltet.
Da dieses Thema lange vernachlässigt wurde werde ich es mal wieder auf den neusten Stand der Dinge bringen.
DOWNLOADLINK am Ende des Beitrags.
Versionsgeschichte :
Update auf Version 1.2 (19.11.2003) : Nachdem ich beim Schreiben ner 3D-Texturendemo bemerkt habe, das u.a. die Funktion glTexImage3D nicht funktioniert (=NIL ist), glTexImage3DEXT aber schon, wurde der Header wieder aktualisiert. Jetzt sollten endgültig alle von einer Karte unterstützten Extension egal ob in der Coreversion oder als ARB/EXT funktionieren. Kleiner Nachtrag : Danks SchodMCs Tipp müssen Nutzer von Delphi 6 oder älter nix mehr an der Unit ändern, da nun automatisch über IFDEFS zwischen RaiseLastOSError und RaiseLastWin32Error unterschieden wird.
Update auf Version 1.3 (01.12.2003) : Dank Mars Hilfe lädt der Header auch beim erneuten Aufruf von ReadImplementationProperties die beim ersten Mal übergebenen Libraries und releast dieses auch ordnungsgemäß via FreeLibrary. Ausserdem ist noch eine recht detaillierte (englische) Readme in HTML-Form dazugekommen, die bitte vor der Nutzung gelesen werden sollte.
Update auf Version 1.3a (25.12.2003) : Aufgrund einer nicht ganz konformen Deklaration einiger für glSlang-Funktionen benötigter Typen gab es bisher z.B. beim feststellen der Position eines Uniformparameters im Shader Probleme, das wurde geändert und eine neue Headerversion wurde hochgeladen.
Update auf Version 1.3b (28.01.2004) : Die Extension GL_ARB_Shader_Objects wird nun korrekt geladen.
Update auf Version 1.3c (12.02.2004) : Mars hat im Zuge besserer GL1.5-Konformität die GL_FOG_COORD_xxx-Konstanten und ARB-lose VBO und Occlusion-Query-Konstanten und Routinen hinzugefügt.
Fixes vom 07.05.2004 : Arno hat sowohl ein IfDef eingefügt, sodass man an der Unit nichts ändern muss wenn sie unter D5 kompiliert wird, als auch die Sache mit den Zeilenumbrüchen unter D5 gefixt.
Update auf Version 1.4 (26.06.2004) : Header an die neuen glSlang-Spezifikationen (v1.10) angepasst : Konstanten GL_SAMPLER_*, GL_SHADING_LANGUAGE_VERSION_ARB, GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB hinzugefügt.
Update auf Version 1.4a (17.07.2004) : Fehlendes stdcall bei Funktionsdeklaration von glBindAttribLocationARB (glSlang) eingefügt-
Update auf Version 1.4b (03.09.2004) : Die von Mars angedeuteten Deklarationsänderungen bzgl. glCompileShaderARB (nun Prozedur statt Funktion) und glUniform*(i/f)v (fehlenden Parameter count hinzugefügt).
Update auf Version 1.5 (21.10.2004) : Dank an dieser Stelle geht an Benjamin Rosseaux, der den aktuellen Header so erweitert hat dass dieser auch mit FreePascal genutzt werden kann. Da diese Änderungen über ifdefs laufen und an der Funktionalität unter Delphi nichts ändern gibt es jetzt einen einzigen Header der sowohl unter Delphi als auch FreePascal funktioniert. Ausserdem habe ich den von Noeska angesprochenen fehlenden Datentyp TGLVector3f/TGLVectorf3 eingefügt.
Update auf Version 1.6 : Extension GL_EXT_framebuffer_object wurde implementiert.
Update auf Version 1.8 : Umstellung des Headers für die Unterstützung von .NET
Update auf Version 2.0 (16.12.2005) : Hinzufügen des OpenGL 2.0 Kerns Einige Imkompatibilitäten die aus der Umstellug für .NET resultierten wurden entfernt. Folgende Extensions wurden implementiert. - WGL_ARB_pixel_format_float - Added Extension GL_EXT_stencil_clear_tag - Added Extension GL_EXT_texture_rectangle - Added Extension GL_EXT_texture_edge_clamp
Update auf Version 2.0.1 : Es wurden kleiner Fehler an folgenden Funktionen behoben.
glGetActiveAttrib aus dem 2.0 Kern
gluProject
gluUnProject
gluTessVertex
gluLoadSamplingMatrices
Update auf Version 2.1 (20.02.2007) : - Keine .NET Unterstützung mehr - Besser Unterstützung für Linux (nun sollten alle Funktionen geladen werden) - Der Quellcode ist besser formatiert - Es gibt zusätzliche Matrix/Vector Typen (nicht nur die von OpenGL geforderten) - OpenGL in der Kernversion 2.1 implementiert - Geforce8 Extension
GL_ARB_fragment_program_shadow
GL_ARB_draw_buffers
GL_ARB_texture_rectangle
GL_ARB_color_buffer_float
GL_ARB_half_float_pixel
GL_ARB_texture_float
GL_ARB_pixel_buffer_object
GL_EXT_depth_bounds_test
GL_EXT_texture_mirror_clamp
GL_EXT_blend_equation_separate
GL_EXT_pixel_buffer_object
GL_EXT_texture_compression_dxt1
GL_NV_fragment_program_option
GL_NV_fragment_program2
GL_NV_vertex_program2_option
GL_NV_vertex_program3
Update auf Version 2.1 (09.04.2009): Es wurde eine generelle Strukturänderung durchgeführt. Wichtigste Änderung: .Net Version wurde in einen eigenen Header verlegt. Siehe Newsbeitrag. Änderungen dglOpenGL / dglOpenGL mit .NET
Es wurden kleiner Fehler an folgenden Funktionen behoben.
glGetActiveAttrib aus dem 2.0 Kern
gluProject
gluUnProject
gluTessVertex
gluLoadSamplingMatrices
Änderungen dglOpenGL
Keine .NET Unterstützung mehr
Besser Unterstützung für Linux (nun sollten alle Funktionen geladen werden)
Der Quellcode ist besser formatiert
Es gibt zusätzliche Matrix/Vector Typen (nicht nur die von OpenGL geforderten)
OpenGL in der Kernversion 2.1 implementiert
Neue Erweiterungen (mit Geforce8)
GL_ARB_fragment_program_shadow
GL_ARB_draw_buffers
GL_ARB_texture_rectangle
GL_ARB_color_buffer_float
GL_ARB_half_float_pixel
GL_ARB_texture_float
GL_ARB_pixel_buffer_object
GL_EXT_depth_bounds_test
GL_EXT_texture_mirror_clamp
GL_EXT_blend_equation_separate
GL_EXT_pixel_buffer_object
GL_EXT_texture_compression_dxt1
GL_NV_fragment_program_option
GL_NV_fragment_program2
GL_NV_vertex_program2_option
GL_NV_vertex_program3
WICHTIG!! Nach dem Erstellen des Renderkontex muss dieser entweder mit ActivateRenderingContext aktiviert werden oder aber es muss ReadExtensions und ReadImplementationProperties manuell aufgerufen werden. Mit dem Ausbau von .NET wurde eine Technik entfernt die die Pointer einzelner Methoden automatisch nachlädt. Dies muss jetzt manuell erledigt werden!!! Solltet ihr Zugriffsverletzungen an Adresse 0x00000000 bekommen wo vorher keine waren. Überprüft das.
Update auf Version 3.0 (03.01.2009):
Anpassungen an den Konstanten von GL_EXT_texture_shared_exponent
Möglicherweise eine bessere Unterstützung für Mac
Mithilfe des Defines DGL_TINY_HEADER ist es möglich das automatische Laden von Funktionspointer bzw das überprüfen der Erweiterungen zu deaktivieren. Nähere Details zu deren Benutzung sind im Header zu finden.
OpenGL in der Kernversion 3.0 implementiert
Neue Erweiterungen
GL_ARB_depth_buffer_float
GL_ARB_draw_instanced
GL_ARB_framebuffer_object
GL_ARB_framebuffer_sRGB
GL_ARB_geometry_shader4
GL_ARB_half_float_vertex
GL_ARB_instanced_arrays
GL_ARB_map_buffer_range
GL_ARB_texture_buffer_object
GL_ARB_texture_compression_rgtc
GL_ARB_texture_rg
GL_ARB_vertex_array_object
GL_NV_conditional_render
GL_NV_present_video
GL_EXT_transform_feedback
GL_EXT_direct_state_access
GL_EXT_vertex_array_bgra
GL_EXT_texture_swizzle
GL_NV_explicit_multisample
GL_NV_transform_feedback2
WGL_ARB_create_context
WGL_NV_present_video
WGL_NV_video_out
WGL_NV_swap_group
WGL_NV_gpu_affinity
Um einen reinen OpenGL 3.0 Kontext benutzen zu können muss man allerdings selber ein bisschen Hand anlegen. Dazu existiert die Erweiterung WGL_ARB_create_context. Der Header versucht also nicht selbsttätig einen reinen OpenGL 3.0 Kontext zu erstellen. Unter Linux gibt es aktuell noch keine Möglichkeit einen 3.0 Kontext zu erstellen. Ich hatte zwar vor ein paar Tagen eine entsprechende Erweiterung gefunden. Diese wurde aber noch nicht in den Header übernommen. Was wohl auch nicht ganz so einfach werden dürfte.
Update auf Version 3.2 (12.09.2009):
OpenGL 3.1 Kern wurde hinzugefügt
OpenGL 3.2 Kern wurde hinzugefügt
GLX Kern bis Version 1.4 wurde hinzugefügt. Damit ist es dann mit der dglOpenGL unter Linux (mac?) möglich einen Kontext per Hand erstellen zu können. Mit den Erweiterungen GLX_ARB_create_context und GLX_ARB_create_context_profile dann auch einen 3.0 Kontext.
Das Define DGL_DEPRECATED wurde hinzugefügt. Das Define ist per default aktiv und aktiviert die als deprecated markierten Methoden und Konstanten im OpenGL Kern. Auf alle anderen Erweiterungen hat das keinen Einfluss. Für Ideen bin ich jederzeit offen. Und ja. Ich habs im Endeffekt doch so gemacht, denn im Header von opengl.org werden ältere Version gelegentlich mal aktualisiert und dass müsste dann auch mit seperaten Headern von unserer Seite gemacht werden. Und da bin ich zu faul für.
Der Header sollte jetzt 64 Bit kompatibel sein. Hatte es unter Fedora 11 32 Bit /64 Bit und Windows XP 32 Bit / 64 Bit getestet. Allerdings alles in der Virtual Box.
Der Header ist Delphi 2009 und 2010 kompatibel
Die Erkennung von Delphi wurde verändert. Zukünftige Versionen von Delphi müssen nicht mehr nachgepflegt werden, da jetzt speziell auf "problematische" Versionen geprüft wird. Wer auch immer sich das ausgedacht hatte, dass es wirklich alle andersrum machen. Danke...
verschiedenen Erweiterungen (GL_VERSION_3_0, GL_ARB_map_buffer_range, GL_NV_present_video, GL_ARB_instanced_arrays) wurden aktualisiert (auch der Header von opengl.org ist nicht perfekt).
Neue Erweiterungen
GL_ATI_meminfo
GL_AMD_performance_monitor
GL_AMD_texture_texture4
GL_AMD_vertex_shader_tesselator
GL_AMD_draw_buffers_blend
GL_ARB_uniform_buffer_object
GL_ARB_compatibility
GL_ARB_copy_buffer
GL_ARB_shader_texture_lod
GL_ARB_depth_clamp
GL_ARB_draw_elements_base_vertex
GL_ARB_fragment_coord_conventions
GL_ARB_provoking_vertex
GL_ARB_seamless_cube_map
GL_ARB_sync
GL_ARB_texture_multisample
GL_ARB_vertex_array_bgra
GL_ARB_draw_buffers_blend
GL_ARB_sample_shading
GL_ARB_texture_cube_map_array
GL_ARB_texture_gather
GL_ARB_texture_query_lod
GL_EXT_provoking_vertex
GL_EXT_texture_snorm
GL_APPLE_texture_range
GL_APPLE_float_pixels
GL_APPLE_vertex_program_evaluators
GL_APPLE_aux_depth_stencil
GL_APPLE_object_purgeable
GL_APPLE_row_bytes
WGL_ARB_create_context_profile
WGL_AMD_gpu_association
WGL_3DL_stereo_control
GLX_ARB_multisample
GLX_ARB_fbconfig_float
GLX_ARB_get_proc_address
GLX_ARB_create_context
GLX_ARB_create_context_profile
GLX_EXT_visual_info
GLX_EXT_visual_rating
GLX_EXT_import_context
GLX_EXT_fbconfig_packed_float
GLX_EXT_framebuffer_sRGB
GLX_EXT_texture_from_pixmap
Update auf Version 3.2.2 (16.12.2009):
Die Variablen der Extension GL_EXT_texture_snorm und GL_APPLE_row_bytes wurden vergessen mit Leben zu befüllen. Selbst wenn die Erweiterungen unterstützt wurden waren die Variablen immer false. Das wurde behoben.
Die Erweiterung, die im letzten opengl.org Header noch WGL_NV_video_out hieß heißt jetzt WGL_NV_video_output.
TMatrix4d und TVector4i. Fragt mich bitte nicht, ob der Fehler bei mir liegt. Aber direkt nach der Umstellung hat mich mein Compi damit vollgemault.
Die heissen in unserer Unit momentan noch anders.Wird aber im nächsten Release gefixt.
Alzheimer hat geschrieben:
Des weiteren fehlt die Funktion LoadOpenGL
Die fehlt nicht.Das heisst in unserer Unit InitOpenGL, und mittels glReadExtensions lädst du nach dem Initialisieren des Renderkontextes die Extensions.
Kompliment an alle Beteiligten! Die neue dglOpenGL ist sehr umfangreich und dabei auch noch übersichtlich. Sämtliche Extensions sind mit Kommentaren im Code abgetrennt - da steckt viel Arbeit drin, wie ich auch aus eigener Erfahrung beurteilen kann.
Das Kompilieren von mit Mcad erstellten Ogl Projekten funktioniert mit Hilfe einer kleinen Hilfsunit einwandfrei, allerdings ist folgende Glu- Funktion nicht implementiert:
die gibt es in der mit Windows gelieferten glu32.dll zwar auch nicht, alternative glu Versionen (ich glaube ab 1.3, bin mir aber nicht sicher), stellen diese aber sehr wohl zur Verfügung (z.B. MesaGLU), obwohl es bei Verwendung von nicht in glu32.dll implementierten Funktionen (zumindest unter Windows) ohnehin eine gute Idee ist, erst mal festzustellen, ob diese überhaupt funktionieren.
Der Source von dglOpenGL ist schön und übersichtlich formatiert, allerdings schaut es so aus, als ob zwei unterschiedliche Formatierungsarten (mit den Einrückungen) zur Anwendung gekommen wären - das Tüpfelchen auf dem i wäre noch, wenn das vereinheitlicht werden könnte.
Was mich bereits bei Lischkes OpenGL12.pas ein wenig gestört hat, sind die vielen ifdefs um Delphi und Kylix gleichermassen zu unterstützen. Während das Unterfangen zwar höchst löblich ist, funktionieren die ganzen Supportroutinen ja ohnehin nur unter Windows, weswegen man die ganzen OpenGL Einsprungpunkte direkt als stdcall definieren könnte.
Die ganzen stdcalls dann bei einer eventuellen Linuxversion (mit eigenen Supportroutinen!) dann durch cdecl zu ersetzen, wäre dank "Suchen und Ersetzen" dann eine Sache von Sekunden - und der Code würde noch etwas übersichtlicher werden.
Was man sich evtl. dann noch überlegen könnte, wäre eine einheitliche Schnittstelle zu Win32 und Linux Systemen, aber das ist, glaube ich, noch ein wenig Zukunftsmusik.
Ansonsten finde ich wirklich nichts mehr zu meckern (und das Angeführte sind ja auch nur Kleinigkeiten) - ich denke hier wurde Delphi OpenGL Programmierern ein großer Dienst erwiesen.
Erstmal danke für das positive Feedback, sowas sieht man gerne , und es freut mich das der neue Header auch bei dir ohne größere Probleme funzt.
@ gluBuild3DMipmaps : Danke für den Hinweis, die Funktion war mir bisher sogar völlig unbekannt.Wird aber auf jeden Fall beim nächsten Headerupdate implementiert.
@ Formatierung & ifdefs : Wird zur Kenntniss genommen, und im nächsten Release wird da was getan.Ursprünglich sollte der Header auch für Linux nutzbar sein, weshalb da die ganzen ifdefs drin.Allerdings gings uns zuerst mal um eine frühe Veröffentlichung, da es nicht unwahrscheinlich gewesen wäre wenn es GL1.5 bereits in die Catalyst 3.7-Treibern geschafft hätte (dem war leider nicht so).
P.S. : Evtl. für alle NVida-Anhänger ist folgender Thread interessant, denn anscheinend haben NVidia ihrem "wir-cheaten bis zum Umfallen"-Treiber (ich kanns mir leider ned verkneifen...) bereits (zumindest teilweise) OpenGL1.5-Funktionalität drin.
Zu PPointer : Wie der Name vermuten lässt, ist PPointer ein Pointer auf einen Pointer.In Delphi 7 ist dieser Datentyp in der Systems.pas definiert,in älteren Versionen anscheinend nicht.Öffene einfach die dglOpenGL.pas und füge bei den vorhandenen Typendeklaratioenen einfach folgendes ein :
[pascal]
PPointer:^Pointer
[/pascal]
Zu RaiseLastOSError : Komisch das es hier Probleme gibt,denn D5 sollte diese Funktion kennen.Such mal danach in der Hilfe und guck mal (wenns vorhanden ist) in welcher Unit dieses Funktion abgelegt ist und binde diese mal in die dglOpenGL.pas über uses ein.
Unter Delphi 5 heißt der noch RaiseLastWin32Error - erst ab Delphi 6 gabs dann ja Parallelversionen von Delphi und Kylix und dann hat man halt auch die Funktion "betriebssystemunabhängig" gemacht.
RaiseLastWin32Error funktioniert allerdings auch noch in Delphi 6 und 7, läuft dort aber als "veraltete" Funktion - ich denke aber für dglOpenGL ist es sauberer RaiseLastOSError beizubehalten und evtl. einen Kommentar für ältere Delphiversionen (5 und älter) im Header einzufügen, die Prozedurnamen auszutauschen.
Den PPointer könnte man aber auf jeden Fall hinzufügen, folgende Datentypen könnte man noch an die OpenGL Nomenklatur anpassen, welche die Elementgröße (b, f, d u.s.w.) als letztes angibt:
Code:
TGLArrayf4 = array [0..3] of TGLFloat;
TGLArrayf3 = array [0..2] of TGLFloat;
TGLArrayd3 = array [0..2] of TGLDouble;
TGLArrayi4 = array [0..3] of TGLint;
TGLArrayp4 = array [0..3] of Pointer;
TGLMatrixf4 = array[0..3, 0..3] of Single;
TGLMatrixd4 = array[0..3, 0..3] of Double;
Eventuell wäre es auch zu überlegen, für diese Datentypen, sowie für die GLU-Datentypen ebenfalls "T"-lose Versionen anzulegen. Irgendwie hat Lischke mit seinem "T" da mehr Verwirrung gestiftet, als schöneren Code erzeugt
@ RaiseLastWin32Error :
Danke für den Hinweis mit RaiseLastWin32Error (wusste doch das da noch sowas war),ich werd das dann mal in den Kommentaren des Headers anmerken.
@ Datentypen :
Wurde auch zur Kenntnis genommen und wird auch im nächsten Headerupdate berücksichtig.
@Mike Lischkes "T" :
Sehe ich genauso.Borland sagt zwar man solle seine eigenen Typen mit einem "T" beginnen,allerdings finde ich sowas bei ner Headerkonvertierung nur suboptimal.glFloat wäre mir auch lieber als TGLFloat und würde dann ja letztendlich auch dem Original entsprechen.Allerdings würde dies eine Migration von MLs Header auf unseren verkomplizieren.
Hab grade die alte Version durch die aktualisierte ersetzt.Folgende Neuerungen sind jetzt enthalten :
# PPointer deklariert (Kompatibilitätmit Delphi <7)
# Eigene Prozedur RaiseLastOSError+Kommentat (Kompatibilität mit Delphi <7)
# Die von Mars vorgeschlagenen Datentypen mit GL-Syntax eingefügt
Da das alles keine großen Änderungen waren,hab ich die neue Unit nur mit meinem aktuellen Projekt getestet und dort machte sie keine Probleme.Falls es dennoch irgendwo zu Problemen kommen sollte,dann bitte hier im Thread melden.
0,5: Zeile 8225 -> 2 Zuweisungen stehen in einer Zeile. Eigentlich kein bug, jedoch "unschön". Stört aber nicht. Hab's nur der Vollständigkeit halber erwähnt.
Der andere iss wirklich ein Bug:
Zeile 8263 -> Auch hier sind mehrere Zuweisungs-Befehle in einer Zeile. Wäre ja nur halb so schlimm, wenn am Anfang der Zeile nicht ein //-Kommentar wäre. Somit werden die nachfolgendne Befehle einfach auskommentiert. Betroffen sind die Funktionen von ARB_Vertex_Shader und ARB_Occlusion_Query (glGetActiveAttribARB, glGetAttribLocationARB, glBindAttribLocationARB, glGetVertexAttribPointervARB, glGenQueriesARB und glDeleteQueriesARB).
Ich schätz' mal, dass es sich um die 1.5 Funktionen handelt und diese noch nicht getestet werden konnten. (Das Auskommentieren könnte ja dann auch absicht sein; keine Ahnung). Wollte es ebenfalls nur mal mitteilen.
_________________ Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?
Sicher das du den selben Header hast wie er hier angeboten wird?Hab grad nochmal nachgesehen, und bei mir sind die angesprochenen Zeilen und angeblich auskommentierten Funktionen allesamt da...sicher das du den Header hier aus dem Thread hast und nicht aus der DL-Sektion?
Eigentlich ist bei der Version aus der DL-Sektion auch alles drinnen - obwohl es dennoch Sinn machen würde, beide Versionen abzugleichen.
Kann es sein, dass du evtl. eine ältere Delphiversion verwendest ? Meines Wissens hatte Delphi (ich glaube bis Version 6 oder so) Probleme mit "Linux" Zeilenumbrüchen (also CR anstelle von CRLF).
Hab da auch schon meine Gaudi gehabt, als ich einen C++ Source nach Delphi konvertierte und dann lauter Fehlermeldungen a'la Zeile zu lang (obwohl in der betreffenden Zeile gar nichts stand) bekam, oder (noch lustiger) das Programm beim Tracen völlig falsche Zeilen anzeigte und die diversen Meldungen den Ort eines Fehlers bestenfalls ungefähr erahnen ließen.
Abhilfe schafft, den ganzen Source in Notepad zu laden und nochmal abzuspeichern - am besten lädst du das Ganze vorher nochmal runter, für den Fall, dass sich in deinem Source inzwischen andere Fehler eingeschlichen haben.
Sollte dies tatsächlich der Fehler gewesen sein, sollte man aber unbedingt drauf achten eine "Alt-Delphikompatible" Version hochzuladen.
Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.