SDL 開發實戰(一):SDL介紹及開發環境配置


一、什么是SDL?

SDL是 “Simple DirectMedia Layer”的縮寫,SDL是一個開源的跨平台的多媒體庫,封裝了復雜的音視頻底層操作,簡化了音視頻處理的難度。

SDL使用C語言寫成,提供了數種控制圖像、聲音、輸出入的函數,可以開發出跨多個平台(Linux、Windows、Mac OS X等)的應用軟件。目前多用於開發游戲、模擬器、媒體播放器等多媒體應用領域。

1. SDL 庫分類

SDL庫分為 Video、Audio、CD-ROM、Joystick 和 Timer 等若干子系統,除此之外,還有一些單獨的官方擴充函數庫。

這些庫由官方網站提供,並包含在官方文檔中,共同組成了SDL的“標准庫”:

  • SDL_image : 支持時下流行的圖像格式,如BMP、PPM、XPM、 PCX、GIF、JPEG、PNG、TGA。
  • SDL_mixer:更多的聲音輸出函數以及更多的聲音格式支持。
  • SDL_net:網絡支持。
  • SDL_ttf:TrueType字體渲染支持。
  • SDL_rtf:簡單的RTF渲染支持。

2. SDL 子系統分類

SDL 按照功能可以分成下列數個子系統(subsystem):

  • Video(圖像): 圖像控制以及線程(thread)和事件管理(event)。
  • Audio(聲音): 聲音控制
  • Joystick(搖桿): 游戲搖桿控制
  • CD-ROM(光盤驅動器): 光盤媒體控制
  • Window Management(視窗管理): 與視窗程序設計集成
  • Event(事件驅動):處理事件驅動

二、 SDL 開發環境配置

學習階段推薦使用Visual Studio進行學習,因為環境配置方面相對來說比較簡單。后續需要向其他平台遷移的時候,再進一步深入學習和整理。

SDL官網:http://www.libsdl.org/index.php 。目前SDL有兩個版本 1.2 和 2.0,建議學習階段使用 SDL 2.0。

1. 下載SDL Development Libraries 

下載地址為:http://www.libsdl.org/download-2.0.php

解壓縮文件,將這個文件夾拷貝到任意地方。

2. 在Visual Studio 中新建一個控制台項目

將第1步解壓的文件的include目錄和lib目錄拷貝到項目的目錄下。

3. 添加include目錄

右鍵打開項目的屬性窗口,找到 C/C++,添加附加包含目錄:

4. 添加 library 目錄

將lib目錄添加配置進來:

5. 添加"附加依賴項"

先找到屬性-->鏈接器--> 輸入---> 附加依賴項,添加附加依賴項:SDL2.lib;SDL2main.lib;

6. 編寫HelloWorld代碼,驗證環境配置

// SDL.cpp : 此文件包含 "main" 函數。程序執行將在此處開始並結束。
//

#include "pch.h"
#include <iostream>

extern "C" {
#include "SDL.h"
}

int main(int argc, char* argv[]) 
{
if (SDL_Init(SDL_INIT_VIDEO)) { std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl; return 1; } SDL_Window *win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN); if (win == nullptr) { std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl; return 1; } SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (ren == nullptr) { SDL_DestroyWindow(win); std::cout << "SDL_CreateRender Error: " << SDL_GetError() << std::endl; SDL_Quit(); return 1; } std::string imagePath = "1.bmp"; SDL_Surface *bmp = SDL_LoadBMP(imagePath.c_str()); if (bmp == nullptr) { SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); std::cout << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl; SDL_Quit(); return 1; } SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp); SDL_FreeSurface(bmp); if (tex == nullptr) { SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); std::cout << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl; SDL_Quit(); return 1; } for (int i = 0; i < 3; ++i) { SDL_RenderClear(ren); SDL_RenderCopy(ren, tex, NULL, NULL); SDL_RenderPresent(ren); SDL_Delay(1000); } SDL_DestroyTexture(tex); SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); SDL_Quit(); // Return return 0; }

7. 查看代碼運行結果

至此,我們的SDL的環境配置成功了,並且能夠正常使用了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM