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

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

1

18.06.2014, 12:20

Shader Problem (Parameter "value" not found in shader)

Hey Leute,
hab da ein kleines Problem.
Undzwar hab ich beim benutzen eines Shaders permanent den Fehler das ein Parameter nicht gefunden wird,
der aber ganz klar im Shader selbst vorhanden ist.
Nach kurzem Googlen fand ich heraus das der Fehler auftreten kann wenn eine Variable zwar deklariert
aber nicht benutzt wird was ja eigentlich der Fall ist?

Hier mal der Shader:

HLSL-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
uniform sampler2D source;
uniform vec2 offsetFactor;

void main()
{
 vec2 textureCoordinates = gl_TexCoord[0].xy;
 vec4 color = vec4(0.0);
 color += texture2D(source, textureCoordinates - 4.0 * offsetFactor) * 0.0162162162;
 color += texture2D(source, textureCoordinates - 3.0 * offsetFactor) * 0.0540540541;
 color += texture2D(source, textureCoordinates - 2.0 * offsetFactor) * 0.1216216216;
 color += texture2D(source, textureCoordinates - offsetFactor) * 0.1945945946;
 color += texture2D(source, textureCoordinates) * 0.2270270270;
 color += texture2D(source, textureCoordinates + offsetFactor) * 0.1945945946;
 color += texture2D(source, textureCoordinates + 2.0 * offsetFactor) * 0.1216216216;
 color += texture2D(source, textureCoordinates + 3.0 * offsetFactor) * 0.0540540541;
 color += texture2D(source, textureCoordinates + 4.0 * offsetFactor) * 0.0162162162;
 gl_FragColor = color;
}


Achja den Shader habe ich nicht selbst geschrieben, sondern entstammt aus einem Buch.

Der Parameter "offsetFactor" kann nicht gefunden werden,
mit source gibt es komischer weise keine Probleme.
Falls weitere Informationen benötigt werden liefer ich gerne nach :)

MfG
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FreezingEngine« (18.06.2014, 13:35)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

18.06.2014, 13:25

Woher genau kommt dieser Fehler?

3

18.06.2014, 13:27

Hast du denn die uniform variable auch gesetzt im Host code?
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

4

18.06.2014, 13:27

Also ich benutze den Shader mit der sf::Shader Klasse die dann wohl auch den fehler ausgibt, falls du das meinst?

C-/C++-Quelltext

1
gaussianBlur.setParameter("offsetFactor", offsetFactor);


Beim Laden gibt es keine Fehler bin auch im Debug-Modus nochmal alles durchgegangen.
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

18.06.2014, 13:29

Ich find es nur sehr merkwürdig, dass der Fehler sich ja offenbar auf einen Uniform namens "value" bezieht anstatt auf "offsetFactor"...

Sicher, dass du nicht irgendwo ein "value" setzen versuchst!?

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

6

18.06.2014, 13:33

Nein "value" war jetzt nur allgemein gehalten.
Hab insgesamt 5 Shader in benutzung wobei in 2 unterschiedlichen Shadern jeweils 1 Variable
anscheinend nicht gefunden werden kann.

Edit: hab oben im Code float offsetFactor zu vec2 offsetVector geändert, so war es ursprünglich hab nur was ausprobiert mit float.
Das komische ist halt das aus insgesamt 5 Shadern es in 2 Shadern mit jeweils einer Variable ein Problem gibt.
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

7

18.06.2014, 13:38

Woher kommt denn eigentlich die Fehlermeldung? Vom HostCompiler (VStudio?) oder doch vom glsl compiler?

Kann es sein, dass es heißt "kann nicht gebunden werden"?

In diesem Fall solltest du uns mal noch die Definition & Deklaration deiner Variable zeigen im Host Code und den Fehlercode dazu geben (falls es einen gibt)
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

8

18.06.2014, 13:46

Also das Programm läuft ganz normal.
Meine Sprites werden gerendert alles in ordnung.
Das einzige Fehlermeldung die ich bekomme ist in der Konsole (Ich denke von der SFML selbst): Parameter "x" was not found in shader.

Ich füge mal ein Bild hinzu:


(Link)
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

9

18.06.2014, 13:54

Ah, der Fehler tritt in int sf::Shader::getParamLocation(const std::string& name) auf.
Dort wird glGetUniformLocationARB aufgerufen, was scheinbar -1 zurückgibt. D.h. dein Shader scheint zu der Zeit, zu der du das Uniform setzt, nicht aktiv zu sein oder nicht richtig gelinkt worden zu sein.

Siehe https://github.com/LaurentGomila/SFML/bl…Shader.cpp#L592

Wenn dein Programm auch ohne Beachtung dieser Fehlermeldungen einwandfrei läuft, gehe ich davon aus, dass du deinen Shader garnicht (noch nicht) nutzt. In dem Fall einfach die Uniforms dann setzen, wenn du auch den Shader nutzt.
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

10

18.06.2014, 14:06

Danke für die Mühe :)
Also benutzen tu ich den Shader schon meines erachtens.
Wenn du willst poste ich den Code der Effekt-Klasse.

Komisch...
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

Werbeanzeige