Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML2.0] An internal OpenGL call failed in Shader.cpp...

Ostatnio zmodyfikowano 2013-09-24 12:55
Autor Wiadomość
polkom21
Temat założony przez niniejszego użytkownika
[SFML2.0] An internal OpenGL call failed in Shader.cpp...
» 2013-09-09 22:30:29
No to kolejny problem z shaderami. Konsola wywala coś takiego: "An internal OpenGL call failed in Shader.cpp (296) : GL_INVALID_OPERATION, the specified operation is not allowed in the current state". Co może być powodem?
P-91814
DejaVu
» 2013-09-09 23:20:36
Wklej kod, który generuje błąd. Warto również sprawdzić co znajduje się w linijce 296 w pliku Shader.cpp
P-91815
polkom21
Temat założony przez niniejszego użytkownika
» 2013-09-09 23:39:27
C/C++
#include <SFML/Graphics.hpp>
#include <assert.h>

int main()
{
    sf::VideoMode vidmode;
    vidmode.width = 800;
    vidmode.height = 600;
    vidmode.bitsPerPixel = 32;
    assert( vidmode.isValid() );
   
    sf::RenderWindow win( vidmode, "Light test" );
   
    sf::Event event;
   
    sf::Texture backgroundImage, light, playerTexture;
    assert( backgroundImage.loadFromFile( "data/background.png" ) );
    assert( light.loadFromFile( "data/lightFin.png" ) );
    assert( playerTexture.loadFromFile( "data/player.png" ) );
   
    backgroundImage.setRepeated( true );
    sf::Sprite background( backgroundImage );
    background.setTextureRect( sf::IntRect( 0, 0, vidmode.width, vidmode.height ) );
    sf::Sprite player( playerTexture );
   
    sf::Shader lightshader;
    lightshader.loadFromFile( "data/lightshader.frag", sf::Shader::Fragment );
   
    while( win.isOpen() )
    {
        while( win.pollEvent( event ) )
        {
            if( event.type == sf::Event::Closed ) win.close();
           
        }
        sf::Vector2i mousePos = sf::Mouse::getPosition( win );
        lightshader.setParameter( "lightpos", mousePos.x, mousePos.y );
        lightshader.setParameter( "lightColor", sf::Color::Yellow );
        lightshader.setParameter( "screenHeight", vidmode.height );
        lightshader.setParameter( "lightAttenuation", 1.0f, 1.0f, 1.0f );
       
        win.clear();
        win.draw( background, & lightshader );
        win.display();
    }
}

lightshader.frag
C/C++
uniform vec2 lightpos;
uniform vec3 lightColor;
uniform float screenHeight;
uniform vec3 lightAttenuation;
uniform float radius;

uniform sampler2D texture;

void main()
{
    vec2 pixel = gl_FragCoord.xy;
    pixel.y = screenHeight - pixel.y;
    vec2 aux = lightpos - pixel;
    float distance = length( aux );
    float attenuation = 1.0 /( lightAttenuation.x + lightAttenuation.y * distance
   
    + lightAttenuation.z * distance * distance );
    vec4 color = vec4( attenuation, attenuation, attenuation, 1.0 ) * vec4( lightColor, 1.0 );
    gl_FragColor = color; //*texture2D(texture,gl_TexCoord[0].st);
}

No z chęcią bym zobaczył co jest w tej linijce w pliku Shader.cpp tylko, że jest taki problem otóż nigdzie nie mogę znaleźć tego pliku. Jedyne co mam to plik nagłówkowy Shader.hpp od SFML i nic więcej.
P-91817
DejaVu
» 2013-09-10 10:00:48
http://en.sfml-dev.org/forums​/index.php?topic=3186.0

/edit:
Frazy, które należy wpisać w wyszukiwarkę google:

Generalnie rzecz biorąc może to być albo bug albo błędne używanie maszyny stanu OpenGL. Czyli wykonujesz jakąś instrukcję OpenGL w momencie, w którym maszyna OpenGL nie jest w stanie wykonać poprawnie danej operacji np. z powodu braku niezbędnych danych lub braku miejsca na dane.

http://stackoverflow.com​/questions/16132435​/pushglstates-returns-gl-invalid-operation-when-used

W powyższym przypadku wykonywana jest operacja pushGLStates, która generuje wspomniany błąd.

Tu masz jeszcze inne błędy jakie mogą wystąpić:
http://www.opengl.org/sdk/docs​/man/xhtml/glGetError.xml

/edit2:
Ja mam np. SFML 2.0 (RC61) i w tej wersji akurat wspomniany wiersz jest pusty.

Spróbuj również sprawdzić proste przykłady z kursów czy Shadery dobrze Ci działają.
P-91825
polkom21
Temat założony przez niniejszego użytkownika
» 2013-09-10 12:39:34
No jak wrzuciłem z examples shader i sprawdziłem to błędu nie wywala (fakt faktem czarny lub szary ekran mam ale nie ma błędu). Chciałem LTBL ale jest do SFML 1.6 a ja korzystam z 2.0. Chyba sobie dam spokój z światełkami z shaderów. Kiedyś tam przy okazji nauki openGL ogarnę shadery a na razie dam spokój bo już widzę, że nic z tego nie wyjdzie.
P-91833
DejaVu
» 2013-09-10 13:15:15
Może Twoja karta graficzna nie obsługuje shaderów, skoro przykład Ci nie działał prawidłowo?
P-91834
polkom21
Temat założony przez niniejszego użytkownika
» 2013-09-10 14:44:29
No z tego co wiem to obsługuje shadery więc to na pewno nie jest spowodowane moją kartą graficzną.
P-91840
pekfos
» 2013-09-10 19:42:10
C/C++
assert( backgroundImage.loadFromFile( "data/background.png" ) );
assert( light.loadFromFile( "data/lightFin.png" ) );
assert( playerTexture.loadFromFile( "data/player.png" ) );
To nie jest dobre rozwiązanie.
P-91860
« 1 » 2
  Strona 1 z 2 Następna strona