Hi Leute.
Das Problem ist folgendes. Ich habe 2 Shader. Einen Default- und einen Sprite Shader.
Der Default Shader lädt und läuft einwandfrei.
Beide Shader sind in GLSL 330 geschrieben.
Als Framework verwende ich OpenTK
Der Spriteshader bindet trotz anderer Quelldatei den Fragmentshader des Default Shaders.
Beide Fragmentshader unterscheiden sich nur in der Farbe welche sie den Fragmenten verpassen.
Sonst sind beide Shader identisch. Der Default Shader läuft ohne Probleme.
Beim Laden des Spriteshaders steht auch der richtige Quellcode für den Fragmentshader im string.
Beim Compilieren der beiden Shader treten keine Fehler auf.
Die Verzeichnisse stimmen auch.
Beim Rendern wird auf die richtige ShaderID verwiesen.
Zunächst wird der Defaultshader geladen. Danach der SpriteShader.
Wenn ich den DefaultShader nicht laden lasse erscheint auch beim Spriteshader kein Bild.
Hat vieleicht jemand von Euch schon mal ähnliche Probleme gehabt?
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
private void ShaderInit_3_3DefaultShader()
{
int id = GL.CreateProgram();
this.vsHandle = GL.CreateShader(ShaderType.VertexShader);
this.fsHandle = GL.CreateShader(ShaderType.FragmentShader);
this.vsSource = this.readShadercodeFromRessource("Graphics.Shader.GLSL_330.OGL3_3_vs.txt");
this.fsSource = this.readShadercodeFromRessource("Graphics.Shader.GLSL_330.OGL3_3_fs.txt");
GL.ShaderSource(this.vsHandle, vsSource);
GL.ShaderSource(this.fsHandle, fsSource);
GL.CompileShader(this.vsHandle);
GL.CompileShader(this.fsHandle);
this.GetShaderInfoLog(this.vsHandle, 0, "OGL3_3_vs.txt");
this.GetShaderInfoLog(this.fsHandle, 1, "OGL3_3_fs.txt");
GL.AttachShader(id, this.vsHandle);
GL.AttachShader(id, this.fsHandle);
GL.DeleteShader(this.fsHandle);
GL.DeleteShader(this.vsHandle);
GL.LinkProgram(id);
//Shader anlegen
ShaderUnit shader = new ShaderUnit(id, GetUniformLocations(id));
Shader.Add(ShaderTypes.OGL3_3,shader);
}
|
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
private void ShaderInit_3_3SpriteShader()
{
int id = GL.CreateProgram();
this.vsHandle = GL.CreateShader(ShaderType.VertexShader);
this.fsHandle = GL.CreateShader(ShaderType.FragmentShader);
this.vsSource = this.readShadercodeFromRessource("Graphics.Shader.GLSL_330.OGL3_3_Sprite_vs.txt");
this.fsSource = this.readShadercodeFromRessource("Graphics.Shader.GLSL_330.OGL3_3_Sprite_fs.txt");
GL.ShaderSource(this.vsHandle, vsSource);
GL.ShaderSource(this.fsHandle, fsSource);
GL.CompileShader(this.vsHandle);
GL.CompileShader(this.fsHandle);
this.GetShaderInfoLog(this.vsHandle, 0, "OGL3_3_Sprite_vs.txt");
this.GetShaderInfoLog(this.fsHandle, 1, "OGL3_3_Sprite_fs.txt");
GL.AttachShader(id, this.vsHandle);
GL.AttachShader(id, this.fsHandle);
GL.DeleteShader(this.fsHandle);
GL.DeleteShader(this.vsHandle);
GL.LinkProgram(id);
//Shader anlegen
ShaderUnit shader = new ShaderUnit(id, GetUniformLocations(id));
Shader.Add(ShaderTypes.OGL3_3_Sprite, shader);
}
|
|
HLSL-Quelltext
|
1
2
3
4
5
6
7
8
|
//Default Shader
#version 330
out vec4 FragmentColor;
void main()
{
// Set the output color of our current pixel
FragmentColor=vec4(1.0,1.0,1.0,1.0);
}
|
|
HLSL-Quelltext
|
1
2
3
4
5
6
7
8
|
//Sprite Shader
#version 330
out vec4 FragmentColor;
void main()
{
// Set the output color of our current pixel
FragmentColor=vec4(1.0,0.0,0.0,1.0);
}
|