Ответ 1
Доставка gl.h с помощью MSVС++ распространяется только на функции, экспортируемые с помощью opengl32.dll, с Windows. Эта DLL в основном является только так называемым "батутом" в фактическом драйвере. Но он экспортирует очень старую версию OpenGL, а именно OpenGL-1.1.
Доступ к любой функции, превышающей должен через механизм расширения.
Я не хочу, чтобы GLUT или любая другая промежуточная/полезная библиотека между ними выполняли грязную работу для меня, включая GLEW.
GLUT полностью не связан с GLEW
Может ли кто-нибудь выяснить, почему и как получить/запросить современный набор функций спецификации 4.0 и какова идея GLEW вообще?
Вы приобретаете современный набор функций через уже упомянутую систему расширений.
Существует функция ?glGetProcAddress
(точное имя в зависимости от среды ОС, в Windows wglGetProcAddress
). Используя эту функцию, вы получаете указатели на функции расширений для текущего контекста OpenGL (в GLX указатели на функции одинаковы для всех контекстов, но в Windows они могут отличаться).
Загрузка расширения происходит примерно так:
typedef (*OGLEXTP_SOMEEXTENSIONFUNCTION)(...)
OGLEXTP_SOMEEXTENSIONFUNCTION oglextp_glSomeExtensionFunction = NULL;
#define glSomeExtensionFunction oglextp_glSomeExtensionFunction;
struct Extensions
{
bool SomeExtensionFunction;
}
errorcode initGLExtensions(){
Extensions available;
GLubyte extensions = glGetStrings(GL_EXTENSIONS);
parse_extension_string(extensions, available);
if( available.SomeExtensionFunction ) {
oglextp_glSomeExtensionFunction = wglGwtProcAddress("glSomeExtensionFunction");
if( !oglextp_glSomeExtensionFunction )
return errorcode;
}
}
И вы должны написать массовый код этого для каждой функции. Никто не хочет писать это. Таким образом, разработчики GLEW разработали набор сценариев, которые извлекают спецификации расширения из opengl.org и автоматически создают всю загрузку расширения и переносят это в небольшую библиотеку, которая не создает дополнительных зависимостей.
Если вы хотите использовать более высокую функциональность OpenGL: используйте GLEW. Не потому, что это обязательно, а потому, что это самый простой способ сделать это.