簡體   English   中英

如何為第三方渲染提供空QML項的OpenGL上下文?

[英]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方法並調用更新。

這是一些很好的例子

http://blog.qt.io/blog/2015/05/11/integrating-custom-opengl-rendering-with-qt-quick-via-qquickframebufferobject/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM