Damit sich wenigstens was bewegt

Okay, das ist eine solide QuelleMathias hat geschrieben: Di 4. Jun 2024, 21:19 https://github.com/sechshelme/Lazarus-G ... master/DLL
Hier solltest du alles finden. Ich habe diese alle von GIMP.
Nimmst einfach die fehlenden raus.
So musst du nicht in dubiosen Seiten suchen.
Vielen Dank für Deine umfangreiche Recherche, das hätte ich so schnell nicht hinbekommen !TSchnuckenbock hat geschrieben: Mi 5. Jun 2024, 02:13 Ich vermute, wenn du dir dortige libcairo-2.dll im Dependency-Walker öffnest, kannste sehen, welche dll du dir noch aus dieser alten Gimp-Installationen "ziehen" mußt.
Ich hab's sofort herunter geladen, und compiliert.Mathias hat geschrieben: Mi 5. Jun 2024, 08:55 Unter Linux, läuft es sehr fliessend. Unter Windows, wen man Vollbild macht, stottert es. Ob dies an meinem wine liegt ?
Dann wird es wohl an wine liegen, Es könnte sein, das echtes Windows GDI Funktionen an die GPU weiter gibt.Läuft ohne zu stottern, bei mir unter Windows 11.
Vielen Dank für die vielen Links, das wird mir bestimmt helfen.TSchnuckenbock hat geschrieben: Mi 5. Jun 2024, 20:01 Sich in OpenGL einzuarbeiten ist nicht einfach, aber man wird belohnt.
Wen du dich für 3D Programmierung interessierst, würde ich auf jedenfalls mit OpenGL 3.3 beginnen.Das heißt aus meiner Sicht daß ich mich besser auf das 3.3 Tutorial konzentrieren sollte ..
Wen du meines meinst.welchen Nutzen hat das Laz-OpenGLContext-Paket gegenüber dem zu-Fuß-programmieren ?
Von dem habe ich mich gelöst und verwende jetzt den glad, da sind alle Altlasten verschwunden. glbegin und co, geht da gar nicht mehr.Als dgl-Header habe ich den dglOpenGL-Header immer genutzt, irgendwie in Version 4.4. oder 4.5, wenn ich mich recht erinnere. Das DelphiOpenGL-Portal hatte hier ja einer schon verlinkt.
Mit FreeType beschäftige ich mich momentan auch ein wenig. Dies wäre sogar bei der LCL dabei.Für die Textsachen hatte ich damals dann einen FreeType-Header geschrieben, was ich auch zum Laufen bekommen hatte mit Text in OpenGL. Und das ganze mit dem Shader-Krams. Eben ausprobiert: Läuft immer noch (nun auf Win10-Rechner, der ein anderer ist).
Code: Alles auswählen
...
procedure TfrmMain.FormShow(Sender: TObject);
begin
Application.OnIdle := ApplicationEventsIdle;
end;
procedure TfrmMain.OpenGLInit;
begin
// OpenGL-Funtionen initialisieren (aus dem Heise-tutorial abgekupfert)
// Zuweisung der OpenGL-Funktionszeiger
// ....ansonsten gibts bei den ersten gl....-Aufrufen Zugriffsverletzungen (access violation)
fOpenGLInitialized := InitOpenGL;
if not fOpenGLInitialized then
begin
raise Exception.Create('OpenGL konnte nicht initialisiert werden!');
Application.Terminate;
end;
// DeviceContext fürs OpenGL-Panel holen
FCanvasDC := GetDc(pnlOpenGLCanvas.Handle);
if FCanvasDC = 0 then
raise Exception.Create('Device context für das Zeichen-Panel konnte nicht bestimmt werden.');
// Renderkontext erstellen (32 Bit Farbtiefe, 24 Bit Tiefenpuffer, Doublebuffering)
// Der Render-Context enthält alle nötigen Informationen,
// die eine Zeichenfläche und die zu dieser zugeordneten Ressourcen beschreiben:
// * Pixelformat
// * Abmessungen der Zeichenfläche (Höhe, Breite, Aspekt-Ratio)
// * Angaben zur Lage der Datenpuffer für Farb-, Stencil-, Tiefen- und Transparenz-Informationen
// * Statusinformationen wie die Art und Dicke zu zeichnender Linien,
// die zum Zeichnen zu verwendenden Texturen sowie andere Angaben,
// die für das Zeichnen notwendig sind.
// siehe https://wiki.delphigl.com/index.php/Renderkontext
//
// DelphiGL: Durch Anlegen des Render-Kontext werden entsprechend
// Speicherbereiche im RAM und auf der Grafikkarte reserviert.
// WICHTIG: Das Pixelformat kann für einen DeviceKontext nur EINMAL
// festgelegt werden, aber man weiss zu diesem Zeitpunkt
// ggf noch nicht, ob überhaupt die gewünschten Funktionen
// dafür zur Verfügung stehen.
// Daher kann es sinnvoll sein, zuerst in einem "unsichtbaren Fenster"
// den Rendercontext zu erzeugen um dann dort die
// Erweiterungen abfrage zu können (z.B. bei Multisampling / Antialiasing)
//
// - 32 Bit Farbtiefe => 4 Farbkanäle (Rot, Grün, Blau, Alpha (Transparenz)),
// je 8 Bit (also 1 Byte); ermöglicht 256 Abstufungen pro Farbkanal
// - 24 Bit Tiefenpuffer => Einträge von0 bis 2^24 = ca. 16,7 sind mögliche;
// je höher der Wert, desto feiner/genauer der Tiefentest.
// Der Abstand zwischen Near- und Far-ClippingZone muß sich
// muß sich diesen Bereich an Tiefenzonen teilen.
FContext := CreateRenderingContext(FCanvasDC, // Device Context
[opDoubleBuffered], // Optionen: Doublebuffering
32, // ColorBits: 32 Bit Farbtiefe
24, // ZBits / Größe des ZBuffer: 24 Bit Tiefenpuffer
0, // StencilBits (werden für den Stencil-Test benötigt)
0, // AccumBits: Anzahl Bits im Akkumulationspuffer
0, // AuxBuffers: Anzahl Bits im Hilfspuffer
0); // Layer: Anzahl Ebenen (gibts einen Nutzen für OpenGL ?)
// Überprüfen, ob der Renderering-Context erzeugt werden konnten
if (FContext = 0) then
begin
raise Exception.Create('Der Rendering Context konnte nicht erstellt werden.');
end;
// Erstellten Renderkontext aktivieren und
// Extenasions laden (3. Parameter (loadext: Boolean) mit Vorbelegung "true")
// - wglMakeCurrent
// - ReadExtensions
ActivateRenderingContext(FCanvasDC, FContext);
// Hier lesen wir Eigenschaften ein, die wohl unser Kontext hat
// Hinweis: das funktioniert nur, wenn man bereits den Rendering-Kontext aktiviert hat !
ReadOpenGLProperties;
end;
....
procedure TfrmMain.ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
begin
// Codesite.Send('ApplicationEventsIdle');
// Hier ggf ein "wglMakeCurrent" machen, falls man mit mehreren
// GL-Contexten arbeitet (also mehrer Windows).
// Am Ende der Methode hier dann ein
//
// wglMakeCurrent(NULL, NULL);
//
// Quelle: https://www.khronos.org/opengl/wiki/Platform_specifics:_Windows#Multiple_Windows
// Erik va. Bilsen setzt hier den ViewPort
// (ich hatte es bisher im FormShow gemacht)
{ Define the viewport dimensions }
glViewport(0, 0, pnlOpenGLCanvas.Width, pnlOpenGLCanvas.Height);
// Render
// Clear the colorbuffer
glClearColor(0.2, 0.3, 0.3, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
{ Erik van Bilsen:
Draw the triangle
}
if assigned(FShader) then
FShader.Enable;
if assigned(FVertexArray) then
FVertexArray.Render;
{ jetzt wohl altlast
if assigned(FVAO) then
FVAO.Render;
}
if assigned(FShader) then // gibts so nur bei Erik Junghanns
FShader.Disable;
SwapBuffers(fCanvasDC); // Swap the screen buffers
// (Erik. v. B. nutzt "Windows.SwapBuffers(..)",
// um seine Multi-Platform-Implementierung umzusetzen)
// Windows denken lassen, das wir noch nicht fertig wären
// ...dadurch wieder kontinuierlich neu gezceihnet
Done := False;
Wen man die LCL verwendet, würde ich den TOpenGLControl von Lazarus verwenden und den Context zu erzeugen.Ergänzung: Schau dir mal die anderen OpenGL-Projekte beim Erik Junghanns an!
Blöd daß sämtliche Beispiel-Projekte - wenn sie denn compilieren - nur ein leeres Fenster zeigen, unter Windows.TSchnuckenbock hat geschrieben: Do 6. Jun 2024, 17:39 In den Kommentaren meiner Quellen (Programmier-Stuff) finde ich immer mal die Info ala "von Erik Junghanns übernommen" und so. Pseudo ist bergmann89 und eines seiner Projekte ist
https://git.bergmann89.de/opengl/TextSuite