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

Aktuelle Zeit: Fr Jul 18, 2025 00:49

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



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Do Aug 25, 2011 12:06 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Malzeit,

seit langem bekomm ich Berichte das meine Software auf verschiedensten ATI Karten nicht läuft. Ich hab jetzt einen Testrechner hier: ATI Readon HD5650..

Das erste Problem war das nach einem Zugriff auf gl_FrontMaterial im Shader nur käse raus kam (alles Grau). Das hab ich jetzt soweit geändert das ich die Hintergrundfarbe über gl_Color nutze.. Funktioniert...

Nun stoß ich immer auf weitere Probleme.. Mein komplettes Deferred Shading scheint auch nicht zu funktionieren..
Der Color, normal und Depthbuffer im FBO scheint ok zu sein. Doch im Shader stimmen die Texturkoordinaten meines Fullscreenquads nicht.

hier mal der aufruf vom Shader pro Lampe:

Code:
  1.  
  2. //Fullscreenquad
  3. procedure DrawShader(const alpha: Single = 1.0);
  4. var
  5.   buildList: Boolean;
  6.   d: single;
  7. begin
  8.    glColor4f(1, 1, 1, alpha);
  9.  
  10.          if fqDisplayList <> 0 then
  11.           begin
  12.            glcalllist(fqDisplayList);
  13.            exit;
  14.           end
  15.            else
  16.             begin
  17.              //buld lists;
  18.               fqDisplayList := glGenLists(1);
  19.               glNewList(fqDisplayList, GL_COMPILE);
  20.               BuildList:=true;
  21.             end;
  22.  
  23.  
  24. D:= frmDebug.JvSpinEdit2.Value;;
  25.   glMatrixMode(GL_PROJECTION);
  26.    glPushMatrix;
  27.     glLoadIdentity;
  28.    glMatrixMode(GL_MODELVIEW);
  29.    glLoadIdentity;
  30.  
  31.  
  32.     glbegin(GL_TRIANGLE_STRIP);
  33.       glMultiTexCoord2f(GL_TEXTURE0 , 0, 1);
  34.       glVertex3f(-1.0, 1.0, 1);
  35.       glMultiTexCoord2f(GL_TEXTURE0, 0, 0);
  36.       glVertex3f(-1.0, -1.0, 1);
  37.       glMultiTexCoord2f(GL_TEXTURE0, 1, 1);
  38.       glVertex3f(1.0, 1.0, 1);
  39.       glMultiTexCoord2f(GL_TEXTURE0,1, 0);
  40.       glVertex3f(1.0, -1.0, 1);
  41.     glEnd;
  42.  
  43.    glMatrixMode(GL_PROJECTION);
  44.     glPopMatrix;
  45.    glMatrixMode(GL_MODELVIEW);
  46.        if buildList then
  47.          begin
  48.           glEndList;
  49.           glCallList(fqDisplayList);
  50.          end;
  51. end;
  52.  
  53. ...
  54.  
  55.   glUseProgram(shader.ProgramObject);
  56.  
  57.    glUniformMatrix4fv(glGetUniformLocation(shader.ProgramObject, 'InvViewMat'), 1, false, @InverseCamMatrix);
  58.    glUniformMatrix4fv(glGetUniformLocation(shader.ProgramObject, 'proM'), 1, false, @projectionMatrixInverse);
  59.    glUniformMatrix4fv(glGetUniformLocation(shader.ProgramObject, 'ModelMat'), 1, false, @Cam_Matrix);
  60.  
  61.    glActiveTexture(GL_TEXTURE0);
  62.    glEnable(GL_TEXTURE_2D);
  63.    glBindtexture(GL_TEXTURE_2D, dfs_fbo.Images[0]);
  64.    glUniform1i(glGetUniformLocation(shader.ProgramObject, 'colorMap'), 0);
  65.  
  66.  
  67.    glActiveTexture(GL_TEXTURE1);
  68.    light.LightTexture.Bind();
  69.    glUniform1i(glGetUniformLocation(shader.ProgramObject, 'lightMap'), 1);
  70.  
  71.    glActiveTexture(GL_TEXTURE2);
  72.    glBindtexture(GL_TEXTURE_2D, light.shadowmap);
  73.    glUniform1i(glGetUniformLocation(shader.ProgramObject, 'shadowMap'), 2);
  74.  
  75.    glActiveTexture(GL_TEXTURE3);
  76.    glBindTexture(GL_TEXTURE_2D, dfs_fbo.Images[1]);
  77.    glUniform1i(glGetUniformLocation(shader.ProgramObject, 'normalMap'), 3);
  78.  
  79.    glActiveTexture(GL_TEXTURE4);
  80.    glBindtexture(GL_TEXTURE_2D, dfs_Depth_tex);
  81.    glUniform1i(glGetUniformLocation(shader.ProgramObject, 'depthMap'), 4);
  82.  
  83.  
  84.     // Matrix übergeben
  85.    glUniformMatrix4fv(glGetUniformLocation(shader.ProgramObject,
  86.         'TexGenMat'), 1, false, @texMatrix);
  87.  
  88.     glUniform3fv(glGetUniformLocation(shader.ProgramObject, 'lightPos'),
  89.       1, @light.lightPos[0]);
  90.  
  91.     glUniform1f(glGetUniformLocation(shader.ProgramObject,
  92.         'GlobalLightFactor'), x13d.Stage.globalLightFactor);
  93.  
  94.  
  95.     glUniform4fv(glGetUniformLocation(shader.ProgramObject, 'lampColor'),
  96.       1, @lampColor[0]);
  97.  
  98.     glActiveTexture(GL_TEXTURE0);
  99.      glMatrixMode(GL_MODELVIEW);
  100.  
  101.  glPushMatrix;
  102.  
  103.  
  104.   DrawShader;
  105.  
  106.  
  107.  
  108. glPopMatrix;
  109.  
  110.    //RenderAllMassiveObjects(true, CamFrustum, false);
  111.   glUseProgram(0);
  112.  



Vertex Shader:
Code:
  1.  
  2.     void main(void) {        
  3.      gl_Position   = ftransform();
  4.      gl_TexCoord[0]   =  gl_MultiTexCoord0;
  5.     }
  6.  


Fragment shader:
Code:
  1.  
  2.     uniform sampler2D colorMap;     // Color - Texture
  3.     uniform sampler2D normalMap;    // Normal - Texture
  4.     uniform sampler2D depthMap;     // Depth - Texture 
  5.     uniform sampler2D lightMap;    
  6.     uniform sampler2D shadowMap;   
  7.     uniform mat4 proM; 
  8.     uniform mat4 InvViewMat;
  9.     uniform mat4 TexGenMat;             //Texturprojektionsmatrix
  10.     uniform vec4 lampColor;         //Lichtfarbe und intensität
  11.     uniform int GlobalLight;                    //gibt an ob globales Punktlicht verwendet werden soll
  12.     uniform vec3 lightPos;          //Lampenpositionen für evtl. weitere Berechnungen
  13.     uniform float GlobalLightFactor;            //Gibt an wie stark alle Lichter sind
  14.  
  15.     void main() {
  16.         vec2 texcoord = vec2(gl_TexCoord[0]);
  17.                  gl_FragColor = vec4(gl_TexCoord[0].x);  //Hier mal zum Test
  18.           ...
  19.     }
  20.  


Jo und ich bekomme Schwarzes Bild. Also stimmt die Texturkoordinate irgendwie nich...
Wie gesagt unter alles bisher getesteten Nvidia Karten funktioniert alles wunderbar.. Doch ATI :evil:

weiß nich wo ich da noch suchen soll...


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 25, 2011 12:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Shadercompilerausgabe?

greetings

_________________
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  
BeitragVerfasst: Do Aug 25, 2011 12:31 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
der sagt das alles ok is, auch die Fehlerabfrage von GL sagt keine Fehler..


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 25, 2011 12:40 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
HALT: Wenn eine Lampe gerendert wird bekomm ich den OpenGL Fehler "Der Vorgang ist ungültig".. nur welcher?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 25, 2011 12:42 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Kannst du irgendwie das fertig compilierte irgendwo hochladen?

Ich könnte es mit meiner ATI-Karte probieren, ist eine "ATI Mobility Radeon HD 5850".


Ausserdem könnte die Standardmethode helfen: "Treiber aktualisieren".


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 25, 2011 12:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Nur so als kleiner Hinweis (aus eigener Erfahrung, entwickle schon lange auf ATI) :
ATI hält sich im Gegensatz zu NVidia sehr streng an die OpenGL-Spezifikationen. Dinge die also auf NVidia gehen klappen daher entsprechend nicht bei ATI, z.b. im Shader 1 statt 1.0 (geht nur bei NVidia), etc.

Ansonsten ist der gDEbugger inzwischen Freeware und kann hier bezogen werden : http://developer.amd.com/tools/gDEBugge ... fault.aspx

Damit kann man solche Probleme recht schnell finden.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 25, 2011 12:49 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Was mir aufgefallen ist:

du aktivierst nur das texturieren bei
Code:
  1. glActiveTexture(GL_TEXTURE0);
, du musst es aber für jedes einzeln aktivieren.

Code:
  1.  
  2. For i := 0 to x-1 do begin //x repräsentiert die Anzahl der textureMappingUnits (TMUs) die du aktivieren willst. Es werden alle aktiviert von 0 bis zu diesem Wert.
  3.     glActiveTexture(GL_TEXTURE0+i);
  4.     glEnable(GL_TEXTURE_2D);
  5. end;


x wäre in deinem Fall 5, somit haste alle TMUs von 0 bis 4 aktiviert, dann funktioniert das vllt schon.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 25, 2011 12:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
SDH.Prod hat geschrieben:
Was mir aufgefallen ist:

du aktivierst nur das texturieren bei
Code:
  1. glActiveTexture(GL_TEXTURE0);
, du musst es aber für jedes einzeln aktivieren.


Nein, muss er nicht. Er nutzt Shader, die diese Einstellung übergehen. Es spielt also keine Rolle ob er die Textureinheit aktiviert oder nicht.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 25, 2011 13:16 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
also ich hab noch weiter probiert.. es lag doch nich am Defferred shading, sondern an meinem Bloom shader der nachgeschaltet ist. Warum dieser den vorrangegangenen DFS Pass versaut weis ich nich... Wenn ich Bloom deaktiviere funktionierts komischerweise...

hier mal der Bloomshader:
Code:
  1.  
  2. uniform sampler2D bgl_RenderedTexture;
  3.  
  4. void main()
  5. {
  6.    vec4 sum = vec4(0);
  7.    vec2 texcoord = vec2(gl_TexCoord[0]);
  8.    int j = 0;
  9.    int i = 0;
  10.  
  11.    for( i= -4 ;i < 4; i++)
  12.    {
  13.         for (j = -2; j < 2; j++)
  14.         {
  15.             sum += texture2D(bgl_RenderedTexture, texcoord + vec2(j, i)*0.004) * 0.25;
  16.         }
  17.    }
  18.        if (texture2D(bgl_RenderedTexture, texcoord).r < 0.3)
  19.     {
  20.        gl_FragColor = sum*sum*0.012 + texture2D(bgl_RenderedTexture, texcoord);
  21.     }
  22.     else
  23.     {
  24.         if (texture2D(bgl_RenderedTexture, texcoord).r < 0.5)
  25.         {
  26.             gl_FragColor = sum*sum*0.009 + texture2D(bgl_RenderedTexture, texcoord);
  27.         }
  28.         else
  29.         {
  30.             gl_FragColor = sum*sum*0.0075 + texture2D(bgl_RenderedTexture, texcoord);
  31.         }
  32.     }
  33. }
  34.  


auch dieser gibt keine Fehlermeldung beim compilieren..


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 25, 2011 13:26 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Der Shader funzt auch im GPUShaderAnalyzer korrekt, der scheint also soweit in Ordnung zu sein. Evtl. ist deine Textur nicht an die passende Shadervariable gebunden oder ist einfach leer?

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 25, 2011 14:18 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
ey echt verrückt.. an einer ganz dummen stelle fehlte ein PopMatrix in der TextureMatrix... jetzt haut alles hin.. ich werd verrückt. Das mit glFrontMaterial bleibt mir trozdem ein rätsel..


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 25, 2011 17:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Thmfrnk hat geschrieben:
ey echt verrückt.. an einer ganz dummen stelle fehlte ein PopMatrix in der TextureMatrix... jetzt haut alles hin.. ich werd verrückt. Das mit glFrontMaterial bleibt mir trozdem ein rätsel..


Ist ein Treiberproblem bei ATI. Wurde irgendwann vor zwei Jahren oder so mal gefixt, dann wars mal wieder da und wieder weg. Evtl. hat mans jetzt wieder drin. Hatte sowas ärgerliches vor längerer Zeit auch mal. Da war so, dass man, sobald man ein glEnable(GL_FOG) machet im Shader nicht mehr in gl_FragmentColor schreiben konnte...

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Aug 26, 2011 08:02 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
[OT]
ATI sollte man abschaffen! Weiß nich womit die sich ihre Daseinsberechtigung verdienen, wenn die immer ne extrawurst brauchen... :twisted:
[/OT]


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Aug 26, 2011 11:54 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
ATI wurde abgeschafft. Heißt jetzt AMD. ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Aug 26, 2011 16:44 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Was hast du gegen meine geliebte ATI? VERBRENNT IHN!!!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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