2014-09-29 32 views
4

我有一個GPIO顯示樹莓派。我目前已經將它設置爲/ dev/fb1上的幀緩衝設備。有沒有辦法使它成爲X窗口的默認或主顯示器?我最終試圖繪製圖形,我原本計劃使用DirectFB和SDL,但DirectFB在pi中是alpha。我嘗試過使用SDL1.2,因爲它具有Framebuffer支持,但我無法弄清楚如何讓SDL選擇一個幀緩衝設備來繪製而不使用DirectFB。有沒有辦法配置xorg使用framebuffer設備作爲主監視器?

我曾考慮過使用SDL來將我的簡單GUI的每一幀準備爲原始圖像,並使用mmap將其閃存到/ dev/fb1而不是使用SDL的內置繪圖函數,但我覺得這是一種糟糕的方式達到我的目標。

我認爲,如果我可以讓xorg使用我的幀緩衝設備作爲主監視器,那麼我不必擔心爲了讓SDL繪製我的圖像文件而做任何特殊的事情。但我不確定xorg是如何工作的,如果這是可能的話。

任何見解或幫助任何人都會大大幫助!我一直在考慮這個問題,一個星期看着不同的可能性。

回答

1

使用Raspbian上的SDL2,您可以在不使用X的情況下直接在幀緩衝區上繪圖。圖形窗口始終爲全屏。您可以從控制檯模式啓動代碼(X停止運行或從運行X的LXDE啓動,但想法是SDL2不會使用X)。

不幸的是,Raspbian沒有帶SDL2(Jessie的SDL2不工作),所以您需要自己構建它(需要大約一個小時)。這裏是建築SDL2的過程的描述:

sudo apt-get install build-essential libfreeimage-dev libopenal-dev libpango1.0-dev libsndfile-dev libudev-dev libasound2-dev 

https://www.libsdl.org/download-2.0.php下載源SDL2。假設你下載的文件是SDL2與* .tar.gz,您可以構建和安裝它:

cd ~/Downloads 
tar zxvf SDL2*.tar.gz 
cd SDL2* 

./configure --disable-video-x11 
make 
sudo make install 

之後,你應該能夠SDL2鏈接任何C++程序,如:

g++ my_program.cpp -lSDL2 -o my_program 
./my_program 
+0

有沒有辦法選擇使用哪種幀緩衝設備?當我上次嘗試使用SDL2時,它總是默認爲fb0,但我需要它使用fb1。 – 2014-10-06 15:00:46

+0

不知道這是否有幫助,但您可以嘗試使用SDL_GetNumRenderDrivers並查看您有多少個選項。如果您有多個嘗試使用SDL_CreateRenderer選擇相應的驅動程序,並查看哪一個(如果有的話)在fb1上呈現。我沒有找到任何直接指定fb0或fb1的函數。 – JeanC 2014-10-06 21:33:15

+1

顯然,SDL1.2有一個env變量SDL_FBDEV,您可以使用它來選擇要使用的幀緩衝區,SDL_FBDEV請參閱http://sdl.beuc.net/sdl.wiki/SDL_envvars – JeanC 2014-10-06 21:43:06

相關問題