FULL PRODUCT VERSION :
java version "1.6.0-ea"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.6.0-ea-b56)
Java HotSpot(TM) Client VM (build 1.6.0-ea-b56, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Linux ce 2.6.13-1.1526_FC4 #1 Wed Sep 28 19:15:10 EDT 2005 i686 i686 i386 GNU/Linux
EXTRA RELEVANT SYSTEM CONFIGURATION :
[ce@ce ~]$ glxinfo
name of display: :0.0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: NVIDIA Corporation
server glx version string: 1.3
server glx extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_SGI_video_sync, GLX_SGI_swap_control
client glx vendor string: NVIDIA Corporation
client glx version string: 1.3
client glx extensions:
GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_EXT_import_context, GLX_SGI_video_sync,
GLX_NV_swap_group, GLX_NV_video_out, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
GLX_SGI_swap_control, GLX_NV_float_buffer, GLX_ARB_fbconfig_float
GLX extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_SGI_video_sync, GLX_SGI_swap_control,
GLX_ARB_get_proc_address
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce4 488 Go/AGP/SSE2
OpenGL version string: 1.5.3 NVIDIA 76.76
OpenGL extensions:
GL_ARB_imaging, GL_ARB_multitexture, GL_ARB_point_parameters,
GL_ARB_point_sprite, GL_ARB_shader_objects, GL_ARB_shading_language_100,
GL_ARB_texture_compression, GL_ARB_texture_cube_map,
GL_ARB_texture_env_add, GL_ARB_texture_env_combine,
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_vertex_shader,
GL_ARB_window_pos, GL_S3_s3tc, GL_EXT_texture_env_add, GL_EXT_abgr,
GL_EXT_bgra, GL_EXT_blend_color, GL_EXT_blend_minmax,
GL_EXT_blend_subtract, GL_EXT_clip_volume_hint,
GL_EXT_compiled_vertex_array, GL_EXT_Cg_shader,
GL_EXT_draw_range_elements, GL_EXT_fog_coord, GL_EXT_multi_draw_arrays,
GL_EXT_packed_pixels, GL_EXT_paletted_texture, GL_EXT_pixel_buffer_object,
GL_EXT_point_parameters, GL_EXT_rescale_normal, GL_EXT_secondary_color,
GL_EXT_separate_specular_color, GL_EXT_shared_texture_palette,
GL_EXT_stencil_wrap, GL_EXT_texture_compression_s3tc,
GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp,
GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3,
GL_EXT_texture_filter_anisotropic, GL_EXT_texture_lod,
GL_EXT_texture_lod_bias, GL_EXT_texture_object, GL_EXT_vertex_array,
GL_IBM_rasterpos_clip, GL_IBM_texture_mirrored_repeat,
GL_KTX_buffer_region, GL_NV_blend_square, GL_NV_fence,
GL_NV_fog_distance, GL_NV_light_max_exponent, GL_NV_packed_depth_stencil,
GL_NV_pixel_data_range, GL_NV_point_sprite, GL_NV_register_combiners,
GL_NV_texgen_reflection, GL_NV_texture_env_combine4,
GL_NV_texture_rectangle, GL_NV_vertex_array_range,
GL_NV_vertex_array_range2, GL_NV_vertex_program, GL_NV_vertex_program1_1,
GL_SGIS_generate_mipmap, GL_SGIS_multitexture, GL_SGIS_texture_lod,
GL_SUN_slice_accum
glu version: 1.3
glu extensions:
GLU_EXT_nurbs_tessellator, GLU_EXT_object_space_tess
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
----------------------------------------------------------------------
0x21 24 tc 0 32 0 r y . 8 8 8 0 4 24 8 16 16 16 16 0 0 None
0x22 24 dc 0 32 0 r y . 8 8 8 0 4 24 8 16 16 16 16 0 0 None
0x23 24 tc 0 32 0 r y . 8 8 8 8 4 24 8 16 16 16 16 0 0 None
0x24 24 tc 0 32 0 r . . 8 8 8 0 4 24 8 16 16 16 16 0 0 None
0x25 24 tc 0 32 0 r . . 8 8 8 8 4 24 8 16 16 16 16 0 0 None
0x26 24 tc 0 32 0 r y . 8 8 8 0 4 24 0 16 16 16 16 0 0 None
0x27 24 tc 0 32 0 r y . 8 8 8 8 4 24 0 16 16 16 16 0 0 None
0x28 24 tc 0 32 0 r . . 8 8 8 0 4 24 0 16 16 16 16 0 0 None
0x29 24 tc 0 32 0 r . . 8 8 8 8 4 24 0 16 16 16 16 0 0 None
0x2a 24 tc 0 32 0 r y . 8 8 8 0 4 16 0 16 16 16 16 0 0 None
0x2b 24 tc 0 32 0 r y . 8 8 8 8 4 16 0 16 16 16 16 0 0 None
0x2c 24 tc 0 32 0 r . . 8 8 8 0 4 16 0 16 16 16 16 0 0 None
0x2d 24 tc 0 32 0 r . . 8 8 8 8 4 16 0 16 16 16 16 0 0 None
0x2e 24 tc 0 32 0 r y . 8 8 8 0 4 0 0 16 16 16 16 0 0 None
0x2f 24 tc 0 32 0 r y . 8 8 8 8 4 0 0 16 16 16 16 0 0 None
0x30 24 tc 0 32 0 r . . 8 8 8 0 4 0 0 16 16 16 16 0 0 None
0x31 24 tc 0 32 0 r . . 8 8 8 8 4 0 0 16 16 16 16 0 0 None
0x32 24 dc 0 32 0 r y . 8 8 8 8 4 24 8 16 16 16 16 0 0 None
0x33 24 dc 0 32 0 r . . 8 8 8 0 4 24 8 16 16 16 16 0 0 None
0x34 24 dc 0 32 0 r . . 8 8 8 8 4 24 8 16 16 16 16 0 0 None
0x35 24 dc 0 32 0 r y . 8 8 8 0 4 24 0 16 16 16 16 0 0 None
0x36 24 dc 0 32 0 r y . 8 8 8 8 4 24 0 16 16 16 16 0 0 None
0x37 24 dc 0 32 0 r . . 8 8 8 0 4 24 0 16 16 16 16 0 0 None
0x38 24 dc 0 32 0 r . . 8 8 8 8 4 24 0 16 16 16 16 0 0 None
0x39 24 dc 0 32 0 r y . 8 8 8 0 4 16 0 16 16 16 16 0 0 None
0x3a 24 dc 0 32 0 r y . 8 8 8 8 4 16 0 16 16 16 16 0 0 None
0x3b 24 dc 0 32 0 r . . 8 8 8 0 4 16 0 16 16 16 16 0 0 None
0x3c 24 dc 0 32 0 r . . 8 8 8 8 4 16 0 16 16 16 16 0 0 None
0x3d 24 dc 0 32 0 r y . 8 8 8 0 4 0 0 16 16 16 16 0 0 None
0x3e 24 dc 0 32 0 r y . 8 8 8 8 4 0 0 16 16 16 16 0 0 None
0x3f 24 dc 0 32 0 r . . 8 8 8 0 4 0 0 16 16 16 16 0 0 None
0x40 24 dc 0 32 0 r . . 8 8 8 8 4 0 0 16 16 16 16 0 0 None
A DESCRIPTION OF THE PROBLEM :
When mixing blits of scaled and not-scaled images weird slowdowns occur when the OpenGL pipeline is enabled.
The strange thing is that when doing only blits of scaled images they are as fast as blits of unscaled images, but as soon as you add blits of not scaled image performance goes down.
We discovered the problem when writing a spreadsheet-like application which uses image-scaling so that some signs can be stored in images and also be used also with dynamically adjustable grid sizes.
In our grid we do not use any non-scaled images, maybe that happens because of other operations like fills or glyph-painting.
The image I used is a 20x20 grayscale image and is 1-bit transparent.
This are the results I get when running the sample-code on my test machine which blits each image 10.000 times to a JFrame:
Scaled image took: 747
Full image took: 32
This I get when blitting only scaled images:
Scaled image took: 1
Scaled image took: 1
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the sample-code with the OpenGL pipeline enabled.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
blit should be as fast as when only doing scaled blits.
ACTUAL -
very slow blits.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.awt.*;
import javax.swing.*;
public class ScaleBench extends JFrame
{
Image origImage;
Image scaledImage;
public ScaleBench()
{
origImage = new ImageIcon("img.gif").getImage();
scaledImage = origImage.getScaledInstance(25, 30, Image.SCALE_SMOOTH);
setSize(500, 500);
setVisible(true);
}
public void paint(Graphics g)
{
for (int m = 0; m < 1000; m++)
{
long startNorm = System.currentTimeMillis();
for (int i = 0; i < 10000; i++)
{
g.drawImage(origImage, 25, 25, this);
}
long endNorm = System.currentTimeMillis();
long startScaled = System.currentTimeMillis();
for (int i = 0; i < 10000; i++)
{
g.drawImage(scaledImage, 25, 25, this);
}
long endScaled = System.currentTimeMillis();
System.out.println("Scaled image took: " + (endScaled - startScaled));
System.out.println("Full image took: " + (endNorm - startNorm));
System.out.println();
}
}
public static void main(String[] args)
{
new ScaleBench();
}
}
---------- END SOURCE ----------