• SDL窗口创建以及简单显示(1)


    SDL窗口创建以及简单显示

    项目创建步骤

     1. 使用Qt Creator创建一个C项目

     2. 将SDL库文件放到源文件目录下

     在项目pro文件中添加库文件

    1. win32{
    2. INCLUDEPATH += $$PWD/SDL2-2.0.10/include
    3. LIBS += $$PWD/SDL2-2.0.10/lib/x86/SDL2.lib
    4. }

     使用SDL创建一个窗口

    1. #include
    2. #include
    3. #undef main // 先取消main函数(因为SDL内部使用了main函数)
    4. int main()
    5. {
    6. // 创建一个SDL_VIDEO窗口
    7. SDL_Window* window = NULL;
    8. SDL_Init(SDL_INIT_VIDEO);
    9. window = SDL_CreateWindow("Title",
    10. SDL_WINDOWPOS_UNDEFINED, // 默认x y 显示到窗口中间
    11. SDL_WINDOWPOS_UNDEFINED,
    12. 640,
    13. 480,
    14. SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);// 设置窗口属性
    15. if(!window)
    16. {
    17. printf("Can't create window, err:%s\n", SDL_GetError());
    18. return 666;
    19. }
    20. SDL_Delay(5000); // 延迟5000ms
    21. SDL_DestroyWindow(window); // 销毁窗口
    22. SDL_Quit(); // 释放资源
    23. return 0;
    24. }

    运行效果

     

    SDL简单显示案例

    1. #include
    2. #include
    3. #undef main
    4. int main()
    5. {
    6. SDL_Window* window = NULL; // 窗口
    7. SDL_Renderer* renderer = NULL; // 渲染器
    8. SDL_Texture* texture = NULL; // 纹理
    9. SDL_Init(SDL_INIT_VIDEO);
    10. // 创建窗口
    11. window = SDL_CreateWindow("Window Title",
    12. SDL_WINDOWPOS_UNDEFINED,
    13. SDL_WINDOWPOS_UNDEFINED,
    14. 640,
    15. 480,
    16. SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
    17. if(NULL == window)
    18. {
    19. printf("Create Window error: %s\n", SDL_GetError());
    20. return -1;
    21. }
    22. // 创建渲染器(一个窗口可有多个渲染器)
    23. renderer = SDL_CreateRenderer(window, -1, 0);
    24. if(NULL == renderer)
    25. {
    26. printf("Create Renderer error: %s\n", SDL_GetError());
    27. // 销毁窗口,释放资源
    28. SDL_DestroyWindow(window);
    29. SDL_Quit();
    30. return -1;
    31. }
    32. // 基于渲染器创建纹理
    33. texture = SDL_CreateTexture(renderer,
    34. SDL_PIXELFORMAT_RGBA8888,
    35. SDL_TEXTUREACCESS_TARGET,
    36. 640,
    37. 480);
    38. if(NULL == texture)
    39. {
    40. printf("Create Texture error: %s\n", SDL_GetError());
    41. // 销毁渲染器 窗口 释放资源
    42. SDL_DestroyRenderer(renderer);
    43. SDL_DestroyWindow(window);
    44. SDL_Quit();
    45. return -1;
    46. }
    47. int showCnt = 0; // 显示次数
    48. int run = 1; // 循环退出条件
    49. SDL_Rect rect; // 定义一个SDL矩形
    50. rect.w = 50;
    51. rect.h = 50;
    52. while(run)
    53. {
    54. // 随机rect的位置
    55. rect.x = rand() % 600;
    56. rect.y = rand() % 400;
    57. // 设置渲染目标为纹理
    58. SDL_SetRenderTarget(renderer, texture);
    59. // 设置渲染绘制颜色
    60. SDL_SetRenderDrawColor(renderer, 255, 0, 255, 255);
    61. // 刷新渲染
    62. SDL_RenderClear(renderer);
    63. // 设置渲染绘制颜色
    64. SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
    65. // 绘制矩形
    66. SDL_RenderDrawRect(renderer, &rect);
    67. // 绘制填充矩形
    68. SDL_RenderFillRect(renderer, &rect);
    69. // 恢复渲染目标为窗口
    70. SDL_SetRenderTarget(renderer, NULL);
    71. SDL_RenderCopy(renderer, texture, NULL, NULL);
    72. // 显示纹理
    73. SDL_RenderPresent(renderer);
    74. SDL_Delay(300);
    75. if(showCnt++ >= 30)
    76. run = 0;
    77. }
    78. // 销毁 纹理 渲染器 窗口,释放资源
    79. SDL_DestroyTexture(texture);
    80. SDL_DestroyRenderer(renderer);
    81. SDL_DestroyWindow(window);
    82. SDL_Quit();
    83. return 0;
    84. }

  • 相关阅读:
    使用Inno Setup 制作软件安装包详细教程(与开发语言无关)
    晶振的等效电路模型
    PHP 写的旅游景点系统
    Java总结的question
    P1510 精卫填海-01背包
    下载运行ps软件提示因为计算机中丢失d3dcompiler_47.dll解决方法
    java Map集合基本概念
    Python+Selenium4环境搭建
    MySQL中获取时间的方法
    HALCON支持GPU加速的算子有哪些?
  • 原文地址:https://blog.csdn.net/ShiXiAoLaNga/article/details/134065562