Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Hallo,
ich habe das Tutorial von Sascha Willems durchgearbeitet und wirklich beachtliche Veränderungen in meinen Programmen feststellen können. Nun habe ich abe den Wunsch, das Shaderprogramm dynamisch verfügbar zu machen. Schalte ich alles zu beginn meines eigenen Programms ein, funktioniert alles wie vorgesehen. Schalte ich es aber während des Programmlaufs aus oder an, sehe ich keine Änderung. Folgende Funktionen habe ich geschrieben um die Shader ein- bzw. auszuschalten:
Code:
. . . var VertexShaderHandle, FragmentShaderHandle: GLhandle; ShaderProgramHandle: GLhandle; . . . function DisableShaderProgram (pObject: glHandle): boolean; var nMaxCount, nCount: glInt; aShaders: array [0..1] of glHandle; pShaders: pgluInt; i: integer; begin result := true; nMaxCount := 2; pShaders := @aShaders[0]; glGetAttachedShaders (pObject, nMaxCount, nCount, pShaders); if nMaxCount = nCount then begin for i := 0 to nCount - 1 do begin glDetachShader (pObject, aShaders[i]); end; end;
glUseProgram (0); end;
function EnableShaderProgram (pObject: glHandle): boolean; var pLog: string; begin result := false;
glLinkProgram (ShaderProgramHandle); if GetProgramInfoLog (ShaderProgramHandle, pLog) then begin if not FuncIsComServer then begin StdFehler ('Shaderprogramm kann nicht gelinkt werden'); end; exit; end;
glUseProgram (ShaderProgramHandle);
result := true; end;
Selbst wenn ich die Funktion InstallShaders, die vor dem erstellen der ersten Szene aufgerufen funktioniert, im Programm aufrufe sehe ich nicht, dass die Shader benutzt werden.
Du scheinst da den Shader komplett zu löschen. Wenn du den Shader kurzzeitig abschalten willst einfach nur glUseProgram(0) aufrufen, um ihn wieder zu aktivieren oder um zu einem anderen Shader zu wechseln einfach nur glUseProgram(ShaderProgramHandle)
Einen gelöschten Shader muss wieder komplett neu compiliert werden.
Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Die nicht benötigten programmzeilen (alle außer glUseProgram) waren tests, da es nicht klappte. Ich habe jetzt ein kleiner Testprogramm ohne allen Schnickschnack geschrieben und es klappt. Es liegt also an meiner Anwendung.
Mitglieder in diesem Forum: 0 Mitglieder und 8 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.