Войти
ПрограммированиеФорумГрафика

Qt 4.8.7 glCompressedTexImage2D падает только в release

#0
9:50, 31 авг 2020

Добрый день. Стоит задача поддержки проекта написанного на qt 4.8.7. Сразу скажу что переход на qt 5 не планируется.

При работе с qglfunction (компонент динамически загружающий расширенный набор функции opengl). Собранная программа работает в debug без замечаний, в release падает на вызове функции glCompressedTexImage2D. Скажу сразу что проблема известная и долго не решается сообществом :

https://bugreports.qt.io/browse/QTBUG-27408?focusedCommentId=1848… ment-tabpanel

Может кто сталкивался и как то решал?


#1
10:08, 31 авг 2020

По ссылке пишут, что это несоответствие соглашения о вызове. Можно просто перейти на 64 бит (давно пора).
Если нет, то попробовать "скастить" указатель с правкой __cdecl на __stdcall.

#2
18:54, 31 авг 2020

Apfel1994

Если нет, то попробовать "скастить" указатель с правкой __cdecl на __stdcall.

Увы сами указатели хранятся в private. И вызов происходит через обёртку qglfunction...

#3
20:51, 31 авг 2020

urii
Тогда можно загрузить нужные функции вручную (через wglGetProcAddress).
Или собрать qt из исходников предварительно исправив объявления.

#4
21:48, 1 сен 2020

Apfel1994Тогда можно загрузить нужные функции вручную (через wglGetProcAddress).

Спасибо! не очень аккуратно но ради одной функции имхо допустимо:

    typedef void  (__stdcall * _glCompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data);

class Cwidget:public QGLWidget
{
private:
     _glCompressedTexImage2D glCompressedTexImage2D;
}
void Cwidget::initializeGL()
{
...

#if defined(Q_OS_WIN)
    glCompressedTexImage2D = (_glCompressedTexImage2D)wglGetProcAddress((LPCSTR)"glCompressedTexImage2D");
#else
    glCompressedTexImage2D = (_glCompressedTexImage2D)QGLContext::currentContext()->getProcAddress(QLatin1String("glCompressedTexImage2D"));
#endif
}
...
glCompressedTexImage2D(GL_TEXTURE_2D, level, format, width, height, 0, size, array.data() + offset);
ПрограммированиеФорумГрафика

Тема в архиве.