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

隨筆 - 96  文章 - 255  trackbacks - 0
<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

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

常用鏈接

留言簿(21)

隨筆分類(lèi)

隨筆檔案

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

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

我的小游戲

資源下載

搜索

  •  

積分與排名

  • 積分 - 495368
  • 排名 - 39

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

作者:龍飛

2.1:需要修改的地方。

        這里,我們真正的開(kāi)始使用SDL的硬件渲染。首先,我們需要設(shè)置驅(qū)動(dòng)的環(huán)境(以windows為例,我們?cè)O(shè)置為directx,Linux的設(shè)置請(qǐng)參考官方網(wǎng)站,我們這里預(yù)留為dga)。另外,如果要啟動(dòng)硬件加速,必須使用全屏模式(SDL_FULLSCREEN),所以,在前面的軟件渲染中,我們也使用全屏以作對(duì)比。第三,硬件渲染需要打開(kāi)雙緩沖(SDL_DOUBLEBUF),至于為什么我們?cè)谧詈笥懻摚覀冞€是先看看完整的代碼。

2.2:硬件渲染演示程序完整的源代碼。
#define __windows__    // Linux using #define __linux__
#include 
<iostream>
#include 
"SDL/SDL.h"

SDL_Surface
* pScreen = 0;
SDL_Surface
* pBack = 0;
SDL_Surface
* pFront = 0;

void pressESCtoQuitPlus();
void loopRender();

int main(int argc, char* argv[])
{
#ifdef __windows__
    SDL_putenv(
"SDL_VIDEODRIVER=directx");
#endif

#ifdef __linux__
    putenv(
"SDL_VIDEODRIVER=dga");
#endif

    
try {
        
if ( SDL_Init(SDL_INIT_VIDEO) != 0 )
            
throw SDL_GetError();
    }
    
catch ( const char* s ) {
        std::cerr 
<< "SDL_Init() failed!\n" << s << std::endl;
        
return -1;
    }

    
const int SCREEN_WIDTH = 640;
    
const int SCREEN_HEIGHT = 480;
    
const int SCREEN_BPP = 32;    
    
const Uint32 SCREEN_FLAGS = SDL_FULLSCREEN | SDL_DOUBLEBUF | SDL_HWSURFACE;

    pScreen 
= SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SCREEN_FLAGS);    
    
try {
        
if ( pScreen == 0 )
            
throw SDL_GetError();
    }
    
catch ( const char* s ) {
        std::cerr 
<< "SDL_SetVideoMode() failed!\n" << s << std::endl;
        SDL_Quit();
        
return -1;
    }

    pBack 
= SDL_LoadBMP("back.bmp"); 
    
try {
        
if ( pBack == 0 )
            
throw SDL_GetError();
    }
    
catch ( const char* s ) {
        std::cerr 
<< "SDL_LoadBMP() failed!\n" << s << std::endl;
        SDL_Quit();
        
return -1;
    }

    pFront 
= SDL_LoadBMP("front.bmp"); 
    
try {
        
if ( pFront == 0 )
            
throw SDL_GetError();
    }
    
catch ( const char* s ) {
        std::cerr 
<< "SDL_LoadBMP() failed!\n" << s << std::endl;
        SDL_Quit();
        
return -1;
    }

    
try {
        pressESCtoQuitPlus();
    }
    
catch ( const char* s ) {
        std::cerr 
<< "pressESCtoQuitPlus() failed!\n" << s << std::endl;
        SDL_Quit();
        
return -1;
    }

    SDL_Quit();

    
return 0;
}

void pressESCtoQuitPlus()
{
    
bool gameOver = false;
    
while( gameOver == false ){
        SDL_Event gameEvent;
        
while ( SDL_PollEvent(&gameEvent) != 0 ){
            
if ( gameEvent.type == SDL_QUIT ){
                gameOver 
= true;
            }
            
if ( gameEvent.type == SDL_KEYUP ){
                
if ( gameEvent.key.keysym.sym == SDLK_ESCAPE ){
                    gameOver 
= true;
                }
            }
        }
        loopRender();
    }
    
return;
}

void loopRender()
{
    SDL_Rect
* pSrcRect = 0;    
    SDL_Rect
* pDstRect = 0;
    
if ( SDL_BlitSurface(pBack, pSrcRect, pScreen, pDstRect) != 0 )
        
throw SDL_GetError();
    
if ( SDL_BlitSurface(pFront, pSrcRect, pScreen, pDstRect) != 0 )
        
throw SDL_GetError();
    
if ( SDL_Flip(pScreen) != 0 )
        
throw SDL_GetError();
    
return;
}

2.3:?jiǎn)栴}。

        你可能發(fā)現(xiàn)除了鼠標(biāo)指針不顯示之外,沒(méi)有其它問(wèn)題——這其實(shí)不是好現(xiàn)象,因?yàn)閼?yīng)該和可能出現(xiàn)的問(wèn)題,都被我們事先避免了,但是這樣讓我們離事情的本質(zhì)越來(lái)越遠(yuǎn)。你可以嘗試著關(guān)掉SDL_DOUBLEBUF位標(biāo)看看是什么效果;或者,在前面渲染單幀的程序中使用硬件渲染同時(shí)打開(kāi)雙緩沖看看出現(xiàn)什么問(wèn)題——這些正是我們下一節(jié)將要討論的。
        如果你迫不及待的想知道原因,并且英語(yǔ)也過(guò)關(guān)的話,對(duì)于硬件渲染可能會(huì)引發(fā)的問(wèn)題,我給你推薦一篇SDL官方也推薦的論文:
http://www.linuxdevcenter.com/pub/a/linux/2003/08/07/sdl_anim.html
        但是很不幸的是,我在試驗(yàn)的過(guò)程中發(fā)現(xiàn)這篇文章有很多問(wèn)題,當(dāng)然,也許是我錯(cuò)了。因?yàn)槲覂H僅把SDL作為了一個(gè)黑盒子來(lái)研究,但是我得到的試驗(yàn)結(jié)果,卻是不可能錯(cuò)的。

2.4:補(bǔ)充。

        目前用Debian試驗(yàn)的時(shí)候,發(fā)現(xiàn)NVidia的顯卡驅(qū)動(dòng)屏蔽掉了dga的。也就是說(shuō)實(shí)際上用不了,或者會(huì)設(shè)置起來(lái)很麻煩。實(shí)際上,SDL通過(guò)x11來(lái)實(shí)現(xiàn)圖像,我目前的認(rèn)識(shí)應(yīng)該是這樣的:SDL->x11->NV驅(qū)動(dòng)->顯卡。所以,實(shí)際上我們雖然沒(méi)有通過(guò)SDL接觸到顯卡,但實(shí)際上還是通過(guò)種種渠道調(diào)用了顯卡,我們應(yīng)該充分相信NV的工程師比我們牛得多。NV官方解釋如下:
http://us.download.nvidia.com/XFree86/Linux-x86/169.04/README/chapter-07.html#id2546686

Why do applications that use DGA graphics fail?


The NVIDIA driver does not support the graphics component of the XFree86-DGA (Direct Graphics Access) extension. Applications can use the XDGASelectInput() function to acquire relative pointer motion, but graphics-related functions such as XDGASetMode() and XDGAOpenFramebuffer() will fail.

The graphics component of XFree86-DGA is not supported because it requires a CPU mapping of framebuffer memory. As graphics cards ship with increasing quantities of video memory, the NVIDIA X driver has had to switch to a more dynamic memory mapping scheme that is incompatible with DGA. Furthermore, DGA does not cooperate with other graphics rendering libraries such as Xlib and OpenGL because it accesses GPU resources directly.

NVIDIA recommends that applications use OpenGL or Xlib, rather than DGA, for graphics rendering. Using rendering libraries other than DGA will yield better performance and improve interoperability with other X applications.


posted on 2008-02-15 16:23 lf426 閱讀(9573) 評(píng)論(6)  編輯 收藏 引用 所屬分類(lèi): SDL入門(mén)教程

FeedBack:
# re: SDL入門(mén)教程(四):2、SDL動(dòng)畫(huà)的硬件渲染(Hardware Render)  2008-08-03 19:28 xiangxiangxiangxiangxiangxiangxiang
我顯卡是NVIDIA的,用dga果然不行
用x11也不行!
請(qǐng)問(wèn)怎么才能啟用硬加速呢?謝謝  回復(fù)  更多評(píng)論
  
# re: SDL入門(mén)教程(四):2、SDL動(dòng)畫(huà)的硬件渲染(Hardware Render) [未登錄](méi) 2008-08-03 20:07 lf426
我的認(rèn)識(shí)是這樣的,只要x11啟動(dòng)了nv的驅(qū)動(dòng),硬件加速實(shí)際上是打開(kāi)的,只是被封裝到了x11內(nèi)部,我們通過(guò)SDL軟件渲染調(diào)用了封裝后的x11接口,實(shí)際作用的時(shí)候是啟動(dòng)了硬件加速。這樣應(yīng)該比我們直接調(diào)用硬件接口更加安裝簡(jiǎn)單易用。如何繞過(guò)這個(gè)設(shè)定,估計(jì)只有問(wèn)問(wèn)SDL的作者了,我在fqa里是沒(méi)找到。  回復(fù)  更多評(píng)論
  
# re: SDL入門(mén)教程(四):2、SDL動(dòng)畫(huà)的硬件渲染(Hardware Render)  2008-08-04 18:25 xiangxiangxiangxiangxiangxiangxiang
按照你的意思那么在linux 下面就可以不用寫(xiě)putenv("SDL_VIDEODRIVER=dga");
以為x11會(huì)去調(diào)用他
而且我加上這句話運(yùn)行會(huì)崩掉的(其他directfb,svgalib,ggi也一樣不行)

可是我檢測(cè)到的pScreen->flags確是沒(méi)有開(kāi)啟加速。
暈了
設(shè)置成
putenv("SDL_VIDEODRIVER=fbcon");
顯示有點(diǎn)有變化,但pScreen->flags==0
同樣,
putenv("SDL_VIDEODRIVER=aalib");
會(huì)有亂馬,但仍然pScreen->flags==0
  回復(fù)  更多評(píng)論
  
# re: SDL入門(mén)教程(四):2、SDL動(dòng)畫(huà)的硬件渲染(Hardware Render) [未登錄](méi) 2008-08-04 22:06 lf426
我的意思其實(shí)就是,一般情況下,不需要設(shè)置成硬件渲染。我認(rèn)為SDL軟件渲染實(shí)際是把任務(wù)交給了x11,至于x11最終是通過(guò)什么途徑渲染不是很重要,而且我認(rèn)為x11實(shí)際上是調(diào)用了nv的驅(qū)動(dòng),所以,雖然沒(méi)有在SDL中設(shè)置成硬件渲染,但是并不意味著就沒(méi)調(diào)用顯卡。當(dāng)然,都是我的猜測(cè),具體情況,可能得問(wèn)問(wèn)SDL作者本人。  回復(fù)  更多評(píng)論
  
# re: SDL入門(mén)教程(四):2、SDL動(dòng)畫(huà)的硬件渲染(Hardware Render)  2013-06-10 13:06 蕭蕭_gloxec
關(guān)于sdl的渲染樓主說(shuō)錯(cuò)了
sdl源碼我認(rèn)真分析了
sdl的渲染模式是繞過(guò)了x11
直接建立在底層了
因此想怎么渲染都行
但又設(shè)計(jì)者把零碎的給屏幕描點(diǎn)給封裝成了各式的渲染,并且為了方便他人開(kāi)發(fā),又用x11在外圍加了一層不必要的框
因此在沒(méi)有x11,文本的狀態(tài)下仍然可以各種渲染
并且sdl是基于底層的原因,所以可以實(shí)現(xiàn)任意坐標(biāo)點(diǎn)的顏色改變,但又因?yàn)榉庋b的緣故,所以沒(méi)那么隨心所欲

按找sdl的渲染原理。
我也同樣做出了可以任意改變屏幕某個(gè)點(diǎn),或塊,的函數(shù)

同時(shí)又找了x11的顯圖原理
發(fā)現(xiàn)應(yīng)該是
x11→顯卡
sdl→顯卡
而且x11,sdl都是平等的用了2.4以上kernel的fb設(shè)備,實(shí)現(xiàn)顯圖,只不過(guò)是功能不同而以  回復(fù)  更多評(píng)論
  
# re: SDL入門(mén)教程(四):2、SDL動(dòng)畫(huà)的硬件渲染(Hardware Render)  2013-06-10 13:14 蕭蕭_gloxec
并且雙緩沖也是需要硬件支持的
sdl是用fb的接口做渲染的
所以要想雙緩沖,那么就要fb的總內(nèi)存大于 〔fb.xres *
fb.yres *
fb.bits_per_pixel /
8〕 的值  回復(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>
              先锋影音久久| 在线免费观看视频一区| 久久精品免费电影| 久久国产日韩| 久久青青草综合| 另类图片国产| 欧美极品色图| 国产精品成人在线观看| 国产精品视频自拍| 国内精品久久久久影院色| 国产婷婷色一区二区三区四区| 国产人成一区二区三区影院| 黄色成人在线| 亚洲精品美女久久7777777| 一本久久综合| 亚洲欧美在线播放| 久久久久免费| 亚洲精品三级| 欧美在线欧美在线| 欧美国产日韩亚洲一区| 国产精品高潮呻吟久久| 伊人久久亚洲影院| 亚洲视频自拍偷拍| 久久亚洲电影| 99国产精品视频免费观看一公开| 亚洲欧美另类中文字幕| 欧美a级大片| 国产日韩欧美综合精品| 91久久精品一区二区三区| 亚洲资源av| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲国产欧美在线| 日韩一级片网址| 久久国产精品久久久久久电车| 欧美成人午夜激情在线| 国内精品视频一区| 香蕉成人久久| 亚洲美女中出| 欧美成人中文字幕在线| 国产婷婷一区二区| 亚洲欧美国产精品va在线观看| 欧美成人免费在线| 欧美一区二区三区电影在线观看| 欧美日韩大片一区二区三区| 在线播放豆国产99亚洲| 欧美与黑人午夜性猛交久久久| 亚洲精品裸体| 一本一本久久a久久精品综合麻豆| 国产在线视频欧美| 亚洲欧美成人| 99国产精品久久久久久久久久| 麻豆国产精品一区二区三区| 国产美女精品视频| 亚洲免费伊人电影在线观看av| 亚洲国产mv| 欧美成人免费全部| 亚洲人www| 亚洲电影在线| 欧美 日韩 国产 一区| 伊人狠狠色j香婷婷综合| 久久久国产精品一区二区三区| 亚洲宅男天堂在线观看无病毒| 国产精品视屏| 久久久久久久综合色一本| 午夜亚洲性色福利视频| 国产色产综合色产在线视频| 欧美一区二区三区成人| 亚洲免费中文字幕| 国产区精品在线观看| 久久精品国产一区二区电影| 欧美一区亚洲| 一区视频在线| 亚洲国产精品成人综合| 欧美激情精品久久久久| 亚洲最黄网站| 亚洲网在线观看| 国产在线视频欧美| 欧美韩国一区| 欧美日韩精品在线观看| 亚洲欧美日韩精品久久久久| 午夜精品久久久久久久| 红桃视频欧美| 亚洲人体一区| 国产欧美日韩视频一区二区| 毛片基地黄久久久久久天堂| 欧美激情亚洲| 香蕉精品999视频一区二区 | 日韩视频中午一区| 国产精品羞羞答答xxdd| 久久露脸国产精品| 欧美精品1区| 欧美在线免费播放| 美女黄色成人网| 在线视频精品一区| 午夜精品在线视频| 亚洲黄色视屏| 亚洲欧美清纯在线制服| 1024国产精品| 亚洲视频电影在线| 亚洲第一色在线| 亚洲一区二区日本| 亚洲激情成人| 亚洲欧美日韩综合aⅴ视频| 亚洲电影一级黄| 亚洲午夜伦理| 亚洲精品在线视频| 久久久www成人免费无遮挡大片| 一区二区成人精品 | 99这里只有精品| 亚洲免费在线观看| 亚洲精品五月天| 欧美一区二区视频在线| 一本一本大道香蕉久在线精品| 午夜精品一区二区三区在线播放| 亚洲国产精品免费| 篠田优中文在线播放第一区| 日韩午夜一区| 美女主播视频一区| 久久男人资源视频| 国产美女精品人人做人人爽| 99ri日韩精品视频| 亚洲精品视频啊美女在线直播| 欧美在线亚洲在线| 欧美在线观看视频| 国产精品久久久久久久电影| 亚洲黄色成人网| 亚洲国产aⅴ天堂久久| 欧美一区日本一区韩国一区| 亚洲欧美在线免费| 欧美性jizz18性欧美| 亚洲精品国产精品国产自| 悠悠资源网亚洲青| 久久精品网址| 久久亚洲免费| 在线观看av一区| 久久久久国产精品午夜一区| 欧美伊久线香蕉线新在线| 国产精品vvv| 亚洲小视频在线观看| 亚洲欧美美女| 国产精品一区二区久久久久| 亚洲午夜精品一区二区三区他趣| 亚洲综合精品四区| 国产欧美一区二区色老头| 亚洲欧美激情在线视频| 久久久精品999| 尤物九九久久国产精品的特点| 久久久久久久国产| 亚洲第一二三四五区| 一本一本久久| 国产精品有限公司| 欧美亚洲自偷自偷| 巨胸喷奶水www久久久免费动漫| 好吊妞这里只有精品| 久久午夜影视| 亚洲看片一区| 欧美一区二区三区在线看| 国产性色一区二区| 久久激情五月激情| 欧美高清在线播放| 在线视频中文亚洲| 国产婷婷一区二区| 欧美va亚洲va香蕉在线| 一区二区精品在线观看| 久久成人国产| 91久久精品国产91性色| 欧美日韩在线高清| 欧美一级在线视频| 91久久在线播放| 久久国产精品久久久| 亚洲国产精品第一区二区| 欧美色一级片| 久久裸体艺术| 亚洲午夜电影网| 免费观看亚洲视频大全| 欧美一区二区三区视频免费| 免费不卡视频| 一区二区三区精品| 国产一区二区高清视频| 欧美成人福利视频| 亚洲在线日韩| 欧美激情一区二区| 小黄鸭精品密入口导航| 亚洲福利视频在线| 国产精品国产三级国产普通话99| 久久男女视频| 一区二区三区视频在线| 欧美成人tv| 先锋影音国产精品| 99精品视频免费全部在线| 国内一区二区三区在线视频| 欧美日韩在线观看一区二区| 老巨人导航500精品| 亚洲欧美日韩视频二区| 99精品国产在热久久| 亚洲第一综合天堂另类专| 玖玖玖国产精品| 久久久久久久一区二区| 午夜精品在线观看| 国产精品99久久久久久久女警|