未初始化就使用SDL曲面错误

SDL Surface Being used without being initialised error

本文关键字:SDL 曲面 错误 初始化      更新时间:2023-10-16

我使用SDL加载图像并将其分配给OpenGL quad。我找到了一个教程,向我展示了如何做到这一点,但是当我去运行程序时,它说SDL表面变量(代码中的表面)正在使用而没有初始化。我不知道这是不是因为我在使用类,因为我已经使用了我从其他语言的知识来找到一个解决方案,但没有运气。

下面是一些代码:实体类(到目前为止):

//d2_entity.h
class d2Entity
{
public:
    bool LoadImage(const char* fileName);
    void DrawImage();
    void Clear();
private:
    GLuint *texture;
    GLenum textureFormat;
    GLint noColours;
};
//d2_entity.cpp
bool d2Entity::LoadImageW(const char* fileName)
{
SDL_Surface *surface;
if((surface == IMG_Load(fileName)))
{
    // Check if image size is a power of 2
    if((surface->w & (surface->w - 1)) != 0)
        cout << "Opps! '" << fileName << "'s' width is not a power of 2!";
    if((surface->h & (surface->h -1)) != 0)
        cout << "Opps! '" << fileName << "'s' height is not a power of 2!";
    // Get the No. of channels
    d2Entity::noColours = surface->format->BitsPerPixel;
    // Contains a alpha channel  
    if(d2Entity::noColours == 4)
    {
        if(surface->format->Rmask == 0x000000ff)
            d2Entity::textureFormat = GL_RGBA;
        else
            d2Entity::textureFormat = GL_BGRA;
    }
    // No alpha channel
    else if(d2Entity::noColours == 3)
    {
        if(surface->format->Rmask == 0x000000ff)
            d2Entity::textureFormat = GL_RGB;
        else
            d2Entity::textureFormat = GL_BGR;
    }
    else
        cout << "Opps! The image '" << fileName << "' is not truecolour!" << endl;
    // Create an OpenGL texture
    glGenTextures(1, d2Entity::texture);
    glBindTexture(GL_TEXTURE_2D, *d2Entity::texture);
    // Set texture streching properties
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, d2Entity::noColours, surface->w, surface->h, 0, d2Entity::textureFormat, GL_UNSIGNED_BYTE, surface->pixels);
}
else
{
    cout << "Opps! The entity image could not be loaded!" << endl;
    SDL_Quit();
    return false;
}
if(surface)
    SDL_FreeSurface(surface);
return true;
}
SDL_Surface *surface;    
if((surface == IMG_Load(fileName)))

您从未初始化surface,然后您试图将其与IMG_Load的结果进行比较。我很确定你是想把它赋值。

SDL_Surface *surface;
if((surface = IMG_Load(fileName)))

您在这里进行了比较而不是赋值

if((surface == IMG_Load(fileName)))
{

代码应该是:

SDL_Surface surface;
surface = IMG_Load("image.bmp");
if(surface != NULL)
{
    //do stuff with surface