qbektrix / pyglet

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

SolidColorImagePattern and CheckerImagePattern appear to fail in python3 and pyglet1.2a #699

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Have you tried Pyglet 1.2 alpha1 or the repository code? Yes, using a pip3 
install of pyglet1.2 from tip on linux. I was able to fix the problem (see end 
of issue).

What steps will reproduce the problem?
1. The following code (or with SolidColorImagePattern)
mask = pyglet.image.CheckerImagePattern((255, 0, 255, 100))
image = mask.create_image(50, 50)
image.save("test.png")
2. Run on python3, the resulting image is the correct size but empty.

Paste in the traceback or error message:
There is no traceback however the expected output is a PNG file with a 
checkered pattern with one colour purple.

Paste in the output of `python -m pyglet.info`:
Python
------------------------------------------------------------------------------
sys.version: 3.3.2+ (default, Oct  9 2013, 14:50:09) 
[GCC 4.8.1]
sys.platform: linux
sys.maxint: 9223372036854775807
os.getcwd(): /home/luke/Projects/mygame
pyglet
------------------------------------------------------------------------------
pyglet.version: 1.2alpha1
pyglet.__file__: /usr/local/lib/python3.3/dist-packages/pyglet/__init__.py
pyglet.options['darwin_cocoa'] = False
pyglet.options['debug_lib'] = False
pyglet.options['debug_trace_args'] = False
pyglet.options['xlib_fullscreen_override_redirect'] = False
pyglet.options['debug_trace_flush'] = True
pyglet.options['debug_win32'] = False
pyglet.options['debug_trace_depth'] = 1
pyglet.options['graphics_vbo'] = True
pyglet.options['debug_gl_trace_args'] = False
pyglet.options['debug_texture'] = False
pyglet.options['shadow_window'] = True
pyglet.options['xsync'] = True
pyglet.options['debug_media'] = False
pyglet.options['audio'] = ('directsound', 'pulse', 'openal', 'silent')
pyglet.options['debug_gl'] = True
pyglet.options['font'] = ('gdiplus', 'win32')
pyglet.options['debug_graphics_batch'] = False
pyglet.options['debug_x11'] = False
pyglet.options['debug_font'] = False
pyglet.options['debug_gl_trace'] = False
pyglet.options['vsync'] = None
pyglet.options['search_local_libs'] = True
pyglet.options['debug_trace'] = False

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

window.context._info
------------------------------------------------------------------------------
gl_info.get_version(): 4.2.12337 Compatibility Profile Context 13.101
gl_info.get_vendor(): ATI Technologies Inc.
gl_info.get_renderer(): AMD Radeon HD 7800 Series 
gl_info.get_extensions():
   GL_AMDX_debug_output
   GL_AMD_blend_minmax_factor
   GL_AMD_conservative_depth
   GL_AMD_debug_output
   GL_AMD_depth_clamp_separate
   GL_AMD_draw_buffers_blend
   GL_AMD_interleaved_elements
   GL_AMD_multi_draw_indirect
   GL_AMD_name_gen_delete
   GL_AMD_performance_monitor
   GL_AMD_pinned_memory
   GL_AMD_query_buffer_object
   GL_AMD_sample_positions
   GL_AMD_seamless_cubemap_per_texture
   GL_AMD_shader_stencil_export
   GL_AMD_shader_stencil_value_export
   GL_AMD_shader_trace
   GL_AMD_shader_trinary_minmax
   GL_AMD_sparse_texture
   GL_AMD_stencil_operation_extended
   GL_AMD_texture_cube_map_array
   GL_AMD_texture_texture4
   GL_AMD_transform_feedback3_lines_triangles
   GL_AMD_transform_feedback4
   GL_AMD_vertex_shader_layer
   GL_AMD_vertex_shader_viewport_index
   GL_ARB_ES2_compatibility
   GL_ARB_ES3_compatibility
   GL_ARB_arrays_of_arrays
   GL_ARB_base_instance
   GL_ARB_blend_func_extended
   GL_ARB_clear_buffer_object
   GL_ARB_color_buffer_float
   GL_ARB_compatibility
   GL_ARB_compressed_texture_pixel_storage
   GL_ARB_compute_shader
   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_buffers_blend
   GL_ARB_draw_elements_base_vertex
   GL_ARB_draw_indirect
   GL_ARB_draw_instanced
   GL_ARB_explicit_attrib_location
   GL_ARB_explicit_uniform_location
   GL_ARB_fragment_coord_conventions
   GL_ARB_fragment_layer_viewport
   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_gpu_shader5
   GL_ARB_gpu_shader_fp64
   GL_ARB_half_float_pixel
   GL_ARB_half_float_vertex
   GL_ARB_imaging
   GL_ARB_instanced_arrays
   GL_ARB_internalformat_query
   GL_ARB_invalidate_subdata
   GL_ARB_map_buffer_alignment
   GL_ARB_map_buffer_range
   GL_ARB_multi_draw_indirect
   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_program_interface_query
   GL_ARB_provoking_vertex
   GL_ARB_sample_shading
   GL_ARB_sampler_objects
   GL_ARB_seamless_cube_map
   GL_ARB_separate_shader_objects
   GL_ARB_shader_atomic_counters
   GL_ARB_shader_bit_encoding
   GL_ARB_shader_image_load_store
   GL_ARB_shader_image_size
   GL_ARB_shader_objects
   GL_ARB_shader_precision
   GL_ARB_shader_stencil_export
   GL_ARB_shader_storage_buffer_object
   GL_ARB_shader_subroutine
   GL_ARB_shader_texture_lod
   GL_ARB_shading_language_100
   GL_ARB_shading_language_420pack
   GL_ARB_shading_language_packing
   GL_ARB_shadow
   GL_ARB_shadow_ambient
   GL_ARB_stencil_texturing
   GL_ARB_sync
   GL_ARB_tessellation_shader
   GL_ARB_texture_border_clamp
   GL_ARB_texture_buffer_object
   GL_ARB_texture_buffer_object_rgb32
   GL_ARB_texture_buffer_range
   GL_ARB_texture_compression
   GL_ARB_texture_compression_bptc
   GL_ARB_texture_compression_rgtc
   GL_ARB_texture_cube_map
   GL_ARB_texture_cube_map_array
   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_gather
   GL_ARB_texture_mirrored_repeat
   GL_ARB_texture_multisample
   GL_ARB_texture_non_power_of_two
   GL_ARB_texture_query_levels
   GL_ARB_texture_query_lod
   GL_ARB_texture_rectangle
   GL_ARB_texture_rg
   GL_ARB_texture_rgb10_a2ui
   GL_ARB_texture_snorm
   GL_ARB_texture_storage
   GL_ARB_texture_storage_multisample
   GL_ARB_timer_query
   GL_ARB_transform_feedback2
   GL_ARB_transform_feedback3
   GL_ARB_transform_feedback_instanced
   GL_ARB_transpose_matrix
   GL_ARB_uniform_buffer_object
   GL_ARB_vertex_array_bgra
   GL_ARB_vertex_array_object
   GL_ARB_vertex_attrib_64bit
   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_envmap_bumpmap
   GL_ATI_fragment_shader
   GL_ATI_meminfo
   GL_ATI_separate_stencil
   GL_ATI_texture_compression_3dc
   GL_ATI_texture_env_combine3
   GL_ATI_texture_float
   GL_ATI_texture_mirror_once
   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_copy_buffer
   GL_EXT_copy_texture
   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_histogram
   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_specular_color
   GL_EXT_shader_image_load_store
   GL_EXT_shadow_funcs
   GL_EXT_stencil_wrap
   GL_EXT_subtexture
   GL_EXT_texgen_reflection
   GL_EXT_texture3D
   GL_EXT_texture_array
   GL_EXT_texture_buffer_object
   GL_EXT_texture_compression_bptc
   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_integer
   GL_EXT_texture_lod
   GL_EXT_texture_lod_bias
   GL_EXT_texture_mirror_clamp
   GL_EXT_texture_object
   GL_EXT_texture_rectangle
   GL_EXT_texture_sRGB
   GL_EXT_texture_sRGB_decode
   GL_EXT_texture_shared_exponent
   GL_EXT_texture_snorm
   GL_EXT_texture_storage
   GL_EXT_texture_swizzle
   GL_EXT_timer_query
   GL_EXT_transform_feedback
   GL_EXT_vertex_array
   GL_EXT_vertex_array_bgra
   GL_EXT_vertex_attrib_64bit
   GL_IBM_texture_mirrored_repeat
   GL_KTX_buffer_region
   GL_NV_blend_square
   GL_NV_conditional_render
   GL_NV_copy_depth_to_color
   GL_NV_copy_image
   GL_NV_explicit_multisample
   GL_NV_float_buffer
   GL_NV_half_float
   GL_NV_primitive_restart
   GL_NV_texgen_reflection
   GL_NV_texture_barrier
   GL_SGIS_generate_mipmap
   GL_SGIS_texture_edge_clamp
   GL_SGIS_texture_lod
   GL_SUN_multi_draw_arrays
   GL_WIN_swap_hint

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(): ATI
glx_info.get_server_version(): 1.4
glx_info.get_server_extensions():
   GLX_ARB_multisample
   GLX_EXT_import_context
   GLX_EXT_texture_from_pixmap
   GLX_EXT_visual_info
   GLX_EXT_visual_rating
   GLX_OML_swap_method
   GLX_SGI_make_current_read
   GLX_SGI_swap_control
   GLX_SGIS_multisample
   GLX_SGIX_fbconfig
   GLX_SGIX_pbuffer
   GLX_SGIX_visual_select_group
glx_info.get_client_vendor(): ATI
glx_info.get_client_version(): 1.4
glx_info.get_client_extensions():
   GLX_ARB_create_context
   GLX_ARB_create_context_profile
   GLX_ARB_get_proc_address
   GLX_ARB_multisample
   GLX_EXT_import_context
   GLX_EXT_swap_control
   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_NV_swap_group
   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_pbuffer
   GLX_SGIX_swap_barrier
   GLX_SGIX_swap_group
   GLX_SGIX_visual_select_group
   GLX_EXT_texture_from_pixmap
   GLX_EXT_framebuffer_sRGB
   GLX_ARB_fbconfig_float
   GLX_AMD_gpu_association
   GLX_EXT_buffer_age
glx_info.get_extensions():
   GLX_ARB_create_context
   GLX_ARB_create_context_profile
   GLX_ARB_get_proc_address
   GLX_ARB_multisample
   GLX_EXT_import_context
   GLX_EXT_swap_control
   GLX_EXT_visual_info
   GLX_EXT_visual_rating
   GLX_MESA_swap_control
   GLX_NV_swap_group
   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_pbuffer
   GLX_SGIX_swap_barrier
   GLX_SGIX_swap_group
   GLX_SGIX_visual_select_group
   GLX_EXT_texture_from_pixmap
   GLX_EXT_buffer_age

pyglet.media
------------------------------------------------------------------------------
audio driver: <pyglet.media.drivers.openal.OpenALDriver object at 
0x7f1f32b28390>

pyglet.media.avbin
------------------------------------------------------------------------------
Library: <CDLL 'libavbin.so.0', handle 36eddb0 at 7f1f32b208d0>
AVbin version: 7
FFmpeg revision: 15943

pyglet.media.drivers.openal
------------------------------------------------------------------------------
Library: <CDLL 'libopenal.so.1', handle 36e62a0 at 7f1f2d6abb50>
Version: (1, 1)
Extensions:
Traceback (most recent call last):
  File "/usr/local/lib/python3.3/dist-packages/pyglet/info.py", line 205, in _try_dump
    func()
  File "/usr/local/lib/python3.3/dist-packages/pyglet/info.py", line 183, in dump_al
    for extension in driver.get_extensions():
  File "/usr/local/lib/python3.3/dist-packages/pyglet/media/drivers/openal/__init__.py", line 610, in get_extensions
    return ctypes.cast(extensions, ctypes.c_char_p).value.split(' ')
TypeError: Type str doesn't support the buffer API

pyglet.input.wintab
------------------------------------------------------------------------------
WinTab not available.
AL lib: ReleaseALC: 2 devices not closed

Any additional info (platform/language/hardware) that may be relevant?

I believe the problem lies in /pyglet/image/__init__.py

The create_image methods on SolidColorImagePattern and CheckerImagePattern are 
passing unicode data to ImageDate.__init__ when they should be passing bytes 
objects. Encoding data.encode("utf-8")

Changing the line in both create_image methods to:
        return ImageData(width, height, 'RGBA', data.encode("utf-8"))

Fixes the problem for me temporarily, but I don't know if that's a good way to 
do it.

Original issue reported on code.google.com by dodgyvi...@gmail.com on 8 Jan 2014 at 6:00

GoogleCodeExporter commented 9 years ago
Actually I don't think it is as simple as encoding to fix it. It's better (I 
get colours but everything is semi-transparent). 

Original comment by dodgyvi...@gmail.com on 8 Jan 2014 at 6:17

GoogleCodeExporter commented 9 years ago
Hmm, is anyone interested in engaging me on these bug reports or is pyglet dead?

Original comment by dodgyvi...@gmail.com on 24 Mar 2014 at 3:56

GoogleCodeExporter commented 9 years ago
Anyway, please let me know if I can help.

Original comment by dodgyvi...@gmail.com on 24 Mar 2014 at 11:49

GoogleCodeExporter commented 9 years ago

Original comment by useboxnet on 26 Mar 2014 at 7:45

GoogleCodeExporter commented 9 years ago
Yes there is a problem of bytes vs string here.

The problematic lines in pyglet are variants of
    a = '%c%c%c%c' % color

In python 2.6 the semantic is : 'convert a 4-tuple of ints to a 4 bytes array'
In python 3.3 the same line does not convey the same semantics.

I couldn't think an equivalent expression with the same semantics in 2 and 3, 
or that can be automatically adjusted by 2to3.

But it can be done conditionally for each python:

def color_as_bytes(color):
    if sys.version.startswith('2'):
        return '%c%c%c%c' % color
    else:
        if len(color) != 4:
            raise TypeError("color is expected to have 4 components")
        return bytes(color)

I checked (by including that function in a script) that 2to3 does not modifies 
the function.

Also, I tested the patched pyglet and it gives the same image in 2 and 3.

The diff was obtained by
    cd working_copy
    hg diff pyglet/image/__init__.py >color_pack.diff

and can be applied to a pyglet's checkout by
    cd working_copy
    hg patch color_pack.diff --no-commit

Original comment by ccanepacc@gmail.com on 27 Mar 2014 at 5:26

Attachments:

GoogleCodeExporter commented 9 years ago
I noticed something similar in: 
https://code.google.com/p/pyglet/issues/detail?id=707

Your patch looks good, thanks a lot!

Original comment by useboxnet on 27 Mar 2014 at 6:34

GoogleCodeExporter commented 9 years ago
This issue was closed by revision 023af610e2eb.

Original comment by useboxnet on 29 Mar 2014 at 12:07