Re: [問題] openGL獲得frame buffer資料

看板C_and_CPP (C/C++)作者時間13年前 (2013/03/21 21:20), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
前文恕刪 : GLuint my_fbo = 2; //新增一個我想要在背景做事的framebuffer : GLuint my_shader = 0; //新增一個我想要在背景運算的shader : unsigned char my_buffer[800*480*4]; //背景運算完後想存的地方 : void custom_framebuffer_init() : { : //新增一個render buffer : glGenRenderbuffers(1, &my_shader); : glBindRenderbuffer(GL_RENDERBUFFER, my_shader); : glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, 800, 480); : glBindRenderbuffer(GL_RENDERBUFFER, 0); 上面這個 colorbuffer 跟下面的功能重複,可以刪掉只留 texture。 : //設定要綁定的材質 : glGenTextures(1, &texture); : glBindTexture(GL_TEXTURE_2D, texture); : glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 800, 480, 0, GL_RGBA, : GL_UNSIGNED_BYTE, NULL); 這三行會建立用來當 colorbuffer 的 texture,你畫的東西都會在這裡。 : ////新增一個frame buffer : glGenFramebuffers(1, &my_fbo); : glBindFramebuffer(GL_FRAMEBUFFER, my_fbo); : glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, : GL_RENDERBUFFER, my_shader); 上面這個是多的 renderbuffer,而且跟下面的 GL_COLOR_ATTACHMENT0 重複。 : glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, : GL_TEXTURE_2D, texture, 0); : //設定運算後要存的buffer初始值 : memset(my_buffer, 0, sizeof(my_buffer)); : //確認framebuffer設定是否有誤 : if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) : { : printf("!!!!!!!!!!!!!!!!!!!!!!! ERROR !!!!!!!!!!!!!!!!!!!!!!!\n"); : } : else : { : printf("!!!!!!!!!!!!!!!!!!!!!!! SUCCESS !!!!!!!!!!!!!!!!!!!!!!!\n"); : } : } : void get_custom_fb_data() : { : //想要利用以下的API來得到背景運算的資料 : glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, : GL_RENDERBUFFER, my_shader); : glBufferData(GL_ARRAY_BUFFER, 800*480*4, my_buffer, GL_DYNAMIC_DRAW); : } 這個 function 請砍掉。你畫完東西以後直接用 glBindTexture & glGetTexImage 將 texture 從 video ram 抓到 system ram。 : 問題來了 : 當我把custom_framebuffer_init()放在原本的init()裡最後面 : 編譯並執行 : 沒有錯誤,執行時Framebuffer似乎也有被成功設定 (有顯示!!SUCCESS !!!) : 但結果原本應該要出現的圖反而就消失了 O_O : 我甚至沒有呼叫 get_custom_fb_data : (原本想在data_from_other裡呼叫,但發現即使沒呼叫圖也跑不出來) : 花很多時間查資料好像也沒看到解決的方法 : 倒是看到不少人也有類似的問題 : 甚至我看到有人說 shader language只能顯示,不能直接對shader獲取運算後的資料 : 但是又看到這些相關的API好像可以用 : 現在整個很混亂 囧 : 能否請教一下是我哪裡搞錯了或是想法根本就錯了呢? : 若有講的不完整的也請再跟我說一下 @@ : 在此也先謝謝各位的熱心回答囉 -- My Blog http://rueiyuanlu.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.34.236.197

03/21 21:22, , 1F
太感謝啦!!!! 感謝大大解說@@ 明天再來試試看!
03/21 21:22, 1F
文章代碼(AID): #1HImau3c (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1HImau3c (C_and_CPP)