[Interest] Qt/ANGLE .NET integration stopped working between Qt 5.3 and 5.4

Eirik Ulvik eirik.ulvik at gmail.com
Mon Sep 7 22:06:58 CEST 2015

We have an integration between Qt/OpenGL using QML and .NET/WPF that worked
fine in Qt 5.3.
The integration is based on a question asked on this mailing list before:
http://lists.qt-project.org/pipermail/interest/2014-January/010827.html and
depends the fact that Qt uses ANGLE as the backend renderer.

In order to show a OpenGL based rendering from Qt/C++ code in a .NET based
WPF application we need to get the DirectX buffer pointer. It is a
requirement that the backend rendering system is DirectX 9. I have managed
to force Qt to use ANGLE with a DirectX 9 backend. The output from the QML
scene graph and qt.qpa.gl logger:

  Qt: Untested Windows version 10.0 detected!
  QML debugging is enabled. Only use this in a safe environment.
  qt.scenegraph.info: windows render loop
  qt.scenegraph.info: Using sg animation driver
  qt.scenegraph.info: Animation Driver: using vsync: 16.67 ms
  qt.qpa.gl: Qt: Using EGL from libEGLd.dll
  qt.qpa.gl: Qt: Using OpenGL ES 2.0 from libGLESv2d.dll
  qt.qpa.gl: QWindowsEGLStaticContext::create Created EGL display
0x4add0f0180 v 1 . 4
  qt.qpa.gl: QWindowsIntegration::createPlatformOpenGLContext
QSurfaceFormat(version 2.0, options QFlags(), depthBufferSize 24,
redBufferSize -1, greenBufferSize-1, blueBufferSize -1, alphaBufferSize -1,
stencilBufferSize 8, samples -1, swap Behavior 2, swapInterval 1, profile
  qt.scenegraph.info: texture atlas dimensions: 512x512
  qt.scenegraph.info: R/G/B/A Buffers:    8 8 8 8
  qt.scenegraph.info: Depth Buffer:       24
  qt.scenegraph.info: Stencil Buffer:     8
  qt.scenegraph.info: Samples:            0
  qt.scenegraph.info: GL_VENDOR:          Google Inc.
  qt.scenegraph.info: GL_RENDERER:        ANGLE (AMD Radeon HD 6670
Direct3D9Ex vs_3_0 ps_3_0)
  qt.scenegraph.info: GL_VERSION:         OpenGL ES 2.0 (ANGLE
  qt.scenegraph.info: GL_EXTENSIONS:      GL_ANGLE_texture_compression_dxt3
  LE_translated_shader_source GL_OES_packed_depth_stencil
  w_order GL_EXT_frag_depth GL_EXT_occlusion_query_boolean
GL_EXT_robustness GL_AN
  GLE_framebuffer_multisample GL_OES_rgb8_rgba8 GL_OES_standard_derivatives
  _shader_texture_lod GL_EXT_texture_format_BGRA8888 GL_ANGLE_depth_texture
  _texture_float GL_EXT_texture_storage GL_ANGLE_texture_compression_dxt5
  exture_float_linear GL_EXT_blend_minmax  GL_ANGLE_texture_usage
  alf_float_linear GL_OES_texture_npot GL_EXT_texture_filter_anisotropic
  instanced_arrays GL_NV_fence GL_OES_texture_half_float
   GL_OES_get_program_binary GL_EXT_read_format_bgra GL_EXT_texture_rg
  ure_compression_dxt1 GL_OES_element_index_uint GL_EXT_sRGB
  qt.scenegraph.info: Max Texture Size:  16384

System info:
Windows 10
Installed Qt 5.4 using Visual Studio 2013 compiler.

The code that used to work before is this, but now always fails:

#include <d3d9.h>
#include <dxgi.h>
#include <libEGL/Surface.h>
#if QT_VERSION >= 0x050400
    #include <libGLESv2/renderer/d3d/d3d9/SwapChain9.h>
#elif QT_VERSION >= 0x050300
    #include <libGLESv2/renderer/d3d9/SwapChain9.h>
    #include <libGLESv2/renderer/SwapChain9.h>
#include <EGL/egl.h>
#include <EGL/eglext.h>

IDirect3DSurface9* AngleQmlRenderSurface::getD3DSurfaceHandle()
    //Works in Qt 5.3, always NULL in Qt 5.4
    EGLDisplay display = eglGetCurrentDisplay();
    EGLBoolean result = eglSwapInterval(display, 0);

    //Works in Qt 5.3, always NULL in Qt 5.4
    EGLSurface sfc = eglGetCurrentSurface(EGL_DRAW);
    egl::Surface* surface = static_cast<egl::Surface*>(sfc);
    rx::SwapChain *swapChain = surface->getSwapChain();
    rx::SwapChain9* swapChainD3D9 =

    return swapChainD3D9->getRenderTarget();

Any suggestion to what might be the problem is much appreciated.

Best regards,
Eirik Ulvik
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20150907/3016dc58/attachment.html>

More information about the Interest mailing list