วันอังคารที่ 13 พฤษภาคม พ.ศ. 2551

OpenGL ตอนที่ 2

ในที่สุดก็ใช้งาน OpenGL เบื้องต้นได้ ที่บอกว่าเบื้องต้นก็เพราะ มันดูเหมือนไม่ได้ช่วยให้ CPU ทำงานน้อยลงเลย หรือมันถูก block ไว้ก็ไม่รู้ แต่มันก็ช่วยให้ frame rate ดีขึ้นแหละนะ หลักๆที่แก้ไป ไม่ใช่เรื่อง multi-thread เพราะออกแบบให้ copy ลง memory ก่อนแล้วค่อยให้ gui thread เรียก glTexSubImage2D อยู่แล้ว แต่เป็นเรื่องการทำงานร่วมกันระหว่าง wxGLCanvas กับ glut และ OpenGL มากกว่า โดยไปออกแบบใหม่ให้ลด layer ของ window ลง ลองไปอ่านใน wiki ดูนะคร้าบ อีกอันหนึ่งคือ การสร้าง texture object ดูเหมือนว่าเราจะสร้างใน constructor ของ wxGLCanvas ไม่ได้นะ ต้องให้มัน show ก่อน

อย่างไรก็ดี คงจะต้องปรับปรุงกันต่อไป เห็นมีการพูดถึง Pixel Buffer Object ไม่รู้ว่าจะช่วยได้ป่าว ต้องลองดูตามที่ไปหามา(อีกแล้ว)

1. Create PBO
2. map buffer
3. give pbo pointer to decoder thread (or put it in pool of free pbo's)
4. decoder copy frame in pbo memory and notify render thread about that, or decoder ask pool for free pbo pointer and copy image data and notify render thread about that.
5. render thread unmap pointer and call glTexSubImage2D
6. render thread mark that pbo to map its pointer again at next frame (or two frames later)
7. at next frame (or two frames later) map pbo pointer and give it to decoder thread (or pool)

Using pool you can handle multiple video stream transfers.

ก๊อปมาจาก ที่นี่ จ้า

ติตตามความคืบหน้ากันต่อไป

1 ความคิดเห็น:

switaya กล่าวว่า...

ลองแล้วอะ กลายเป็นว่าช้าลงแทน งง ภาพก็จะดีเลย์ไปนิดนึงด้วย