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

Aktuelle Zeit: Sa Jun 24, 2017 21:40

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: OpenGL 3.3 ohne Shader
BeitragVerfasst: Fr Mär 31, 2017 17:26 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1004
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Im Anhang, habe ich ein mini-Code, welcher ein OpenGL 3.3-Kontext erzeugt und ein Dreieck und ein Quadrat in den VBO/VBA rendert.
Es verwendet keinen Shader.

Was interessant ist, mit dem Mesa-Treiber von Linux, sieht man ausser dem hellblauen Hintergrund nichts.
Verwende ich aber ein Linux mit NVidia-Treiber, dann sehe ich die beiden Objecte in schwarz.
Unter Windows sind die Objekte auch vorhanden. Als ich noch meinen Onboard-Intel Chip verwendete, habe ich die Objekte auch gesehen.

Wie ist dies von OpenGL spezifiziert ?

Oder verwenden die original-Treiber einfachen einen sehr einfachen Default-Shader ?

Der Code sollte sich mit Lazarus kompilieren lassen, wen TOpenGLControl installiert ist.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 ohne Shader
BeitragVerfasst: Sa Apr 01, 2017 13:40 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 524
Programmiersprache: C++
Wenn im Fragment Shader keine Farbe geschrieben wird, ist sie undefiniert. So wie ich das sehe, erzwingst du keinen Core Context. Mit dem Nvidia-Treiber bekommst du daher ein Compatibility Profile und musst daher keine Shader benutzen. Mesa unterstützt Compatibility Profiles nur bis OpenGL 3.0. Darüber bekommst du einen Core Context. Dementsprechend kriegst du undefiniertes Verhalten oder vielleicht auch einen OpenGL-Error.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 ohne Shader
BeitragVerfasst: So Apr 02, 2017 16:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1004
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Wen ich dich richtig verstehe, ist das was ich mache ein gebastel mit undefiniertem Ausgang ?

Code:
  1.   ogc := TOpenGLControl.Create(Self);
  2.   with ogc do begin
  3.     Parent := Self;
  4.     Align := alClient;
  5.     OpenGLMajorVersion := 3;
  6.     OpenGLMinorVersion := 3;
  7.     OnPaint := @DrawScene;
  8.   end;  

Erzwingt dies den Context nicht ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 ohne Shader
BeitragVerfasst: So Apr 02, 2017 17:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 524
Programmiersprache: C++
mathias hat geschrieben:
Wen ich dich richtig verstehe, ist das was ich mache ein gebastel mit undefiniertem Ausgang ?
Ja, jedenfalls mit Core-Context ist es undefiniert.

mathias hat geschrieben:
Code:
  1.   ogc := TOpenGLControl.Create(Self);
  2.   with ogc do begin
  3.     Parent := Self;
  4.     Align := alClient;
  5.     OpenGLMajorVersion := 3;
  6.     OpenGLMinorVersion := 3;
  7.     OnPaint := @DrawScene;
  8.   end;  

Erzwingt dies den Context nicht ?
Damit stellst du die OpenGL-Version ein, aber wahrscheinlich nicht, ob du einen Core- oder Compatibility-Context haben willst.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 ohne Shader
BeitragVerfasst: Mo Apr 03, 2017 17:14 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1004
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Was ich noch sagen muss.

Wen ich eine normale OpenGL 3.3 Anwendung habe und diese Werte:
Code:
  1.     OpenGLMajorVersion := 3;
  2.     OpenGLMinorVersion := 3;

auf 0, 0 setze, motzt der Mesa-Treiber,
Code:
  1. 0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, 3.00 ES, 3.10 ES, and 3.20 ES

Mit dem NVidia-Treiber unter Linux und mit Windows, läuft die Anwendung ohne Fehlermeldung.

Die Shader sehen etwa so aus, als Beispiel ein Mini-Vertex-Shader.
Code:
  1. #version 330
  2. in vec3 inPos;
  3.  
  4. void main(void)
  5. {
  6.   gl_Position = vec4(inPos, 1.0);
  7. }

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 ohne Shader
BeitragVerfasst: Di Apr 04, 2017 08:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 524
Programmiersprache: C++
Anderes Symptom, gleiche Ursache: Deine Klasse TOpenGLControl besorgt dir offenbar bevorzugt einen Compatibility-Kontext, wenn das geht und du nichts anderes angibst. Der proprietäre Nvidia-Treiber gibt dir dann einen OpenGL 4.5 Kontext im Compatibility-Modus. Mesa kann im Compatibility Profile nunmal nur OpenGL 3.0. Höhere Versionen gibt es nur im Core Profile. Die GLSL-Version, die du mit der Direktive #version 330 anforderst, gibt es nunmal nur, wenn du mindestens einen OpenGL 3.3-Kontext hast. Es ist ein Fehler, einen solchen Shader mit einer kleineren OpenGL-Version zu benutzen.

Folge für dich: Du solltest nachschauen, wie man der TOpenGLControl-Klasse sagt, dass man explizit einen Core-Context will.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 ohne Shader
BeitragVerfasst: Mi Apr 05, 2017 16:00 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1004
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Jetzt verstehe ich langsam, das Ganze ist stark Treiber-Abhängig.
Eigentlich ist das Problem meiner ursprünglichen Frage in der Praxis nicht relevant, wann werden VOA-Daten mit OpenGL > 3.3 ins VRam geschrieben, ohne das man einen Shader verwendet, ausser für einen Versuch, so wie ich es gemacht habe. :wink:

Zitat:
Folge für dich: Du solltest nachschauen, wie man der TOpenGLControl-Klasse sagt, dass man explizit einen Core-Context will.

Ich habe mal kurz geguckt, die TOpenGLControl ist recht komplex, vor allem da sie noch OS-Unabhängig ist.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 ohne Shader
BeitragVerfasst: Do Apr 06, 2017 07:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 524
Programmiersprache: C++
mathias hat geschrieben:
Eigentlich ist das Problem meiner ursprünglichen Frage in der Praxis nicht relevant
Trotzdem ist es empfehlenswert immer explizit ein Core-Profile anzufordern. Dann weist dich der Treiber (auch der von Nvidia) nämlich darauf hin, wenn du irgendwelche als deprecated markierten Funktionen oder Parameter verwendest. So bemerkst du deinen Fehler sofort und nicht erst, wenn du zufällig auf einer anderen Plattform unterwegs bist.

mathias hat geschrieben:
Ich habe mal kurz geguckt, die TOpenGLControl ist recht komplex, vor allem da sie noch OS-Unabhängig ist.
Gibt es dazu denn keine Dokumentation? Ein paar grundlegende Beispiele à la "Wie erstelle ich einen Core-Kontext mit Version x.y?" muss es doch geben.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 ohne Shader
BeitragVerfasst: Fr Apr 07, 2017 18:50 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1004
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Wen ich folgende Werte bei einem alten OpenGL-Programm mit glBegin(.. setze, bleibt das Fenster mit dem Mesa-Treiber leer.
Code:
  1.   OpenGLControl1.OpenGLMajorVersion := 3;
  2.   OpenGLControl1.OpenGLMinorVersion := 3;

Somit müsste es eigentlich Core-Profile laufen, oder täusche ich mich da ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 ohne Shader
BeitragVerfasst: Sa Apr 08, 2017 09:25 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 524
Programmiersprache: C++
mathias hat geschrieben:
Somit müsste es eigentlich Core-Profile laufen, oder täusche ich mich da ?
Ja, aber nur weil Mesa nicht anders kann. Auf proprietären Treibern wirst du weiterhin im Compatibility Modus arbeiten, wenn du nicht explizit was anderes forderst.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 ohne Shader
BeitragVerfasst: Mi Mai 24, 2017 17:29 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1004
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Unter C++ käme man relativ einfach ich den Core-Modus.
Nur fehlen in der Lazarus GLU diese Befehle.
Code:
  1. {
  2. glutInit(&argc, argv);
  3. glutInitDisplayMode(GLUT_RGBA);
  4. glutInitWindowSize(512, 512);
  5. glutInitContextVersion(4, 3);
  6. glutInitContextProfile(GLUT_CORE_PROFILE);
  7. glutCreateWindow(argv[0]);

_________________
OpenGL


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.020s | 16 Queries | GZIP : On ]