Nein, weder der Shader-Compiler noch Open-GL meldet irgendwelche Fehler...bin so langsam mit meinem Latein am Ende, da dieser Fehler ja absolut keinen Sinn ergibt... Der einzige Unterschied ist das - position, doch das sollte doch nicht die Framerate derartig in den Keller gehen lassen...hab grad mal VSync abgeschaltet, mit directional light erreiche ich Frameraten bis 160 FPS...pointlights nur 30 FPS...ich benutze im Moment sogar nur eine einzige Lichtquelle, bei mehreren sinkt die Framerate dementsprechend... Ich habe bisher noch nichtmal implementiert dass jedes Objekt von den 3-4 nächsten Lichtern beleuchtet wird (ist noch auf der TODO-Liste ), sondern einfach Stumpf Lichter anwenden, Shader binden, Rendern...
Mir ist noch etwas komisches aufgefallen: anscheinend wird die w-Koordinate nicht korrekt übergeben... Ich benutze zum Speichern der Position ein Record, das wie folgt deklariert ist:
Code: TVec4 = record x, y, z, w: TGLFloat; //Operatoren für + - etc etc end;
initialisiere die Position mit:
Code: m_Pos := Vec4D(px, py, pz, 1);
px,py,pz sind die Koordinaten des Lichts, Vec4D gibt einfach einen TVec4 zurück, der die Daten enthält, und wende das Licht dann mit
Code: glLightfv(GL_LIGHT0 + iNummer, GL_POSITION, @m_Pos);
an...während x,y,z korrekt übergeben werden, bekommt der Shader vom w-Wert anscheinend nichts mit (die if-Abfrage scheitert, und wechselt Standardmäßig zu Directional-Lights)...
|