• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed shadery GLSL w SFML

Object Storage Arubacloud
+1 głos
1,016 wizyt
pytanie zadane 30 października 2015 w C i C++ przez criss Mędrzec (172,590 p.)
zamknięte 17 listopada 2016 przez criss

Bawił się ktoś z was w pisanie shaderów w GLSL, chociażby podstawowych i uzywanie ich w SFML?

Udało mi się zrobić cokolwiek właściwie przepisując kod stąd: https://youtu.be/gsqrBx8CI0o Pzrepisując, bo nie znam ani glsl (no teraz jakies podstawy), ani SDL. Jednak jak próbuje tego samego shadera użyć w  sfml-u - obiekt rysowany z shaderem po prstu jest niewidoczny. Niezależnie czy jest to sf::RectangleShape VertexArray czy jakiś sprite. Kod c++ wygląda tak: 

#include <SFML/Graphics.hpp>
#include <iostream>

int main()
{

    sf::Clock clock;

    sf::Shader shader;
    if(!shader.loadFromFile("shader.vert", "shader.frag"))
                std::cout<<"didnt load ;//\n";

    sf::VertexArray triangle(sf::Triangles, 3);

    triangle[0].position = sf::Vector2f(10, 10);
    triangle[1].position = sf::Vector2f(100, 10);
    triangle[2].position = sf::Vector2f(100, 100);

    //triangle[0].color = sf::Color::Red;
    //triangle[1].color = sf::Color::Blue;
    //triangle[2].color = sf::Color::Green;

    sf::RenderWindow window(sf::VideoMode(500, 500), "vertices shading!");

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed){
                window.close();
                return 0;
            }
        }

        shader.setParameter("time", clock.getElapsedTime().asSeconds());

        window.clear(sf::Color::Black);
        window.draw(triangle, &shader);
        window.display();
    }

    return 0;
}

vertex i fragment shader poniżej: 

http://pastebin.com/XyHrEasX

http://pastebin.com/UcMYY6He

komentarz zamknięcia: .

1 odpowiedź

0 głosów
odpowiedź 30 października 2015 przez Patrycjerz Mędrzec (192,320 p.)
A mogłbyś choć opisać, co te shader'y robią?
komentarz 30 października 2015 przez criss Mędrzec (172,590 p.)
Tylko zmieniają kolor zależnie od czasu. Na tym linku, który podrzuciłem widać. Co prawda u mnie to wygląda inaczej (nie ma takich fal, tylko jednolity kolor się zmienia), nie wiem jakim cudem, skoro mam ten sam kod :D
komentarz 30 października 2015 przez Patrycjerz Mędrzec (192,320 p.)
U mnie wywala cały program podczas wczytywania shader'ów. Ciekawa sprawa... może trzeba mieć odpowiednią wersję SFML?
komentarz 30 października 2015 przez criss Mędrzec (172,590 p.)

Korzystam z 2.3, a jest konkretny tutorial na stronie SFML nt. dołączania i korzystania z shaderów (dla SFML 2.3). ( http://www.sfml-dev.org/tutorials/2.3/graphics-shader.php )

Z resztą nigdzie nie wspominają, że o jakiejś konkretnej wersji. 

Wywala, tzn. crashuje się? o_O Kompletnie nie ogarniam co się dzieje.

komentarz 30 października 2015 przez Patrycjerz Mędrzec (192,320 p.)

Ja też. Przy próbie wywołania metody loadFromFile program zwraca wartość 255, oczywiście wcześniej zawieszając się. Może ta metoda korzysta ze standardu C++11, którego mój kompilator nie obsługuje? Zaraz sprawdzę.

komentarz 30 października 2015 przez criss Mędrzec (172,590 p.)
Jak możesz pisać cokolwiek bez cpp11 D: a ogólnie to nie wiem, ale nie sondze, żeby to objawiało się w ten sposób, raczej by się nie skompilował w ogóle.
komentarz 30 października 2015 przez Patrycjerz Mędrzec (192,320 p.)

Cholera jasna. Nawet po zmianie kompilatora na nowszy (co poniekąd było dość ważne), program nie działa, a nawet nie kompiluje się - cały problem jest w tej cholernej metodzie loadFromFile. Oto log:

||=== Build: Debug in test (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function `main':|
C:\Users\Patryk\Documents\test\main.cpp|10|undefined reference to `_imp___ZN2sf6Shader12loadFromFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS0_4TypeE'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

 

komentarz 30 października 2015 przez criss Mędrzec (172,590 p.)
A masz sfmla na pewno zalinkowanego jak trzeba? Spróbuj usunąć pliki*.o, może jakieś śmeici zostały z poprzednich kompilacji...
komentarz 30 października 2015 przez Patrycjerz Mędrzec (192,320 p.)

Więc tak:

  • Pobrałem najnowszą wersję kompilatora TDM-GCC ze strony autorów (ten kompilator jest dołączany do Code::Blocks, tylko go wymieniłem na nowszą wersję, aby obsługiwał m.in. C++11).
  • Pobrałem najnowszą wersję SFML dla mojego kompilatora.

Wszystko działa, cały kod, tylko ta jedna cholerna metoda... już nie wiem, w czym jest problem.

 

komentarz 30 października 2015 przez criss Mędrzec (172,590 p.)
Jeśli jeszcze ci się chce, to możesz spróbować skompilować przykład wykorzystania shaderów, jest w folderze SFML examples/shader
1
komentarz 30 października 2015 przez Patrycjerz Mędrzec (192,320 p.)
Ciekawe... wszystko działa wtedy, gdy zalinkuje pliki .lib ze starej biblioteki, a pliki .dll z nowej o_O Boję się teraz korzystać z takiej "mieszanki". Chyba lepiej przeinstaluję całego Code::Blocks'a i zrobię wszystko od nowa.

Podobne pytania

0 głosów
0 odpowiedzi 281 wizyt
pytanie zadane 25 października 2020 w C i C++ przez Xarcane Początkujący (440 p.)
0 głosów
2 odpowiedzi 1,661 wizyt
pytanie zadane 7 lipca 2015 w Inne języki przez arek01996 Stary wyjadacz (12,100 p.)
0 głosów
0 odpowiedzi 240 wizyt
pytanie zadane 23 maja 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)

92,761 zapytań

141,685 odpowiedzi

320,485 komentarzy

62,105 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...