Добрый день. Стоит задача поддержки проекта написанного на qt 4.8.7. Сразу скажу что переход на qt 5 не планируется.
При работе с qglfunction (компонент динамически загружающий расширенный набор функции opengl). Собранная программа работает в debug без замечаний, в release падает на вызове функции glCompressedTexImage2D. Скажу сразу что проблема известная и долго не решается сообществом :
https://bugreports.qt.io/browse/QTBUG-27408?focusedCommentId=1848… ment-tabpanel
Может кто сталкивался и как то решал?
По ссылке пишут, что это несоответствие соглашения о вызове. Можно просто перейти на 64 бит (давно пора).
Если нет, то попробовать "скастить" указатель с правкой __cdecl на __stdcall.
Apfel1994
Если нет, то попробовать "скастить" указатель с правкой __cdecl на __stdcall.
Увы сами указатели хранятся в private. И вызов происходит через обёртку qglfunction...
urii
Тогда можно загрузить нужные функции вручную (через wglGetProcAddress).
Или собрать qt из исходников предварительно исправив объявления.
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);
Тема в архиве.