Original Post
I am using SDL to load my texture but it is appearing as a black quad and I don't know why: I am drawing it like so:
//Texture.h
#pragma once
#include <SDL/SDL_image.h>
#include <GL/glut.h>
#include <string>
#pragma comment(lib, "SDL_image.lib")
class Texture {
public:
unsigned int Width, Height, Image;
Texture(std::string Filename);
};
//Texture.cpp
#include "Texture.h"
Texture::Texture(std::string Filename) {
Width = Height = Image = 0;
SDL_Surface* Surface;
SDL_Surface* Blank;
Surface = IMG_Load(Filename.c_str());
if(!Surface)
throw std::runtime_error("Unable to load \"" + Filename + "\": " + IMG_GetError());
Blank = SDL_CreateRGBSurface(SDL_SWSURFACE, Surface->w, Surface->h, 32,
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
0x000000FF,
0x0000FF00,
0x00FF0000,
0xFF000000
#else
0xFF000000,
0x00FF0000,
0x0000FF00,
0x000000FF
#endif
);
SDL_Rect Area;
Area.x = Area.y = 0;
Area.w = Surface->w;
Area.h = Surface->h;
SDL_BlitSurface(Surface, &Area, Blank, &Area);
unsigned int numColours = Blank->format->BytesPerPixel;
GLenum Format;
if(numColours == 4) {
if(Blank->format->Rmask == 0x000000FF)
Format = GL_RGBA;
else
Format = GL_BGRA_EXT;
} else if(numColours == 3) {
if(Blank->format->Rmask == 0x000000FF)
Format = GL_RGB;
else
Format = GL_BGR_EXT;
} else
throw std::runtime_error("Image isn't truecolour");
glGenTextures(1, &Image);
glBindTexture(GL_TEXTURE_2D, Image);
glTexImage2D(GL_TEXTURE_2D, 0, numColours, Blank->w, Blank->h, 0, Format, GL_UNSIGNED_BYTE, Blank->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_DECAL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_DECAL);
Width = Blank->w;
Height = Blank->h;
SDL_FreeSurface(Surface);
SDL_FreeSurface(Blank);
}
Texture Image("C:/Users/James/Desktop/Obj/test.bmp");
//...
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, Image.Image);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f(544.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex2f(544.0f, (float)Image.Height);
glTexCoord2f(1.0f, 1.0f); glVertex2f(544.0f + (float)Image.Width, (float)Image.Height);
glTexCoord2f(1.0f, 0.0f); glVertex2f(544.0f + (float)Image.Width, 0.0f);
glEnd();