Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Apr 19, 2024 21:58

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: OpenGL ohne Fenster
BeitragVerfasst: Di Jul 15, 2014 12:36 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Moinsen,

ist es möglich einen OpenGL Kontext zu erstellen ohne Fenster? Quasi in eine Textur oder Buffer rendern. Um gewisse Grafikdinge zu umschiffen und OGL zu misshandeln eine Aufgabe für mich zu erledigen ohne Algorithmen in bspw. OpenCL oder dergleichen schreiben zu müssen.

Grüße


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL ohne Fenster
BeitragVerfasst: Di Jul 15, 2014 17:49 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Ich kann mir vorstellen, das es möglich ist in eine Bitmap zu rendern.

Code:
  1. rocedure TForm1.FormCreate(Sender: TObject);
  2. var
  3.   done:boolean;
  4. begin
  5.   DC := GetDC(canvas.Handle);
  6.   RC := CreateRenderingContextVersion(DC, [opDoubleBuffered], 3, 3, True, 32, 24, 8, 0, 0, 0);
  7.   ActivateRenderingContext(DC, RC);
  8.  
  9.   InitScene;
  10. end;    

Anstelle des Canvas.Hanlde, könnte Bitmap.Canvas.Handle gehen, dies müsste man mal ausprobieren.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL ohne Fenster
BeitragVerfasst: Di Jul 15, 2014 20:07 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Ich denke eher nicht, dass an der Stelle ein Bitmap Handel akzeptiert wird.

Möglich ist es aber auf jeden Fall.
Dabei renderst du dann am besten über ein FBO in eine Textur.
Allerdings ist es möglicherweise kniffelig einen Kontext aufzukommen, ohne ein Fenster zu haben. Dann wirst du wahrscheinlich auch direkt mit WGL(Windows) oder GLX(X also zum Beispiel Linux, BSD und fast alle anderen Systeme) den Context eröffnen müssen. Möglicherweise ist es auch sinnvoll ein kleines unsichtbares Fenster aufzumachen, nur damit der Treiber und das Betriebssystem glücklich sind. Hier wird vorgeschlagen, den Context auf Windows an das Desktopwindow zu packen:
http://stackoverflow.com/questions/576896/can-you-create-opengl-context-without-opening-a-window
http://www.opengl.org/wiki/Creating_an_OpenGL_Context
http://www.opengl.org/wiki/Creating_an_OpenGL_Context hat geschrieben:
- Creating a context without a window, for off-screen rendering. This may not actually work.

Mit einem Trick wie unsichtbares Fenster oder Desktophandel geht es aber bestimmt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL ohne Fenster
BeitragVerfasst: Mi Jul 16, 2014 19:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Das Rendern in ein Bitmap klappt rein technisch schon, allerdings bekommt man dann zumindest unter Windows nur einen minimal Software-Renderer mit OpenGL 1.0 Features. Kann man also komplett vergessen.

Einen echten Weg unter Windows ohne Fenster einen OpenGL-Kontext zu erzeugen gibt es nicht. Mit EGL, das einige IHVs ja über Extensions anbieten ist sowas evtl. möglich (afaik kann man das bei AMD), aber doch recht speziell.

Ansonsten kann man es einfach mal mit dem Handle des Desktops versuchen, oder einfach ein verstecktes Fenster ganz ohne Taskleisteneintrag bauen. Wäre der vermutlich einfachste Weg.

Oder mal bei Mesa schauen, dass wäre dann aber auch Software.

Was genau willst du den "umschiffen". Komplexe Berechnungen (weil du von OpenCL redest) gehen ja unter OpenGL erst mit Compute Shadern, und da gewinnt man eigentlich nix, da ist man rein vom Drumherum mit OpenCL schneller am Ziel und muss sich nicht mit den brandneuen, fehlerbehafteten Compute Shader Implementationen der IHVs rumschlagen (leidvolle Erfahrung).

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL ohne Fenster
BeitragVerfasst: Fr Jul 18, 2014 20:29 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Ich benutz C++, wodurch der DGL-Header flach fällt.

Zuerst wollte ich ein Bild um x° drehen, wobei x leider kein vielfaches von 90 ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL ohne Fenster
BeitragVerfasst: Fr Jul 18, 2014 20:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
wäre es dann nicht besser die neuen APIs / Frameworks von MS zu benutzen statt OpenGL?

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL ohne Fenster
BeitragVerfasst: Fr Jul 18, 2014 21:27 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Welchen neuen APIs und Frameworks von MS?
Was auch immer du damit meinst, wahrscheinlich werden diese nur auf Windows arbeiten und SDH.Prod möchte möglicherweise Platformunabhänigkeit.

Prinzipiell erstelle ich meine OpenGL Contexte in C++ mit GLFW3. Allerdings wirst du, soweit ich weiß, damit keinen Context direkt ohne Fenster herausbekommen. Dann wirst du mit dem Betriebssystem APIs arbeiten müssen. Also dem des entsprechenden Windowsystems und der OpenGL Contextextension. Auf Windows wäre das WGL und die WinAPI um ein unsichtbares Fenster/das Desktophandel zu bekommen. Auf Linux GLX.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL ohne Fenster
BeitragVerfasst: Fr Jul 18, 2014 22:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Wenn du nicht unbedingt Hardwarebeschleunigung brauchst, ist Cairo eventuell hilfreicher. Das kann alle Bildoperationen, die man sich so vorstellen kann.

viele Grüße,
Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL ohne Fenster
BeitragVerfasst: Sa Jul 19, 2014 07:18 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
OpenglerF hat geschrieben:
Welchen neuen APIs und Frameworks von MS?
Was auch immer du damit meinst, wahrscheinlich werden diese nur auf Windows arbeiten und SDH.Prod möchte möglicherweise Platformunabhänigkeit.

Prinzipiell erstelle ich meine OpenGL Contexte in C++ mit GLFW3. Allerdings wirst du, soweit ich weiß, damit keinen Context direkt ohne Fenster herausbekommen. Dann wirst du mit dem Betriebssystem APIs arbeiten müssen. Also dem des entsprechenden Windowsystems und der OpenGL Contextextension. Auf Windows wäre das WGL und die WinAPI um ein unsichtbares Fenster/das Desktophandel zu bekommen. Auf Linux GLX.


Nun WPF, WinRT und co. Aber naja X-Platform, ist damit dann natürlich ein Problem. lol

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL ohne Fenster
BeitragVerfasst: Sa Jul 19, 2014 13:02 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
WPF ist ein GUI Framework und für andere Zwecke nicht ausgelegt bzw. auch langsam. Außerdem läuft es in einer managed Umgebung mit Net und nicht mit nativen C++. WinRT ist laut Wikipedia "die Laufzeitumgebung für Windows Store-Apps in Windows 8". Ob man damit überhaupt rendern kann, oder gar Offscreen und dann mit Hardwarebeschleunigung, weiß ich auch nicht.

Die beiden Libs die du genannt hast, sind jedenfalls nicht für diesen Zweck entworfen worden. Typische geeignete Windowslösungen dafür würde ich eher mit Direct3D oder Direct2D sehen. Sooo neu sind die aber nicht. (WPF ist eigentlich auch nicht mehr so neu.)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL ohne Fenster
BeitragVerfasst: Di Jul 22, 2014 17:39 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Also wenns nur für Windows ist würde es in diesem Fall ausreichen, Plattformunabhängigkeit ist also nett, aber nicht zwingend.

Eigentlich muss es nicht OpenGL sein, aber es würde Einarbeitungszeit ersparen da ja schon etwas Erfahrung und ein RedBook vorhanden ist. :D

Hardwarebeschleunigt sollte es schon sein, geht ja nur um die eine Funktion und ohne Beschleunigung könnt ich es vermutlich auch selbst schnell mal so nebenbei implementieren, wäre dann aber halt nur nicht schnell. :P Daher auch der Verzicht auf das Fenster, das würde nur unnötige Ressourcen verbrauchen.
Geht wie gesagt erstmal nur um die Drehung eines Bildes.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL ohne Fenster
BeitragVerfasst: Di Jul 22, 2014 20:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
SDH.Prod hat geschrieben:
Hardwarebeschleunigt sollte es schon sein, geht ja nur um die eine Funktion und ohne Beschleunigung könnt ich es vermutlich auch selbst schnell mal so nebenbei implementieren, wäre dann aber halt nur nicht schnell. :P Daher auch der Verzicht auf das Fenster, das würde nur unnötige Ressourcen verbrauchen.
Geht wie gesagt erstmal nur um die Drehung eines Bildes.


Willst du mehr als zwanzig Bilder pro Sekunde rotieren? Wenn nein brauchst du keine Hardwarebeschleunigung, sondern lediglich eine gescheite (also nicht mal eben runtergeschriebene) Implementation. Da reichen die gängigen Grafiklibs wie GDI+ (oder wie das Windowszeug heißt) oder Cairo.

viele Grüße,
Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL ohne Fenster
BeitragVerfasst: Di Jul 22, 2014 21:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wenns wirklich extrem performant sein muss, dann wäre OpenCL evtl. ne Alternative. Das kann sowas auf ner halbwegs potenten GPU verdammt flott :)

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 80 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.487s | 17 Queries | GZIP : On ]