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

Aktuelle Zeit: Fr Mär 29, 2024 00:59

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Qt, Opengl und ANGLE
BeitragVerfasst: Di Okt 20, 2015 08:49 
Offline
DGL Member

Registriert: Di Dez 16, 2014 10:18
Beiträge: 32
Programmiersprache: C++
Ich hab mal wieder eine Frage zu Qt 5.5.0 und Opengl/ANGLE.

Wenn ich das aus der Qt 5.5.0 Dokumentation richtig verstanden hab, dann ist standardmäßig OpenGL dynamisch in Qt implementiert. Also wenn ein System die programmierten Befehle nicht verarbeiten kann, werden diese mithilfe von ANGLE in Direct3D transformiert.

http://doc.qt.io/qt-5/windows-requirements.html#dynamically-loading-graphics-drivers hat geschrieben:
When a given environment fails to provide a proper OpenGL 2.0 implementation, it will fall back automatically to ANGLE. This fallback will be completely transparent to the application, and will allow Qt Quick or other OpenGL code to function by translating to Direct3D. Such a fallback could, for example, take place on a Windows 7 PC with no additional graphics drivers installed. On other machines, where there is sufficient OpenGL support, the normal desktop OpenGL drivers will be used.


In meiner Anwendung habe ich folgenden Vertex bzw. Fragment-Shader:

Code:
  1. #define GLSL(src) "#version 150 core\n" #src
  2. static const char *vertexShaderSource = GLSL(
  3.     in vec3 vertex;
  4.     in vec4 color;
  5.     uniform mat4 matrix;
  6.     out vec4 colorOut;
  7.     void main() {
  8.         gl_Position = matrix * vec4(vertex, 1.0);
  9.         colorOut = color;
  10. }
  11. );
  12.  
  13. static const char *fragmentShaderSource = GLSL(
  14.     in vec4 colorOut;
  15.     out vec4 fragColor;
  16.     void main() {
  17.         fragColor = colorOut;
  18. }
  19. ); 


Auf meinem System (OpenGL 4.1) funktioniert alles einwandfrei!

Wenn ich das Programm auf einem anderen System (OpenGL 2.1) verwenden möchte, wird beim kompilieren der Shader ein Fehler geworfen, dass die GLSL Version 1.50 nicht unterstützt wird (was auch logisch ist).

Ich dachte bei der dynamischen Implementierung, entscheidet das Programm zur Laufzeit, ob es OpenGL oder ANGLE verwendet?
Habe ich hierbei 1. etwas vergessen oder 2. falsch verstanden oder 3. (am wahrscheinlichsten) was falsch programmiert?

Danke im Voraus.


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Qt, Opengl und ANGLE
BeitragVerfasst: Di Okt 20, 2015 17:31 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Nach meiner Meinung sehen die Shader nicht nach GLSL-Code aus.

Zitat:
Auf meinem System (OpenGL 4.1) funktioniert alles einwandfrei!

Nur komisch, das dies funktioniert.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Qt, Opengl und ANGLE
BeitragVerfasst: Mi Okt 21, 2015 09:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
dochdoch, der Code sieht gut aus (reichlich obfuscated mit dem netten Makro da).

Wenn ich die Doku aber richtig interpretiere, musst du OpenGLES anfordern, damit Angle in betracht gezogen wird. Machst du das?

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: Qt, Opengl und ANGLE
BeitragVerfasst: Mi Okt 21, 2015 10:21 
Offline
DGL Member

Registriert: Di Dez 16, 2014 10:18
Beiträge: 32
Programmiersprache: C++
Explizit als OpenGLES gebe ich es nicht an.

In meiner Anwendung verwende ich das QOpenGLWidget. Ich gehe davon aus, dass dieses Widget explizit OpenGL verwendet!

In diesem Qt OpenGLWidget Beispiel wird auch explizit nach dem Coreprofile "gefragt" und je nach dem andere Shader eingesetzt. Code-Ausschnitte:

Code:
  1. m_core = QCoreApplication::arguments().contains(QStringLiteral("--coreprofile"));
  2. m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, m_core ? vertexShaderSourceCore : vertexShaderSource);
  3. m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, m_core ? fragmentShaderSourceCore : fragmentShaderSource);


Die Shader:

Code:
  1. static const char *vertexShaderSourceCore =
  2.     "#version 150\n"
  3.     "in vec4 vertex;\n"
  4.     "in vec3 normal;\n"
  5.     "out vec3 vert;\n"
  6.     "out vec3 vertNormal;\n"
  7.     "uniform mat4 projMatrix;\n"
  8.     "uniform mat4 mvMatrix;\n"
  9.     "uniform mat3 normalMatrix;\n"
  10.     "void main() {\n"
  11.     "   vert = vertex.xyz;\n"
  12.     "   vertNormal = normalMatrix * normal;\n"
  13.     "   gl_Position = projMatrix * mvMatrix * vertex;\n"
  14.     "}\n";
  15.  
  16. static const char *fragmentShaderSourceCore =
  17.     "#version 150\n"
  18.     "in highp vec3 vert;\n"
  19.     "in highp vec3 vertNormal;\n"
  20.     "out highp vec4 fragColor;\n"
  21.     "uniform highp vec3 lightPos;\n"
  22.     "void main() {\n"
  23.     "   highp vec3 L = normalize(lightPos - vert);\n"
  24.     "   highp float NL = max(dot(normalize(vertNormal), L), 0.0);\n"
  25.     "   highp vec3 color = vec3(0.39, 1.0, 0.0);\n"
  26.     "   highp vec3 col = clamp(color * 0.2 + color * 0.8 * NL, 0.0, 1.0);\n"
  27.     "   fragColor = vec4(col, 1.0);\n"
  28.     "}\n";
  29.  
  30. static const char *vertexShaderSource =
  31.     "attribute vec4 vertex;\n"
  32.     "attribute vec3 normal;\n"
  33.     "varying vec3 vert;\n"
  34.     "varying vec3 vertNormal;\n"
  35.     "uniform mat4 projMatrix;\n"
  36.     "uniform mat4 mvMatrix;\n"
  37.     "uniform mat3 normalMatrix;\n"
  38.     "void main() {\n"
  39.     "   vert = vertex.xyz;\n"
  40.     "   vertNormal = normalMatrix * normal;\n"
  41.     "   gl_Position = projMatrix * mvMatrix * vertex;\n"
  42.     "}\n";
  43.  
  44. static const char *fragmentShaderSource =
  45.     "varying highp vec3 vert;\n"
  46.     "varying highp vec3 vertNormal;\n"
  47.     "uniform highp vec3 lightPos;\n"
  48.     "void main() {\n"
  49.     "   highp vec3 L = normalize(lightPos - vert);\n"
  50.     "   highp float NL = max(dot(normalize(vertNormal), L), 0.0);\n"
  51.     "   highp vec3 color = vec3(0.39, 1.0, 0.0);\n"
  52.     "   highp vec3 col = clamp(color * 0.2 + color * 0.8 * NL, 0.0, 1.0);\n"
  53.     "   gl_FragColor = vec4(col, 1.0);\n"
  54.     "}\n";


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 34 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.216s | 17 Queries | GZIP : On ]