Я начал читать OpenGL 4.0 Shading Language version 1. В начале книги, которую они показывают, есть код, чтобы узнать версию OpenGL, но он не работает. Я хотел бы знать, как узнать, правильно ли настроен.
#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <iostream>
#include <stdio.h>
int main(int argc, char** argv) {
/*
GLenum err = glewInit();
if( GLEW_OK != err ) {
fprintf(stderr, "Error initializing GLEW: %s\n",
glewGetErrorString(err) );
}
*/
const GLubyte *renderer = glGetString( GL_RENDERER );
const GLubyte *vendor = glGetString( GL_VENDOR );
const GLubyte *version = glGetString( GL_VERSION );
const GLubyte *glslVersion = glGetString( GL_SHADING_LANGUAGE_VERSION );
GLint major, minor;
glGetIntegerv(GL_MAJOR_VERSION, &major);
glGetIntegerv(GL_MINOR_VERSION, &minor);
printf("GL Vendor : %s\n", vendor);
printf("GL Renderer : %s\n", renderer);
printf("GL Version (string) : %s\n", version);
printf("GL Version (integer) : %d.%d\n", major, minor);
printf("GLSL Version : %s\n", glslVersion);
}
Код дает мне нулевые выходы. Я не верю, что это правильно, потому что перед запуском этой книги я нашел в Интернете код для отображения окна в openGL 2.0, который работал.
GL Vendor : (null)
GL Renderer : (null)
GL Version (string) : (null)
GL Version (integer) : 0.0
GLSL Version : (null)
Также я посмотрел на эта ссылка который дает информацию о моей видеокарте. Я думаю, что это не имеет ничего общего с моим установленным пакетом разработки.
Мне нужно найти способ подтвердить, что я установил openGL 4.0. Я бы предпочел терминальную команду или мой исправленный код.
Редактировать:
Я добавил дополнительный вопрос о коде, который предоставил Макловин:
Я заметил, что получаю дополнительную строку «Ошибка сегментации (ядро сброшено)». У меня есть 7970 AMD GPU. Является ли этот вывод ошибкой?
Вам необходимо создать контекст OpenGL, прежде чем вы получите какие-либо данные об OpenGL. Контекст — это, по сути, набор данных, связанных с экземпляром OpenGL, используемым в вашем приложении. Обычно его создают, открывая окно с такой библиотекой, как freeglut, SFML, GLFW или SDL.
Следующий код использует freeglut:
#include <stdio.h>
#include <GL/gl.h>
#include <GL/freeglut.h>
int main(int argc, char **argv)
{
glutInit(&argc, argv); /* create opengl context */
glutInitContextVersion(4, 4); /* use version 4.4 */
/* there's no main loop, so the window will close immediately */
glutCreateWindow("You won't see this window");
/* we can now get data for the specific OpenGL instance we created */
const GLubyte *renderer = glGetString( GL_RENDERER );
const GLubyte *vendor = glGetString( GL_VENDOR );
const GLubyte *version = glGetString( GL_VERSION );
const GLubyte *glslVersion = glGetString( GL_SHADING_LANGUAGE_VERSION );
GLint major, minor;
glGetIntegerv(GL_MAJOR_VERSION, &major);
glGetIntegerv(GL_MINOR_VERSION, &minor);
printf("GL Vendor : %s\n", vendor);
printf("GL Renderer : %s\n", renderer);
printf("GL Version (string) : %s\n", version);
printf("GL Version (integer) : %d.%d\n", major, minor);
printf("GLSL Version : %s\n", glslVersion);
return 0;
}
Например, это вывод, который он мне дал (в настоящее время используется Ubuntu 12.04).
GL Vendor : NVIDIA Corporation
GL Renderer : GeForce GTX 660/PCIe/SSE2
GL Version (string) : 4.4.0 NVIDIA 331.20
GL Version (integer) : 4.4
GLSL Version : 4.40 NVIDIA via Cg compiler