【重學C語言】十八、SDL2 圖形編程介紹和環境配置

【重學C語言】十八、SDL2 圖形編程介紹和環境配置

  • **SDL2介紹**
  • SDL 2用途
  • SDL 在哪些平臺上運行?
  • 下載和安裝 SDL2
    • 安裝 SDL2
  • clion 配置 SDL2

SDL2介紹

SDL2(Simple DirectMedia Layer 2)是一個開源的跨平臺多媒體開發庫,主要用于游戲開發中的多媒體處理,如視頻渲染、音頻播放、鼠標/鍵盤控制等。它用C語言編寫,支持多種平臺,包括Windows、macOS、Linux、iOS和Android等。SDL2通過提供統一的接口,內部會根據不同的平臺調用底層的API,大大降低了多媒體應用開發的難度。

SDL 2用途

視頻

  • 3D圖形:SDL 可與 OpenGL API 或 Direct3D API 結合使用,用于 3D 圖形
  • 加速 2D 渲染 API:支持簡單的旋轉、縮放和 alpha 混合,所有這些都使用現代 3D API 加速,使用 OpenGL 和 Direct3D 支持加速
  • 創建和管理多個窗口

輸入事件

  • 提供的事件和 API 函數用于:
    • 應用程序和窗口狀態更改
    • 鼠標輸入
    • 鍵盤輸入
    • 操縱桿和游戲控制器輸入
    • 多點觸控手勢
  • 可以使用SDL_EventState ()啟用或禁用每個事件
  • 事件在發布到內部事件隊列之前通過用戶指定的過濾器函數
  • 線程安全事件隊列

力反饋

  • Windows、Mac OS X 和 Linux 支持力反饋

音頻

  • 設置8位和16位音頻、單聲道立體聲或5.1環繞聲的音頻播放,如果硬件不支持格式,可選擇轉換
  • 音頻在單獨的線程中獨立運行,通過用戶回調機制填充
  • 專為定制軟件混音器設計,但SDL_mixer提供完整的音頻/音樂輸出庫

文件 I/O 抽象

  • 用于打開、讀取和寫入數據的通用抽象
  • 對文件和內存的內置支持

共享對象支持

  • 加載共享對象(Windows 上的 DLL,Mac OS X 上的 .dylib,Linux 上的 .so)
  • 共享對象中的查找函數

線程

  • 簡單的線程創建API
  • 簡單線程本地存儲API
  • 互斥體、信號量和條件變量
  • 無鎖編程的原子操作

計時器

  • 獲取經過的毫秒數
  • 等待指定的毫秒數
  • 在單獨的線程中創建與代碼一起運行的計時器
  • 使用高分辨率計數器進行分析

CPU 特性檢測

  • 查詢CPU數量
  • 檢測 CPU 特性和支持的指令集

大端小端支持

  • 檢測當前系統的字節序
  • 用于快速交換數據值的例程
  • 讀取和寫入指定字節序的數據

電池管理

  • 查詢電源管理狀態

SDL 在哪些平臺上運行?

Windows

  • 使用 Win32 API 進行顯示,利用 Direct3D 進行硬件加速
  • 使用 DirectSound 和 XAudio2 作為聲音

Mac OS X

  • 使用 Cocoa 進行視頻顯示,利用 OpenGL 進行硬件加速
  • 使用 Core Audio 播放聲音

Linux

  • 使用 X11 進行視頻顯示,利用 OpenGL 進行硬件加速
  • 使用 ALSA、OSS 和 PulseAudio API 來處理聲音

IOS

  • 使用 UIKit 進行視頻顯示,利用 OpenGL ES 2.0 進行硬件加速
  • 使用 Core Audio 播放聲音

Android

  • 使用 JNI 接口進行視頻顯示,利用 OpenGL ES 1.1 和 2.0 進行硬件加速
  • 對聲音使用 JNI 音頻回調

下載和安裝 SDL2

安裝 SDL2

  1. 點擊 SDL2 核心庫下載 下載SDL2庫,進入 GitHub下載
    在這里插入圖片描述
    在這里插入圖片描述

  2. 下載出來會有一個壓縮包,放到一個合適的目錄(記住這個目錄哦,經常要用的),解壓。
    在這里插入圖片描述

  3. 進入解壓后的目錄,如下圖:

    1. cmake:cmake配置文件
    2. docs:文檔目錄,只不過都是英文的
    3. include:頭文件目錄,編程需要的
    4. lib:庫目錄(靜態庫和動態庫都有)

在這里插入圖片描述
4. 給環境變量添加庫目錄,讓程序運行的時候能夠找到動態庫。
在這里插入圖片描述

clion 配置 SDL2

配置 CMakeLists.txt

在你的 CLion 項目中,你需要更新 CMakeLists.txt 文件以包含 SDL2。這通常涉及以下幾個步驟:

* 查找 SDL2 的頭文件和庫文件。
* 使用 `find_package` 命令(如果可用)。
* 添加 SDL2 的頭文件路徑和庫文件到你的項目中。

以下是一個簡單的 CMakeLists.txt 示例,用于在 Unix-like 系統(如 Linux 或 macOS)上包含 SDL2:

cmake_minimum_required(VERSION 3.28)
project(SDL2_config C)set(CMAKE_C_STANDARD 23)
# 查找SDL2包,REQUIRED強制請求,沒找到報錯
find_package(SDL2 REQUIRED) 
# 使用指定的源文件生成目標
add_executable (${PROJECT_NAME} "main.c")
# 指定目標在鏈接時需要的依賴(庫)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})

注意:在 Windows 上,你可能需要手動指定 SDL2 的頭文件和庫文件的路徑。
編寫代碼

現在你可以開始編寫使用 SDL2 的代碼了。以下是一個簡單的 SDL2 初始化示例:

#define SDL_MAIN_HANDLED
#include <SDL.h>int main(int argc, char* argv[]) {SDL_version ver;SDL_GetVersion(&ver);SDL_Log("%d %d %d\n", ver.major, ver.minor, ver.patch);return 0;
}

在這里插入圖片描述

構建和運行

現在你可以使用 CLion 構建并運行你的 SDL2 項目了。如果一切正常,你應該會看到一個 SDL2 窗口顯示出來。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23415.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23415.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23415.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最優化練習題

def f(x):return x*x-4*x5 a0,b01,31、均勻搜索 令 δ ( b 0 ? a 0 ) / N , a i a 0 i δ , i 1 , 2 , 3 \delta(b_0-a_0)/N,a_ia_0i\delta,i1,2,3 δ(b0??a0?)/N,ai?a0?iδ,i1,2,3 while b0-a0>0.1:anp.linspace(a0,b0,5)for i in range(1,4):if f(a[i-1])>f…

flutter3-os:基于flutter3.x+dart3+getx手機版os管理系統

flutter3-os-admin跨平臺手機后臺OS系統。 原創Flutter3.22Dart3.4Getxfl_chart等技術開發仿ios手機桌面OA管理系統。自研柵格化布局引擎、自定義桌面壁紙、小部件、底部Dock菜單、可拖拽懸浮球等功能。 全新自研柵格化OS菜單布局引擎。 使用技術 編輯器&#xff1a;VScode技術…

深入理解feign遠程調用的各種超時參數

1. 引言 在spring cloud微服中&#xff0c;feign遠程調用可能是大家每天都接觸到東西&#xff0c;但很多同學卻沒咋搞清楚這里邊的各種超時問題&#xff0c;生產環境可能會蹦出各種奇怪的問題。 首先說下結論&#xff1a; 1)只使用feign組件&#xff0c;不使用ribbion組件&…

【Text2SQL 論文】How to prompt LLMs for Text2SQL

論文&#xff1a;How to Prompt LLMs for Text-to-SQL: A Study in Zero-shot, Single-domain, and Cross-domain Settings ???? arXiv:2305.11853, NeurlPS 2023 Code: GitHub 一、論文速讀 本文主要是在三種常見的 Text2SQL ICL settings 評估不同的 prompt constructio…

數據分析必備:一步步教你如何用Pandas做數據分析(18)

1、Pandas 串聯 Pandas 連接的操作實例 Pandas提供了各種功能&#xff0c;可以輕松地將Series&#xff0c;DataFrame和Panel對象組合在一起。 pd.concat(objs,axis0,joinouter,join_axesNone,ignore_indexFalse)objs ? 這是Series的序列或映射&#xff0c;DataFrame或Panel對…

【云嵐到家】-day01-項目熟悉-查詢區域服務開發

文章目錄 1 云嵐家政項目概述1.1 簡介1.2 項目業務流程1.3 項目業務模塊1.4 項目架構及技術棧1.5 學習后掌握能力 2 熟悉項目2.1 熟悉需求2.2 熟悉設計2.2.1 表結構2.2.2 熟悉工程結構2.2.3 jzo2o-foundations2.2.3.1 工程結構2.2.3.2 接口測試 3 開發區域服務模塊3.1 流程分析…

Python接口自動化之使用requests庫發送http請求

requests庫 ? 什么是Requests &#xff1f;Requests 是?Python語?編寫&#xff0c;基于urllib&#xff0c;采?Apache2 Licensed開源協議的 HTTP 庫。它? urllib 更加?便&#xff0c;可以節約我們?量的?作&#xff0c;完全滿?HTTP測試需求。 ? 安裝&#xff1a;cmd命…

docker 拉取不到鏡像的問題:拉取超時

error pulling image configuration: download failed after attempts6: dial tcp 31.13.94.10:443: i/o timeout 首先設置國內的鏡像源&#xff1a;復制下面直接執行 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF{"registry-mirrors"…

【POSIX】消息類的格式與使用

本文給出一個MacOS操作系統中的消息類的使用過程示例&#xff08;結合gencat命令&#xff0c;<nl_types.h>頭文件以及catopen,catgets,catclose3個函數&#xff09; 首先根據對應的操作系統&#xff0c;查看 gencat 命令 man gencat 可以詳細看到其中對于輸入文件&…

Spark MLlib 機器學習詳解

目錄 &#x1f349;引言 &#x1f349;Spark MLlib 簡介 &#x1f348; 主要特點 &#x1f348;常見應用場景 &#x1f349;安裝與配置 &#x1f349;數據處理與準備 &#x1f348;加載數據 &#x1f348;數據預處理 &#x1f349;分類模型 &#x1f348;邏輯回歸 &a…

? 傳知代碼 ? 輔助任務改進社交帖子多模態分類

&#x1f49b;前情提要&#x1f49b; 本文是傳知代碼平臺中的相關前沿知識與技術的分享~ 接下來我們即將進入一個全新的空間&#xff0c;對技術有一個全新的視角~ 本文所涉及所有資源均在傳知代碼平臺可獲取 以下的內容一定會讓你對AI 賦能時代有一個顛覆性的認識哦&#x…

【自然語言處理】【Scaling Law】語言模型物理學 第3.3部分:知識容量Scaling Laws

語言模型物理學3.3&#xff1a;知識容量Scaling Laws 論文名稱&#xff1a;Physics of Language Models: Part 3.3, Knowledge Capacity Scaling Laws 論文地址&#xff1a;https://arxiv.org/pdf/2404.05405 相關博客 【自然語言處理】【Scaling Law】Observational Scaling …

R語言探索與分析17-股票題目

Value at Risk&#xff08;VaR&#xff09;是一種統計技術&#xff0c;用于量化投資組合在正常市場條件下可能遭受的最大潛在損失。它是風險管理和金融領域中一個非常重要的概念。VaR通常以貨幣單位表示&#xff0c;用于估計在給定的置信水平和特定時間范圍內&#xff0c;投資組…

OpenCV的小部件最基本范例

OpenCV也有與PYQT類似的小部件&#xff0c;例如滑塊slider。OpenCV可以用與PYQT類似的“信號與槽”方法&#xff0c;也可以在函數中直接查詢小部件的值。 import cv2 import numpy as npcv2.namedWindow(Show1) image np.zeros((100, 400, 3), np.uint8) # 創建一個空白內容…

JavaScript基礎知識4(數組、函數、參數、作用域、具名和匿名函數、邏輯運算符短路、轉化布爾類型)

JavaScript基礎知識4&#xff08;數組、函數、參數、作用域、具名和匿名函數、邏輯運算符短路、轉化布爾類型&#xff09; 數組數組是什么&#xff1f;數組的基本使用定義數組和數組單元訪問數組和數組索引數據單元值類型數組長度屬性 操作數組 函數聲明和調用聲明&#xff08;…

(面試官問我微服務與naocs的使用我回答了如下,面試官讓我回去等通知)微服務拆分與nacos的配置使用

微服務架構 正常的小項目就是所有的功能集成在一個模塊中&#xff0c;這樣代碼之間不僅非常耦合&#xff0c;而且修改處理的時候也非常的麻煩&#xff0c;應對高并發時也不好處理&#xff0c;所以 我們可以使用微服務架構&#xff0c;對項目進行模塊之間的拆分&#xff0c;每一…

前端傳參數后端變量類型能夠接受到List卻無法接收到值

問題描述 今天寫了個接口&#xff0c;下圖所示 ReqVO里是這樣的&#xff1a; 然后前端去請求&#xff0c;從請求結果中看發現這里值是在的&#xff08;有經驗的可能就看出來了otherInfo.id: 這樣以參數后端是接收不到的&#xff0c;但是當時沒發現&#xff09; 傳進來后端…

維納運動的概念

維納運動&#xff08;Wiener Process&#xff09;&#xff0c;也稱為標準布朗運動&#xff0c;是一種重要的隨機過程&#xff0c;廣泛應用于數學、物理學和金融學等領域。它是一個連續時間的隨機過程&#xff0c;具有一些特殊的性質&#xff0c;使其成為描述隨機動態系統的經典…

GAT1399協議分析(8)--批量圖像查詢

一、請求消息定義 視頻圖像包含視頻片段、 圖像、 文件、 人員、 人臉、 機動車、 非機動車、 物品、 場景和視頻案事件、 視頻圖像標簽等對象 在消息體中,可以包含其中一種類,加上Data字段即可。 ImageInfo對象 二、請求消息實例 wireshark 抓包實例 請求: 文本化: /V…

制造執行MES系統在光伏行業的應用

全球對可再生能源的需求不斷增長&#xff0c;光伏能源作為一種清潔、可持續的能源形式&#xff0c;已經在廣泛應用中受到了廣泛關注。為滿足工業領域的光伏能源需求&#xff0c;光伏制造執行系統(MES)作為一種集成化的技術解決方案&#xff0c;提供了更高效、更可靠的解決方案。…