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

Aktuelle Zeit: Fr Jul 18, 2025 00:25

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Shader dynamisch zuschalten
BeitragVerfasst: Mi Apr 21, 2010 10:11 
Offline
DGL Member
Benutzeravatar

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;

  glAttachShader (ShaderProgramHandle, VertexShaderHandle);
  glAttachShader (ShaderProgramHandle, FragmentShaderHandle);

  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.

Danke,

Andree


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Shader dynamisch zuschalten
BeitragVerfasst: Mi Apr 21, 2010 10:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Shader dynamisch zuschalten
BeitragVerfasst: Mi Apr 21, 2010 14:34 
Offline
DGL Member
Benutzeravatar

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.

Danke,

Andree


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


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.006s | 14 Queries | GZIP : On ]