我在没有图形界面的Linux服务器(Ubuntu16.04)中安装了OpenGL,安装命令如下:
apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev
apt-get install freeglut3-dev libglew1.10 libglew-dev libgl1-mesa-glx libxmu-dev
apt-get install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev
apt-get install mesa-utils
现在,我按light.c
编译gcc light.c -o light -lGL -lglut
。
我想通过XMing服务器在我的Windows机器中显示它。
代码:
#include <GL/glut.h>
#include <stdlib.h>
void init ( void )
{
GLfloat mat_specular [ ] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat mat_shininess [ ] = { 50.0 };
GLfloat light_position [ ] = { 1.0, 1.0, 1.0, 0.0 };
glClearColor ( 0.0, 0.0, 0.0, 0.0 );
glShadeModel ( GL_SMOOTH );
glMaterialfv ( GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv ( GL_FRONT, GL_SHININESS, mat_shininess);
glLightfv ( GL_LIGHT0, GL_POSITION, light_position);
glEnable (GL_LIGHTING);
glEnable (GL_LIGHT0);
glEnable (GL_DEPTH_TEST);
}
void display ( void )
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere (1.0, 40, 50);
glFlush ();
}
int main(int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (300, 300);
glutInitWindowPosition (100, 100);
glutCreateWindow ( argv [ 0 ] );
init ( );
glutDisplayFunc ( display );
glutMainLoop( );
return 0;
}
但是,我收到了一个错误:
freeglut (./light): ERROR: Internal error <FBConfig with necessary capabilities not found> in function fgOpenWindow
我在google中搜索此问题,并找到一些方法,但它们不可用。
glxinfo
很好。
name of display: :10.0
display: :10 screen: 0
direct rendering: No (LIBGL_ALWAYS_INDIRECT set)
server glx vendor string: SGI
server glx version string: 1.2
server glx extensions:
GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_OML_swap_method, GLX_SGIS_multisample,
GLX_SGIX_fbconfig, GLX_SGIX_hyperpipe, GLX_SGIX_swap_barrier,
GLX_SGI_make_current_read
client glx vendor string: NVIDIA Corporation
client glx version string: 1.4
client glx extensions:
GLX_ARB_context_flush_control, GLX_ARB_create_context,
GLX_ARB_create_context_profile, GLX_ARB_create_context_robustness,
GLX_ARB_fbconfig_float, GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile,
GLX_EXT_create_context_es_profile, GLX_EXT_fbconfig_packed_float,
GLX_EXT_framebuffer_sRGB, GLX_EXT_import_context, GLX_EXT_stereo_tree,
GLX_EXT_swap_control, GLX_EXT_swap_control_tear,
GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating,
GLX_NV_copy_buffer, GLX_NV_copy_image, GLX_NV_delay_before_swap,
GLX_NV_float_buffer, GLX_NV_multisample_coverage, GLX_NV_present_video,
GLX_NV_robustness_video_memory_purge, GLX_NV_swap_group,
GLX_NV_video_capture, GLX_NV_video_out, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_SGI_swap_control, GLX_SGI_video_sync
GLX version: 1.2
GLX extensions:
GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context,
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GT 705/PCIe/SSE2
OpenGL version string: 1.2 (4.5.0 NVIDIA 368.39)
OpenGL extensions:
GL_ARB_depth_texture, GL_ARB_imaging, GL_ARB_multitexture,
GL_ARB_point_parameters, GL_ARB_point_sprite, GL_ARB_shadow,
GL_ARB_texture_border_clamp, GL_ARB_texture_cube_map,
GL_ARB_texture_env_add, GL_ARB_texture_env_combine,
GL_ARB_texture_env_crossbar, GL_ARB_texture_env_dot3,
GL_ARB_texture_mirrored_repeat, GL_ARB_transpose_matrix,
GL_ARB_window_pos, GL_ATI_texture_mirror_once, GL_EXT_abgr, GL_EXT_bgra,
GL_EXT_blend_color, GL_EXT_blend_func_separate, GL_EXT_blend_minmax,
GL_EXT_blend_subtract, GL_EXT_draw_range_elements, GL_EXT_fog_coord,
GL_EXT_multi_draw_arrays, GL_EXT_packed_pixels, GL_EXT_rescale_normal,
GL_EXT_secondary_color, GL_EXT_separate_specular_color,
GL_EXT_shadow_funcs, GL_EXT_stencil_two_side, GL_EXT_stencil_wrap,
GL_EXT_texture3D, GL_EXT_texture_edge_clamp, GL_EXT_texture_env_add,
GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3, GL_EXT_texture_lod,
GL_EXT_texture_lod_bias, GL_EXT_texture_object, GL_EXT_vertex_array,
GL_IBM_texture_mirrored_repeat, GL_NV_blend_square, GL_NV_point_sprite,
GL_NV_texgen_reflection, GL_NV_texture_rectangle, GL_SGIS_generate_mipmap,
GL_SGIS_texture_lod, GL_SGIX_depth_texture, GL_SGIX_shadow
32 GLX Visuals
visual x bf lv rg d st colorbuffer sr ax dp st accumbuffer ms cav
id dep cl sp sz l ci b ro r g b a F gb bf th cl r g b a ns b eat
----------------------------------------------------------------------------
0x022 24 tc 1 24 0 r . . 8 8 8 0 . . 0 0 0 0 0 0 0 0 0 None
0x023 24 tc 1 24 0 r . . 8 8 8 0 . . 0 0 0 16 16 16 16 0 0 None
0x024 24 tc 1 24 0 r . . 8 8 8 0 . . 0 0 8 0 0 0 0 0 0 None
0x025 24 tc 1 24 0 r . . 8 8 8 0 . . 0 0 8 16 16 16 16 0 0 None
0x026 24 tc 1 24 0 r y . 8 8 8 0 . . 0 0 0 0 0 0 0 0 0 None
0x027 24 tc 1 24 0 r y . 8 8 8 0 . . 0 0 0 16 16 16 16 0 0 None
0x028 24 tc 1 24 0 r y . 8 8 8 0 . . 0 0 8 0 0 0 0 0 0 None
0x029 24 tc 1 24 0 r y . 8 8 8 0 . . 0 0 8 16 16 16 16 1172601720 0 None
0x02a 24 tc 1 24 0 r . . 8 8 8 0 . . 2 0 0 0 0 0 0 1 4 None
0x02b 24 tc 1 24 0 r . . 8 8 8 0 . . 2 0 0 16 16 16 16 0 0 None
0x02c 24 tc 1 24 0 r . . 8 8 8 0 . . 2 0 8 0 0 0 0 26272464 0 None
0x02d 24 tc 1 24 0 r . . 8 8 8 0 . . 2 0 8 16 16 16 16 26259104 0 None
0x02e 24 tc 1 24 0 r y . 8 8 8 0 . . 2 0 0 0 0 0 0 0 0 None
0x02f 24 tc 1 24 0 r y . 8 8 8 0 . . 2 0 0 16 16 16 16 32 0 None
0x030 24 tc 1 24 0 r y . 8 8 8 0 . . 2 0 8 0 0 0 0 0 0 None
0x031 24 tc 1 24 0 r y . 8 8 8 0 . . 2 0 8 16 16 16 16 0 0 None
0x032 24 tc 1 24 0 r . . 8 8 8 0 . . 0 24 0 0 0 0 0 0 0 None
0x033 24 tc 1 24 0 r . . 8 8 8 0 . . 0 24 0 16 16 16 16 0 0 None
0x034 24 tc 1 24 0 r . . 8 8 8 0 . . 0 24 8 0 0 0 0 26262256 1 None
0x035 24 tc 1 24 0 r . . 8 8 8 0 . . 0 24 8 16 16 16 16 26259056 0 None
0x036 24 tc 1 24 0 r y . 8 8 8 0 . . 0 24 0 0 0 0 0 0 0 None
0x037 24 tc 1 24 0 r y . 8 8 8 0 . . 0 24 0 16 16 16 16 0 0 None
0x038 24 tc 1 24 0 r y . 8 8 8 0 . . 0 24 8 0 0 0 0 0 0 None
0x039 24 tc 1 24 0 r y . 8 8 8 0 . . 0 24 8 16 16 16 16 0 0 None
0x03a 24 tc 1 24 0 r . . 8 8 8 0 . . 2 24 0 0 0 0 0 0 0 None
0x03b 24 tc 1 24 0 r . . 8 8 8 0 . . 2 24 0 16 16 16 16 0 0 None
0x03c 24 tc 1 24 0 r . . 8 8 8 0 . . 2 24 8 0 0 0 0 0 0 None
0x03d 24 tc 1 24 0 r . . 8 8 8 0 . . 2 24 8 16 16 16 16 0 0 None
0x03e 24 tc 1 24 0 r y . 8 8 8 0 . . 2 24 0 0 0 0 0 0 0 None
0x03f 24 tc 1 24 0 r y . 8 8 8 0 . . 2 24 0 16 16 16 16 0 0 None
0x040 24 tc 1 24 0 r y . 8 8 8 0 . . 2 24 8 0 0 0 0 0 0 None
0x041 24 tc 1 24 0 r y . 8 8 8 0 . . 2 24 8 16 16 16 16 0 0 None
32 GLXFBConfigs:
visual x bf lv rg d st colorbuffer sr ax dp st accumbuffer ms cav
id dep cl sp sz l ci b ro r g b a F gb bf th cl r g b a ns b eat
----------------------------------------------------------------------------
0x022 24 tc 1 24 0 . . 8 8 8 0 . . 0 0 0 0 0 0 0 0 0 None
0x023 24 tc 1 24 0 . . 8 8 8 0 . . 0 0 0 16 16 16 16 0 0 None
0x024 24 tc 1 24 0 . . 8 8 8 0 . . 0 0 8 0 0 0 0 0 0 None
0x025 24 tc 1 24 0 . . 8 8 8 0 . . 0 0 8 16 16 16 16 0 0 None
0x026 24 tc 1 24 0 y . 8 8 8 0 . . 0 0 0 0 0 0 0 0 0 None
0x027 24 tc 1 24 0 y . 8 8 8 0 . . 0 0 0 16 16 16 16 0 0 None
0x028 24 tc 1 24 0 y . 8 8 8 0 . . 0 0 8 0 0 0 0 0 0 None
0x029 24 tc 1 24 0 y . 8 8 8 0 . . 0 0 8 16 16 16 16 0 0 None
0x02a 24 tc 1 24 0 . . 8 8 8 0 . . 2 0 0 0 0 0 0 0 0 None
0x02b 24 tc 1 24 0 . . 8 8 8 0 . . 2 0 0 16 16 16 16 0 0 None
0x02c 24 tc 1 24 0 . . 8 8 8 0 . . 2 0 8 0 0 0 0 0 0 None
0x02d 24 tc 1 24 0 . . 8 8 8 0 . . 2 0 8 16 16 16 16 0 0 None
0x02e 24 tc 1 24 0 y . 8 8 8 0 . . 2 0 0 0 0 0 0 0 0 None
0x02f 24 tc 1 24 0 y . 8 8 8 0 . . 2 0 0 16 16 16 16 0 0 None
0x030 24 tc 1 24 0 y . 8 8 8 0 . . 2 0 8 0 0 0 0 0 0 None
0x031 24 tc 1 24 0 y . 8 8 8 0 . . 2 0 8 16 16 16 16 0 0 None
0x032 24 tc 1 24 0 . . 8 8 8 0 . . 0 24 0 0 0 0 0 0 0 None
0x033 24 tc 1 24 0 . . 8 8 8 0 . . 0 24 0 16 16 16 16 0 0 None
0x034 24 tc 1 24 0 . . 8 8 8 0 . . 0 24 8 0 0 0 0 0 0 None
0x035 24 tc 1 24 0 . . 8 8 8 0 . . 0 24 8 16 16 16 16 0 0 None
0x036 24 tc 1 24 0 y . 8 8 8 0 . . 0 24 0 0 0 0 0 0 0 None
0x037 24 tc 1 24 0 y . 8 8 8 0 . . 0 24 0 16 16 16 16 0 0 None
0x038 24 tc 1 24 0 y . 8 8 8 0 . . 0 24 8 0 0 0 0 0 0 None
0x039 24 tc 1 24 0 y . 8 8 8 0 . . 0 24 8 16 16 16 16 0 0 None
0x03a 24 tc 1 24 0 . . 8 8 8 0 . . 2 24 0 0 0 0 0 0 0 None
0x03b 24 tc 1 24 0 . . 8 8 8 0 . . 2 24 0 16 16 16 16 0 0 None
0x03c 24 tc 1 24 0 . . 8 8 8 0 . . 2 24 8 0 0 0 0 0 0 None
0x03d 24 tc 1 24 0 . . 8 8 8 0 . . 2 24 8 16 16 16 16 0 0 None
0x03e 24 tc 1 24 0 y . 8 8 8 0 . . 2 24 0 0 0 0 0 0 0 None
0x03f 24 tc 1 24 0 y . 8 8 8 0 . . 2 24 0 16 16 16 16 0 0 None
0x040 24 tc 1 24 0 y . 8 8 8 0 . . 2 24 8 0 0 0 0 0 0 None
0x041 24 tc 1 24 0 y . 8 8 8 0 . . 2 24 8 16 16 16 16 0 0 None
glxdemo
,glxgears
,glxheads
也很好。
当我运行Xlib
代码时,这很好。编译是gcc -o quad quad.c -lX11 -lGL -lGLU
// -- Written in C -- //
#include<stdio.h>
#include<stdlib.h>
#include<X11/X.h>
#include<X11/Xlib.h>
#include<GL/gl.h>
#include<GL/glx.h>
#include<GL/glu.h>
Display *dpy;
Window root;
GLint att[] = { GLX_RGBA, GLX_DEPTH_SIZE, 24, GLX_DOUBLEBUFFER, None };
XVisualInfo *vi;
Colormap cmap;
XSetWindowAttributes swa;
Window win;
GLXContext glc;
XWindowAttributes gwa;
XEvent xev;
void DrawAQuad() {
glClearColor(1.0, 1.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1., 1., -1., 1., 1., 20.);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0., 0., 10., 0., 0., 0., 0., 1., 0.);
glBegin(GL_QUADS);
glColor3f(1., 0., 0.); glVertex3f(-.75, -.75, 0.);
glColor3f(0., 1., 0.); glVertex3f( .75, -.75, 0.);
glColor3f(0., 0., 1.); glVertex3f( .75, .75, 0.);
glColor3f(1., 1., 0.); glVertex3f(-.75, .75, 0.);
glEnd();
}
int main(int argc, char *argv[]) {
dpy = XOpenDisplay(NULL);
if(dpy == NULL) {
printf("\n\tcannot connect to X server\n\n");
exit(0);
}
root = DefaultRootWindow(dpy);
vi = glXChooseVisual(dpy, 0, att);
if(vi == NULL) {
printf("\n\tno appropriate visual found\n\n");
exit(0);
}
else {
printf("\n\tvisual %p selected\n", (void *)vi->visualid); /* %p creates hexadecimal output like in glxinfo */
}
cmap = XCreateColormap(dpy, root, vi->visual, AllocNone);
swa.colormap = cmap;
swa.event_mask = ExposureMask | KeyPressMask;
win = XCreateWindow(dpy, root, 0, 0, 600, 600, 0, vi->depth, InputOutput, vi->visual, CWColormap | CWEventMask, &swa);
XMapWindow(dpy, win);
XStoreName(dpy, win, "VERY SIMPLE APPLICATION");
glc = glXCreateContext(dpy, vi, NULL, GL_TRUE);
glXMakeCurrent(dpy, win, glc);
glEnable(GL_DEPTH_TEST);
while(1) {
XNextEvent(dpy, &xev);
if(xev.type == Expose) {
XGetWindowAttributes(dpy, win, &gwa);
glViewport(0, 0, gwa.width, gwa.height);
DrawAQuad();
glXSwapBuffers(dpy, win);
}
else if(xev.type == KeyPress) {
glXMakeCurrent(dpy, None, NULL);
glXDestroyContext(dpy, glc);
XDestroyWindow(dpy, win);
XCloseDisplay(dpy);
exit(0);
}
} /* this closes while(1) { */
} /* this is the } which closes int main(int argc, char *argv[]) { */
我该怎么办?
感谢。
答案 0 :(得分:3)
direct rendering: No (LIBGL_ALWAYS_INDIRECT set)
确保您没有与this bug:
发生冲突2.4.06不会在远程X服务器上从ubuntu客户端呈现。
Ubuntu现在似乎正在使用freeglut,虽然它可以在本地显示器上显示,但它无法通过远程显示器上的GLX进行绘制。也许它没有得到有效的上下文,因为glGetString(gl_version)返回null。但是,glutGet(GLUT_DISPLAY_MODE_POSSIBLE)返回true,glxgears和glxinfo都正常工作,所以它似乎是一个freeglut问题。