Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

1

17.07.2013, 21:16

OpenTK lädt falschen Fragmentshader

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);
}

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

2

17.07.2013, 21:59

Problem Gelöst.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

18.07.2013, 01:03

Und wie hast du es gelöst?

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

4

19.07.2013, 17:39

Es hat nur ne Matrix gefehlt.
Die Sprites waren genau 0*0 pixel groß.
Übrigens cooles Bild. ^^
Der Fragende Gesichtsausdruck passt voll und ganz. :thumbsup:
Ich glaube den haben hier viele.^^

Werbeanzeige