【问题标题】:Image doesn't show in SDL 2.0图像未在 SDL 2.0 中显示
【发布时间】:2013-06-08 17:46:24
【问题描述】:

我正在使用 SDL 2.0 编写一个 OpenGL 游戏。现在我有一个问题。我将在屏幕上绘制图像。现在我创建窗口并初始化所有内容。图像确实加载没有错误,但没有显示在屏幕上。下面是一些代码示例。绘制位图需要所有这些代码。没有显示其他代码。我得到一个带有此代码的黑色窗口。而且没有图像:(。(将代码更新为 main 和一个函数)

 void Bitmap(const tstring& nameRef, int xPos, int yPos, int width, int height)
{
SDL_Surface* image;
     SDL_Rect rect;
    rect.x = xPos;
    rect.y = yPos;
    rect.h = height;
    rect.w = width;

    image = SDL_LoadBMP(("./GameData/Bitmap/" + m_FileName).c_str());

    SDL_BlitSurface(image , NULL , SDL_GetWindowSurface(GAME_ENGINE->GetMainWindow()) , &rect);

}


int main(int argc, char** argv)
{
SDL_Window * m_MainWindowPtr =nullpr;

//Initialize SDL
    if(SDL_Init(SDL_INIT_EVERYTHING) < 0)
    {
        return false;
    }

    //Create Window
    if(m_Fullscreen == false)
    {
        m_MainWindowPtr = SDL_CreateWindow(m_WindowName.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, m_ScreenWidth, m_ScreenHeight, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL);
    }
    else if(m_Fullscreen == true)
    {
        m_MainWindowPtr = SDL_CreateWindow(m_WindowName.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, m_ScreenWidth, m_ScreenHeight, SDL_WINDOW_FULLSCREEN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL);
    }

    //check if the window is made, else quit the game
    if(m_MainWindowPtr == nullptr)
    {
        return false;
    }

    //Enable unicode
    //SDL_EnableUNICODE( SDL_TRUE );

    // NEEDED TO DRAW OPENGL 
    SDL_GLContext glcontext = SDL_GL_CreateContext(m_MainWindowPtr); 

    //LIKE THE OLD SWAP BUUFERS FUNCTION 
    SDL_GL_SwapWindow(m_MainWindowPtr); 


Bitmap("test.bmp", 500, 500, 247, 360);
}

【问题讨论】:

  • 怎么知道图片加载正确?
  • 如果图像未正确加载,SDL_LoadBMP 返回一个 NULL 指针。并且 SDL_LoadBMP 不返回任何 NULL 指针。
  • 那么问题在其他地方没有显示。发布一个简短的、独立的、正确的示例,而不是部分代码,会更好。
  • 这是图像的所有代码。我在项目中有其他代码,但那是用于播放音频等。这与图像无关。
  • 最小可运行工作示例:stackoverflow.com/questions/4153055/…

标签: c++ image sdl


【解决方案1】:

SDL_UpdateRect ?

您是否正确设置了 OPEN_GL? 视口?

如果你打算使用 opengl 进行渲染,我没有看到任何 opengl 代码。

试试这里的例子,告诉我们结果如何?

http://wiki.libsdl.org/moin.fcg/SDL_GL_CreateContext

【讨论】:

  • 抱歉,SDL_UpdateRect 在 SDL 2.0 中不存在。我会尝试实现 OpenGL 的东西。
【解决方案2】:

尝试SDL_RenderPresent(替换 SDL 2.0 中的 SDL_Flip 和 SDL_UpdateRects)或附加发布的 OpenGL 解决方案。

【讨论】:

    猜你喜欢
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 2015-10-30
    • 1970-01-01
    • 2015-06-19
    相关资源
    最近更新 更多