Using the prebuilt 2.0RC binaries, or building my own ones from the latest source, I get an instant crash (access violation, no exception thrown) on calling Font.loadFromFile(), SoundBuffer.loadFromFile() and Image.saveToFile().
Using VS2012(VC++ 11).
The same crash occurs if I compile the built in pong example or run the prebuilt binary.
Intel sandybridge integrated graphics, and nVidia 630M.
Annoying, because I had it working in 1.6, but couldn't get it to compile for windows, only linux. Getting a working Windows build has turned into hell.
Edit: Commenting out all the offending lines, I also notice that the titlebar is filed with garbage (different every run), sometimes with the correct title after the garbage, sometimes not.
Edit2: Guess the code might be helpful, no?
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include <sstream>
using namespace sf;
int main(int, char *[])
{
float frameTime(0);
int score1(0), score2(0);
Vector2f ballSpeed(-400,0);
RenderWindow window(VideoMode(800,600, 32), "gPong");
window.setFramerateLimit(60);
window.clear(Color(0,0,0));
Image whiteBallImage;
Image whitePaddleImage;
Image whiteLineImage;
whiteBallImage.create(6,6, Color(255, 255, 255));
whitePaddleImage.create(10,200, Color(255, 255, 255));
whiteLineImage.create(2,600, Color(255, 255, 255));
Texture whiteBall;
Texture whitePaddle;
Texture whiteLine;
whiteBall.loadFromImage(whiteBallImage);
whitePaddle.loadFromImage(whitePaddleImage);
whiteLine.loadFromImage(whiteLineImage);
Sprite ball(whiteBall);
Sprite paddle1(whitePaddle);
Sprite paddle2(whitePaddle);
Sprite centerLine(whiteLine);
ball.setPosition(400,300);
paddle1.setPosition(20,200);
paddle2.setPosition(770, 200);
centerLine.setPosition(399, 0);
std::ostringstream fpsStream("");
std::ostringstream scoreStream1("");
std::ostringstream scoreStream2("");
Text fpsText(String("fps :0"), Font::getDefaultFont(), 16);
Text scoreText1(String("0"), Font::getDefaultFont(), 72);
Text scoreText2(String("0"), Font::getDefaultFont(), 72);
scoreText1.setPosition(164,0);
scoreText2.setPosition(564,0);
SoundBuffer beepBuffer;
// beepBuffer.loadFromFile("beep.wav");
Sound beep(beepBuffer);
Event event;
Clock clock;
while (window.isOpen()) {
frameTime = clock.getElapsedTime().asSeconds();
clock.restart();
if (frameTime > 0.15f)
frameTime = 0.15f;
fpsStream.str("");
fpsStream << ceil(1.0f/frameTime);
fpsText.setString(String(("fps: " + fpsStream.str()).c_str()));
scoreStream1.str("");
scoreStream1 << score1;
scoreText1.setString(String(scoreStream1.str().c_str()));
scoreStream2.str("");
scoreStream2 << score2;
scoreText2.setString(scoreStream2.str().c_str());
while (window.pollEvent(event)) {
if (event.type == Event::Closed)
window.close();
if (event.type == Event::KeyPressed && (event.key.code == Keyboard::Escape || event.key.code == Keyboard::Q))
window.close();
if (event.type == Event::KeyPressed && event.key.code == Keyboard::F1) {
Image screenShot = window.capture();
// screenShot.saveToFile("screenshot.jpg");
}
}
if (Keyboard::isKeyPressed(Keyboard::W))
paddle1.move(0, -200 * frameTime);
if (Keyboard::isKeyPressed(Keyboard::S))
paddle1.move(0, 200 * frameTime);
if (paddle1.getPosition().y < 0.0f)
paddle1.setPosition(paddle1.getPosition().x, 0.0f);
if (paddle1.getPosition().y > 400.0f)
paddle1.setPosition(paddle1.getPosition().x, 400.0f);
if (Keyboard::isKeyPressed(Keyboard::Up))
paddle2.move(0, -200 * frameTime);
if (Keyboard::isKeyPressed(Keyboard::Down))
paddle2.move(0, 200 * frameTime);
if (paddle2.getPosition().y < 0.0f)
paddle2.setPosition(paddle2.getPosition().x, 0.0f);
if (paddle2.getPosition().y > 400.0f)
paddle2.setPosition(paddle2.getPosition().x, 400.0f);
ball.move(ballSpeed * frameTime);
if (ball.getPosition().x < 30.0f) {
ballSpeed.x = -ballSpeed.x;
ballSpeed.y = ball.getPosition().y - paddle1.getPosition().y - 100.0f;
if (ball.getPosition().y < paddle1.getPosition().y || ball.getPosition().y > paddle1.getPosition().y + 200.0f) {
ball.setPosition(397.0f, 297.0f);
score2 += 1;
}else
beep.play();
}
if (ball.getPosition().x > 770.0f) {
ballSpeed.x = -ballSpeed.x;
ballSpeed.y = ball.getPosition().y - paddle2.getPosition().y - 100.0f;
if (ball.getPosition().y < paddle2.getPosition().y || ball.getPosition().y > paddle2.getPosition().y + 200.0f) {
ball.setPosition(397.0f, 297.0f);
score2 += 1;
}else
beep.play();
}
if (ball.getPosition().y <= 0.0f || ball.getPosition().y >= 600.0f) {
beep.play();
ballSpeed.y = -ballSpeed.y;
}
window.clear(Color(0,0,0));
window.draw(ball);
window.draw(paddle1);
window.draw(paddle2);
window.draw(centerLine);
window.draw(fpsText);
window.draw(scoreText1);
window.draw(scoreText2);
window.display();
}
return EXIT_SUCCESS;
}
Yes I know, default font and all that, I changed it just to reduce the number of places it could go wrong, I'll use my own again when it's fixed.