#c #linux #ubuntu #opengl #sdl
Вопрос:
В приведенном ниже примере кода он имеет два разных поведения в зависимости от того, связываюсь ли я с libGL.so против libOpenGL.so. Это в системе Ubuntu 20.04 с графическим процессором PCI Radeon. Поведение в обоих случаях заключается в том, что он переключает видеорежимы. В случае «плохой/OpenGL» функция glGetString() возвращает значение NULL, а в случае «хорошей/GL» функция glGetString() возвращает строку.
Почему это не работает при связывании с OpenGL? Когда следует устанавливать связь с OpenGL vs GL?
Связывание, которое работает: g test.cpp -o testgood -lGL -lGLU -lSDL
Связывание, которое не работает: g test.cpp -o testbad -lOpenGL -lGLU -lSDL
#include <stdio.h>
#include <SDL/SDL.h>
#include <GL/glut.h>
int main()
{
SDL_Init( SDL_INIT_VIDEO );
SDL_SetVideoMode( 800, 600, 32, SDL_OPENGL | SDL_FULLSCREEN );
const unsigned char * tmp = glGetString(GL_RENDERER);
if (tmp == NULL)
{
printf ("CAN'T DETERMINE RENDERERn"); // Links with OpenGL
SDL_Quit();
return false;
}
else
{
printf ("%sn", (const char *) tmp); // Links with GL
return true;
}
}
Комментарии:
1. pci express может быть?
2. Я имею в виду дискретный графический процессор, не интегрированный в центральный процессор. Я не уверен, что это лучший термин для этого. Но да, вероятно, PCIe, а не PCI.
3. Для «плохого» случая
SDL_SetVideoMode()
возвращает ненулевоеSDL_Surface*
значение ? IIRC компоновщик будет молча игнорировать библиотеки, которые он не может найти;libOpenGL.so
установлен?4. libOpenGL.so устанавливается из пакета libopengl-dev. В обоих случаях я получаю ненулевую SDL_Surface. Мой полный код проверяет ошибки на этом и SDL_Init.
5. Не могу повторить в моем окне Kubuntu 20.04 (дискретный AMD Vega 56 ),
-lOpenGL
вариант возвращает допустимоеGL_RENDERER
значение .