SDL_SetVideoMode与SDL_CreateRGBSurface

时间:2012-06-28 14:11:43

标签: sdl sdl-1.2

SDL专家应该是一个简单的问题。我对以下两个看似等效的函数感到困惑,并想知道何时使用哪个

SDL_Surface * SDL_SetVideoMode (int width, int height, int bpp, Uint32 flags);
SDL_Surface * SDL_CreateRGBSurface (Uint32 flags,
        int width, int height, int depth,
        Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);

上述两者之间的根本区别是什么?

提到here,SDL_CreateRGBSurface必须在 SDL_SetVideoMode之后调用。为什么会这样?

2 个答案:

答案 0 :(得分:4)

它们是完全不同的功能。

SDL_SetVideoMode创建视频表面(a.k.a.应用程序屏幕)并将其显示给用户。

SDL_CreateRGBSurface会创建一个空表面。

调用SDL_SetVideoMode后,如果成功,将向用户显示一个屏幕,您将拥有(通过该功能返回,或通过调用SDL_GetVideoSurface)视频表面,屏幕表面。 / p>

SDL_CreateRGBSurface只需创建一个可以随之播放的空表面。

一些用法示例是:您的应用程序启动并初始化视频,然后您创建一个空表面并以某种方式操纵它,最后您将其blit到视频表面,用户将看到您操纵的表面(记住翻转屏幕表面SDL_Flip)。

知道SDL_Surface是什么很重要。既然你没有问我假设你知道。

答案 1 :(得分:2)

SDL_SetVideoMode创建一个窗口。该表面将在屏幕上可见。

SDL_CreateRGBSurface创建了屏幕外图像。例如,从磁盘加载图像时使用SDL_CreateRGBSurface。您需要将其blit到屏幕才能看到它们。