SFML Failed to open vertex shader

0

Hej, korzystam z książki SFML Game Development. Korzystam z kodu dołączonego do książki. Podczas uruchamiania gry pojawia się problem Failed to open vertex shader "Media/Shaders/FullPass.vert". W kodzie jest on ładowany w tym miejscu:

BloomEffect::BloomEffect()
    : mShaders()
    , mBrightnessTexture()
    , mFirstPassTextures()
    , mSecondPassTextures()
{
    mShaders.load(Shaders::BrightnessPass, "Media/Shaders/Fullpass.vert", "Media/Shaders/Brightness.frag");
    mShaders.load(Shaders::DownSamplePass, "Media/Shaders/Fullpass.vert", "Media/Shaders/DownSample.frag");
    mShaders.load(Shaders::GaussianBlurPass, "Media/Shaders/Fullpass.vert", "Media/Shaders/GuassianBlur.frag");
    mShaders.load(Shaders::AddPass, "Media/Shaders/Fullpass.vert", "Media/Shaders/Add.frag");
}

No i oczywiście w folderze Media/Shaders stworzyłem plik tekstowy który nazwałem FullPass.Vert a plik zawiera kod"

void main()
{
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
    gl_TexCoord[0] = gl_MultiTexCoord0;
}

Macie jakieś pomysły co jest nie tak? Dodam że ścieżka do pliku jest na pewno prawidłowa,wszystko wczytuje się poprawnie,textury,dźwięki,muzyka poza shaderami.

0

"Fullpass" p w twoim kodzie jest z małej litery a w błędzie jest, że brakuje Pass czyli 'p' z dużej, ale windows raczej odróżnia małe od dużych w ścieżkach, więc chyba nie powinien być problem tego typu.

0

Plik ma nazwę Fullpass.vert i w ścieżce tak samo, to błąd w moim pytaniu, więc dalej nie mam pomysłu co jest nie tak :D

0

Nie wiem czym u Ciebie jest mShaders dlatego nie mogłem tego znaleźć w API.
Sugeruję jednak:
1. Sprawdź czy podanie pełnych ścieżek (na przykład "C:/Dev/Game/Resources/Media/Shaders/Fullpass.vert") rozwiązuje problem. Sprawdź to podając pełne ścieżki zarówno dla fragment jak i vertex shader.

2. Jeśli przy pełnych ścieżkach pliki są wykrywane i otwierane, to problem leży w ustawieniach środowiska: Upewnij się, że wśród zdefiniowanych ścieżek includów masz dodaną taką, która kończyć się będzie miejscem, od którego próbujesz otwierać plik.
Dla Visual Studio (nie czytałem wspomnianej książki ale zakładam, że właśnie z tego korzystasz) będzie to we właściwościach projektu, zakładka C/C++ -> Additional Include Directories
Dla CMake spróbuj dodać odpowiednie include_directories("Twoja ścieżka, od której zaczyna się Media/Shaders/Fullpass.vert"). Warto skorzystać z makr, na przykład: ${CMAKE_CURRENT_SOURCE_DIR}

3. Jeśli 1. nie rozwiązuje problemu, sprawdź czy przypadkiem nie edytujesz shaderów w innym edytorze. Może blokuje on dostęp do tego pliku...

0

Z tego co widzę w kodzie z tej książki na GitHubie, fa funkcja load pochodzi z instancji tego szablonu. API nie mówi co dokładnie nie wyszło ale można by spróbować glGetError. Ponieważ złe ścieżki są jednak ciągle najprawdopodobniejszym źródłem problemów, mógłbyś albo użyć ścieżek bezwzględnych, albo do tego szablonu dodać funkcję używającą loadFromMemory lub loadFromStream i wczytać dane bezpośrednio ze stringa. Jak nie działa, to poszukaj sobie opengl debuggerów. Kiedyś używałem tego https://www.opengl.org/sdk/tools/BuGLe/ by wykryć problemy z inną biblioteką (okazało się, że używane są rozszerzenia OpenGL, których nie było w systemie i trzeba było doinstalować bibliotekę).

Skompilowałem ten kod z książki u siebie na Linuksie i działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1