freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于opengl的vxworks圖形用戶界面開(kāi)發(fā)畢業(yè)論文-資料下載頁(yè)

2025-06-18 16:20本頁(yè)面
  

【正文】 c()背景過(guò)程管理函數(shù)auxMainLoop()程序運(yùn)行函數(shù)4.OpenGL工具庫(kù)OpenGL Utility Toolkit包含大約30多個(gè)函數(shù),函數(shù)名前綴為glut。glut是不依賴于窗口平臺(tái)的OpenGL工具包,由Mark KLilgrad在SGI編寫(xiě)(現(xiàn)在在nVIDIA),目的是隱藏不同窗口平臺(tái)API的復(fù)雜度。函數(shù)以glut開(kāi)頭,它們作為aux庫(kù)功能更強(qiáng)的替代品,提供更為復(fù)雜的繪制功能。由于glut中的窗口管理函數(shù)是不依賴于運(yùn)行環(huán)境的,因此OpenGL中的工具庫(kù)可以在XWindow,Windows NT,OS/2等系統(tǒng)下運(yùn)行,特別適合于開(kāi)發(fā)不需要復(fù)雜界面的OpenGL示例程序。對(duì)于有經(jīng)驗(yàn)的程序員來(lái)說(shuō),一般先用glut理順3D圖形代碼,然后再集成為完整的應(yīng)用程序。: OpenGL GLUT庫(kù)函數(shù)函數(shù)名稱(chēng)主要功能描述glutInit()glutInitDisplayMode()glutInitWindowSize()glutInitWindowPosition()窗口操作函數(shù)glutDisPlayFunc()glutPostRedisplay()glutReshapeFunc()glutTimerFunc()glutKeyboardFunc()glutMouseFunc()回調(diào)函數(shù) Mesa庫(kù)Mesa[22]是OpenGL在Linux上的一個(gè)實(shí)現(xiàn),它比較完整的包含了OpenGL標(biāo)準(zhǔn)的API。它是具有同OpenGL非常相似的API的一個(gè)3D圖形庫(kù),在一定程度上Mesa利用了OpenGL的命令語(yǔ)義及狀態(tài)機(jī),它獲得了SGI(Silicon Graphics,Inc)的授權(quán),但并沒(méi)有獲得SGI的OpenGL許可證,因此也就無(wú)法成為OpenGL的替代或者同SGI聯(lián)合。應(yīng)用程序OpenGL MotifWidget or SimiliarGLUT軟件或者硬件層GLX,AGL Or WGLOSGLGLU Mesa庫(kù)的組織結(jié)構(gòu) OpenGL/Mesa庫(kù)的移植 工作概述宿主機(jī)的開(kāi)發(fā)環(huán)境為Windows XP,使用的軟件工具和版本分別為T(mén)ornado for x86,VxWorks ,WindML for Tornado ,Mesa 。第一步的工作是配置編譯WindML庫(kù),接著再編譯Mesa庫(kù),上述工作完成之后,VxWorks便具備了開(kāi)發(fā)三維圖形的功能。WindML的安裝和編譯工作相對(duì)要容易些,其操作都實(shí)現(xiàn)了圖形化操作,只要按著說(shuō)明一步一步就可實(shí)現(xiàn),在此就不重點(diǎn)說(shuō)明。而Mesa庫(kù)編譯要復(fù)雜些,下面將重點(diǎn)描述。 重要數(shù)據(jù)結(jié)構(gòu)和函數(shù)的引入Mesa庫(kù)中的GL API可以直接操作底層硬件,但是繪圖初始化的工作,例如與設(shè)備相關(guān)的信息以及繪圖設(shè)備的初始化等工作都是通過(guò)UGL來(lái)完成的。借助于UGL已經(jīng)提供的接口,為Mesa的繪圖做好準(zhǔn)備。所以在編譯Mesa庫(kù)之前,先要引入幾個(gè)重要的數(shù)據(jù)結(jié)構(gòu)和函數(shù)[23]。我們知道,無(wú)論是UGL繪圖或者M(jìn)esa繪圖來(lái)講,他們都有各自的圖形描述表,圖形描述符表包含有相關(guān)繪圖特性的信息,并與圖形顯示設(shè)備ID直接相連,大多數(shù)繪圖操作只能通過(guò)定義有效的圖形描述符表才能決定如何進(jìn)行,應(yīng)用程序可以針對(duì)圖形顯示設(shè)備創(chuàng)建多個(gè)圖形描述符表。為了實(shí)現(xiàn)上述Mesa與UGL的結(jié)合,先要引入一個(gè)新的非常重要的描述符表,即uglMesaContext。這個(gè)結(jié)構(gòu)體中主要的一些數(shù)據(jù)項(xiàng)如下:struct uglMesaContext{GLcontext* glCtx。 /*核心的GL描述符*/GLvisual* glVisual。 /*描述緩沖*/GLframebuffer* glBuffer。/*depth,stencil,accum,等*/GLsizei rowLength。 /*每行像素?cái)?shù)目*/GLint bitsPerPixel。 /*像素大小*/GLint bufferSize。 /*字節(jié)表示的緩沖大小*/GLsizei displayWidth。/*屏幕大小*/UGL_DEVICE_ID devId。/*顯示設(shè)備ID*/UGL_GC_ID gc。 /*UGL圖形上下文*/GLboolean windMLFlag。/*WindML接口調(diào)用標(biāo)記*/}這個(gè)結(jié)構(gòu)體既包含了GL圖形描述符表,也包括了UGL圖形描述表,將兩個(gè)重要的描述符標(biāo)結(jié)合到了一起。同時(shí)windMLFlag如果被置為真,那么相當(dāng)于回復(fù)到了單一UGL的狀態(tài),Mesa被屏蔽。通過(guò)下面的分析,我們將看到下層調(diào)用的聯(lián)系:struct _GLcontextRec{/*API函數(shù)指針表*/struct _glapi_table* Save。/*顯示列表保存函數(shù)表*/struct _glapi_table* Exec。/*操作執(zhí)行函數(shù)表*/struct _glapi_table* CurrentDisPatch。/*驅(qū)動(dòng)函數(shù)指針表*/struct dd_function_table Driver。}其中,驅(qū)動(dòng)函數(shù)表結(jié)構(gòu)定義如下:struct dd_function_table {/*僅列出此項(xiàng)*/void (*DrawPixels) ( GLcontext* ctx,GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,const struct gl_pixelstore_attrib* unpack,const GLvoid* pixels)。/*這個(gè)函數(shù)被glDrawPixels調(diào)用來(lái)進(jìn)行畫(huà)點(diǎn)操作*/}這里說(shuō)明了上下層間是如何關(guān)聯(lián)的。uglMesaContext這個(gè)結(jié)構(gòu)體的引入很好地解決了Mesa和UGL的結(jié)合。下面描述用來(lái)創(chuàng)建這個(gè)結(jié)構(gòu)體的重要函數(shù)uglMesaCreateNewContext():UGL_MESA_CONTEXT uglMesaCreateNewContext(){/*申請(qǐng)UGL_MESA_CONTEXT */umc=( UGL_MESA_CONTEXT)MALLOC_STRUCT(uglMesaContext)。/*初始化上文提到的dd_function_table表*/uglmesa_init_pointers(umcglCtx)。}這個(gè)uglmesa_init_pointers完成如下賦值:uglmesa_init_pointers(GLcontext* ctx) {ctx = _swrast_Accum。ctx = _swrast_Bitmap。ctx = clear。ctx = _swrast_alloc_buffers。ctx = _swrast_ CopyPixels。ctx = _swrast_ DrawPixels。ctx = _swrast_ ReadPixels。}到這里除了設(shè)備驅(qū)動(dòng)相關(guān)的細(xì)節(jié),不同層之間己經(jīng)能夠聯(lián)系到一起。在正確創(chuàng)建了需要的UGL_Mesa描述符表后,因?yàn)橄到y(tǒng)中可能創(chuàng)建了多個(gè)描述符表,在設(shè)備繪圖前,要將當(dāng)前使用的描述符表與frame buffer以及特定的繪圖設(shè)備進(jìn)行綁定。完成此功能的重要函數(shù)是uglMesaMakeCurrentContext(),流程如下:1)綁定正確的清除函數(shù)到context;2)綁定buffer到context;3)調(diào)用glapi_set_context設(shè)置context。 使用改進(jìn)后的庫(kù)下面通過(guò)一個(gè)簡(jiǎn)單的實(shí)例來(lái)說(shuō)明應(yīng)用程序應(yīng)該怎么來(lái)使用加載過(guò)上述數(shù)據(jù)結(jié)構(gòu)和函數(shù)的庫(kù)。VxWorks創(chuàng)建任務(wù),任務(wù)函數(shù)為WindMLFunc。下面是這個(gè)函數(shù)的實(shí)現(xiàn)程序:void WindMLFunc(UGL_BOOL windMLMode){/*ugl初始化*/uglInitialize()。/*ugl加載鍵盤(pán)和事件服務(wù)*/uglDriverFind(amp。keyboardDevId)。uglDriverFind(amp。eventServiceId)。/*ugl創(chuàng)建事件隊(duì)列*/uglEventQCreate(eventServiceId,100)。/*新增的uglmesa context創(chuàng)建*/uglMesaCreateNewContext(UGL_MESA_DOUBLE)。/*uglmesa context與buffer的綁定*/uglMesaMakeCurrentContext()。/*gl初始化*/initGL()。/*開(kāi)始事件循環(huán)*/loopEveni()。/*清除關(guān)閉工作*/uglEventQDestroy(eventServiceId,qId)。uglMesaDestroyContext()。uglDeinitialize()。}通過(guò)這個(gè)應(yīng)用程序,可以看到UGL在這里所扮演的是一個(gè)初始化圖形設(shè)備,完成設(shè)備相關(guān)配置,事件管理這樣一個(gè)角色。不同于原來(lái)在WindML下,繪圖由UGL 2D API通過(guò)ugl_ugl_driver這樣一個(gè)結(jié)構(gòu)體來(lái)調(diào)用驅(qū)動(dòng)相關(guān)的繪圖操作。這里的繪圖由gl接口完成。uglMesaCreateNewContext()在創(chuàng)建時(shí)會(huì)傳入一個(gè)參數(shù)mode,這個(gè)參數(shù)決定了uglmeasContext中的標(biāo)志windMLFlag,表示是否完全是WindML的函數(shù)調(diào)用模式,如果是那么在具體調(diào)用繪圖函數(shù)時(shí)會(huì)通過(guò)保存在uglmesaContext中的ugl_ugl_driver指針gc切換到windml的驅(qū)動(dòng),否則將會(huì)使用mesa的底層驅(qū)動(dòng)。 編譯Mesa庫(kù)首先,將Mesa程序包放置在“ . .\Tornado \target\src”下。然后在Tornado下,建立一個(gè)基于SIMNTgnu的可下載工程,然后添加相關(guān)的Mesa源文件到工程里。然后在“ . .\\target\h”下建立GL文件夾,用來(lái)存放OPENGL頭文件。把“ . .\\target\src\Mesa\include\”、、。做完以上工作后,更改Tornado工程Builds選項(xiàng)卡中的C/C++ Compiler選項(xiàng),添加以下路徑:. .\\target\src\Mesa\include. .\\target\src\Mesa\src再更改Rules選項(xiàng)卡,改為archive,即生成“.a”文件。然后就可以編譯了,編譯成功后會(huì)在你工程目錄下生成“.a”文件。至此,Mesa圖形庫(kù)便被編譯成功。當(dāng)需要用Mesa來(lái)實(shí)現(xiàn)三維圖形顯示的時(shí)候,我們只需要在編譯相應(yīng)的VxWorks應(yīng)用程序前,更改Tornado工程Builds選項(xiàng)卡中Marcos選項(xiàng),然后編譯工程即可。需要說(shuō)明的是,編譯具有相關(guān)功能的VxWorks操作系統(tǒng)映像前,必須要把WindML中的plete 2D圖形庫(kù)和simulator host devices,Simulator graphics組件包含進(jìn)來(lái)。 搭建虛擬開(kāi)發(fā)環(huán)境如同前面介紹,VxWorks與多數(shù)嵌入式系統(tǒng)的調(diào)試開(kāi)發(fā)方式一樣,都是基于交叉式編譯環(huán)境。為了在VxWorks系統(tǒng)下進(jìn)行包括圖形開(kāi)發(fā)在內(nèi)的所有程序的開(kāi)發(fā),就需要擁有一個(gè)包含CPU、存儲(chǔ)器及I/O電路的目標(biāo)機(jī)。雖然許多集成開(kāi)發(fā)環(huán)境附帶模擬軟件,但僅限于指令集的模擬,均無(wú)法模擬物理的目標(biāo)機(jī)硬件平臺(tái),因而在其上只能進(jìn)行應(yīng)用程序的象征性模擬開(kāi)發(fā)。但是,并非所有人都能擁有物理的目標(biāo)機(jī),而且由于目標(biāo)機(jī)資源有限,不能保證隨時(shí)隨地都可以被用來(lái)調(diào)試程序。在這種情況下,我們就應(yīng)該構(gòu)造一個(gè)模擬的開(kāi)發(fā)環(huán)境,這樣雖然會(huì)犧牲一部分的實(shí)時(shí)性,但降低了開(kāi)發(fā)成本,提供了接近于真實(shí)的模擬環(huán)境。本課題使用VMware軟件模擬真實(shí)的目標(biāo)機(jī)。主要的步驟如下:1)編譯系統(tǒng)首先構(gòu)建VMware虛擬PC上VxWorks BSP。主要工作包括編譯網(wǎng)卡驅(qū)動(dòng),以使系統(tǒng)的網(wǎng)絡(luò)功能正常運(yùn)行;,使編譯出來(lái)的系統(tǒng)引導(dǎo)程序和VxWorks的映象符合我們的要求;接著建立bootrom和VxWorks系統(tǒng)映像。在編譯VxWorks映像時(shí),我們需要包括兩個(gè)重要的組件:Telnet server 和 Target shell。前者使我們可以通過(guò)Telnet協(xié)議登錄到VxWorks操作系統(tǒng)中;后者則可以讓我們通過(guò)命令行控制VxWorks系統(tǒng)。另外,需要把所有 C++相關(guān)的選項(xiàng)都包含進(jìn)去;2)制作引導(dǎo)磁盤(pán)引導(dǎo)軟盤(pán)用來(lái)引導(dǎo)VxWorks操作系統(tǒng)映象,通過(guò)命令mkboot a: bootrom,在軟盤(pán)上建立VxWorks系統(tǒng)引導(dǎo)分區(qū),并將引導(dǎo)程序復(fù)制到軟盤(pán)上;3)配置FTP服務(wù)器FTP服務(wù)器用于在系統(tǒng)成功引導(dǎo)之后,下載VxWorks的運(yùn)行時(shí)映像,這里使用Tornado自帶的FTP服務(wù)器。配置好之后讓其處于運(yùn)行狀態(tài)。4)創(chuàng)建VxWorks虛擬機(jī)使用VMWare創(chuàng)建VxWorks虛擬機(jī),在選擇操作系統(tǒng)類(lèi)型時(shí),選擇“Other”,其余選項(xiàng)均使用缺省值。配置好之后開(kāi)始引導(dǎo)運(yùn)行,引導(dǎo)成功之后,系統(tǒng)會(huì)自動(dòng)從FTP服務(wù)器下載映像,并開(kāi)始運(yùn)行。 VxWorks啟動(dòng)界面5)調(diào)配聯(lián)機(jī)調(diào)試環(huán)境裝好VxWorks系統(tǒng)后,下一步就希望將自己編寫(xiě)的應(yīng)用程序下載到目標(biāo)機(jī)進(jìn)行調(diào)試,以下為具體的配置工作。打開(kāi)Tornado 開(kāi)發(fā)環(huán)境,選擇“ToolsTarget ServerConfigure”菜單,彈出一個(gè)配置對(duì)話框,在“Description”中任意填寫(xiě)一個(gè)名字,這里是“net00”;在“Available Back”中選擇“wdbrpc”,并在下面的IP地址框中填寫(xiě)目標(biāo)機(jī)的IP地址,這里是“”(由 DEFAULT_BOOT_LINE參數(shù)決定);將“Target Server Properties”下拉框更改至“Core File and Symbols”,并在“File Path”一項(xiàng)中選擇您的映象的完整路徑,這里是“D:\vxWorks”(由DEFAULT_
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1