Ładowanie tekstur w SFML

0

Napisałem funkcje ładującą teksturę do OpenGL.
Do załadowania używam SFML.

void LoadTexture(GLuint &texture, std::string path)
{
	sf::Image image;
        if (!image.loadFromFile(path))return;

	// generowanie nazwy tekstury
	glGenTextures( 1, & texture );

	// wybranie biezacej tekstury
        glBindTexture( GL_TEXTURE_2D, texture );

	// ustalenie parametrów tekstury
	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);

	// ustalenie trybu teksturowania
	glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);

	// tworzenie tekstury
	glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, image.getSize().x,image.getSize().y, 
                      0, GL_RGB, GL_UNSIGNED_BYTE, image.getPixelsPtr());
}

Jednak gdy wywołuje funkcje, program się kompiluje i wywala:
http://i.imgur.com/xbx5Yw0.png
a z głośnika efekt dźwiękowych w postaci trzech szybkich 'piknięć'.

Błąd jest na pewno w funkcji tylko nie wiem gdzie bo jestem początkujący w SFML'u

0
void LoadTexture(GLuint &texture, std::string path)

Zamiast tej referencji lepiej po prostu zwracaj GLuint (zero w razie niepowodzenia):

GLuint LoadTexture(std::string path)
if (!image.loadFromFile(path))return;

co ta funkcja zwraca? czy return się wykonuje (zostawiając śmieci w texture)?
W tej chwili nie masz żadnej kontroli błędów.
Dlatego lepiej zwracać 0 z funkcji, i masz jak to sprawdzać.

GLuint LoadTexture(std::string path)
{
    if (!image.loadFromFile(path))
        return 0;

    GLuint result;
    glGenTextures(1, &result);
    ...
    return result;
}

...

jakas_tekstura = LoadTexture("plik.jpg");
if (!jakas_textura)
    MessageBox(...);

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