2014-11-22 4 views
0

Я разрабатываю графический проект с OpenGL и используя freeglut и glew (v 1.11.0). Я хочу добавить суммарные элементы управления пользовательским интерфейсом с помощью GLUI. Я загружаю исходный код и создаю его с помощью Microsoft Visual Studio 2012 (я пробовал версию GLUI и 2.35 и 2.36). Добавьте файл lib в библиотеки проектов без проблем. Итак, теперь я могу использовать GLUI в проекте.
Но есть проблема с отображением элементов управления. Я пытаюсь добавить мое окно GLUI в качестве основного окна моего окна. Нет проблем с добавлением subwindow, reshape и т. Д. Кроме того, я могу добавить элементы управления и в подзаголовок. Но, добавляя их, они не появляются в подпоследовательности. Интересно, что они на самом деле там. Когда я нажимаю кнопку примерно на месте, у них есть эффект, чтобы связанная функция обратного вызова контролировала, она вызывает эту функцию и делает ее работу.
Также я попробовал автономное окно GLUI вместо подзаголовка, но результат такой же.
Вот мой код:
Элементы управления GLUI не отображаются, но они имеют эффект

GLUI* glui_subwin = GLUI_Master.create_glui_subwindow(mainWindowID,GLUI_SUBWINDOW_BOTTOM); 

GLUI_Button* b_RotateX = glui_subwin->add_button("Rotate X", 0, (GLUI_CB)CB_rotate); 

glui_subwin->add_column(true); 

GLUI_Button* b_RotateY = glui_subwin->add_button("Rotate Y", 1, (GLUI_CB)CB_rotate); 
glui_subwin->add_column(true); 

GLUI_Button* b_RotateZ = glui_subwin->add_button("Rotate Z", 2, (GLUI_CB)CB_rotate); 
glui_subwin->add_column(true); 
... 
glui_subwin->set_main_gfx_window(mainWindowID); 

GLUI_Master.set_glutKeyboardFunc(keyboard); 
GLUI_Master.set_glutSpecialFunc(NULL); 
GLUI_Master.set_glutMouseFunc(mouse); 
GLUI_Master.set_glutReshapeFunc(reshape); 
GLUI_Master.set_glutIdleFunc(idle); 

Есть ли кто-нибудь справилась с этой проблемой, или что есть идея, что проблема есть?
Буду признателен, если вы мне поможете.

ответ

0

Может быть, вы создали контекст профиля ядра OpenGL-3? GLUI использует функции, устаревшие в OpenGL-3, и если у вас нет контекста совместимости, он вообще не работает. Также помните, что GLUI не знает шейдеров, поэтому, если вы используете шейдеры, не забудьте отключить их после того, как вы их используете, иначе GLUI в конечном итоге попытается работать с конвейером с фиксированной функцией ... бесплодно.

+0

Спасибо за ваш ответ. Как и сказал, речь идет о устаревших функциях. Я использовал glutInitContextVersion (3, 2); функция. Он блокирует glui и делает элементы управления невидимыми. Когда я использую функцию 3,1 при работе, она работает правильно. Но, я должен прокомментировать glutInitContextFlags (GLUT_FORWARD_COMPATIBLE); вызов функции. – onrrgn

+0

@onrrgn: Да, передняя совместимость подразумевает профиль сердечника. Обратите внимание, что «форвардная совместимость» - это нечто иное, чем «профиль обратной совместимости»; это на самом деле обратное. – datenwolf