Hello,
I'm trying to switch from using freeglut and Freeimage to SFML. The first step involved loading images from a self created .dat file as a sf::Image object, and passing it into a texture in OpenGL 3.2. The image does get loaded properly, seeing as I can save it and it shows correctly. However, when I call glTexImage2D with GetPixelsPtr() as the data array, my program crashes when it tries to draw the array in OpenGL with glDrawArrays. Mind you, the sf::Image stuff is the only piece of code I have implemented so far. When I was using FreeImage, I could get an array of BYTES (unsigned chars) and pass it to the texture. As far as I understand it, GetPixelsPtr returns a similar array.
I've printed the values in the FreeImage and sf::Image byte arrays both to files to see if there were any odd values, and apart from different values (FreeImage stores its image data somewhat differently I think), I can't see anything out of the ordinary. The code that involves binding to the texture is this:
#include <iostream>
#include <cstdlib>
#include <GL/glew.h>
#include "Texture.h"
//-----------------------------------------------------------------------------
// Class: Texture
// Method: Texture
// Description: constructor
//-----------------------------------------------------------------------------
Texture::Texture ()
{
} // ----- end of method Texture::Texture (constructor) -----
//-----------------------------------------------------------------------------
// Class: Texture
// Method: Texture
// Description: constructor
//-----------------------------------------------------------------------------
Texture::Texture ( GLenum textureTarget, const sf::Image& png ) :
textureTarget_(textureTarget), png_(png)
{
width_ = png_.GetWidth();
height_ = png_.GetHeight();
} // ----- end of method Texture::Texture (constructor) -----
//-----------------------------------------------------------------------------
// Class: Texture
// Method: Texture
// Description: destructor
//-----------------------------------------------------------------------------
Texture::~Texture ()
{
} // ----- end of method Texture::Texture -----
//-----------------------------------------------------------------------------
// Class: Texture
// Method: load
// Description: Loads a targa image from the file.
//-----------------------------------------------------------------------------
void
Texture::load ()
{
glGenTextures(1, &texID);
glBindTexture(textureTarget_, texID);
glTexParameteri(textureTarget_, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(textureTarget_, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(textureTarget_, 0, GL_RGBA, width_, height_, 0, GL_RGBA,
GL_UNSIGNED_BYTE, png_.GetPixelsPtr()); // This is where it fails
// Unbind everything
glBindTexture(textureTarget_, 0);
} // ----- end of method Texture::load -----
//-----------------------------------------------------------------------------
// Class: Texture
// Method: bind
// Description: Binds the texture data into the shaders
//-----------------------------------------------------------------------------
void
Texture::bind ( const GLuint& shader )
{
glBindTexture(textureTarget_, texID);
GLuint gSampler = glGetUniformLocation(shader, "gSampler");
glUniform1i(gSampler, 0);
} // ----- end of method Texture::bind -----