青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 96  文章 - 255  trackbacks - 0
<2008年2月>
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678

E-mail:zbln426@163.com QQ:85132383 長(zhǎng)期尋找對(duì)戰(zhàn)略游戲感興趣的合作伙伴。

常用鏈接

留言簿(21)

隨筆分類

隨筆檔案

SDL相關(guān)網(wǎng)站

我的個(gè)人網(wǎng)頁(yè)

我的小游戲

資源下載

搜索

  •  

積分與排名

  • 積分 - 495367
  • 排名 - 39

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

作者:龍飛

3.1:獲取視頻屬性信息。

const SDL_VideoInfo *SDL_GetVideoInfo(void);
        我們?cè)谇耙恍」?jié)中,為了盡快實(shí)現(xiàn)一個(gè)SDL的運(yùn)行窗口,跳過(guò)了很多細(xì)節(jié),也留下了很多問(wèn)題。其中一個(gè)很重要的問(wèn)題就是:我們到底有沒(méi)有使用到顯卡的硬件加速?因?yàn)橛布牟町愋裕苯邮褂糜布涌诘臅r(shí)候,會(huì)出現(xiàn)很多新的問(wèn)題。這些問(wèn)題在第(四)章中,我將以自己的操作系統(tǒng)和顯卡硬件配置,通過(guò)試驗(yàn)得到結(jié)論,而在這之前,我們還必須弄清楚其他幾個(gè)問(wèn)題。
        SDL_GetVideoInfo()將返回當(dāng)前SDL運(yùn)行窗口的視頻屬性信息,其數(shù)據(jù)組織在一個(gè)名為SDL_VidioInfo的結(jié)構(gòu)中。該函數(shù)就是返回這個(gè)只讀結(jié)構(gòu)的指針。
typedef struct{
  Uint32 hw_available:
1;
  Uint32 wm_available:
1;
  Uint32 blit_hw:
1;
  Uint32 blit_hw_CC:
1;
  Uint32 blit_hw_A:
1;
  Uint32 blit_sw:
1;
  Uint32 blit_sw_CC:
1;
  Uint32 blit_sw_A:
1;
  Uint32 blit_fill:
1;
  Uint32 video_mem;
  SDL_PixelFormat 
*vfmt;
  
int current_w;
  
int current_h;
} SDL_VideoInfo;
        初看這個(gè)結(jié)構(gòu)似乎有點(diǎn)讓人頭大,其實(shí)分析起來(lái)很簡(jiǎn)單,成員名稱也很友好,容易讓人記憶。hw_availabale表示創(chuàng)建硬件surface的可行性(1表示可以,0表示不可以,后同);wm_available表示是否存在可用的窗口管理器;3-9行表示了一系列硬件到硬件,軟件到硬件加速的可行性;video_men表示顯存大小;vfmt是當(dāng)前顯示驅(qū)動(dòng)(video device)的像素格式(pixel format);current_w和current_h是當(dāng)前窗口的寬和高。
        我們?cè)谑褂迷谙到y(tǒng)內(nèi)存中建立SDL運(yùn)行窗口的方式來(lái)察看這些成員數(shù)據(jù)。
    SDL_Init(SDL_INIT_VIDEO);
    atexit(SDL_Quit);

    SDL_Surface
* pScreen = SDL_SetVideoMode(64048032, SDL_SWSURFACE);
    SDL_Flip(pScreen);

    
const SDL_VideoInfo* myInfo = SDL_GetVideoInfo();
    cout 
<< "Is it possible to create hardware surfaces? " << myInfo->hw_available << endl;
    cout 
<< "Is there a window manager available? " << myInfo->wm_available << endl;
    cout 
<< "Are hardware to hardware blits accelerated? " << myInfo->blit_hw << endl;
    cout 
<< "Are hardware to hardware colorkey blits accelerated? " << myInfo->blit_hw_CC << endl;
    cout 
<< "Are hardware to hardware alpha blits accelerated? " << myInfo->blit_hw_A << endl;
    cout 
<< "Are software to hardware blits accelerated? " << myInfo->blit_sw << endl;
    cout 
<< "Are software to hardware colorkey blits accelerated? " << myInfo->blit_sw_CC << endl;
    cout 
<< "Are software to hardware alpha blits accelerated? " << myInfo->blit_sw_A << endl;
    cout 
<< "Are color fills accelerated? " << myInfo->blit_fill << endl;
    cout 
<< "Total amount of video memory in Kilobytes? " << myInfo->video_mem << endl;
    cout 
<< "Width of the current video mode? " << myInfo->current_w << endl;
    cout 
<< "Height of the current video mode? " << myInfo->current_h << endl;

        結(jié)果似乎是可以預(yù)料的,創(chuàng)建硬件surface和硬件加速都是不可行的。接下來(lái),我們將flag 從使用系統(tǒng)內(nèi)存的SDL_SWSURFACE換成使用顯存的SDL_HWSURFACE。

3.2:我的顯卡不支持硬件加速??!!

        好吧,也許是我運(yùn)氣不好。問(wèn)題來(lái)了!
        我的軟件環(huán)境是windows server 2003,硬件環(huán)境是GeForce 4 Ti 4200 AGP 8x。當(dāng)我第一次看到SDL反饋給我的信息:創(chuàng)建硬件surface不可行!硬件加速不可性!顯存大小為0!!——我快喘不過(guò)氣來(lái)。
        我的第一反應(yīng)是SDL不支持我的顯卡——后面一想,不對(duì)啊,SDL到今天(2008年2月)還在更新,我顯卡可算是古董了——一定是什么地方搞錯(cuò)了,或者還有我沒(méi)有了解到的問(wèn)題。
        伴隨而來(lái)的另外一個(gè)問(wèn)題是:我是不是真正把surface建立到顯存中了——盡快我要求SDL這么做。這里,我要第三次提到函數(shù)SDL_SetVideoMode()了。我們之前介紹過(guò),這個(gè)函數(shù)的返回值是一個(gè)SDL_Surface結(jié)構(gòu)的指針。而SDL_Surface結(jié)構(gòu)中有一個(gè)數(shù)據(jù)成員flags儲(chǔ)存了這個(gè)surface的位標(biāo)信息,其中就包括是否建立到了顯存里面(否則就在系統(tǒng)內(nèi)存中)。

typedef struct SDL_Surface {
  Uint32 flags;                           
/* Read-only */
  SDL_PixelFormat 
*format;                /* Read-only */
  
int w, h;                               /* Read-only */
  Uint16 pitch;                           
/* Read-only */
  
void *pixels;                           /* Read-write */
  SDL_Rect clip_rect;                     
/* Read-only */
  
int refcount;                           /* Read-mostly */

  
/* This structure also contains private fields not shown here */

} SDL_Surface;
        這里我們繼續(xù)忽略其他不熟悉的數(shù)據(jù)成員,直接將flags的信息讀出來(lái)。
    cout << "pScreen->flags = ";
    showHex(pScreen
->flags);
    cout 
<< boolalpha;
    cout 
<< "SDL_SWSURFACE? " << !(bool((pScreen->flags) & SDL_HWSURFACE)) << endl;
    cout 
<< "SDL_HWSURFACE? " << bool((pScreen->flags) & SDL_HWSURFACE) << endl;
    cout 
<< "SDL_DOUBLEBUF? " << bool((pScreen->flags) & SDL_DOUBLEBUF) << endl;
    cout 
<< noboolalpha;

        請(qǐng)注兩點(diǎn):函數(shù)showHex()顯示16進(jìn)格式,在前面章節(jié)有原形和定義;SDL_SWSURFACE是0,是偽位標(biāo),因?yàn)樗cSDL_HWSURFACE只能二取一的,所以他的實(shí)際狀態(tài)可以用如上方式表示。另外,SDL_DOUBLEBUF是在開啟硬件畫surface和加速時(shí)候很重要的位標(biāo),在后面會(huì)有介紹。
        結(jié)果是——很不幸,surface沒(méi)有建立在顯存中。

3.3:SDL的環(huán)境設(shè)置。

        尋找問(wèn)題和試驗(yàn)的過(guò)程很曲折。我在這里直接說(shuō)結(jié)論,在下一節(jié)中,再進(jìn)行具體的試驗(yàn)。SDL有個(gè)環(huán)境設(shè)置的概念。這是因?yàn)镾DL是跨平臺(tái)的,在不同的操作系統(tǒng)和不同的GUI之上,SDL試圖建立起一個(gè)與以上因素?zé)o關(guān)的封裝。但是因?yàn)橛布ㄖ饕革@卡)的具體多樣性,SDL在不同的OS和不同的GUI之上,使用不同的“驅(qū)動(dòng)”,以windows為例,SDL在windows上的驅(qū)動(dòng)有GDI(windib)和DirectX(directx)兩種(Linux下則更多,請(qǐng)參考官方資料),我們可以通過(guò)一個(gè)函數(shù)知道當(dāng)前SDL使用的驅(qū)動(dòng)版本。

char *SDL_VideoDriverName(char *namebuf, int maxlen);
        如果返回空指針,則表示SDL_Init()沒(méi)有裝載或出現(xiàn)異常。我們可使用下面這樣的語(yǔ)句查看當(dāng)前SDL使用的驅(qū)動(dòng)版本名字。
    char driverName[20];
    SDL_VideoDriverName(driverName, 
20);
    cout 
<< "SDL_VideoDriverName = " << driverName << endl;
        結(jié)果是:windib。為什么SDL官方資料顯示,默認(rèn)值是directx呢?(這不是反問(wèn),這是我的疑問(wèn),請(qǐng)知道答案的同學(xué)跟我聯(lián)系,謝謝)——結(jié)論是,windib無(wú)法打開硬件加速,要使用硬件加速,必須使用directx。官方資料上用了很簡(jiǎn)短的描述來(lái)說(shuō)明進(jìn)行SDL的環(huán)境設(shè)置。在后面的章節(jié)中,我們將使用:
putenv("SDL_VIDEODRIVER=directx");
注意:這個(gè)函數(shù)必須用在SDL_Init();之前才有實(shí)際效果。來(lái)設(shè)置為directx環(huán)境。(VC下為了解除編譯警告,也可使用SDL_putenv()來(lái)代替putenv(),效果都一樣。)之后除了用SDL_VideoDriverName()獲取顯示驅(qū)動(dòng)信息,還可以使用:(同樣,VC下可使用SDL_getent()替換)
const char* myvalue = getenv("name") ;
來(lái)獲取相關(guān)的環(huán)境信息(包括顯示驅(qū)動(dòng)信息。"name"換為"SDL_VIDEODRIVER")。
posted on 2008-02-10 03:25 lf426 閱讀(7529) 評(píng)論(6)  編輯 收藏 引用 所屬分類: SDL入門教程

FeedBack:
# 補(bǔ)充1[未登錄](méi) 2008-02-11 17:58 lf426
我發(fā)現(xiàn)如果SDL_DOUBLEBUF位標(biāo)被成功啟用,則一定采用SDL_HWSURFACE,即使指定了使用SDL_SWSURFACE。  回復(fù)  更多評(píng)論
  
# re: SDL入門教程(三):3、視頻屬性信息(VideoInfo) 2008-06-06 09:27 btest
雙緩沖,軟加速不支持了,一定要硬加速。所以你指定SDL_SWSURFACE 也沒(méi)用了。  回復(fù)  更多評(píng)論
  
# re: SDL入門教程(三):3、視頻屬性信息(VideoInfo) 2010-03-26 22:45 staticEXE
不支持OPENGL嗎  回復(fù)  更多評(píng)論
  
# re: SDL入門教程(三):3、視頻屬性信息(VideoInfo) 2010-07-22 18:19 sunjoy
我用SDL_putenv("SDL_VIDEODRIVER=directx"); 后發(fā)現(xiàn)SDL_Init(SDL_INIT_VIDEO)失敗,請(qǐng)問(wèn)樓主這是什么原因?或者有人遇到過(guò)么?  回復(fù)  更多評(píng)論
  
# re: SDL入門教程(三):3、視頻屬性信息(VideoInfo) 2010-08-17 12:40 DN
挑個(gè)錯(cuò),
文中的一處hw_availabale應(yīng)為hw_available。多了個(gè)a  回復(fù)  更多評(píng)論
  
# re: SDL入門教程(三):3、視頻屬性信息(VideoInfo) 2010-10-16 20:14 fly
(同樣,VC下可使用SDL_getent()替換)?  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              国产在线视频欧美| 9久re热视频在线精品| 亚洲精品一区在线观看香蕉| 国产拍揄自揄精品视频麻豆| 国产精品久久久久久久久搜平片 | 久久人人爽人人爽爽久久| 欧美在线在线| 欧美影院成人| 久久综合伊人| 欧美成人嫩草网站| 欧美日韩亚洲一区在线观看| 欧美日本簧片| 欧美小视频在线| 国产女主播一区二区| 在线成人av| 亚洲国产一区二区三区a毛片| 一区二区三区久久| 欧美一区二区三区在线| 久久亚洲综合| 国产精品一二三四| 裸体歌舞表演一区二区| 亚洲第一综合天堂另类专| 欧美h视频在线| 欧美freesex8一10精品| 欧美成人国产| 99国产精品国产精品久久| 一区二区三区国产精华| 亚洲一区精彩视频| 老色批av在线精品| 国产精品国产三级国产a| 国外成人网址| 日韩亚洲视频| 久久亚洲电影| 亚洲视频免费看| 免费高清在线视频一区·| 国产精品久久久久久av福利软件 | 欧美亚一区二区| 狠狠入ady亚洲精品经典电影| 亚洲美女色禁图| 久久综合色一综合色88| 亚洲午夜精品久久久久久浪潮| 久久在线播放| 国产日韩一区二区三区在线| 一区二区av在线| 欧美三级中文字幕在线观看| 一区二区欧美在线| 午夜久久久久久| 欧美精品情趣视频| 亚洲第一精品影视| 国产精品99久久99久久久二8| 一区二区三区精密机械公司| 久久尤物电影视频在线观看| 最新成人av在线| 欧美精品成人在线| 国产有码一区二区| 亚洲图片激情小说| 欧美二区在线播放| 一本久久综合亚洲鲁鲁| 免费一区二区三区| 国产精品乱码一区二三区小蝌蚪 | 欧美日韩精品欧美日韩精品| 亚洲免费观看高清在线观看 | 最新中文字幕一区二区三区| 欧美一区二区三区在线观看视频| 免费不卡中文字幕视频| 欧美一级专区免费大片| 国产精品视频午夜| 亚洲欧美另类综合偷拍| 亚洲精品影院| 欧美日韩国产小视频在线观看| 亚洲日本va午夜在线电影| 欧美成人一区二区三区片免费| 久久免费国产精品| 亚洲第一页自拍| 欧美成人亚洲成人日韩成人| 久久综合成人精品亚洲另类欧美| 国产日韩欧美精品| 午夜欧美不卡精品aaaaa| 在线亚洲免费视频| 国产精品美女久久久久久久| 在线亚洲一区二区| 这里只有精品在线播放| 国产伦精品一区二区三区高清| 久久九九久精品国产免费直播| 欧美影院精品一区| 91久久久久久| 夜夜嗨网站十八久久 | 亚洲成人资源网| 噜噜噜91成人网| 久久久久久久久久久久久女国产乱 | 亚洲影院在线观看| 在线亚洲激情| 欧美看片网站| 欧美在线观看www| 久久综合色天天久久综合图片| 亚洲美女在线国产| 亚洲一区二区精品视频| 在线观看欧美亚洲| 亚洲国产日韩一区二区| 久久五月婷婷丁香社区| 国产欧美日韩精品一区| 久久在线视频| 欧美精品一区在线| 久久国产精品一区二区| 欧美成年人网站| 国产美女扒开尿口久久久| 亚洲国产天堂久久综合| 洋洋av久久久久久久一区| 国产精品视频你懂的| 久久久999| 久久久久久夜| 日韩天堂在线视频| 亚洲免费伊人电影在线观看av| 国产精品免费一区二区三区在线观看| 久久精品日韩欧美| 欧美日韩视频在线一区二区| 久久免费高清| 国产精品久久久99| 欧美激情欧美狂野欧美精品 | 香蕉久久夜色精品国产| 久久综合电影| 久久久最新网址| 欧美伦理91i| 久久婷婷成人综合色| 欧美激情bt| 久久久久久网站| 欧美成人自拍视频| 老司机免费视频一区二区| 欧美午夜大胆人体| 久久一区欧美| 国产精品综合| 亚洲自拍偷拍色片视频| 亚洲精品一区二区在线观看| 欧美在线影院| 久久亚洲精品伦理| 国产精品日韩欧美一区| 中文日韩在线视频| 亚洲三级视频在线观看| 久久精品道一区二区三区| 亚洲破处大片| 亚洲欧美一区二区三区极速播放| 亚洲六月丁香色婷婷综合久久| 一区二区三区精品视频在线观看| 亚洲国产精品成人va在线观看| 欧美一级久久| 久久综合电影| 国精品一区二区三区| 亚洲综合视频网| 亚洲欧美另类在线观看| 欧美日韩hd| 亚洲高清av在线| 亚洲美女视频在线免费观看| 欧美成人在线免费观看| 久久夜色精品亚洲噜噜国产mv | 国产精品成人一区二区三区吃奶| 麻豆精品精品国产自在97香蕉| 欧美色区777第一页| 亚洲国产欧美日韩另类综合| 欧美黄色影院| 韩日欧美一区| 性久久久久久久久久久久| 久久国产高清| 国产综合色产| 另类图片综合电影| 日韩视频免费大全中文字幕| 亚洲视屏在线播放| 国产精品久久久久影院色老大| 欧美高清在线视频观看不卡| 老**午夜毛片一区二区三区| 久久蜜臀精品av| 国产欧美精品在线| 久久精品一区四区| 欧美国产亚洲精品久久久8v| 亚洲国产天堂久久综合| 欧美日韩国产不卡在线看| 一区二区欧美激情| 久久夜色精品国产欧美乱极品| 最新中文字幕亚洲| 欧美日韩一级黄| 性刺激综合网| 亚洲承认在线| 在线亚洲高清视频| 亚洲国产日韩美| 欧美视频成人| 久久精品国产91精品亚洲| 欧美激情视频一区二区三区不卡| 亚洲日本成人| 国内成人精品2018免费看| 欧美顶级艳妇交换群宴| 亚洲精品一品区二品区三品区| 亚洲狼人精品一区二区三区| 欧美激情第1页| 亚洲一区国产视频| 亚洲精品视频在线观看免费| 欧美在线精品免播放器视频| 国产亚洲精品一区二区| 欧美韩日一区二区三区| 一本大道久久精品懂色aⅴ| 亚洲欧美日韩综合一区| 亚洲精品中文在线|