[問題] OpenGL中的List

看板C_and_CPP (C/C++)作者 (夜夜米)時間16年前 (2009/08/16 00:43), 編輯推噓6(6035)
留言41則, 3人參與, 最新討論串1/1
想請教一下openGL glNewList與glCallList的問題 我目前正在學習OpenGL 就我目前的認知 glNewList的功能似乎就是把描述的一切圖形先建立起來 等到往後呼叫到glCallList直接把它拿出來用 應該沒錯吧? 如果 今天用函式代替glNewList 就是將我要的圖形描述在我自訂函式之中 而不使用List 應該可以達到同樣的功能 但是程式本身的運作應該是不同的吧? 我目前知道 用glNewList建立起來的物件 在往後用glCallList的時候會比自訂函式快很多 但是似乎卻無法改變已經建立成List的物件的參數(例如長寬) glNewList(list_name, GL_COMPILE) 裡面的GL_COMPILE 似乎就是在建立list的時候compile這些內容 這應該就是他跟函式的差別 我的意思是 glNewList(list_name, GL_COMPILE) 中的GL_COMPILE 到底讓glNewList在程式裡面做了什麼特別的事情呢? (而且這件事情是自訂函式所沒辦法達到的) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.32.209

08/16 01:47, , 1F
最啟碼, glList減少了AP的API call次數, 如果driver和HW
08/16 01:47, 1F

08/16 01:48, , 2F
實作的好的話, 這一部份的API call的overhead是你自己用
08/16 01:48, 2F

08/16 01:48, , 3F
function實作無法克服, 甚至反而可以說overhead更大的.
08/16 01:48, 3F

08/16 01:49, , 4F
List小弟比較沒在用, 但是已經建好的List在直接call來繪
08/16 01:49, 4F

08/16 01:50, , 5F
圖時, driver layer肯定可以對它做相當程度的最佳化, 傳
08/16 01:50, 5F

08/16 01:51, , 6F
統Begin/End的呼叫方式, 其實是相當沒效率的一種運作方
08/16 01:51, 6F

08/16 01:51, , 7F
法; 甚至HW+driver對已知要畫的流程有什麼方法可以最佳
08/16 01:51, 7F

08/16 01:51, , 8F
化也是不無可能的:)
08/16 01:51, 8F

08/16 01:52, , 9F
話說回來, Display List也真的是相當古老的東西了, 個人
08/16 01:52, 9F

08/16 01:52, , 10F
建議除非有什麼理由非用不可, 不然就算是fixed function
08/16 01:52, 10F

08/16 01:57, , 11F
應該也有更好更有效率的方法來繪圖, OpenGL 3.x以後這個
08/16 01:57, 11F

08/16 01:58, , 12F
feature都被mark為deprecated了, OpgnGLES 1.x與2.0也都
08/16 01:58, 12F

08/16 01:59, , 13F
不支援這個功能呢@_@"
08/16 01:59, 13F

08/16 03:00, , 14F
感謝樓上專業回答
08/16 03:00, 14F

08/16 03:01, , 15F
話說我的OpenGL相當古老 也找不到新的......
08/16 03:01, 15F

08/16 11:01, , 16F
我想原po只是不知道怎麼用extension,而不是找不到新的 XD
08/16 11:01, 16F

08/16 13:18, , 17F
OpenGL因為歷史與作業系統的關係, 新的功能常常用試著先
08/16 13:18, 17F

08/16 13:18, , 18F
query extension, 然後用GetProcessAddress把新功能的
08/16 13:18, 18F

08/16 13:18, , 19F
API function pointer address拿回來才能用, 去網路上找
08/16 13:18, 19F

08/16 13:19, , 20F
找有沒有範例吧; 現在的NV/AMD Gfx, 應該實作到了就算沒
08/16 13:19, 20F

08/16 13:20, , 21F
有3.0也有2.1, GeForce 7系列更新driver就有2.1的功能了
08/16 13:20, 21F

08/16 13:22, , 22F
就算是Intel的內顯, 應該也有到1.4甚至1.5了; 所以不太
08/16 13:22, 22F

08/16 13:22, , 23F
理解"您的"OpenGL古老是什麼意思??
08/16 13:22, 23F

08/16 15:38, , 24F
不過奇怪的是只有Win32需要GetProcessAddress(好像是因為
08/16 15:38, 24F

08/16 15:40, , 25F
只能先連結到Windows的軟體實作opengl32.dll的樣子)
08/16 15:40, 25F

08/16 15:42, , 26F
Linux則是直接link廠商提供的library,不需要查address。
08/16 15:42, 26F

08/16 16:44, , 27F
就是我找到的OpenGL...是1.1的......
08/16 16:44, 27F

08/16 17:22, , 28F
Windows上的軟體實作&SDK是1.1的沒錯,你需要另外裝
08/16 17:22, 28F

08/16 17:23, , 29F
glext.h 裡面會定義更多新的OpenGL函數 & macro
08/16 17:23, 29F

08/16 20:25, , 30F
你找到的OpenGL是1.1的這句話本身就是一個問題....Orz
08/16 20:25, 30F

08/16 20:26, , 31F
OpenGL是一套3D Library/API, 新版本的feature需要HW/
08/16 20:26, 31F

08/16 20:26, , 32F
driver等Gfx的環境提供, 加上AP端使用這些新的feature來
08/16 20:26, 32F

08/16 20:27, , 33F
實作; 你的OpenGL是1.1, 要嘛就是找到的學習資料/sample
08/16 20:27, 33F

08/16 20:27, , 34F
是1.1的, 這點請您自己更換material; 如果是運行平台/環
08/16 20:27, 34F

08/16 20:28, , 35F
境只有1.1的功能, 也許您應該先提供您運行的環境, 包含
08/16 20:28, 35F

08/16 20:28, , 36F
作業系統, 顯示卡, 與驅動程式版本, 以及程式執行的方式
08/16 20:28, 36F

08/16 20:30, , 37F
等; Windows下, 可以去找 OpenGL Extension Viewer來看
08/16 20:30, 37F

08/16 20:30, , 38F
http://www.realtech-vr.com/glview/ 可以幫您彙整您的
08/16 20:30, 38F

08/16 20:33, , 39F
環境OpenGL相關的資訊與能力; 至於新版的header file等
08/16 20:33, 39F

08/16 20:34, , 40F
http://www.opengl.org/registry/ 請來這裡下載:)
08/16 20:34, 40F

08/16 21:41, , 41F
我是初學者 非常初學 對前輩們的回答感激不盡啊~~
08/16 21:41, 41F
文章代碼(AID): #1AXkMUQE (C_and_CPP)
文章代碼(AID): #1AXkMUQE (C_and_CPP)