是否有方法集成OpenGLES和OpenWFD API?



我正在QNX 7.0上开发一个c++应用程序。在应用程序中,我想通过OpenGL ES 3渲染一个基本的立方体,并使用OpenWFD API显示它。对于QNX,本机窗口系统是通过屏幕API提供的,但是,在我的情况下,我无法使用它。我有访问OpenWFD API,可以在我的屏幕上显示内容。我也可以通过OpenGLES绘制一个立方体。然而,我找不到一种有效的方法来传递OpenGLES渲染输出到OpenWFD api来显示渲染的内容。

这种架构有办法工作吗?

到目前为止,我尝试了以下几种方法:
  1. 我通过OpenWFD API (wfdCreateWFDEGLImages(…))创建了一个EGLImage,然后使用glEGLImageTargetRenderbufferStorageOES(…)函数将EGLImageHandle作为Renderbuffer存储提供给OpenGLES。但是,它返回GL_INVALID_OPERATION。

  2. 我创建了一个framebuffer和renderbuffer(用于OpenGLES的屏幕外渲染),使用EGL API (eglCreateImage(…))从renderbuffer创建一个EGLImage。然后尝试从这个EGLImage创建WFDSource,以便能够将其绑定到WFD Pipeline。但是,wfdCreateSourceFromImage(…)函数对于WFDSource返回NULL

  3. 我尝试使用以下结构定义创建一个wfdwindow,并尝试通过使用这个wfdwindow创建一个EGL表面。但是,eglCreateWindowSurface(…)给出错误,并且不接受我提供的wfdWindow。

    typedef struct wfd_buffer {  
    WFD_EGLImageType*   image;  
    WFDSource           source;  
    } wfd_buffer_t;  
    typedef struct wfd_window {  
    WFDDevice       dev;  
    WFDPort         port;  
    WFDPipeline     pipeline;  
    unsigned int    numBuffers;  
    wfd_buffer_t    buffers[MAX_NUM_OF_WFD_BUFFERS];  
    } wfd_window_t; 
    
  4. 我试图通过EGL API查询wfd设备(eglQueryDevicesEXT(..)),但是这个扩展不可用于我使用。

理想情况下,在QNX上,你会使用QNX屏幕来显示任何OpenGL/GLES相关内容,但IIUC你不能在你的用例中使用QNX屏幕。

QNX上的OpenWFD驱动程序主要是由QNX Screen单独使用,并且可能只支持从QNX Screen特定的图像对象而不是从EGLimages创建WFDSource句柄。

创建WFDSource句柄所支持的缓冲区对象的确切细节取决于OpenWFD驱动程序的供应商,所以我建议联系您在这里用于输入的OpenWFD驱动程序的供应商。

最新更新