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? |
|
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 |
|
polkom21 Temat założony przez niniejszego użytkownika |
» 2013-09-09 23:39:27 #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 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; }
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. |
|
DejaVu |
» 2013-09-10 10:00:48 |
|
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. |
|
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? |
|
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ą. |
|
pekfos |
» 2013-09-10 19:42:10 assert( backgroundImage.loadFromFile( "data/background.png" ) ); assert( light.loadFromFile( "data/lightFin.png" ) ); assert( playerTexture.loadFromFile( "data/player.png" ) );
To nie jest dobre rozwiązanie. |
|
« 1 » 2 |