[問題] 如何知道struct內的變數名稱

看板C_and_CPP作者 (東逼)時間12年前 (2013/07/03 19:00), 編輯推噓8(8025)
留言33則, 8人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) arm-linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) openGL es2 問題(Question): 是這樣的~ 我在用一些openGL的API實作時 有需要用到一個變數 EGLNativePixmapType 去追了一下相關的.h檔之後 發現他的定義是這樣子的: typedef struct _FBPixmap * EGLNativePixmapType; 可是我想再繼續往下追的時候 卻發現找不到 _FBPixmap的定義了 @@ 利用grep去rootfs/usr/include底下都沒有 我在想會不會是他已經被包在library裡了 請問有甚麼辦法可以知道這個結構裡面有哪些變數名稱嗎? 例如說有個結構 struct _aa { int num; char ch; } AA; 然後我可以利用objdump之類的工具知道AA裡有變數num, ch之類的 @@ 爬了文好像都沒看到 就來這請教大家囉~ 在此也先跟各位說聲謝謝囉! -- ▍ ▍ ╯╰ ╯╰ ◢◣ ◢◣ 我最愛的 柏柏龍~ 柏柏龍~ ◢██◣ ╮╭ ▎▎╮╭ ▎▎ 柏柏龍~ 柏柏龍~ ⊙ ⊙ ⊙ ⊙ 人人心中都有柏柏龍~ ≡ ▼ ≡ ▲▲ ● ● ≡ ▼ ≡ ■ ■ ■ ■ 憤怒就永遠不會消失~ ⊙⊙ ≡皿 ≡ 炸是最美的擁有~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.179.30

07/03 20:12, , 1F
openGL的doc沒有介紹?
07/03 20:12, 1F

07/03 20:25, , 2F
看了一下似乎是沒有介紹到~@@ 我是看 www.khronos.org/
07/03 20:25, 2F

07/03 20:25, , 3F
主要好像都是介紹如何使用API~如果我有漏看也請指教囉@@"y
07/03 20:25, 3F

07/03 22:23, , 4F
會這樣寫是想要把實作隱藏起來 也就是你不需要去挖
07/03 22:23, 4F

07/04 00:17, , 5F
是說 egl 跟 gles 應該是不同的東西吧
07/04 00:17, 5F

07/04 01:07, , 6F
所以能不能編過 能編過一定有 declare 只是你沒找到而已
07/04 01:07, 6F

07/04 01:25, , 7F
只要有forward declaration就可以編過啦
07/04 01:25, 7F

07/04 01:31, , 8F
那啥鬼, 你說 define 一個 void*?
07/04 01:31, 8F

07/04 01:48, , 9F

07/04 02:14, , 10F
了解 所以你們的意思是原PO沒看到 forward declaration??
07/04 02:14, 10F

07/04 03:47, , 11F
typedef 的時候看到的 strcut _FBPixmap 就算了
07/04 03:47, 11F

07/04 03:49, , 12F
C 的 struct name 是 tag, 寫 struct T* 時 T 沒看過也沒關係
07/04 03:49, 12F

07/04 07:53, , 13F
原PO是遇到甚麼問題一定要知道 EGLNativePixmapType 型態?
07/04 07:53, 13F

07/04 07:58, , 14F
EGLNativePixmapType是看你的GL拿甚麼來當此型態.
07/04 07:58, 14F

07/04 08:00, , 15F
一定有它不是GL的API可建立EGLNativePixmapType
07/04 08:00, 15F

07/04 08:01, , 16F
原PO需要去找一下,或問廠商有沒有範例...
07/04 08:01, 16F

07/04 08:02, , 17F
之前在原始Android上記得是使用native_buffer來當此型態
07/04 08:02, 17F

07/04 08:04, , 18F
WIN是HBITMAP, X11是Pixmap, 這些都不是GL API產生的實體.
07/04 08:04, 18F
先感謝以上的回覆 @@ 是這樣子的 原先我在畫openGL的時候 最後render出來的東西可以利用這個API glReadPixel(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer) 來幫我把畫出來的東西存到buffer 但是這樣有個問題是效能會超慢的 網路上有人提到可以利用eglCreatePixmapSurface 建立一塊off-screen的window 把render的東西畫在這裡 最後搭配 eglCopyBuffers(egldisplay, eglsurface, eglpixmap); 其中eglpixmap的型態就是 EGLNativePixmapType 它是由 fbCreatePixmap這個API產生的 eglpixmap這個東西裡面應該有包含color buffer的資訊 Thelink大大提到了範例 沒錯,廠商的確有提供範例~ 但是是winCE的...XD 而在winCE裡 EGLNativePixmapType的型態就是HBITMAP 看他的範例也的確可以讀到color buffer的資訊 但我的平台是arm-linux的 直接讀是有問題的 我試著把裡面的資訊印出來 形式大概長這樣: eglpixmap[0] = oooxxx →看起來像某位址 eglpixmap[1] = xxx000 →看起來像某位址 eglpixmap[2] = 800 →看起來像我設定的window width eglpixmap[3] = 480 →看起來像我設定的window height eglpixmap[4] = 32 →看起來像我設定的depth eglpixmap[5] = ..... 所以我在猜想會不會 _FBPixmap的形式大概是長這樣 sruct _fbpixmap { int width; int height; int depth; void* data; } _FBPixmap 當然詳細資訊還是得知道它的內容有哪些 我也有想過會不會要利用類似eglQuery的API來得到buffer內容 不過查一下似乎沒看到就是了 @@" 無論如何若有說錯的還請大家多指教了 謝謝大家 ※ 編輯: donby 來自: 59.120.179.30 (07/04 09:57) ※ 編輯: donby 來自: 59.120.179.30 (07/04 10:00)

07/04 11:06, , 19F
看來我大腦挺無能的 scwg大提的我理解不能Orz
07/04 11:06, 19F

07/04 11:14, , 20F
原po可查一下有沒有相關的api取你需要的資訊
07/04 11:14, 20F

07/04 14:21, , 21F
還是不太懂為什麼你想要把 pixmap 弄到自己的 buffer 裡
07/04 14:21, 21F

07/04 14:21, , 22F
是要做 double buffer 嗎?
07/04 14:21, 22F

07/04 15:11, , 23F
他會這樣隱藏就是因為data實際上存在VRAM裡不想給你動
07/04 15:11, 23F

07/04 15:12, , 24F
建surface快就是因為所有操作都留在GPU裡
07/04 15:12, 24F

07/04 15:13, , 25F
你可以查查看應該有函數可以把資料拉回來
07/04 15:13, 25F

07/04 15:13, , 26F
可是資料在CPU <-> GPU間傳送永遠都很慢
07/04 15:13, 26F
回scwg大大 其實最原本目的是希望能把外部影像 先透過GPU處理後存到某個buffer 然後再把這個buffer再輸出到其他地方做額外處理 回azureblaze大大 就我查的結果 目前似乎只有glReadPixel這個API可以把資料輸出到我想要的buffer上 而這個API是拖垮我效能的主因 除了這個API我就不知道有啥方法可以把資料取出來了 @@" ※ 編輯: donby 來自: 59.120.179.30 (07/04 16:35)

07/04 16:58, , 27F
不能換個作法嗎?譬如延時顯示之類的來偷時間
07/04 16:58, 27F

07/04 17:23, , 28F
找看看有沒有FBO能用,這個才是標準解法
07/04 17:23, 28F
再次感謝樓上大大們的回覆 (一直修文會不會被水桶啊 @@a) littleshan大大的作法我都做過 包括了利用glGenFramebuffers 自己建立背景FBO 不用window surface 改用eglCreatePbufferSurface、eglCreatePixmapSurface 甚至網路上有人提到可以建立多重pBuffer來切換的方式 效能是有快一點 但最主要的癥結點還是卡在必須要利用glReadPixel上 自己實際測試有無加glReadPixel的情況 FPS可以差到3.4倍 目前的解法是在增進外部訊號的處理效率 另外就是寫信問原廠 囧 無論如何還是謝謝大家幫忙 至少滿多人提供想法讓我在實作時也能額外得到一些收穫 XD 如果到時找到更好方法再來分享給大家囉~ ※ 編輯: donby 來自: 59.120.179.30 (07/04 19:51)

07/04 20:08, , 29F
建議還是寫信問原廠吧。就算猜到結構,也不知道指標指到
07/04 20:08, 29F

07/04 20:08, , 30F
那去,底層的結構也許很複雜。而且給GPU使用的記憶體通常
07/04 20:08, 30F

07/04 20:08, , 31F
是實體連續的,常常作業系統不控管,應用程式要存取還要
07/04 20:08, 31F

07/04 20:08, , 32F
做記憶體映射,才能存取。
07/04 20:08, 32F

07/05 01:15, , 33F
是的~已經在它的論壇發文問囉~再次謝謝樓上大大回覆
07/05 01:15, 33F
文章代碼(AID): #1Hr0Har- (C_and_CPP)