2017-01-24 2 views
0

Я позаботился о том, чтобы отключить слой ANGLE в моем приложении Qt, но, видимо, этого не происходит. Когда я запустить приложение в отладчике CodeXL, журнал событий содержит такие строки:Согласно CodeXL, я не могу отключить слой ANGLE в Qt

DLL Loaded: C: \ Windows \ SysWOW64 \ d3d11.dll

Так это загрузка Direct3D, который в Qt Я думаю, только через ANGLE. Также нажатие кнопки «Break» в CodeXL ничего не делает, что для меня означает, что никаких реальных вызовов OpenGL не происходит, их переводят только на D3D.

Журнал событий также говорит, что это:

Debug Строка: (. Указанный модуль не может быть найден) Не удалось загрузить opengl32.dll

Почему же это может произойти, как может Я чиню это?

Причина, по которой я хочу отключить ANGLE, заключается в том, что в противном случае я не могу отлаживать код CodeXL (он не поддерживает отладку D3D).

Моя система:

  • для Windows 10
  • Первый GPU: Intel HD Graphics 5500
  • Второй GPU: AMD Radeon R5 M330 (я думаю, что это одна мое приложение использует)

Мой код:

main.cpp:

#include <QGuiApplication> 
#include <QQmlApplicationEngine> 
#include <QQuickFramebufferObject> 
#include <QOpenGLShaderProgram> 
#include <QOpenGLFramebufferObject> 
#include <QQuickWindow> 

class MyItem : public QQuickFramebufferObject { 
    Q_OBJECT 

public: 
    Renderer* createRenderer() const; 
}; 

class MyItemRenderer : public QQuickFramebufferObject::Renderer { 
public: 
    void render() { 
     update(); 
    } 

    QOpenGLFramebufferObject* createFramebufferObject(const QSize &size) { 
     QOpenGLFramebufferObjectFormat format; 
     format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil); 
     return new QOpenGLFramebufferObject(size, format); 
    } 
}; 

QQuickFramebufferObject::Renderer* MyItem::createRenderer() const { 
    return new MyItemRenderer(); 
} 

int main(int argc, char **argv) { 
    qputenv("QT_OPENGL_BUGLIST", "Z:/disable_angle.txt"); 
    QGuiApplication::setAttribute(Qt::AA_UseDesktopOpenGL); 

    QGuiApplication app(argc, argv); 

    qmlRegisterType<MyItem>("MyItem", 1, 0, "MyItem"); 

    QQmlApplicationEngine engine; 
    engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); 

    return app.exec(); 
} 

#include "main.moc" 

main.qml:

import QtQuick 2.0 

import MyItem 1.0 
import QtQuick.Window 2.2 

Window { 
    visible: true 
    width: 400 
    height: 400 

    MyItem { 
     anchors.fill: parent 
    } 
} 

Z: /disable_angle.txt:

{ 
    "entries": [ 
     { 
      "id": 1, 
      "description": "Disable angle", 
      "os": { 
      "type": "win" 
      }, 
      "features": [ 
      "disable_angle" 
      ] 
     } 
    ] 
} 

ответ

0
  1. Set QT_LOGGING_RULES переменная окружения «qt.qpa.gl = верно. Таким образом, вы увидите дополнительный вывод отладки, который поможет понять, что именно выбирает Qt (opengl/angle/software).

  2. Попробуйте изменить Z: /disable_angle.txt на Z: \ disable_angle.txt Обратите внимание на обратную косую черту :) Это Windows, поэтому это может быть преступником.

  3. Помимо disable_angle (ваша конфигурация кажется мне правдой), попробуйте также установить disable_d3d11 и disable_d3d9.

    "disable_angle", "disable_d3d11", "disable_d3d9"

0

Если вы хотите полностью отключить угол, вы должны установить атрибут приложения Qt::AA_UseDesktopOpenGL.Если этого недостаточно, ссылка на OpenGL32.lib может помочь.

Смежные вопросы