程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> SDL視頻子系統

SDL視頻子系統

編輯:關於C語言

在SDL中最為常用子系統就是視頻子系統。這裡說的視頻不是指我們平常播放的電影等,而是指在屏幕上顯示出來的東西,你需要在屏幕上顯示圖片、文字等那就必須使用視頻子系統,否則什麼都看不到,視頻子系統支持:設置視頻模式或者說創建視頻窗口;支持直接的圖像幀緩沖;支持Alpha像素混合;支持Blit位塊傳輸可以硬件加速);支持窗口管理;支持圖形渲染。

  要使用視頻子系統首先要創建一個SDL窗口或者說設置SDL的顯示模式),我們可以使用:

     /*
    功能:建立SDL顯示表面
   參數:int width 窗口寬度  單位象素
            int height 窗口高度  單位象素
               int bpp 窗口象素位數,如果為0,則取當前窗口默認象素數
               Unit32  flags  位標,標示窗口特性
     返回值:SDL_Surface *,成功返回窗口指針,失敗返回NULL
     */

  SDL_Surface *SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags);

  來創建一個窗口,以後所有東西都必須刷到這個窗口才能顯示。函數的返回值是SDL_Surface *,SDL_Surface也稱表面或者說蒙皮),是需要顯示的東西,可能是一張圖片,也可能是一個字符串。我們的應用中可能需要顯示很多的東西,所以可能創建很多的表面,但請記住無論有多少個表面,但只有使用SDL_SetVideoMode函數產生的表面或窗口)才能顯示,其他任何表面必須刷到這個窗口上才可以顯示,這一點很重要。打個比方這個窗口就像是一塊白板,你需要顯示的東西必須貼在白板上才能顯示,並且後貼上的東西會覆蓋以前的東西。下面是建立顯示窗口的代碼: 

 

/*
  功能:建立SDL顯示窗口
  作者:csl
  日期:2012-5-4
*/
#include <stdio.h>
#include <stdlib.h>
#include "SDL.h"
SDL_Surface *gpScreen;//顯示表面
int main(int argc,char *argv[])
{
    if((SDL_Init(SDL_INIT_VIDEO)==-1)) //初始化視頻子系統
    {
        printf("Unable to init SDL: %s\n", SDL_GetError());
        exit(-1);
    }
    atexit(SDL_Quit);// 注冊SDL_Quit,當退出時調用,使得退出時程序自動清理
    //創建32位600*480窗口
    gpScreen = SDL_SetVideoMode(600,480, 32, SDL_HWSURFACE | SDL_HWPALETTE | SDL_DOUBLEBUF );
    if(!gpScreen)
    {
        exit(1);
    }
    SDL_Delay(3000); //暫停3秒
    SDL_FreeSurface(gpScreen);//退出程序前必須釋放
    system("pause");
    return 0;
}

 gpScreen是顯示窗口的指針,全局變量。第22行建立顯示窗口,flags是位標,標示窗口特性,常用標示已經粗體顯示:

SDL_SWSURFACE

在系統內存創建表面

SDL_HWSURFACE

在顯內存創建表面

SDL_ASYNCBLIT

顯示表面的異步更新,這回降低但cpu機器的性能,但在多處理器機子上會增加速度

SDL_ANYFORMAT

通常如果表面的像素深度不可用比如你指定64,但你的機器不支持),則SDL將模擬一個影子表面。這個標志禁止這種做法。這將使SDL使用該表面不考慮bpp

SDL_DOUBLEBUF

使用雙緩沖

SDL_FULLSCREEN

全屏模式

SDL_OPENGL

創建一個OpenGL渲染環境

SDL_RESIZABLE

創建一個可變尺寸的窗口

SDL_NOFRAME

創建一個無邊框和標題的窗口。

  這些常量可以組合使用,比如SDL_FULLSCREEN | SDL_DOUBLEBUF | SDL_HWSURFACE,表示在顯存裡創建一個全屏窗口,使用雙緩沖。注意:一般使用全屏模式也會使用雙緩沖;如果使用在顯存創建表面也會使用雙緩沖。建議使用SDL_HWSURFACE | SDL_DOUBLEBUF,如果出現錯誤可以嘗試使用SDL_SWSURFACE。

  調用函數後應該檢測gpScreen是否為空,為空則應結束程序。在程序退出前,必須調用SDL_FreeSurface釋放gpScreen所指的窗口資源。

  關於SDL_Surface詳細資料在視頻子系統基本概念裡做了詳細的說明。


本文出自 “學習之樂” 博客,請務必保留此出處http://chengshaolei.blog.51cto.com/1994169/1291966

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved