Як відсилати листи…

Лист на contact@opengl-tutorial.org є самий ефективний спосіб отримати підтримку. Проте, якщо у Вас є проблема, намагайтесь додати до листа як можна більше інформації. А саме:

  • Операційна система : Gentoo ? Windows XP ? … (пам’ятайте, використовуйте 2.1 порт, якщо у Вас мак !)
  • 32 біти чи 64 біти ?
  • Графічна карта : NVIDIA ? AMD ? Intel ? S3 ? Matrox ? (пам’ятайте, використовуйте 2.1 порт, якщо у Вас інтегрована відеокарта !)

… та інша інформація, яка не є обов’язковою, проте може допомогти:

  • Версія драйвера відеокарти
  • Call stack (трасування стеку)
  • знімок екрана
  • вивід в консолі
  • мінідамп…

І не забувайте читати цей FAQ - він не даремно так називається =)

Я не можу скомпілювати цей туторіал

  • Переконайтесь, що Ви прочитали туторіал 1. Будь-ласка, використовуйте CMake замість створення проекту заново. Або, як мінімум прочитайте Побудова Вашої власної С програми.
  • Якщо у Вас помилки, які відносяться до бібліотеки AssImp, то воно буде скоро виправлено. Та це відноситься лише до одного проекту, всі інші повинні компілюватись без проблем.
  • Якщо у Вас помилки, які відносяться до бібліотеки AntTweakBar, це теж відноситься лише до одного туторіалу.
  • Якщо у Вас дійсно проблеми, не бійтесь відправити нам електронного листа

Я все скомпілював, проте воно падає при старті. Що відбувається ?

Я декілька варіантів:

Несумісна відеокарта/операційна система

Будь-ласка, перевірте, чи не використовуєте Ви карту від Intel. Ви можете використати glewinfo, GPU Caps Viewer чи інший інструмент.

Карти від Intel, за виключенням HD4000 не підтримують OpenGL 3.3. Насправді, більшість з них підтримує тільки OpenGL 2.1. Ви можете використовувати версію 2.1, яку можна завантажити з сторінки Download.

Також можуть бути проблеми, якщо ви використовуєте Mac з pre-Lion версією. Що ж…

Невірна робоча папка/каталог

Є шанс, що Ви запускаєте проект з невірним робочим каталогом. Спробуйте запустити .exe з провідника.

Перегляньте перший туторіал, де описано, як налаштувати IDE для налагодження.

Зверніть увагу, що зазвичай .exe компілюється в build каталозі, але автоматично копіюється в каталог з початковим кодом, де він може знайти потрібні ресурси (зображення, 3д моделі, шейдери).

Немає VAO

Якщо Ви створюєте програму з “нуля”, переконайтесь, що Ви створили VAO:

GLuint VertexArrayID;
glGenVertexArrays(1, &VertexArrayID);
glBindVertexArray(VertexArrayID);

Баг в GLEW

GLEW містить баг, який робить неможливим використання контексту core (якщо тільки Ви не використовуєте код з цього туторіалу, де проблема була виправлена). Є три рішення:

  • Попросити бібліотеку GLFW використовувати профіль сумісності :
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);
  • Використовуйте glewExperimental; це рекомендований спосіб:
glewExperimental = true;

CMake

Ви прочитали Туторіал 1, так? Ви не пробували написати Ваш власний makefile і побудувати все самостійно, так?

Чому я повинен використовувати OpenGL 3.3 якщо Intel та Mac не може їх запустити ?!

… також відоме як :

Яку версії OpenGL я повинен використовувати ?

Насправді, я не рекомендую вивчати OpenGL 3 або старше. Я використовую його в туторіалах, тому що це чистий спосіб для вивчення OpenGL без всіляких застарілих речей і як тільки ви знаєте версію 3.3, використовувати 2.1 буде легко.

Що я рекомендую:

  • Вчіть OpenGL 3.3 і Ви будете знати “правильний шлях”
  • Встановіть цільове обладнання для Вашої програми. Наприклад, вимагають FBO та GLSL.
  • Використовуйте GLEW для завантаження всіх розширень. При старті відкидайте все обладнання (залізо), що не відповідає вимогам.
  • І тепер Вим можете писати код як для версії 3.3 з деякими змінами.
  • Якщо Ви дійсно хочете мати справи з старим/дешевим обладнанням, Ви все ще можете це робити, заблокував певні ефекти, які вимагають нову функціональність, наприклад FBO.
Є один спеціальний випадок, коли Ви будете використовувати саму останню версію, наприклад 4.2 - Ви студент (аспірант), який робить дослідження і Вам дійсно потрібні всі нові функції і Ви не турбуєтесь про зворотню сумісність, тому що Ваша програма ніколи не покине стін лабораторії. В цьому випадку не витрачайте даремно час і використовуйте ту версію OpenGL, яку підтримує Ваше обладнання.

Де я можу завантажити OpenGL 3 ?

Ви не можете.

В випадку Windows, для прикладу, у Вас є тільки opengl32.dll, яка містить тільки OpenGL 1.1. Але в тут є функція wglGetProcAddress(). яка робить можливим отримувати функції, які не реалізовані напряму в opengl32.dll, але доступні в драйвері.

GLEW використовує wglGetProcAddress для всіх потрібних символів (функцій) і робить їх доступними для Вас. (Ви можете це зробити самостійно, але це жахливо нудно). Також GLEW містить деякі константи, які не існували 10 років тому, наприклад GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB.

Отже, просто переконайтесь, що Ваш GPU підтримує потрібну версію, використовуйте GLEW і вперед.

Чому ви створюєте VAO в кожному туторіалі і не ніколи не використовуєте його ?

Це не так. Воно прив’язується і використовується протягом всього часу виконання програми.

VAO є обгорткою навколо VBO. Вони пам’ятають які буфери прив’язані до яких атрибутів і багато інших речей. Вони зменшують кількість OpenGL викликів перед glDrawArrays/Elements(). Починаючи з OpenGL 3 Core вони є обов’язковими, але ви можете використовувати тільки один та модифікувати (що власне й робиться в цьому підручнику).

VAO можуть здатись дещо складними для туторіалу для початківців і вони не мають еквіваленту в OpenGL 2 (Який я рекомендую для “продакшину”, дивіться відповідний FAQ) і це не очевидно, чи буде він більш кращий. Якщо Вам цікаві VAO, будь-ласка подивіться в відповідний розділ wiki OpenGL. Вони можуть дещо покращити продуктивність програми, але не завжди

У мене помилка “Unable to start program ALL_BUILD” (неможливо запустити програму ALL_BUILD)

ALL_BUILD це допоміжний проект, який генерує CMake, це не є справжньою програмою.

Як зазначено в першому туторіалі, Ви повинні обрати проект, який Ви хочете запустити, натиснувши правою кнопкою мишки на потрібному проекті (в студії) і обрати “Set up as startup project” (встановити стартовим проектом), як на цьому малюнку:

Я отримую помилку про робочий каталог і програма падає.

Ви повинні запускати програму з каталогів tutorial01_first_window/, tutorial02_red_triangle/ і так далі. Якщо Ви запускаєте з IDE (студії), Ви повинні налатувати студію/проект для цього.

Будь-ласка, прочитайте перший туторіал для деталей.