SDL2源代码分析2 窗口(SDL Window)

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

=====================================================

SDL源代码分析系列文章列表:

SDL2源代码分析1:初始化(SDL_Init())

SDL2源代码分析2:窗口(SDL_Window)

SDL2源代码分析3:渲染器(SDL_Renderer)

SDL2源代码分析4:纹理(SDL_Texture)

SDL2源代码分析5:更新纹理(SDL_UpdateTexture())

SDL2源代码分析6:复制到渲染器(SDL_RenderCopy())

SDL2源代码分析7:显示(SDL_RenderPresent())

SDL2源代码分析8:视频显示总结

=====================================================


上一篇文章分析了SDL的初始化函数SDL_Init()。这篇文章继续分析SDL的源代码。本文分析SDL的窗口(SDL_Window)。



SDL播放视频的代码流程如下所示。

初始化: 

SDL_Init(): 初始化SDL。 

SDL_CreateWindow(): 创建窗口(Window)。 

SDL_CreateRenderer(): 基于窗口创建渲染器(Render)。 

SDL_CreateTexture(): 创建纹理(Texture)。 

循环渲染数据: 

SDL_UpdateTexture(): 设置纹理的数据。 

SDL_RenderCopy(): 纹理复制给渲染器。 

SDL_RenderPresent(): 显示。

上篇文章分析了该流程中的第一个函数SDL_Init()。本文继续分析该流程中的第二个函数SDL_CreateWindow()


SDL_Window

SDL_Window结构体定义了一个SDL2中的窗口。如果直接使用SDL2编译好的SDK的话,是看不到它的内部结构的。有关它的定义在头文件中只有一行代码,但是这一行定义前面的注释非常之多,如下所示:

/** *  \brief The type used to identify a window * *  \sa SDL_CreateWindow() *  \sa SDL_CreateWindowFrom() *  \sa SDL_DestroyWindow() *  \sa SDL_GetWindowData() *  \sa SDL_GetWindowFlags() *  \sa SDL_GetWindowGrab() *  \sa SDL_GetWindowPosition() *  \sa SDL_GetWindowSize() *  \sa SDL_GetWindowTitle() *  \sa SDL_HideWindow() *  \sa SDL_MaximizeWindow() *  \sa SDL_MinimizeWindow() *  \sa SDL_RaiseWindow() *  \sa SDL_RestoreWindow() *  \sa SDL_SetWindowData() *  \sa SDL_SetWindowFullscreen() *  \sa SDL_SetWindowGrab() *  \sa SDL_SetWindowIcon() *  \sa SDL_SetWindowPosition() *  \sa SDL_SetWindowSize() *  \sa SDL_SetWindowBordered() *  \sa SDL_SetWindowTitle() *  \sa SDL_ShowWindow() */typedef struct SDL_Window SDL_Window;

在源代码工程中可以看到它的定义,位于video\SDL_sysvideo.h文件中。它的定义如下。

/* Define the SDL window structure, corresponding to toplevel windows */struct SDL_Window{
        const void *magic;    Uint32 id;    char *title;    SDL_Surface *icon;    int x, y;    int w, h;    int min_w, min_h;    int max_w, max_h;    Uint32 flags;    Uint32 last_fullscreen_flags;    /* Stored position and size for windowed mode */    SDL_Rect windowed;    SDL_DisplayMode fullscreen_mode;    float brightness;    Uint16 *gamma;    Uint16 *saved_gamma;        /* (just offset into gamma) */    SDL_Surface *surface;    SDL_bool surface_valid;    SDL_bool is_destroying;    SDL_WindowShaper *shaper;    SDL_WindowUserData *data;    void *driverdata;    SDL_Window *prev;    SDL_Window *next;};

可以看出其中包含了一个“窗口”应该包含的各种属性。这个结构体中的各个变量还没有深入研究,暂不详细分析。下面来看看如何创建这个SDL_Window。



SDL_CreateWindow()


函数简介

SDL_CreateWindow()用于创建一个视频播放的窗口。SDL_CreateWindow()的原型如下。

SDL_Window * SDLCALL SDL_CreateWindow(const char *title,                                                      int x, int y, int w,                                                      int h, Uint32 flags);

参数含义如下。
title  :窗口标题
x  :窗口位置x坐标。也可以设置为SDL_WINDOWPOS_CENTERED或SDL_WINDOWPOS_UNDEFINED。
y  :窗口位置y坐标。同上。
w  :窗口的宽
h  :窗口的高
flags :支持下列标识。包括了窗口的是否最大化、最小化,能否调整边界等等属性。
       ::SDL_WINDOW_FULLSCREEN,    ::SDL_WINDOW_OPENGL,
       ::SDL_WINDOW_HIDDEN,        ::SDL_WINDOW_BORDERLESS,
       ::SDL_WINDOW_RESIZABLE,     ::SDL_WINDOW_MAXIMIZED,
       ::SDL_WINDOW_MINIMIZED,     ::SDL_WINDOW_INPUT_GRABBED,
       ::SDL_WINDOW_ALLOW_HIGHDPI.

 返回创建完成的窗口的ID。如果创建失败则返回0。


函数调用关系图

SDL_ CreateWindow ()关键函数的调用关系可以用下图表示。


上面的函数调用关系图本来是一张高清大图,但是由于博客对图片尺寸有限制,因而显得不太清晰。相册里面上传了一份原始的大图片:

http://my.csdn.net/leixiaohua1020/album/detail/1793195

打开上述相册里面的图片,右键选择“另存为”即可保存原始图片。


<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值