[英]How to provide OpenGL context of empty QML Item for 3rd party render?
我的應用程序包含第三方代碼,使用OpenGL繪制內容。 我唯一能做的就是為它提供全屏幕表面和鼠標/觸摸屏事件。 假設我可以創建全屏大小的Item
並將其留給第三方渲染。 渲染為我發出一些信號(可能來自任意線程,通過QMetaObject::invokeMethod
)來更新視圖。 如何阻止QML臨時繪制到上下文中?
如何描述可以實現? 技術上是否可以創建這樣的工作流程?
有沒有更明智的方法來實現預期。 也許使用FBO會更好嗎?
我可以異步執行此操作嗎? 即渲染有自己的消息quque到單獨的線程。
你應該看看QQuickFramebufferObject。
它的工作方式:
您創建一個子類並在QML中實例化它。 你應該覆蓋它
Renderer *QQuickFramebufferObject::createRenderer()
您創建自己的Renderer子類http://doc.qt.io/qt-5/qquickframebufferobject-renderer.html
放在其void Renderer::render()
所有代碼都將影響FBOItem並呈現給屏幕。 Qt負責綁定你的FBO。
現在,如果您需要在UI中調用修改,則調用void Renderer::update()
。
您的第三方渲染器應該在需要繪制時調用此方法,但是所有的opengl方法(glDrawArrays ...)都應該寫在Renderer的render函數中。 在訪問此方法之前,請綁定您的FBO。 也許您的QQuickFramebufferObject應該監聽您的ThirdParty信號並修改(通過某些狀態或std :: functions)其Renderer組件的render方法並調用更新。
這是一些很好的例子
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.