Extensions
X-Server

Xprint

3D-Performance mit OpenGL


Darstellung mit OpenGLDer offene Standard OpenGL spezifiziert eine plattformunabhängige Programmierschnittstelle zur Implementierung von 3D-Oberflächen. Auf Linux wird meist die Implementierung Mesa verwendet. Im Zusammenspiel mit DRI (Direct Rendering Infrastructure) kann Mesa von hardwarebeschleunigten 3D-Features der Grafikkarten Gebrauch machen. Erst mit Hardware-Beschleunigung wird OpenGL hinsichtlich Performance wirklich interessant.
Ein älterer Standard für 3D-Computergraphik war PHIGS. Linux ist, ebenso wie die meisten aktuellen X-Server, nicht in der Lage, mit PHIGS zu arbeiten. Allerdings existiert ein Workaround, der auf der Seite "X11 und PHIGS" beschrieben wird.

Die wichtigsten Grafikchipsatz-Hersteller, ATI und NVIDIA, liefern eigene Treiber für Linux, so dass auch neue Grafikkarten mit z.T. nicht offengelegten Eigenschaften mit optimaler 3D-Beschleunigung mit Linux genutzt werden können.

OpenGL wird ständig weiter entwickelt; neue Features kommen hinzu. Unter Umständen sind Applikationen von bestimmten neueren OpenGL-Features abhängig und dashalb nur lauffähig, wenn die OpenGL-Implementierung bzw. der Treiber der Grafikkarte den erforderlichen Versionsstand von OpenGL erfüllen. Mit jeder OpenGL-Implementierung werden auch Analyse-Werkzeuge geliefert; zwei wichtige Standard-Tools sollen hier behandelt werden: glxgears und glxinfo.
.
glxgears

OpenGL + X11 = GLX

Um OpenGL für X-Applikationen auch netzwerktransparent nutzbar zu machen, wurde die Extension GLX geschaffen. 
Ein erster Test der Funktionsfähigkeit vvon GLX und Performance der verwendeten OpenGL-Implementierung bzw. 3D-Beschleunigung der Grafikkarte ist die Mini-Applikation glxgears (siehe Abb. rechts).
Bei funktionsfähigem GLX werden sich die drei Zahnräder mit einer gewissen Geschwindigkeit drehen; hat man glxgears im Xterm aufgerufen, so erscheinen dort nach einigen Sekunden Zeilen der Art
   4012 frames in 5.1 seconds = 791.430 FPS.
Je mehr Frames pro Sekunde (FPS), desto besser die Performance.

glxgears -info spuckt zusätzlich einige Informationen zu GLX aus; zu diesem Zweck ist aber ein anderes OpenGL-Tool besser geeignet:

glxinfo

Der Aufruf von
glxinfo
liefert einen Ausgabe wie in den Kästen rechts.

Die wichtigste Information ist hierbei die zur Verfügung stehende GLX-Version - 1.4 entspricht dem gegenwärtigen Stand der Technik.

Mit jeder GLX-Version kommt eine Reihe zusätzlicher GLX-Extensions (nicht zu verwechseln mit den X-Extensions des X-Servers), die hier im Detail aufgeführt werden.

Bereits ohne sich tiefer mit OpenGL zu beschäftigen, ist glxinfo zum Vergleich verschiedener OpenGL-Umgebungen besonders bei der Fehlersuche sehr nützlich.
name of display: :0.0
display: :0  screen: 0
direct rendering: No
server glx vendor string: SGI
server glx version string: 1.2
server glx extensions:
    GLX_ARB_multisample, GLX_EXT_visual_info, GLX_EXT_visual_rating,
    GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_OML_swap_method,
    GLX_SGI_make_current_read, GLX_SGIS_multisample, GLX_SGIX_hyperpipe,
    GLX_SGIX_swap_barrier, GLX_SGIX_fbconfig, GLX_MESA_copy_sub_buffer
client glx vendor string: SGI
client glx version string: 1.4
client glx extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context,
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_allocate_memory,
    GLX_MESA_copy_sub_buffer, GLX_MESA_swap_control,
    GLX_MESA_swap_frame_usage, GLX_OML_swap_method, GLX_OML_sync_control,
    GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGI_video_sync,
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
    GLX_SGIX_visual_select_group, GLX_EXT_texture_from_pixmap
GLX extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context,
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer,
    GLX_OML_swap_method, GLX_SGI_make_current_read, GLX_SGIS_multisample,
    GLX_SGIX_fbconfig, GLX_EXT_texture_from_pixmap
OpenGL vendor string: Mesa project: www.mesa3d.org
OpenGL renderer string: Mesa GLX Indirect
OpenGL version string: 1.4 (1.5 Mesa 6.5.1)
OpenGL extensions:
    GL_ARB_depth_texture, GL_ARB_draw_buffers, GL_ARB_fragment_program,
    GL_ARB_imaging, GL_ARB_multisample, GL_ARB_multitexture,
    GL_ARB_occlusion_query, GL_ARB_point_parameters, GL_ARB_point_sprite,
    GL_ARB_shadow, GL_ARB_shadow_ambient, GL_ARB_texture_border_clamp,
    GL_ARB_texture_compression, 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_texture_non_power_of_two,
    GL_ARB_texture_rectangle, GL_ARB_transpose_matrix, GL_ARB_vertex_program,
    GL_ARB_window_pos, GL_EXT_abgr, GL_EXT_bgra, GL_EXT_blend_color,
    GL_EXT_blend_equation_separate, GL_EXT_blend_func_separate,
    GL_EXT_blend_logic_op, GL_EXT_blend_minmax, GL_EXT_blend_subtract,
    GL_EXT_clip_volume_hint, GL_EXT_copy_texture, GL_EXT_draw_range_elements,
    GL_EXT_fog_coord, GL_EXT_framebuffer_object, GL_EXT_multi_draw_arrays,
    GL_EXT_packed_pixels, GL_EXT_paletted_texture, GL_EXT_point_parameters,
    GL_EXT_polygon_offset, GL_EXT_rescale_normal, GL_EXT_secondary_color,
    GL_EXT_separate_specular_color, GL_EXT_shadow_funcs,
    GL_EXT_shared_texture_palette, GL_EXT_stencil_wrap, GL_EXT_subtexture,
    GL_EXT_texture, 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_bias,
    GL_EXT_texture_mirror_clamp, GL_EXT_texture_object,
    GL_EXT_texture_rectangle, GL_EXT_vertex_array, GL_APPLE_packed_pixels,
    GL_ATI_draw_buffers, GL_ATI_texture_env_combine3,
    GL_ATI_texture_mirror_once, GL_ATIX_texture_env_combine3,
    GL_IBM_texture_mirrored_repeat, GL_INGR_blend_func_separate,
    GL_MESA_pack_invert, GL_MESA_ycbcr_texture, GL_NV_blend_square,
    GL_NV_fragment_program, GL_NV_light_max_exponent, GL_NV_point_sprite,
    GL_NV_texgen_reflection, GL_NV_texture_rectangle, GL_NV_vertex_program,
    GL_NV_vertex_program1_1, GL_SGI_color_matrix, GL_SGI_color_table,
    GL_SGIS_generate_mipmap, GL_SGIS_texture_border_clamp,
    GL_SGIS_texture_edge_clamp, GL_SGIS_texture_lod, GL_SGIX_depth_texture,
    GL_SGIX_shadow, GL_SGIX_shadow_ambient, GL_SUN_multi_draw_arrays
glu version: 1.3
glu extensions:
    GLU_EXT_nurbs_tessellator, GLU_EXT_object_space_tess
Auch OpenGL kennt sog. Visuals mit Eingenschaften wie Farbtiefe, Pufferung, Alphakanal etc.
Sie sind nicht zu verwechseln mit den Server-Visuals des X-Servers, sondern stammen von der OpenGL-Implementierung.
Eine gewisse Abhängigkeit allerdings schon insofern gegeben, als eine bestimmte Farbtiefe bei OpenGL eine mindestens ebenso große Farbtiefe des X-Servers voraussetzt.

glxinfo -v  stellt die sonst sehr komprimierten OpenGL-Visual-Informationen ausführlich und daher besser lesbar in der Art von xdpyinfo dar.
   visual  x  bf lv rg d st colorbuffer ax dp st accumbuffer  ms  cav
 id dep cl sp sz l  ci b ro  r  g  b  a bf th cl  r  g  b  a ns b eat
----------------------------------------------------------------------
0x23 24 tc  0 24  0 r  y  .  8  8  8  0  0 16  0  0  0  0  0  0 0 None
0x24 24 tc  0 24  0 r  y  .  8  8  8  0  0 16  8 16 16 16  0  0 0 None
0x25 24 tc  0 32  0 r  y  .  8  8  8  8  0 16  8 16 16 16 16  0 0 None
0x26 24 tc  0 32  0 r  .  .  8  8  8  8  0 16  8 16 16 16 16  0 0 None
0x27 24 dc  0 24  0 r  y  .  8  8  8  0  0 16  0  0  0  0  0  0 0 None
0x28 24 dc  0 24  0 r  y  .  8  8  8  0  0 16  8 16 16 16  0  0 0 None

Das Thema OpenGL kann hier nicht weiter vertieft werden. Wer mehr wissen will, findet über die im Folgenden angegebenen Links reichlich Informationen.

Kommentierte Links

Extensions
     ©2005, 2007 Andreas Gottwald
Xprint