портирование кода фреймбуфера C ++ OpenGL в LWJGL — какой класс я использую?

Я пытаюсь использовать этот урок выполнить отображение теней в LWJGL. Я заметил, что в LWJGL есть три класса со всеми функциями кадрового буфера, которые использует этот учебник: ARBFramebufferObject, EXTFramebufferObject, а также GL30.

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

0

Решение

Используя основные функции, есть вероятность, что большинство людей смогут запускать программу, если их видеокарта может работать с определенной версией GL.

  • Расширения EXT обычно поддерживаются только несколькими поставщиками.
  • Расширения ARB часто поддерживаются большинством, но не обязательно всеми поставщиками.
  • Основные функции поддерживаются каждой картой, которая поддерживает конкретную версию GL, которую использует программа.

Итак, суть в том, чтобы перейти к основным функциям, затем к функциям ARB и последним функциям EXT. Хотя, когда вы используете расширения, не забудьте проверить во время выполнения, поддерживает ли их видеокарта. Потому что расширения не гарантированно работают на всех видеокартах, таких как основные функции. (Поскольку опять же функции ядра требуют только, чтобы видеокарта поддерживала определенную версию OpenGL).

Также помните, что расширения EXT и ARB — не единственные доступные расширения, Nvidia, AMD, Apple и т. Д. Также делают свои собственные расширения для OpenGL.

Помните

Вам всегда нужно помнить, что если вы встроите это в программу, которая «выбирает» доступные функции, то всегда помните, что вы не можете использовать GL_TEXTURE1 с glActiveTextureARB и вы не можете использовать GL_TEXTURE1_EXT с glActiveTexture, Даже если их смешивание иногда дает желаемый результат, хотя на это нет никаких гарантий.

дополнительный

Попробуйте прочитать мой ответ Вот вопрос в основном задает то же, что и у вас, хотя ОП спрашивает о разнице между основными функциями и расширениями.

Обновить

Если в коде C ++ используются функции EXT или ARB, я должен использовать их также в OpenGL или я могу использовать только основные?

Некоторые функции ARB, EXT и т. Д. Могут еще не быть основными функциями. Можно сказать, что расширения предназначены для тестирования новых функций. Затем, когда они были протестированы и кажутся полезными и стабильными, они превращаются в основные функции (это действительно абстрактно).

Хотя, если функции ARB, EXT и т. Д. Уже существуют в качестве основных функций. Затем используйте функции Core, как уже говорилось, что для функций Core требуется только определенная версия OpenGL, чтобы гарантировать, что расширения не распространяются на ту же гарантию.

Если видеокарта не поддерживает OpenGL 3.0 или выше, вы, конечно, не можете использовать эти основные функции. Тогда вам может повезти, что вместо этого вы можете использовать функции ARB, EXT и т. Д., Чтобы выполнить то же самое.

Тогда, когда мы берем все вышесказанное в счет, я бы пошел на использование GL30 создать Framebuffer вместо использования ARBFramebufferObject а также EXTFramebufferObject, Хотя, если вы не можете использовать GL30Я бы пошел на использование / попытки ARBFramebufferObjectа потом EXTFramebufferObject после.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]