Я работаю с классами-оболочками Qt 5.5 OpenGL. В частности, пытаясь заставить работать QOpenGLTexture. Здесь я создаю 1×1 2D белую текстуру для маскировки. Это работает:
void Renderer::initTextures()
{
QImage white(1, 1, QImage::Format_RGBA8888);
white.fill(Qt::white);
m_whiteTexture.reset(new QOpenGLTexture(QOpenGLTexture::Target2D));
m_whiteTexture->setSize(1, 1);
m_whiteTexture->setData(white);
//m_whiteTexture->allocateStorage(QOpenGLTexture::RGBA, QOpenGLTexture::UInt32);
//m_whiteTexture->setData(QOpenGLTexture::RGBA, QOpenGLTexture::UInt8, white.bits());
// Print any errors
QList<QOpenGLDebugMessage> messages = m_logger->loggedMessages();
if (messages.size())
{
qDebug() << "Start of texture errors";
foreach (const QOpenGLDebugMessage &message, messages)
qDebug() << message;
qDebug() << "End of texture errors";
}
}
Однако сейчас я пытаюсь сделать две вещи:
Используйте последовательность allocate + setData как отдельные команды (закомментированные строки), например,
m_whiteTexture->allocateStorage(QOpenGLTexture::RGBA, QOpenGLTexture::UInt32);
m_whiteTexture->setData(QOpenGLTexture::RGBA, QOpenGLTexture::UInt8, white.bits());
с целью более сложного рендеринга позже, когда я просто обновляю часть данных, а не перераспределяю. С этим связано (2), где я хочу перейти к Target2DArray и push / pop текстурам в этом массиве.
Что касается (1), я получаю эти ошибки от регистратора QOpenGLDebugMessage:
Start of texture errors
QOpenGLDebugMessage("APISource", 1280, "Error has been generated. GL error GL_INVALID_ENUM in TextureImage2DEXT: (ID: 2663136273) non-integer <format> 0 has been provided.", "HighSeverity", "ErrorType")
QOpenGLDebugMessage("APISource", 1280, "Error has been generated. GL error GL_INVALID_ENUM in TextureImage2DEXT: (ID: 1978056088) Generic error", "HighSeverity", "ErrorType")
QOpenGLDebugMessage("APISource", 1281, "Error has been generated. GL error GL_INVALID_VALUE in TextureImage2DEXT: (ID: 1978056088) Generic error", "HighSeverity", "ErrorType")
QOpenGLDebugMessage("APISource", 1281, "Error has been generated. GL error GL_INVALID_VALUE in TextureSubImage2DEXT: (ID: 1163869712) Generic error", "HighSeverity", "ErrorType")
End of texture errors
Моя маска работает с исходным кодом, но я не могу заставить ее работать в (1) и (2) сценариях. Для (2) я изменяю цель на Target2DArray, изменяю размер, чтобы включить глубину 1, настраиваю мои шейдеры для использования текстурных координат vec3 и sampler3D для выборки и т. Д. Я могу опубликовать более полный (2) пример, если это поможет. Я также не понимаю эти коды ошибок и, очевидно, их трудно отлаживать на графическом процессоре, если это не так. Я перепробовал все виды комбинаций PixelType и PixelFormat.
Спасибо!
Задача ещё не решена.
Других решений пока нет …