我正在使用SDL加载图像并将其分配给OpenGL Quad。我找到了一个向我展示如何执行此操作的教程,但是当我运行该程序时,它说未使用SDL Surface变量(代码中的surface)而已在使用它。我不知道是否是因为我在使用类,是因为我利用其他语言的知识来找到解决方案,但是没有运气。

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

//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)))

09-07 07:29