Я пытаюсь использовать этот урок выполнить отображение теней в LWJGL. Я заметил, что в LWJGL есть три класса со всеми функциями кадрового буфера, которые использует этот учебник: ARBFramebufferObject, EXTFramebufferObject, а также GL30.
Я не знаю, какой из них использовать. Может ли кто-нибудь объяснить мне различия этих классов, и какой из них мне следует использовать? Я пытался портировать код один раз, но мне не повезло, поэтому я просто хотел, чтобы все прояснилось, прежде чем я попробую снова.
Используя основные функции, есть вероятность, что большинство людей смогут запускать программу, если их видеокарта может работать с определенной версией 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
после.
Других решений пока нет …