Zeichen mit Cairo in einem SDL2-Fenster (Beispiele)
- Roland Chastain
- Beiträge: 168
- Registriert: Sa 7. Jul 2012, 21:50
- Wohnort: Saargemünd
- Kontaktdaten:
Zeichen mit Cairo in einem SDL2-Fenster (Beispiele)
Hallo zusammen!
Ich habe gesucht, wie man mit Cairo in einem SDL2-Fenster zeichnet.
Ich teile meine Arbeit mit Ihnen und hoffe, dass sie Sie interessieren wird.
Sie brauchen SDL2-for-Pascal.
Beispiele getestet unter Linux.
Ich habe gesucht, wie man mit Cairo in einem SDL2-Fenster zeichnet.
Ich teile meine Arbeit mit Ihnen und hoffe, dass sie Sie interessieren wird.
Sie brauchen SDL2-for-Pascal.
Beispiele getestet unter Linux.
- Dateianhänge
-
sdl2-cairo-beispiele.zip
- (9.66 KiB) 47-mal heruntergeladen
-
- grgula.png (29.43 KiB) 1245 mal betrachtet
-
- cardioid.png (123.14 KiB) 1245 mal betrachtet
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.
Pourvu que Dieu lui prête vie.
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Zeichen mit Cairo in einem SDL2-Fenster (Beispiele)
Cairo und SDL vertragen sich sehr gut.
Dazu habe ich auch noch ein kleines Beispiel:
https://github.com/sechshelme/Lazarus-D ... /SDL_Cairo
Mit GTK2 lässt es sich auch kombinieren:
https://github.com/sechshelme/Lazarus-D ... roggen.org
Ich habe dein Beispiel cardioid3.pas ausprobiert. Anscheinend hast du auch das unschöne schwarze nachziehen, wen du die Fenstergrösse veränderst.
Das Beispiel grgula.pas ist auch echt cool, sieht fast wie OpenGL aus, so wie es scheint, hast du dies alles selbst berechnet. Was ich dabei staune, das du keine Matrizen verwendet hast.
Dazu habe ich auch noch ein kleines Beispiel:
https://github.com/sechshelme/Lazarus-D ... /SDL_Cairo
Mit GTK2 lässt es sich auch kombinieren:
https://github.com/sechshelme/Lazarus-D ... roggen.org
Ich habe dein Beispiel cardioid3.pas ausprobiert. Anscheinend hast du auch das unschöne schwarze nachziehen, wen du die Fenstergrösse veränderst.
Das Beispiel grgula.pas ist auch echt cool, sieht fast wie OpenGL aus, so wie es scheint, hast du dies alles selbst berechnet. Was ich dabei staune, das du keine Matrizen verwendet hast.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- Roland Chastain
- Beiträge: 168
- Registriert: Sa 7. Jul 2012, 21:50
- Wohnort: Saargemünd
- Kontaktdaten:
Re: Zeichen mit Cairo in einem SDL2-Fenster (Beispiele)
Sehr interessant. Danke!Mathias hat geschrieben: Mo 6. Feb 2023, 17:43 Mit GTK2 lässt es sich auch kombinieren:
https://github.com/sechshelme/Lazarus-D ... roggen.org
Ja, genau.Mathias hat geschrieben: Mo 6. Feb 2023, 17:43 Ich habe dein Beispiel cardioid3.pas ausprobiert. Anscheinend hast du auch das unschöne schwarze nachziehen, wen du die Fenstergrösse veränderst.
Es war nicht wirklich ich, der es geschrieben hat. Ich habe es einfach angepasst. Das Originalprogramm stammt von dieser Seite: https://gorbem.hu/TP/Grafika.htmMathias hat geschrieben: Mo 6. Feb 2023, 17:43 Das Beispiel grgula.pas ist auch echt cool, sieht fast wie OpenGL aus, so wie es scheint, hast du dies alles selbst berechnet. Was ich dabei staune, das du keine Matrizen verwendet hast.
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.
Pourvu que Dieu lui prête vie.
- Roland Chastain
- Beiträge: 168
- Registriert: Sa 7. Jul 2012, 21:50
- Wohnort: Saargemünd
- Kontaktdaten:
Re: Zeichen mit Cairo in einem SDL2-Fenster (Beispiele)
Eine einfache Lösung besteht darin, den Hintergrund schwarz zu malen.Mathias hat geschrieben: Mo 6. Feb 2023, 17:43 Anscheinend hast du auch das unschöne schwarze nachziehen, wen du die Fenstergrösse veränderst.

Code: Alles auswählen
cairo_set_source_rgb(LContext, 0.0, 0.0, 0.0);
cairo_paint(LContext);
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.
Pourvu que Dieu lui prête vie.
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Zeichen mit Cairo in einem SDL2-Fenster (Beispiele)
Anscheinend hast du auch das unschöne schwarze nachziehen, wen du die Fenstergrösse veränderst.
Code: Alles auswählen
var
gRenderer: PSDL_Renderer;
....
SDL_SetRenderDrawColor(gRenderer, $00, $9F, $00, $FF);
SDL_RenderClear(gRenderer);
// Zeichne noch mehr
SDL_RenderPresent(gRenderer);
Man müsste es nur noch mit cairo probieren.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Zeichen mit Cairo in einem SDL2-Fenster (Beispiele)
Ich habe noch dein Beispiel "cardioid3" modifiziert.Roland Chastain hat geschrieben: Mo 6. Feb 2023, 19:07Eine einfache Lösung besteht darin, den Hintergrund schwarz zu malen.Mathias hat geschrieben: Mo 6. Feb 2023, 17:43 Anscheinend hast du auch das unschöne schwarze nachziehen, wen du die Fenstergrösse veränderst.![]()
Code: Alles auswählen
cairo_set_source_rgb(LContext, 0.0, 0.0, 0.0); cairo_paint(LContext);
Jetzt ist es dort auch einiges besser geworden, was den schwarzen Rand anbelangt.
Code: Alles auswählen
// SDL_SetRenderDrawColor(LRenderer, 0, 0, 0, 255);
SDL_SetRenderDrawColor(LRenderer, $FF, $FF, $FF, 255);
SDL_RenderClear(LRenderer);
CairoDraw(LTexture, LRendererWidth, LRendererHeight);
SDL_RenderCopy(LRenderer, LTexture, nil, nil);
SDL_RenderPresent(LRenderer);
// SDL_Delay(100);
end;
Zweitens macht das Delay Schwierigkeiten. Der Grund, der Fenstermanager vergrössert das Fenster in Echtzeit und du machst eine Pause, so gibt es eine Lücke, bis das Bild wieder weiss eingefärbt wird.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- Roland Chastain
- Beiträge: 168
- Registriert: Sa 7. Jul 2012, 21:50
- Wohnort: Saargemünd
- Kontaktdaten:
Re: Zeichen mit Cairo in einem SDL2-Fenster (Beispiele)
Gut gesehen. Danke!
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.
Pourvu que Dieu lui prête vie.
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Zeichen mit Cairo in einem SDL2-Fenster (Beispiele)
Ich habe noch ein Cairo-Beispiel it nativen X11 gemacht.
https://github.com/sechshelme/Lazarus-D ... /X11_Cairo
Das interessante dabei, man kann zugucken wie er zeichnet.
X11 arbeitet ohne Buffer, da wird direkt auf den Bildschirm gezeichnet.
Bei SDL und meinem TBitmap-Beispiel wird in einen Buffer gerendert und diesen späterer auf den Bildschirm kopiert.
Was beim GTK2-Beispiel passiert, kann ich nicht sagen, da ich keine surface kreieren muss. Ich denke, da wird intern auch ein Buffer verwendet.
Es ist echt spannend, wo man cairo überall gebrauchen kann. Es ist sogar möglich in den surface direkt in ein *.png zu schreiben.
Ich habe schon gelesen, das Cairo auch GPU beschleunigt arbeiten kann. Aber wie das geht weis ich (noch) nicht. Evtl, macht es dies bei X11.
https://github.com/sechshelme/Lazarus-D ... /X11_Cairo
Das interessante dabei, man kann zugucken wie er zeichnet.
X11 arbeitet ohne Buffer, da wird direkt auf den Bildschirm gezeichnet.
Bei SDL und meinem TBitmap-Beispiel wird in einen Buffer gerendert und diesen späterer auf den Bildschirm kopiert.
Was beim GTK2-Beispiel passiert, kann ich nicht sagen, da ich keine surface kreieren muss. Ich denke, da wird intern auch ein Buffer verwendet.
Es ist echt spannend, wo man cairo überall gebrauchen kann. Es ist sogar möglich in den surface direkt in ein *.png zu schreiben.
Ich habe schon gelesen, das Cairo auch GPU beschleunigt arbeiten kann. Aber wie das geht weis ich (noch) nicht. Evtl, macht es dies bei X11.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot