#c #linux #opengl #linux-mint
#c #linux #opengl #linux-mint
Вопрос:
Я изучаю OpenGL на Mac, где он работает нормально, и я пытаюсь воссоздать свои программы на Linux Mint 17.3 на виртуальной машине VirtualBox.
Мне сказали, что мне нужны только g , make, freeglut3-dev и текстовый редактор, и я полагаю, что у меня уже есть все это. Если я это сделаю, sudo apt-get install g
например, он скажет g is already the newest version
, и это то же самое для остальных.
Я написал простую программу:
#include <GL/freeglut.h>
#include <GL/gl.h>
void renderFunction() {
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
glFlush();
}
int main(int argc, char** argv) {
glutInit(amp;argc, argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("OpenGL - First window demo");
glutDisplayFunc(renderFunction);
glutMainLoop();
return 0;
}
Команда компиляции g opengl.c -lglut -lGL -lGLEW -lGLU -o opengl
, похоже, работает. Но когда я запускаю ./opengl
, я получаю массивное сообщение об ошибке:
pci id for fd 4: 80ee:beef, driver (null)
OpenGL Warning: glFlushVertexArrayRangeNV not found in mesa table
OpenGL Warning: glVertexArrayRangeNV not found in mesa table
OpenGL Warning: glCombinerInputNV not found in mesa table
OpenGL Warning: glCombinerOutputNV not found in mesa table
OpenGL Warning: glCombinerParameterfNV not found in mesa table
OpenGL Warning: glCombinerParameterfvNV not found in mesa table
OpenGL Warning: glCombinerParameteriNV not found in mesa table
OpenGL Warning: glCombinerParameterivNV not found in mesa table
OpenGL Warning: glFinalCombinerInputNV not found in mesa table
OpenGL Warning: glGetCombinerInputParameterfvNV not found in mesa table
OpenGL Warning: glGetCombinerInputParameterivNV not found in mesa table
OpenGL Warning: glGetCombinerOutputParameterfvNV not found in mesa table
OpenGL Warning: glGetCombinerOutputParameterivNV not found in mesa table
OpenGL Warning: glGetFinalCombinerInputParameterfvNV not found in mesa table
OpenGL Warning: glGetFinalCombinerInputParameterivNV not found in mesa table
OpenGL Warning: glDeleteFencesNV not found in mesa table
OpenGL Warning: glFinishFenceNV not found in mesa table
OpenGL Warning: glGenFencesNV not found in mesa table
OpenGL Warning: glGetFenceivNV not found in mesa table
OpenGL Warning: glIsFenceNV not found in mesa table
OpenGL Warning: glSetFenceNV not found in mesa table
OpenGL Warning: glTestFenceNV not found in mesa table
libGL error: core dri or dri2 extension not found
libGL error: failed to load driver: vboxvideo
OpenGL Warning: XGetVisualInfo returned 0 visuals for 00000000023ace70
OpenGL Warning: Retry with 0x8002 returned 0 visuals
OpenGL Warning: XGetVisualInfo returned 0 visuals for 00000000023b2810
OpenGL Warning: Retry with 0x8003 returned 0 visuals
…
OpenGL Warning: XGetVisualInfo returned 0 visuals for 00000000023b1520
OpenGL Warning: Retry with 0x8003 returned 0 visuals
freeglut (./opengl): ERROR: Internal error <visualInfo could not be retrieved from FBConfig> in function fgOpenWindow
Я понятия не имею, что все это значит и как с этим бороться.
Ответ №1:
OpenGL полагается на графические драйверы. В VirtualBox нет самых современных рабочих драйверов. Лучшее, что вы можете сделать, это установить гостевые дополнения. Freeglut
тоже не помогает, наиболее перспективным было бы написать необходимый минимальный код вручную, используя только glad
и GLFW
. Но не ожидайте многого и, конечно, не «тестирования переносимости моей программы».
Однажды мне удалось заставить OpenGL 3.3 работать на определенной версии Ubuntu с некоторыми экспериментальными драйверами mesa после нескольких попыток, но я понятия не имею, как это надежно воспроизвести. Почти тот же вопрос по askubuntu.
Комментарии:
1. Я уже установил гостевые дополнения и перепробовал целую кучу других «решений». Единственное, что, кажется, работает, это отключение 3D-ускорения в VBox Manager. Это проблема только с VirtualBox, а не с самой Ubuntu? Если да, будет ли OpenGL работать, если я просто установлю ОС вместе с macOS (через Bootcamp)? Я все равно планировал сделать это в ближайшее время.
2. Да, это проблема с графическими драйверами VirtualBox. Обычная установка Linux должна быть лучше, но я не уверен, насколько зрелыми являются драйверы Linux для ПК Mac (графические процессоры AMD), возможно, вы захотите немного погуглить о том, какой дистрибутив лучше всего подходит для этого.
3. Спасибо за совет, я проведу еще несколько исследований по этому вопросу, прежде чем принимать решение.
4. @kashveyron: Да, это проблема, вызванная запуском внутри виртуальной машины. OpenGL в первую очередь — это API для взаимодействия с графическими процессорами. Внутри виртуальной машины у вас либо вообще нет графического процессора, что приведет к тому, что некоторые реализации OpenGL (например, одна из Linux, называемая Mesa) вернутся к программному растеризатору. Если вы проходите через 3D-ускорение, вам нужна реализация OpenGL, которая знает, как взаимодействовать с виртуальной машиной. И часто они плохо интегрированы в типичные среды Linux / менеджеры пакетов. Если вы хотите программировать на OpenGL в виртуальной машине, либо делайте это без ускорения, либо предоставьте ей настоящий графический процессор с помощью сквозной передачи PCI.