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.
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
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)
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
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:
ogc := TOpenGLControl.Create(Self);
with ogc dobegin
Parent :=Self;
Align := alClient;
OpenGLMajorVersion :=3;
OpenGLMinorVersion :=3;
OnPaint :=@DrawScene;
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)
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
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)
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.
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.
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
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)
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
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)
Mitglieder in diesem Forum: Google [Bot] 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.