arifgursel / pyglet

Automatically exported from code.google.com/p/pyglet
BSD 3-Clause "New" or "Revised" License
0 stars 0 forks source link

Displaying large font fails under very specific conditions #684

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1.run the following
#!/usr/bin/python
import pyglet

window = pyglet.window.Window(width=1400, height=500)

label = pyglet.text.Label('trawant', font_name='Arial', font_size=292)

@window.event
def on_draw():
    window.clear()
    label.draw()

pyglet.app.run()

2. I use Pyglet 1.2 repository code on Ubuntu 12.4 but a similar issues occur 
with:
Pyglet 1.1.4 on Ubuntu 12.4
PsychoPy using Pyglet 1.1.4 on Ubuntu 12.4
PsychoPy using Pyglet 1.1.4 on on Windows 7.

3. Issue does NOT occur when:
- font is smaller (for instance 192), or larger (for instance 392)
- text does not start with a 't'
- text does not contain a 'w'
Issue does occur for different fonts in different size ranges. This is also OS 
dependant.
Note that 

Paste in the traceback or error message:
Traceback (most recent call last):
Traceback (most recent call last):
  File "./tw_pyglet.py", line 6, in <module>
    label = pyglet.text.Label('trawant', font_name='Arial', font_size=292)
  File "/home/user/pyglet/pyglet/text/__init__.py", line 441, in __init__
    'align': align,
  File "/home/user/pyglet/pyglet/text/document.py", line 595, in set_style
    0, len(self.text), attributes)
  File "/home/user/pyglet/pyglet/text/document.py", line 506, in set_style
    self.dispatch_event('on_style_text', start, end, attributes)
  File "/home/user/pyglet/pyglet/event.py", line 355, in dispatch_event
    if handler(*args):
  File "/home/user/pyglet/pyglet/text/layout.py", line 1004, in on_style_text
    self._init_document()
  File "/home/user/pyglet/pyglet/text/layout.py", line 977, in _init_document
    self._update()
  File "/home/user/pyglet/pyglet/text/layout.py", line 911, in _update
    lines = self._get_lines()
  File "/home/user/pyglet/pyglet/text/layout.py", line 887, in _get_lines
    glyphs = self._get_glyphs()
  File "/home/user/pyglet/pyglet/text/layout.py", line 1016, in _get_glyphs
    glyphs.extend(font.get_glyphs(text[start:end]))
  File "/home/user/pyglet/pyglet/font/base.py", line 378, in get_glyphs
    self.glyphs[c] = glyph_renderer.render(c)
  File "/home/user/pyglet/pyglet/font/freetype.py", line 209, in render
    glyph = self.font.create_glyph(img) 
  File "/home/user/pyglet/pyglet/font/base.py", line 337, in create_glyph
    glyph = texture.fit(image)
  File "/home/user/pyglet/pyglet/font/base.py", line 244, in fit
    region.blit_into(image, 0, 0, 0)
  File "/home/user/pyglet/pyglet/image/__init__.py", line 1774, in blit_into
    self.owner.blit_into(source, x + self.x, y + self.y, z + self.z)
  File "/home/user/pyglet/pyglet/image/__init__.py", line 1664, in blit_into
    source.blit_to_texture(self.target, self.level, x, y, z)
  File "/home/user/pyglet/pyglet/image/__init__.py", line 977, in blit_to_texture
    data)
  File "/home/user/pyglet/pyglet/gl/lib.py", line 105, in errcheck
    raise GLException(msg)
pyglet.gl.lib.GLException: invalid value

Paste in the output of `python -m pyglet.info`:
Python
------------------------------------------------------------------------------
sys.version: 2.7.3 (default, Sep 26 2013, 20:03:06) 
[GCC 4.6.3]
sys.platform: linux2
sys.maxint: 9223372036854775807
os.getcwd(): /home/user/tt

pyglet
------------------------------------------------------------------------------
pyglet.version: 1.2alpha1
pyglet.__file__: /home/user/pyglet/pyglet/__init__.pyc
pyglet.options['search_local_libs'] = True
pyglet.options['debug_win32'] = False
pyglet.options['xlib_fullscreen_override_redirect'] = False
pyglet.options['debug_trace_args'] = False
pyglet.options['font'] = ('gdiplus', 'win32')
pyglet.options['debug_gl_trace_args'] = False
pyglet.options['debug_trace'] = False
pyglet.options['debug_gl_trace'] = False
pyglet.options['debug_x11'] = False
pyglet.options['debug_media'] = False
pyglet.options['debug_trace_depth'] = 1
pyglet.options['vsync'] = None
pyglet.options['debug_gl'] = True
pyglet.options['darwin_cocoa'] = False
pyglet.options['debug_trace_flush'] = True
pyglet.options['shadow_window'] = True
pyglet.options['xsync'] = True
pyglet.options['debug_font'] = False
pyglet.options['graphics_vbo'] = True
pyglet.options['debug_lib'] = False
pyglet.options['debug_graphics_batch'] = False
pyglet.options['audio'] = ('directsound', 'pulse', 'openal', 'silent')
pyglet.options['debug_texture'] = False

pyglet.window
------------------------------------------------------------------------------
platform: <pyglet.window.Platform object at 0x7f4fa1813e90>
display: <pyglet.canvas.xlib.XlibDisplay object at 0x22d5b10>
screens[0]: XlibScreen(display=<pyglet.canvas.xlib.XlibDisplay object at 
0x22d5b10>, x=0, y=0, width=1920, height=1080, xinerama=0)
config['double_buffer'] = 1
config['stereo'] = 0
config['buffer_size'] = 32
config['aux_buffers'] = 4
config['sample_buffers'] = 0
config['samples'] = 0
config['red_size'] = 8
config['green_size'] = 8
config['blue_size'] = 8
config['alpha_size'] = 0
config['depth_size'] = 24
config['stencil_size'] = 0
config['accum_red_size'] = 16
config['accum_green_size'] = 16
config['accum_blue_size'] = 16
config['accum_alpha_size'] = 16
config['major_version'] = None
config['minor_version'] = None
config['forward_compatible'] = None
config['debug'] = None
context: XlibContextARB()

window.context._info
------------------------------------------------------------------------------
gl_info.get_version(): 3.3.0 NVIDIA 304.88
gl_info.get_vendor(): NVIDIA Corporation
gl_info.get_renderer(): GeForce 9600 GT/PCIe/SSE2
gl_info.get_extensions():
   GL_ARB_ES2_compatibility
   GL_ARB_base_instance
   GL_ARB_blend_func_extended
   GL_ARB_color_buffer_float
   GL_ARB_compatibility
   GL_ARB_compressed_texture_pixel_storage
   GL_ARB_conservative_depth
   GL_ARB_copy_buffer
   GL_ARB_depth_buffer_float
   GL_ARB_depth_clamp
   GL_ARB_depth_texture
   GL_ARB_draw_buffers
   GL_ARB_draw_elements_base_vertex
   GL_ARB_draw_instanced
   GL_ARB_explicit_attrib_location
   GL_ARB_fragment_coord_conventions
   GL_ARB_fragment_program
   GL_ARB_fragment_program_shadow
   GL_ARB_fragment_shader
   GL_ARB_framebuffer_object
   GL_ARB_framebuffer_sRGB
   GL_ARB_geometry_shader4
   GL_ARB_get_program_binary
   GL_ARB_half_float_pixel
   GL_ARB_half_float_vertex
   GL_ARB_imaging
   GL_ARB_instanced_arrays
   GL_ARB_internalformat_query
   GL_ARB_map_buffer_alignment
   GL_ARB_map_buffer_range
   GL_ARB_multisample
   GL_ARB_multitexture
   GL_ARB_occlusion_query
   GL_ARB_occlusion_query2
   GL_ARB_pixel_buffer_object
   GL_ARB_point_parameters
   GL_ARB_point_sprite
   GL_ARB_provoking_vertex
   GL_ARB_robustness
   GL_ARB_sampler_objects
   GL_ARB_seamless_cube_map
   GL_ARB_separate_shader_objects
   GL_ARB_shader_bit_encoding
   GL_ARB_shader_objects
   GL_ARB_shader_texture_lod
   GL_ARB_shading_language_100
   GL_ARB_shading_language_420pack
   GL_ARB_shading_language_include
   GL_ARB_shading_language_packing
   GL_ARB_shadow
   GL_ARB_sync
   GL_ARB_texture_border_clamp
   GL_ARB_texture_buffer_object
   GL_ARB_texture_compression
   GL_ARB_texture_compression_rgtc
   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_float
   GL_ARB_texture_mirrored_repeat
   GL_ARB_texture_multisample
   GL_ARB_texture_non_power_of_two
   GL_ARB_texture_rectangle
   GL_ARB_texture_rg
   GL_ARB_texture_rgb10_a2ui
   GL_ARB_texture_storage
   GL_ARB_texture_swizzle
   GL_ARB_timer_query
   GL_ARB_transpose_matrix
   GL_ARB_uniform_buffer_object
   GL_ARB_vertex_array_bgra
   GL_ARB_vertex_array_object
   GL_ARB_vertex_buffer_object
   GL_ARB_vertex_program
   GL_ARB_vertex_shader
   GL_ARB_vertex_type_2_10_10_10_rev
   GL_ARB_viewport_array
   GL_ARB_window_pos
   GL_ATI_draw_buffers
   GL_ATI_texture_float
   GL_ATI_texture_mirror_once
   GL_EXTX_framebuffer_mixed_formats
   GL_EXT_Cg_shader
   GL_EXT_abgr
   GL_EXT_bgra
   GL_EXT_bindable_uniform
   GL_EXT_blend_color
   GL_EXT_blend_equation_separate
   GL_EXT_blend_func_separate
   GL_EXT_blend_minmax
   GL_EXT_blend_subtract
   GL_EXT_compiled_vertex_array
   GL_EXT_depth_bounds_test
   GL_EXT_direct_state_access
   GL_EXT_draw_buffers2
   GL_EXT_draw_instanced
   GL_EXT_draw_range_elements
   GL_EXT_fog_coord
   GL_EXT_framebuffer_blit
   GL_EXT_framebuffer_multisample
   GL_EXT_framebuffer_object
   GL_EXT_framebuffer_sRGB
   GL_EXT_geometry_shader4
   GL_EXT_gpu_program_parameters
   GL_EXT_gpu_shader4
   GL_EXT_import_sync_object
   GL_EXT_multi_draw_arrays
   GL_EXT_packed_depth_stencil
   GL_EXT_packed_float
   GL_EXT_packed_pixels
   GL_EXT_pixel_buffer_object
   GL_EXT_point_parameters
   GL_EXT_provoking_vertex
   GL_EXT_rescale_normal
   GL_EXT_secondary_color
   GL_EXT_separate_shader_objects
   GL_EXT_separate_specular_color
   GL_EXT_shadow_funcs
   GL_EXT_stencil_two_side
   GL_EXT_stencil_wrap
   GL_EXT_texture3D
   GL_EXT_texture_array
   GL_EXT_texture_buffer_object
   GL_EXT_texture_compression_dxt1
   GL_EXT_texture_compression_latc
   GL_EXT_texture_compression_rgtc
   GL_EXT_texture_compression_s3tc
   GL_EXT_texture_cube_map
   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_format_BGRA8888
   GL_EXT_texture_integer
   GL_EXT_texture_lod
   GL_EXT_texture_lod_bias
   GL_EXT_texture_mirror_clamp
   GL_EXT_texture_object
   GL_EXT_texture_sRGB
   GL_EXT_texture_sRGB_decode
   GL_EXT_texture_shared_exponent
   GL_EXT_texture_storage
   GL_EXT_texture_swizzle
   GL_EXT_texture_type_2_10_10_10_REV
   GL_EXT_timer_query
   GL_EXT_vertex_array
   GL_EXT_vertex_array_bgra
   GL_EXT_x11_sync_object
   GL_IBM_rasterpos_clip
   GL_IBM_texture_mirrored_repeat
   GL_KTX_buffer_region
   GL_NVX_conditional_render
   GL_NVX_gpu_memory_info
   GL_NV_ES1_1_compatibility
   GL_NV_alpha_test
   GL_NV_blend_minmax
   GL_NV_blend_square
   GL_NV_complex_primitives
   GL_NV_conditional_render
   GL_NV_copy_depth_to_color
   GL_NV_copy_image
   GL_NV_depth_buffer_float
   GL_NV_depth_clamp
   GL_NV_explicit_multisample
   GL_NV_fbo_color_attachments
   GL_NV_fence
   GL_NV_float_buffer
   GL_NV_fog_distance
   GL_NV_fragdepth
   GL_NV_fragment_program
   GL_NV_fragment_program2
   GL_NV_fragment_program_option
   GL_NV_framebuffer_multisample_coverage
   GL_NV_geometry_shader4
   GL_NV_gpu_program4
   GL_NV_half_float
   GL_NV_light_max_exponent
   GL_NV_multisample_coverage
   GL_NV_multisample_filter_hint
   GL_NV_occlusion_query
   GL_NV_packed_depth_stencil
   GL_NV_parameter_buffer_object
   GL_NV_parameter_buffer_object2
   GL_NV_path_rendering
   GL_NV_pixel_data_range
   GL_NV_point_sprite
   GL_NV_primitive_restart
   GL_NV_register_combiners
   GL_NV_register_combiners2
   GL_NV_shader_buffer_load
   GL_NV_texgen_reflection
   GL_NV_texture_barrier
   GL_NV_texture_compression_vtc
   GL_NV_texture_env_combine4
   GL_NV_texture_expand_normal
   GL_NV_texture_lod_clamp
   GL_NV_texture_multisample
   GL_NV_texture_rectangle
   GL_NV_texture_shader
   GL_NV_texture_shader2
   GL_NV_texture_shader3
   GL_NV_transform_feedback
   GL_NV_vdpau_interop
   GL_NV_vertex_array_range
   GL_NV_vertex_array_range2
   GL_NV_vertex_buffer_unified_memory
   GL_NV_vertex_program
   GL_NV_vertex_program1_1
   GL_NV_vertex_program2
   GL_NV_vertex_program2_option
   GL_NV_vertex_program3
   GL_OES_compressed_paletted_texture
   GL_OES_depth24
   GL_OES_depth32
   GL_OES_depth_texture
   GL_OES_element_index_uint
   GL_OES_fbo_render_mipmap
   GL_OES_get_program_binary
   GL_OES_mapbuffer
   GL_OES_packed_depth_stencil
   GL_OES_point_size_array
   GL_OES_point_sprite
   GL_OES_read_format
   GL_OES_rgb8_rgba8
   GL_OES_standard_derivatives
   GL_OES_texture_3D
   GL_OES_texture_float
   GL_OES_texture_float_linear
   GL_OES_texture_half_float
   GL_OES_texture_half_float_linear
   GL_OES_texture_npot
   GL_OES_vertex_array_object
   GL_OES_vertex_half_float
   GL_S3_s3tc
   GL_SGIS_generate_mipmap
   GL_SGIS_texture_lod
   GL_SGIX_depth_texture
   GL_SGIX_shadow
   GL_SUN_slice_accum

pyglet.gl.glu_info
------------------------------------------------------------------------------
glu_info.get_version(): 1.3
glu_info.get_extensions():
   GLU_EXT_nurbs_tessellator
   GLU_EXT_object_space_tess

pyglet.gl.glx_info
------------------------------------------------------------------------------
context.is_direct(): 1
glx_info.get_server_vendor(): NVIDIA Corporation
glx_info.get_server_version(): 1.4
glx_info.get_server_extensions():
   GLX_EXT_visual_info
   GLX_EXT_visual_rating
   GLX_SGIX_fbconfig
   GLX_SGIX_pbuffer
   GLX_SGI_video_sync
   GLX_SGI_swap_control
   GLX_EXT_swap_control
   GLX_EXT_swap_control_tear
   GLX_EXT_texture_from_pixmap
   GLX_ARB_create_context
   GLX_ARB_create_context_profile
   GLX_EXT_create_context_es_profile
   GLX_EXT_create_context_es2_profile
   GLX_ARB_create_context_robustness
   GLX_ARB_multisample
   GLX_NV_float_buffer
   GLX_ARB_fbconfig_float
   GLX_EXT_framebuffer_sRGB
   GLX_NV_multisample_coverage
glx_info.get_client_vendor(): NVIDIA Corporation
glx_info.get_client_version(): 1.4
glx_info.get_client_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_EXT_swap_control
   GLX_EXT_swap_control_tear
   GLX_ARB_create_context
   GLX_ARB_create_context_profile
   GLX_NV_float_buffer
   GLX_ARB_fbconfig_float
   GLX_EXT_fbconfig_packed_float
   GLX_EXT_texture_from_pixmap
   GLX_EXT_framebuffer_sRGB
   GLX_NV_present_video
   GLX_NV_copy_image
   GLX_NV_multisample_coverage
   GLX_NV_video_capture
   GLX_EXT_create_context_es2_profile
   GLX_ARB_create_context_robustness
glx_info.get_extensions():
   GLX_EXT_visual_info
   GLX_EXT_visual_rating
   GLX_SGIX_fbconfig
   GLX_SGIX_pbuffer
   GLX_SGI_video_sync
   GLX_SGI_swap_control
   GLX_EXT_swap_control
   GLX_EXT_swap_control_tear
   GLX_EXT_texture_from_pixmap
   GLX_ARB_create_context
   GLX_ARB_create_context_profile
   GLX_EXT_create_context_es2_profile
   GLX_ARB_create_context_robustness
   GLX_ARB_multisample
   GLX_NV_float_buffer
   GLX_ARB_fbconfig_float
   GLX_EXT_framebuffer_sRGB
   GLX_NV_multisample_coverage
   GLX_ARB_get_proc_address

pyglet.media
------------------------------------------------------------------------------
audio driver: <pyglet.media.drivers.pulse.PulseAudioDriver object at 0x256eed0>

pyglet.media.avbin
------------------------------------------------------------------------------
Library: <CDLL 'libavbin.so.0', handle 2499880 at 2555a10>
AVbin version: 7
FFmpeg revision: 15943

pyglet.media.drivers.openal
------------------------------------------------------------------------------
Library: <CDLL 'libopenal.so.1', handle 25d41c0 at 2562e50>
Version: (1, 1)
Extensions:
   ALC_ENUMERATE_ALL_EXT
   ALC_ENUMERATION_EXT
   ALC_EXT_CAPTURE
   ALC_EXT_disconnect
   ALC_EXT_EFX
   ALC_EXT_thread_local_context

pyglet.input.wintab
------------------------------------------------------------------------------
WinTab not available.
Inconsistency detected by ld.so: dl-close.c: 759: _dl_close: Assertion 
`map->l_init_called' failed!

Original issue reported on code.google.com by wilbert....@gmail.com on 25 Nov 2013 at 7:13

GoogleCodeExporter commented 9 years ago
Note that Arial may have to be installed on your system for this error to occur 
at this font size.

Original comment by wilbert....@gmail.com on 8 Jan 2014 at 10:27

GoogleCodeExporter commented 9 years ago
Something seems to go wrong while setting the glyph size. It generates a glyph 
of only 5x11 pixels.

Original comment by Silveste...@gmail.com on 2 Dec 2014 at 10:45

GoogleCodeExporter commented 9 years ago
Ow, that's because it is rendered twice. Once in a smaller size (12). Need to 
find out why that happens too.

Original comment by Silveste...@gmail.com on 2 Dec 2014 at 10:49

GoogleCodeExporter commented 9 years ago
What happens:

Glyphs are stored together in textures. Default size for these textures is 
256x256.

t is 98x276, which does not fit, so texture of 196x552 is created
r and a still fit in this same texture

However w is 277x202 and here texture.fit breaks.

Original comment by Silveste...@gmail.com on 2 Dec 2014 at 11:09

GoogleCodeExporter commented 9 years ago
texture.fit did not check whether the image would fit in width after moving to 
the next row. Added check to see whether the image would actually fit the 
texture at all.

Original comment by Silveste...@gmail.com on 2 Dec 2014 at 11:19

GoogleCodeExporter commented 9 years ago
Fixed in my repo: https://code.google.com/r/silvester747-bugfix/

I also improved the logic for scaling the texture size a bit.

Original comment by Silveste...@gmail.com on 2 Dec 2014 at 11:36

GoogleCodeExporter commented 9 years ago
Submitted fix to BitBucket repo.

Original comment by Silveste...@gmail.com on 20 Jan 2015 at 3:59