Unable to profile at this time since the system won’t be put under a load until most of the bugs are taken care of. It may do just fine, but as a beginning opengl programmer, I want to try to be sure I haven’t completely overlooked a better solution. Also, I would like to minimize resource usage to allow room for future growth since the software/hardware will be in use for the next ~10 years.
Performance of glTexSubImage2D is dependent on a lot of factors, but the single most important one is to pick a format and type for your parameters that match what is actually supported in hardware as closely as possible. What this means is that you should avoid formats like GL_RGB (despite the fact that you might think it “saves memory”) and use GL_BGRA instead. Your graphics driver will convert all formats to 4-component BGRA anyway, and you can save a lot of work in terms of driver overhead by just giving it the data in the format it wants to begin with.
GL_UNSIGNED_INT_8_8_8_8_REV can be 30 times faster than GL_UNSIGNED_BYTE on certain hardware (Intel) and is supported by everything that’s less than 10 or so years old, so use that in combination with GL_BGRA for a nice performance increase.
I’ve attached the glxinfo for the system. Based on the glxinfo I had assumed I should be using GL_RGBA for my textures and the pixel data I generate for them. Should I be using GL_BGRA anyway?
name of display: :0.0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.2
server glx extensions:
GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_texture_from_pixmap,
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer,
GLX_OML_swap_method, GLX_SGI_make_current_read, GLX_SGI_swap_control,
GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_visual_select_group
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 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_MESA_allocate_memory,
GLX_MESA_copy_sub_buffer, GLX_MESA_swap_control,
GLX_MESA_swap_frame_usage, GLX_OML_swap_method, GLX_SGI_make_current_read,
GLX_SGI_swap_control, GLX_SGI_video_sync, GLX_SGIS_multisample,
GLX_SGIX_fbconfig, GLX_SGIX_visual_select_group
OpenGL vendor string: Tungsten Graphics, Inc
OpenGL renderer string: Mesa DRI Intel(R) 852GM/855GM 20061017 x86/MMX/SSE2
OpenGL version string: 1.3 Mesa 7.0.4
OpenGL extensions:
GL_ARB_imaging, GL_ARB_multisample, GL_ARB_multitexture,
GL_ARB_point_parameters, 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_rectangle,
GL_ARB_transpose_matrix, GL_ARB_vertex_buffer_object,
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_minmax, GL_EXT_blend_subtract,
GL_EXT_clip_volume_hint, GL_EXT_cull_vertex, GL_EXT_compiled_vertex_array,
GL_EXT_convolution, GL_EXT_copy_texture, GL_EXT_draw_range_elements,
GL_EXT_fog_coord, GL_EXT_histogram, GL_EXT_multi_draw_arrays,
GL_EXT_packed_pixels, GL_EXT_point_parameters, GL_EXT_polygon_offset,
GL_EXT_rescale_normal, GL_EXT_secondary_color,
GL_EXT_separate_specular_color, 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_filter_anisotropic,
GL_EXT_texture_lod_bias, GL_EXT_texture_object, GL_EXT_texture_rectangle,
GL_EXT_vertex_array, GL_3DFX_texture_compression_FXT1,
GL_APPLE_client_storage, GL_APPLE_packed_pixels,
GL_ATI_blend_equation_separate, GL_IBM_rasterpos_clip,
GL_IBM_texture_mirrored_repeat, GL_INGR_blend_func_separate,
GL_MESA_pack_invert, GL_MESA_ycbcr_texture, GL_MESA_window_pos,
GL_NV_blend_square, GL_NV_light_max_exponent, GL_NV_texture_rectangle,
GL_NV_texgen_reflection, GL_NV_vertex_program, GL_NV_vertex_program1_1,
GL_OES_read_format, 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_SUN_multi_draw_arrays
Vis Vis Visual Trans buff lev render DB ste r g b a aux dep ste accum buffers MS MS
ID Depth Type parent size el type reo sz sz sz sz buf th ncl r g b a num bufs
----------------------------------------------------------------------------------------------------
0x23 16 TrueColor 0 16 0 rgba 1 0 5 6 5 0 0 16 0 0 0 0 0 0 0
0x24 16 TrueColor 0 16 0 rgba 0 0 5 6 5 0 0 16 0 0 0 0 0 0 0
0x25 16 TrueColor 0 16 0 rgba 1 0 5 6 5 0 0 16 8 0 0 0 0 0 0
0x26 16 TrueColor 0 16 0 rgba 0 0 5 6 5 0 0 16 8 0 0 0 0 0 0
0x27 16 TrueColor 0 16 0 rgba 1 0 5 6 5 0 0 16 0 16 16 16 0 0 0
0x28 16 TrueColor 0 16 0 rgba 0 0 5 6 5 0 0 16 0 16 16 16 0 0 0
0x29 16 TrueColor 0 16 0 rgba 1 0 5 6 5 0 0 16 8 16 16 16 0 0 0
0x2a 16 TrueColor 0 16 0 rgba 0 0 5 6 5 0 0 16 8 16 16 16 0 0 0
0x2b 16 DirectColor 0 16 0 rgba 1 0 5 6 5 0 0 16 0 0 0 0 0 0 0
0x2c 16 DirectColor 0 16 0 rgba 0 0 5 6 5 0 0 16 0 0 0 0 0 0 0
0x2d 16 DirectColor 0 16 0 rgba 1 0 5 6 5 0 0 16 8 0 0 0 0 0 0
0x2e 16 DirectColor 0 16 0 rgba 0 0 5 6 5 0 0 16 8 0 0 0 0 0 0
0x2f 16 DirectColor 0 16 0 rgba 1 0 5 6 5 0 0 16 0 16 16 16 0 0 0
0x30 16 DirectColor 0 16 0 rgba 0 0 5 6 5 0 0 16 0 16 16 16 0 0 0
0x31 16 DirectColor 0 16 0 rgba 1 0 5 6 5 0 0 16 8 16 16 16 0 0 0
0x32 16 DirectColor 0 16 0 rgba 0 0 5 6 5 0 0 16 8 16 16 16 0 0 0
0x83 32 TrueColor 0 32 0 rgba 0 0 8 8 8 8 0 0 0 0 0 0 0 0 0