我正在QNX 7.0上开发一个c++应用程序。在应用程序中,我想通过OpenGL ES 3渲染一个基本的立方体,并使用OpenWFD API显示它。对于QNX,本机窗口系统是通过屏幕API提供的,但是,在我的情况下,我无法使用它。我有访问OpenWFD API,可以在我的屏幕上显示内容。我也可以通过OpenGLES绘制一个立方体。然而,我找不到一种有效的方法来传递OpenGLES渲染输出到OpenWFD api来显示渲染的内容。
这种架构有办法工作吗?
到目前为止,我尝试了以下几种方法:我通过OpenWFD API (wfdCreateWFDEGLImages(…))创建了一个EGLImage,然后使用glEGLImageTargetRenderbufferStorageOES(…)函数将EGLImageHandle作为Renderbuffer存储提供给OpenGLES。但是,它返回GL_INVALID_OPERATION。
我创建了一个framebuffer和renderbuffer(用于OpenGLES的屏幕外渲染),使用EGL API (eglCreateImage(…))从renderbuffer创建一个EGLImage。然后尝试从这个EGLImage创建WFDSource,以便能够将其绑定到WFD Pipeline。但是,wfdCreateSourceFromImage(…)函数对于WFDSource返回NULL
我尝试使用以下结构定义创建一个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;
我试图通过EGL API查询wfd设备(eglQueryDevicesEXT(..)),但是这个扩展不可用于我使用。
理想情况下,在QNX上,你会使用QNX屏幕来显示任何OpenGL/GLES相关内容,但IIUC你不能在你的用例中使用QNX屏幕。
QNX上的OpenWFD驱动程序主要是由QNX Screen单独使用,并且可能只支持从QNX Screen特定的图像对象而不是从EGLimages创建WFDSource句柄。
创建WFDSource句柄所支持的缓冲区对象的确切细节取决于OpenWFD驱动程序的供应商,所以我建议联系您在这里用于输入的OpenWFD驱动程序的供应商。