1

Тема: Проблема с текстурами.

Доброго времени суток. При работе с библиотекой, которая создается из сгенерированных кодовых файлов Вашей программой, происходит следующая проблема.

При попытке инициализации OGL объекта происходит падение.

Путем дополнения сгенерированного кода строчками печати в коммандную строку выяснилось, что падение происходит в методе enum BGLError BGLGraphLibCreate(void) модуля GraphLibOGL.c на строке:
if(BGLSymbolMngrCreate(g_bgl_palSymbol,g_bgl_state.symbolArr,15)==0).

Внутрь метода BGLSymbolMngrCreate программа не заходит, если третий ее параметр больше нуля. Другими словами библиотека выполняется в случае если вышеобозначенная строка кода выглядит следующим образом:
if(BGLSymbolMngrCreate(g_bgl_palSymbol,g_bgl_state.symbolArr,0)==0).

Что предположительно означает проблему при анициализации текстур. Само приложение при этом генерирует в консоль следующую ошибку:
/home/********/bin/****: symbol lookup error: /home/********/**/lib/format/x86_64-linux/lib*******.so: undefined symbol: _ZN7QString14fromWCharArrayEPKwi

Буду блогадорен за помощь.

2

Re: Проблема с текстурами.

Добрый день!
При значении 15 в качестве третьего параметра программа должна заходить внутрь метода BGLSymbolMngrCreate. Попробуйте скомпилировать отладочную версию и в отладчике зайти внутрь данной функции.
Значение 15 означает, что необходимо создать 15 текстур OpenGL по одной на каждый графический символ, описанный в палитре символов профиля проекта, по которому выполнялась генерация программного кода. Данные обо всех этих символах хранятся в объекте g_bgl_palSymbol структуры BGLPalSymbol.
Устанавливая вручную в качестве третьего параметра 0, Вы вообще отключаете загрузку символов, и ошибки, соответственно, не происходит.
Для каждого элемента массива g_bgl_palSymbol вызывается функция BGLCreateSymbol. Она должна быть создана на стороне графической библиотеки и не включается в автоматически генерируемый программный код. При вызове функция BGLCreateSymbol по переданному ей пути к графическому файлу и его цветовому ключу создаёт текстуру OpenGL.
Возможно, всё дело в путях, указанных в массиве g_bgl_palSymbol. Они соответствуют тем, что были заданы в палитре символов профиля проекта. Для загрузки символов графические файлы должны реально, физически размещаться по указанным путям. Для относительных путей действует следующая логика. При работе в САПР пути отсчитываются от папки, в которой находится файл профиля проекта. При работе со сгенерированным программным кодом, пути отсчитываются от папки, содержащей исполнительный файл компилируемого приложения.

3

Re: Проблема с текстурами.

Проблема так и не решилась. После проверки оказалось что:
1) Во внутрь BGLSymbolMngrCreate программа заходит и дальше успешно идет по цепочке font_api.cpp.BGLCreateSymbol->SymbolCreator.h.SymbolCreator.Add
2) Падение происходит в SymbolCreator.h.SymbolCreator.Add на строке

QString qpath = QString::fromWCharArray(path);

3) Для исключения неверного пути прописал абсолютный путь, поэтому при дописывании строкой выше

printf("Path=%S \n", path);

в выводе получаю Path=/home/magluhov/TEX/mfpui_format.jpg что правильно.

4

Re: Проблема с текстурами.

Проверьте, пожалуйста, в САПР в настройках кодогенератора в закладке Общее опцию Набор символов. Она должна быть установлена в значение Unicode. Генерация программного кода для ОС Linux должна выполняться на основе конфигурации ‘--- По умолчанию – Linux, GCC ---’, которая предполагает использование в Linux набора символом Unicode.
Если дело не в этом, то пришлите, пожалуйста, на адрес support@phazotron-7.com сгенерированные вами в САПР исходные файлы. Или другие, созданные по любому другому более урезанному проекту САПР, в которых происходит подобная ошибка.

5

Re: Проблема с текстурами.

отправил

6

Re: Проблема с текстурами.

Проблема оказалась в том что при сборке библиотеки прибора надо было добавить опции компилятора -L/usr/lib/x86_64-linux-gnu -lQtGui -lQtCore -lpthread, но заработало только для qt4, для qt5 проблема осталась. Пока что не критично.