[問題] Qt openGL材質讀取

看板C_and_CPP (C/C++)作者 (東逼)時間13年前 (2012/10/26 21:33), 編輯推噓3(305)
留言8則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Qt5.0 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) openGL 大家好 最近在試著用Qt寫openGL的東西 在寫的時候有碰到材質讀不出來的問題 搞了很久都沒找到原因 所以上來請教大家 由於code不在手邊 所以先說重點 就是我發現當在某些情況下時 使用 glGenTextures(1, &texture[0]); 所產生的值一直是0 似乎因而導致材質貼不上去 以下是憑印象打的code: 想請問是在哪邊使用錯了 void MyClass::initGL() { ... memset(&texture[0], 0, sizeof(texture)); //texture形式為 GLuint texture[5]; //load_texture(); //位置1 ... } void MyClass::load_texture() { glGenTextures(1, &texture[0]); //請注意此行 glBindTexture(GL_TEXTURE_2D, texture[0]); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 96, 192, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, img_data); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } void MyClass::render() { if (!m_program) init(); // m_program是一個宣告為QGLShaderProgram的class ... //load_texture(); //位置2 glBindTexture(GL_TEXTURE_2D, texture[0]); glDrawArrays(GL_TRIANGLE_STRIP, 0, front_triNumVerts); ... } void get_buffer(char* buffer) { .... load_texture(); .... } 這個code是修改Qt裡面的例子 大意是若是在QML裡面改變某個值 他最後會呼叫render()達到畫圖的效果 情況一:一剛開始我把load_texture()寫在 initGL的位置1的時候 圖可以正常顯示 在這情況下 load_texture() 只會被呼叫一次 情況二:當我把load_texture()放在render()裡的位置2的時候 圖也可以正常顯示 在這情況下 load_texture() 會一直被呼叫 現在我有一個來自外部的訊號 這個訊號會每隔一段時間就會呼叫 get_buffer()一次 get_buffer()也會去call load_texture() 但我搞不懂為何在這個情況下 最後材質不會被貼上去? 去追了一下發現當我把load_texture放在位置1或位置2 使用glGenTextures(1, &texture[0])這個API 最後texture[0]都不會是0 但是當我放在get_buffer裡的時候它的值就一直是0 查了一下網路 是看到有人說 glGenTextures只能call一次 但我在情況一情況二都是可以正常顯示的啊 囧 甚至我做了一個小測試 就是利用Qt的Timer,固定一個時間會去call一次load_texture 這樣的情況下也是正常的 不懂還有哪些地方是我忽略的? 補充一下 我說的外部訊號是一個thread 且是用.c檔寫的 這個.c檔會處理一些東西之後 在call我的get_buffer 不知道會不會跟這有關係? 以上的部分只是擷取我覺得應該有關係的 若是大家想要完整一點的我在貼上來 由於小弟剛碰 很多東西還不是很懂 @@" 所以還請大家多指教 在此也先謝謝大家熱心回答了! -- ▍ ▍ ╯╰ ╯╰ ◢◣ ◢◣ 我最愛的 柏柏龍~ 柏柏龍~ ◢██◣ ╮╭ ▎▎╮╭ ▎▎ 柏柏龍~ 柏柏龍~ ⊙ ⊙ ⊙ ⊙ 人人心中都有柏柏龍~ ≡ ▼ ≡ ▲▲ ● ● ≡ ▼ ≡ ■ ■ ■ ■ 憤怒就永遠不會消失~ ⊙⊙ ≡皿 ≡ 炸是最美的擁有~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.179.30

10/26 21:36, , 1F
openg 不能為不同thread
10/26 21:36, 1F

10/26 21:36, , 2F
opengl orz
10/26 21:36, 2F

10/26 21:37, , 3F
try commond pool 之類的設計吧~?
10/26 21:37, 3F

10/27 00:40, , 4F
把整個divece指標傳過去
10/27 00:40, 4F

10/27 00:41, , 5F
device XD 應該可以?
10/27 00:41, 5F

10/27 01:04, , 6F
感謝樓上兩位~請問能再說清楚一點嗎? @@
10/27 01:04, 6F

10/27 01:09, , 7F
glFoo 這類東西只能在同一個thread下
10/27 01:09, 7F

10/30 00:35, , 8F
感謝樓上大大~後來我把glXXX不要寫在thread裡似乎就OK了@@a
10/30 00:35, 8F
文章代碼(AID): #1GYf4lK8 (C_and_CPP)
文章代碼(AID): #1GYf4lK8 (C_and_CPP)