QOpenGLDebugLogger Class

QOpenGL디버그 로거를 사용하면 OpenGL 디버깅 메시지를 로깅할 수 있습니다. 더 보기...

헤더: #include <QOpenGLDebugLogger>
CMake: find_package(Qt6 REQUIRED COMPONENTS OpenGL)
target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake: QT += opengl
상속합니다: QObject

공용 유형

enum LoggingMode { AsynchronousLogging, SynchronousLogging }

속성

공공 기능

QOpenGLDebugLogger(QObject *parent = nullptr)
virtual ~QOpenGLDebugLogger()
void disableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType, QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::AnySeverity)
void disableMessages(const QList<GLuint> &ids, QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType)
void enableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType, QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::AnySeverity)
void enableMessages(const QList<GLuint> &ids, QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType)
bool initialize()
bool isLogging() const
QList<QOpenGLDebugMessage> loggedMessages() const
QOpenGLDebugLogger::LoggingMode loggingMode() const
qint64 maximumMessageLength() const
void popGroup()
void pushGroup(const QString &name, GLuint id = 0, QOpenGLDebugMessage::Source source = QOpenGLDebugMessage::ApplicationSource)

공용 슬롯

void logMessage(const QOpenGLDebugMessage &debugMessage)
void startLogging(QOpenGLDebugLogger::LoggingMode loggingMode = AsynchronousLogging)
void stopLogging()

신호

void messageLogged(const QOpenGLDebugMessage &debugMessage)

상세 설명

소개

OpenGL 프로그래밍은 오류가 발생하기 쉽습니다. 대부분의 경우 OpenGL 호출에 한 번만 실패해도 애플리케이션의 전체가 작동을 멈추고 화면에 아무것도 그려지지 않을 수 있습니다.

OpenGL 구현에서 오류가 반환되지 않는지 확인할 수 있는 유일한 방법은 모든 API 호출 후 glGetError 에서 확인하는 것입니다. 또한 OpenGL 오류는 누적되므로 glGetError는 항상 이와 같은 루프에서 사용해야 합니다:

GLenum error = GL_NO_ERROR;
do {
    error = glGetError();
    if (error != GL_NO_ERROR) {
        // handle the error
    }
} while (error != GL_NO_ERROR);

오류 스택을 지우려고 하면 GL_NO_ERROR가 반환될 때까지 계속 진행할 뿐만 아니라 해당 오류 값이 계속 반복되므로 GL_CONTEXT_LOST에서 중단해야 합니다.

애플리케이션 개발자로서 관심 있는 다른 많은 정보(예: 성능 문제 또는 더 이상 사용되지 않는 API 사용에 대한 경고)도 있습니다. 이러한 종류의 메시지는 일반적인 OpenGL 오류 보고 메커니즘을 통해 보고되지 않습니다.

QOpenGLDebugLogger는 OpenGL 디버그 로그에 대한 액세스를 제공함으로써 이러한 문제를 해결하는 것을 목표로 합니다. OpenGL 구현이 이를 지원하는 경우( GL_KHR_debug 확장자를 노출하여), OpenGL 서버의 메시지는 내부 OpenGL 로그에 기록되거나 OpenGL에서 생성되는 대로 리스너에게 "실시간"으로 전달됩니다.

QOpenGLDebugLogger는 이 두 가지 작동 모드를 모두 지원합니다. 다음 섹션을 참조하여 두 모드의 차이점을 알아보세요.

OpenGL 디버그 컨텍스트 생성하기

효율성상의 이유로 OpenGL 구현은 OpenGL 컨텍스트가 디버그 컨텍스트가 아닌 한 디버그 출력을 전혀 생성하지 않도록 허용됩니다. Qt에서 디버그 컨텍스트를 생성하려면 QOpenGLContext 객체를 생성하는 데 사용된 QSurfaceFormat 에서 QSurfaceFormat::DebugContext 형식 옵션을 설정해야 합니다:

QSurfaceFormat format;
// asks for a OpenGL 3.2 debug context using the Core profile
format.setMajorVersion(3);
format.setMinorVersion(2);
format.setProfile(QSurfaceFormat::CoreProfile);
format.setOption(QSurfaceFormat::DebugContext);

QOpenGLContext *context = new QOpenGLContext;
context->setFormat(format);
context->create();

이 클래스는 GL_KHR_debug 확장(아래 참조)의 가용성에 의존하므로 3.2 OpenGL 코어 프로파일을 요청하는 것은 예제의 목적일 뿐이며 특정 OpenGL 또는 OpenGL ES 버전에 묶여 있지 않다는 점에 유의하세요.

QOpenGLDebugLogger 생성 및 초기화하기

QOpenGLDebugLogger는 간단한 QObject 파생 클래스입니다. 모든 QObject 서브클래스와 마찬가지로 인스턴스를 생성하고 (선택적으로 부모 객체를 지정할 수 있습니다), Qt의 다른 OpenGL 함수와 마찬가지로 사용하기 전에 현재 OpenGL 컨텍스트가 있는 동안 initialize()를 호출하여 초기화해야 합니다:

QOpenGLContext *ctx = QOpenGLContext::currentContext();
QOpenGLDebugLogger *logger = new QOpenGLDebugLogger(this);

logger->initialize(); // initializes in the current context, i.e. ctx

OpenGL이 로깅한 메시지에 액세스하려면 컨텍스트에서 GL_KHR_debug 확장을 사용할 수 있어야 합니다. 이 확장자가 있는지 여부는 호출하여 확인할 수 있습니다:

ctx->hasExtension(QByteArrayLiteral("GL_KHR_debug"));

여기서 ctx 은 유효한 QOpenGLContext 입니다. 확장자를 사용할 수 없는 경우 initialize()은 false를 반환합니다.

내부 OpenGL 디버그 로그 읽기

OpenGL 구현은 디버그 메시지의 내부 로그를 보관합니다. 이 로그에 저장된 메시지는 loggedMessages() 함수를 사용하여 검색할 수 있습니다:

const QList<QOpenGLDebugMessage> messages =  logger->loggedMessages();for(const QOpenGLDebugMessage &메시지: 메시지)    qDebug() << message;

내부 로그는 크기가 제한되어 있으므로 로그가 가득 차면 새 수신 메시지를 위한 공간을 확보하기 위해 오래된 메시지가 삭제됩니다. loggedMessages ()를 호출하면 내부 로그도 비워집니다.

디버그 메시지가 손실되지 않도록 하려면 이 함수를 호출하는 대신 실시간 로깅을 사용해야 합니다. 그러나 컨텍스트 생성과 실시간 로깅 활성화 사이의 시간 동안(또는 일반적으로 실시간 로깅이 비활성화되어 있는 경우) 디버그 메시지가 계속 생성될 수 있습니다.

메시지 실시간 로깅

구현에서 생성되는 디버그 메시지 스트림을 OpenGL 서버에서 수신할 수도 있습니다. 이렇게 하려면 messageLogged() 신호에 적절한 슬롯을 연결하고 startLogging()를 호출하여 로깅을 시작해야 합니다:

connect(logger, &QOpenGLDebugLogger::messageLogged, receiver, &LogHandler::handleLoggedMessage);
logger->startLogging();

마찬가지로 stopLogging() 함수를 호출하여 언제든지 로깅을 비활성화할 수 있습니다.

실시간 로깅은 startLogging()에 전달되는 매개변수에 따라 비동기 또는 동기 로깅이 될 수 있습니다. 비동기 모드(오버헤드가 매우 적기 때문에 기본값)로 로깅할 경우 OpenGL 구현은 언제든지 메시지를 생성하거나 메시지를 로깅하게 만든 OpenGL 명령의 순서와 다른 순서로 메시지를 생성할 수 있습니다. 또한 컨텍스트가 현재 바인딩되어 있는 스레드와 다른 스레드에서 메시지가 생성될 수도 있습니다. 이는 OpenGL 구현이 일반적으로 고도로 스레드화되고 비동기적이기 때문에 디버그 메시지의 상대적 순서와 타이밍에 대한 보증이 이루어지지 않기 때문입니다.

반면 동기 모드로 로깅하는 경우 오버헤드가 높지만 OpenGL 구현은 특정 명령으로 인해 발생한 모든 메시지가 명령이 반환되기 전에 순서대로 수신되고 OpenGL 컨텍스트가 바인딩된 동일한 스레드에서 수신되도록 보장합니다.

즉, 동기 모드로 로깅할 때 디버거에서 OpenGL 애플리케이션을 실행하고 messageLogged() 신호에 연결된 슬롯에 중단점을 설정한 다음 백트레이스에서 로깅된 메시지를 유발한 정확한 호출을 확인할 수 있습니다. 이 방법은 OpenGL 문제를 디버깅하는 데 매우 유용할 수 있습니다. OpenGL 렌더링이 다른 스레드에서 발생하는 경우 실제 백트레이스를 보려면 신호/슬롯 연결 유형을 Qt::DirectConnection 로 강제 설정해야 합니다.

로깅 모드에 대한 자세한 내용은 LoggingMode 열거형 문서를 참조하세요.

참고: 실시간 로깅이 활성화되면 내부 OpenGL 디버그 로그에 더 이상 디버그 메시지가 삽입되지 않으며, 내부 로그에 이미 있는 메시지는 삭제되지 않고 messageLogged() 신호를 통해 전송되지도 않습니다. 일부 메시지는 실시간 로깅이 시작되기 전에 생성될 수 있으므로(따라서 내부 OpenGL 로그에 보관될 수 있으므로) startLogging() 호출 후 항상 메시지가 포함되어 있는지 확인하는 것이 중요합니다.

디버그 로그에 메시지 삽입

애플리케이션과 라이브러리에서 디버그 로그에 사용자 지정 메시지를 삽입할 수 있습니다(예: 관련 OpenGL 명령 그룹을 표시하여 해당 명령에서 발생하는 최종 메시지를 식별할 수 있도록 하기 위해).

이렇게 하려면 createApplicationMessage() 또는 createThirdPartyMessage()를 호출하여 QOpenGLDebugMessage 개체를 만든 다음 logMessage()를 호출하여 로그에 삽입하면 됩니다:

QOpenGLDebugMessage message =
    QOpenGLDebugMessage::createApplicationMessage(QStringLiteral("Custom message"));

logger->logMessage(message);

OpenGL 구현에는 디버그 로그에 삽입할 수 있는 메시지의 길이에 대한 공급업체별 제한이 있다는 점에 유의하세요. maximumMessageLength () 메서드를 호출하여 이 길이를 검색할 수 있으며, 이 제한보다 긴 메시지는 자동으로 잘립니다.

디버그 출력 제어

QOpenGLDebugMessage 는 디버그 메시지에 필터를 적용하여 기록되는 메시지의 양을 제한할 수도 있습니다. enableMessages () 및 disableMessages()을 각각 호출하여 메시지 로깅을 사용하거나 사용하지 않도록 설정할 수 있습니다. 기본적으로 모든 메시지가 로깅됩니다.

다음을 선택하여 메시지를 활성화 또는 비활성화할 수 있습니다:

  • 소스, 유형 및 심각도(선택 항목에 모든 ID 포함);
  • 아이디, 소스 및 유형(선택 항목의 모든 심각도 포함).

특정 메시지에 대한 '사용' 상태는 (id, 소스, 유형, 심각도) 튜플의 속성이며, 메시지 속성은 어떤 종류의 계층 구조도 형성하지 않는다는 점에 유의하세요. enableMessages () 및 disableMessages() 호출 순서에 따라 활성화/비활성화되는 메시지가 달라지므로 주의해야 합니다.

메시지 텍스트 자체로 필터링하는 것은 불가능하며, 애플리케이션이 직접 messageLogged() 신호에 연결된 슬롯에서 또는 loggedMessages() 를 통해 내부 디버그 로그에서 메시지를 가져온 후 필터링을 수행해야 합니다.

활성화/비활성화 상태의 관리를 간소화하기 위해 QOpenGLDebugMessage 에서는 debug groups 의 개념도 지원합니다. 디버그 그룹에는 디버그 메시지의 활성화/비활성화 구성 그룹이 포함되어 있습니다. 또한 디버그 그룹은 스택으로 구성되며, 각각 pushGroup() 및 popGroup()을 호출하여 그룹을 푸시 및 팝할 수 있습니다. (OpenGL 컨텍스트가 생성되면 스택에 이미 그룹이 있습니다).

enableMessages() 및 disableMessages() 함수는 현재 디버그 그룹, 즉 디버그 그룹 스택의 맨 위에 있는 그룹의 구성을 수정합니다.

새 그룹이 디버그 그룹 스택에 푸시되면 이전에 스택의 맨 위에 있던 그룹의 구성을 상속합니다. 그 반대로 디버그 그룹을 팝하면 새 맨 위에 있는 디버그 그룹의 구성이 복원됩니다.

디버그 그룹을 푸시(각각 팝핑)하면 QOpenGLDebugMessage::GroupPushType (각각 GroupPopType) 형식의 디버그 메시지도 자동으로 생성됩니다.

QOpenGLDebugMessage참조하세요 .

멤버 유형 문서

enum QOpenGLDebugLogger::LoggingMode

LoggingMode 열거형은 로거 객체의 로깅 모드를 정의합니다.

상수설명
QOpenGLDebugLogger::AsynchronousLogging0OpenGL 서버의 메시지는 비동기적으로 로깅됩니다. 즉, 메시지를 발생시킨 해당 OpenGL 작업이 발생한 후 얼마 후에 메시지가 기록될 수 있으며, OpenGL 구현에 따라 순서가 맞지 않는 방식으로 수신될 수도 있습니다. 이 모드는 OpenGL 구현이 본질적으로 스레드가 많고 비동기적이기 때문에 성능 저하가 매우 적습니다.
QOpenGLDebugLogger::SynchronousLogging1OpenGL 서버의 메시지는 동기식으로 순차적으로 기록됩니다. 이는 OpenGL 구현이 본질적으로 매우 비동기적이기 때문에 성능에 심각한 타격을 주지만, OpenGL은 해당 명령 실행이 반환되기 전에 생성된 메시지가 기록되도록 보장하기 때문에 OpenGL 문제를 디버깅하는 데 매우 유용합니다. 따라서 messageLogged() 신호에 중단점을 설치하여 백트레이스에서 어떤 OpenGL 명령이 문제를 일으켰는지 확인할 수 있습니다. 한 가지 주의할 점은 여러 스레드에서 OpenGL을 사용하는 경우 messageLogged() 신호에 연결할 때 직접 연결을 강제해야 할 수 있다는 것입니다.

속성 문서

[read-only] loggingMode : const LoggingMode

이 속성은 startLogging()에 전달된 로깅 모드를 보유합니다.

로깅이 시작되어야 하며, 그렇지 않으면 이 프로퍼티의 값은 의미가 없습니다.

함수 액세스:

QOpenGLDebugLogger::LoggingMode loggingMode() const

startLogging() 및 isLogging()도 참조하세요 .

멤버 함수 문서

[explicit] QOpenGLDebugLogger::QOpenGLDebugLogger(QObject *parent = nullptr)

주어진 parent 으로 새 로거 객체를 생성합니다.

참고: 로깅을 수행하려면 먼저 객체를 초기화해야 합니다.

initialize()도 참조하세요 .

[virtual noexcept] QOpenGLDebugLogger::~QOpenGLDebugLogger()

로거 객체를 삭제합니다.

void QOpenGLDebugLogger::disableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType, QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::AnySeverity)

지정된 sources, 지정된 types 및 지정된 severities 및 모든 메시지 ID를 가진 메시지의 로깅을 비활성화합니다.

현재 제어 그룹에서는 로깅이 비활성화됩니다.

enableMessages(), pushGroup() 및 popGroup()도 참조하세요 .

void QOpenGLDebugLogger::disableMessages(const QList<GLuint> &ids, QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType)

지정된 ids, 지정된 sources 및 지정된 types 및 모든 심각도의 메시지 로깅을 비활성화합니다.

현재 제어 그룹에서는 로깅이 비활성화됩니다.

enableMessages(), pushGroup() 및 popGroup()도 참조하세요 .

void QOpenGLDebugLogger::enableMessages(QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType, QOpenGLDebugMessage::Severities severities = QOpenGLDebugMessage::AnySeverity)

지정된 sources, 지정된 types 및 지정된 severities 및 모든 메시지 ID의 메시지를 로깅하도록 설정합니다.

로깅은 현재 제어 그룹에서 활성화됩니다.

disableMessages(), pushGroup() 및 popGroup()도 참조하세요 .

void QOpenGLDebugLogger::enableMessages(const QList<GLuint> &ids, QOpenGLDebugMessage::Sources sources = QOpenGLDebugMessage::AnySource, QOpenGLDebugMessage::Types types = QOpenGLDebugMessage::AnyType)

지정된 ids, 지정된 sources 및 지정된 types 및 모든 심각도의 메시지 로깅을 활성화합니다.

로깅은 현재 제어 그룹에서 활성화됩니다.

disableMessages(), pushGroup() 및 popGroup()도 참조하세요 .

bool QOpenGLDebugLogger::initialize()

현재 OpenGL 컨텍스트에서 객체를 초기화합니다. 초기화에 성공하려면 컨텍스트가 GL_KHR_debug 확장을 지원해야 합니다. 로깅이 발생하기 전에 객체를 초기화해야 합니다.

동일한 컨텍스트에서 이 함수를 여러 번 호출해도 안전합니다.

이 함수는 이전에 초기화된 객체의 컨텍스트를 변경하는 데에도 사용할 수 있으며, 이 경우 이 함수를 호출할 때 객체가 로깅 중이 아니어야 한다는 점에 유의하세요.

로거가 성공적으로 초기화되면 true, 그렇지 않으면 false를 반환합니다.

QOpenGLContext도 참조하세요 .

bool QOpenGLDebugLogger::isLogging() const

이 객체가 현재 로깅 중이면 true, 그렇지 않으면 false를 반환합니다.

startLogging()도 참조하세요 .

[slot] void QOpenGLDebugLogger::logMessage(const QOpenGLDebugMessage &debugMessage)

OpenGL 디버그 로그에 debugMessage 메시지를 삽입합니다. 이를 통해 애플리케이션이나 라이브러리에서 사용자 지정 메시지를 삽입하여 OpenGL 애플리케이션의 디버깅을 용이하게 할 수 있습니다.

참고: debugMessage 소스는 QOpenGLDebugMessage::ApplicationSource 또는 QOpenGLDebugMessage::ThirdPartySource, 유효한 유형 및 심각도를 가져야 하며, 그렇지 않으면 로그에 삽입되지 않습니다.

참고: 로깅이 발생하기 전에 개체를 초기화해야 합니다.

initialize()도 참조하세요 .

QList<QOpenGLDebugMessage> QOpenGLDebugLogger::loggedMessages() const

OpenGL 내부 디버그 로그에서 사용 가능한 모든 메시지를 읽고 반환합니다. 또한 이 함수는 내부 디버그 로그를 지우므로 후속 호출에서 이미 반환된 메시지를 반환하지 않습니다.

startLogging()도 참조하세요 .

QOpenGLDebugLogger::LoggingMode QOpenGLDebugLogger::loggingMode() const

객체의 로깅 모드를 반환합니다.

참고: loggingMode 프로퍼티에 대한 게터 함수입니다.

startLogging()도 참조하세요 .

qint64 QOpenGLDebugLogger::maximumMessageLength() const

logMessage()에 전달된 메시지 텍스트의 지원되는 최대 길이를 바이트 단위로 반환합니다. 이는 디버그 그룹 이름의 최대 길이이기도 한데, 그룹을 푸시하거나 팝하면 디버그 그룹 이름이 메시지 텍스트로 포함된 메시지가 자동으로 로깅되기 때문입니다.

메시지 텍스트가 너무 길면 QOpenGLDebugLogger 에 의해 자동으로 잘립니다.

참고: 메시지 텍스트는 OpenGL로 전달될 때 UTF-8로 인코딩되므로 바이트 단위의 크기는 일반적으로 QString::length()에서 반환되는 UTF-16 코드 단위와 일치하지 않습니다. (디버그 메시지에 일반적으로 사용되는 7비트 ASCII 전용 데이터가 포함된 경우에는 일치합니다.)

[signal] void QOpenGLDebugLogger::messageLogged(const QOpenGLDebugMessage &debugMessage)

이 신호는 OpenGL 서버에서 디버그 메시지( debugMessage 인수로 래핑)가 로깅될 때 발생합니다.

OpenGL 구현에 따라 이 신호는 수신자가 속한 스레드가 아닌 다른 스레드에서 발생할 수 있으며, 심지어 이 객체가 초기화된 QOpenGLContext 스레드가 속한 스레드와 다른 스레드에서 발생할 수도 있습니다. 또한 신호가 여러 스레드에서 동시에 전송될 수도 있습니다. Qt는 스레드 간 신호 방출을 위해 대기열 연결을 활용하므로 일반적으로는 문제가 되지 않지만 연결 유형을 Direct로 강제 설정하면 이 신호에 연결된 슬롯에서 잠재적인 경합이 발생할 수 있음을 알고 있어야 합니다.

SynchronousLogging 모드에서 로깅이 시작된 경우 OpenGL은 QOpenGLContext 이 바인딩된 것과 동일한 스레드에서 이 신호가 방출되도록 보장하며 동시 호출이 발생하지 않습니다.

참고: 로깅이 시작되었어야 하며 그렇지 않으면 이 신호가 전송되지 않습니다.

startLogging()도 참조하세요 .

void QOpenGLDebugLogger::popGroup()

디버그 그룹 스택에서 최상위 디버그 그룹을 팝업합니다. 그룹이 성공적으로 팝되면 OpenGL은 팝된 그룹의 메시지, ID 및 소스와 일치하는 메시지, QOpenGLDebugMessage::GroupPopType 및 심각도 QOpenGLDebugMessage::NotificationSeverity 를 입력한 메시지를 자동으로 기록합니다.

디버그 그룹을 팝하면 디버그 그룹 스택의 맨 위에 있는 그룹의 메시지 필터링 설정이 복원됩니다.

참고: 디버그 그룹을 관리하기 전에 개체를 초기화해야 합니다.

pushGroup()도 참조하세요 .

void QOpenGLDebugLogger::pushGroup(const QString &name, GLuint id = 0, QOpenGLDebugMessage::Source source = QOpenGLDebugMessage::ApplicationSource)

이름 name, id id, 소스 source 의 디버그 그룹을 디버그 그룹 스택에 푸시합니다. 그룹이 성공적으로 푸시되면 OpenGL은 메시지 name, id id, 소스 source, 유형 QOpenGLDebugMessage::GroupPushType 및 심각도 QOpenGLDebugMessage::NotificationSeverity 를 포함하는 메시지를 자동으로 기록합니다.

새로 푸시된 그룹은 스택 맨 위에 있던 그룹의 동일한 필터링 설정을 상속하므로 새 그룹을 푸시해도 필터링이 변경되지 않습니다.

참고: sourceQOpenGLDebugMessage::ApplicationSource 또는 QOpenGLDebugMessage::ThirdPartySource 여야 하며, 그렇지 않으면 그룹이 푸시되지 않습니다.

참고: 디버그 그룹을 관리하기 전에 개체를 초기화해야 합니다.

popGroup(), enableMessages() 및 disableMessages()도 참조하세요 .

[slot] void QOpenGLDebugLogger::startLogging(QOpenGLDebugLogger::LoggingMode loggingMode = AsynchronousLogging)

OpenGL 서버에서 오는 메시지 로깅을 시작합니다. 새 메시지가 수신되면 로깅된 메시지를 인자로 전달하는 messageLogged() 신호가 전송됩니다.

loggingMode 로깅이 비동기식(기본값)인지 동기식인지 지정합니다.

QOpenGLDebugLogger 로깅이 시작되면 GL_DEBUG_OUTPUTGL_DEBUG_OUTPUT_SYNCHRONOUS 값을 기록하고 로깅이 중지되면 다시 설정합니다. 또한 이 함수가 호출될 때 설치된 사용자 정의 OpenGL 디버그 콜백은 로깅이 중지될 때 복원되며, QOpenGLDebugLogger 은 로깅 시 기존 콜백이 계속 호출되도록 합니다.

참고: 로깅을 중지했다가 다시 시작하지 않고는 로깅 모드를 변경할 수 없습니다. 이는 향후 Qt 버전에서 변경될 수 있습니다.

참고: 로깅을 수행하기 전에 객체를 초기화해야 합니다.

stopLogging() 및 initialize()도 참조하세요 .

[slot] void QOpenGLDebugLogger::stopLogging()

OpenGL 서버에서 메시지 로깅을 중지합니다.

startLogging()도 참조하세요 .

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.