google-code-export / pyglet

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

displaying windows on multiple screens #557

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. install homebrew + python (64 bits) + pyglet (lateste from hg) on MacOsX 
with Lion + 2 screens
2. run the minimal example below (should display 1 window on each screen 
showing a text)
3. see it happen on only one screen

Paste in the traceback or error message:

pyglet 1.1 with Python 2.5: Paste in the output of `python -m pyglet.info`
Other: Paste in the output of tools/gl_info.py (included in source distro):

$ python tools/gl_info.py 
Platform instance is <pyglet.window.Platform object at 0x10159a910>
Display instance is <pyglet.canvas.cocoa.CocoaDisplay object at 0x1058130d0>
Screens:
  CocoaScreen(x=0, y=0, width=1920, height=1200)
  CocoaScreen(x=0, y=-1200, width=1920, height=1200)
Creating default context...
GL attributes:
double_buffer=1 stereo=0 buffer_size=32 aux_buffers=0 sample_buffers=0
samples=0 red_size=0 green_size=0 blue_size=0 alpha_size=8
depth_size=24 stencil_size=0 accum_red_size=0 accum_green_size=0
accum_blue_size=0 accum_alpha_size=0 major_version=None
minor_version=None forward_compatible=None debug=None
GL version: 2.1 NVIDIA-7.18.11
GL vendor: NVIDIA Corporation
GL renderer: NVIDIA GeForce 9400M OpenGL Engine
GL extensions:
  GL_ARB_texture_compression GL_ARB_instanced_arrays
  GL_APPLE_element_array GL_APPLE_aux_depth_stencil
  GL_NV_fragment_program_option GL_EXT_blend_color GL_EXT_blend_subtract
  GL_EXT_stencil_wrap GL_NV_point_sprite GL_EXT_texture_compression_s3tc
  GL_APPLE_transform_hint GL_ATI_separate_stencil
  GL_NV_vertex_program2_option GL_ARB_depth_texture GL_ARB_vertex_blend
  GL_APPLE_texture_range GL_EXT_framebuffer_sRGB GL_APPLE_pixel_buffer
  GL_EXT_blend_func_separate GL_APPLE_object_purgeable GL_APPLE_fence
  GL_APPLE_vertex_program_evaluators GL_ARB_occlusion_query
  GL_NV_texgen_reflection GL_ARB_transpose_matrix
  GL_ARB_provoking_vertex GL_EXT_gpu_shader4 GL_ARB_depth_buffer_float
  GL_ARB_texture_border_clamp GL_EXT_fog_coord GL_NV_depth_clamp
  GL_ARB_texture_cube_map GL_ARB_half_float_vertex
  GL_EXT_blend_equation_separate GL_EXT_provoking_vertex
  GL_ARB_point_parameters GL_ATI_texture_env_combine3
  GL_EXT_multi_draw_arrays GL_ARB_shader_texture_lod
  GL_EXT_texture_compression_dxt1 GL_EXT_transform_feedback
  GL_APPLE_vertex_point_size GL_ARB_vertex_program
  GL_ARB_texture_env_dot3 GL_EXT_bgra GL_SGIS_texture_edge_clamp
  GL_ARB_framebuffer_sRGB GL_ARB_texture_env_combine
  GL_ARB_vertex_buffer_object GL_EXT_shadow_funcs GL_EXT_texture_env_add
  GL_EXT_packed_depth_stencil GL_EXT_texture_mirror_clamp
  GL_EXT_timer_query GL_EXT_vertex_array_bgra
  GL_NV_multisample_filter_hint GL_APPLE_float_pixels
  GL_EXT_geometry_shader4 GL_ARB_point_sprite GL_EXT_framebuffer_object
  GL_ARB_vertex_shader GL_ARB_half_float_pixel GL_EXT_bindable_uniform
  GL_ARB_vertex_array_bgra GL_APPLE_vertex_array_range
  GL_ARB_draw_buffers GL_ARB_fragment_program_shadow GL_EXT_packed_float
  GL_ATI_texture_mirror_once GL_IBM_rasterpos_clip GL_EXT_texture_sRGB
  GL_EXT_stencil_two_side GL_APPLE_row_bytes GL_ARB_draw_instanced
  GL_EXT_clip_volume_hint GL_EXT_texture_array GL_NV_fragment_program2
  GL_APPLE_vertex_array_object GL_ARB_texture_rg GL_ARB_texture_float
  GL_APPLE_flush_buffer_range GL_ARB_depth_clamp GL_ARB_fragment_shader
  GL_ATI_texture_float GL_ARB_imaging GL_EXT_draw_buffers2
  GL_APPLE_client_storage GL_ARB_fragment_program GL_ARB_shader_objects
  GL_ARB_framebuffer_object GL_ARB_shading_language_100
  GL_APPLE_ycbcr_422 GL_NV_blend_square GL_EXT_secondary_color
  GL_ARB_texture_non_power_of_two GL_APPLE_rgb_422
  GL_EXT_texture_sRGB_decode GL_EXT_texture_lod_bias GL_NV_fog_distance
  GL_ARB_seamless_cube_map GL_EXT_abgr GL_ARB_texture_rectangle
  GL_ARB_multisample GL_SGIS_generate_mipmap GL_NV_conditional_render
  GL_EXT_texture_filter_anisotropic GL_NV_light_max_exponent
  GL_EXT_blend_minmax GL_EXT_framebuffer_blit
  GL_ARB_texture_env_crossbar GL_SGIS_texture_lod GL_NV_vertex_program3
  GL_EXT_texture_rectangle GL_ARB_sync GL_ARB_color_buffer_float
  GL_ARB_window_pos GL_APPLE_packed_pixels GL_ARB_shadow
  GL_ARB_texture_mirrored_repeat GL_EXT_texture_integer
  GL_EXT_gpu_program_parameters GL_ARB_texture_compression_rgtc
  GL_EXT_framebuffer_multisample GL_EXT_texture_shared_exponent
  GL_ARB_multitexture GL_ARB_draw_elements_base_vertex
  GL_EXT_depth_bounds_test GL_EXT_draw_range_elements
  GL_APPLE_specular_vector GL_ARB_texture_env_add GL_APPLE_flush_render
  GL_EXT_rescale_normal GL_ARB_pixel_buffer_object
GLU version: 1.3 MacOSX
GLU extensions:

Context is CocoaContext()

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

uname -a
Darwin myhost 11.3.0 Darwin Kernel Version 11.3.0: Thu Jan 12 18:47:41 PST 
2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64

Original issue reported on code.google.com by laurent.perrinet on 2 Mar 2012 at 12:27

Attachments:

GoogleCodeExporter commented 9 years ago
I applied what might be a solution to the repository.  Could you try it out and 
tell me if it is working now?  I don't have a multiple monitor setup to do any 
direct testing.

Original comment by evil.phillip@gmail.com on 17 Mar 2012 at 6:08

GoogleCodeExporter commented 9 years ago
I could test it on my 2 monitor setup and got the same problem: both windows 
appear superimposed on the main screen.

It is perhaps a 'feature' of MacOS X Lion (I'm running latest 10.7.3)?

more info :
$ cat infos_ecrans.py 
import pyglet
pyglet.options['darwin_cocoa'] = True

platform = pyglet.window.get_platform()
print "platform" , platform
display  = platform.get_default_display()
print "display" , display
screens  = display.get_screens()
print "screens" , screens
for i,screen in enumerate(screens):
    print 'Screen %d: %dx%d at (%d,%d)' % (i,screen.width, screen.height, screen.x, screen.y)

config = pyglet.gl.Config(major_version=3, minor_version=2,
        forward_compatible = True)
window = pyglet.window.Window(config=config, visible=False)
print('OpenGL version:', window.context.get_info().get_version())
print('OpenGL 3.2 support:', window.context.get_info().have_version(3,
    2))

gives :

$ python infos_ecrans.py 
platform <pyglet.window.Platform object at 0x2ca830>
display <pyglet.canvas.cocoa.CocoaDisplay object at 0x407e110>
screens [CocoaScreen(x=0, y=0, width=1920, height=1200), CocoaScreen(x=0, 
y=-1200, width=1920, height=1200)]
Screen 0: 1920x1200 at (0,0)
Screen 1: 1920x1200 at (0,-1200)
('OpenGL version:', '2.1 NVIDIA-7.18.11')
('OpenGL 3.2 support:', False)

(my main monitor is an external monitor placed above the screen of my laptop, 
hence the y = -1200 for the second screen I guess; changing the disposition of 
monitors did not help)

cheers

Original comment by laurent.perrinet on 21 Mar 2012 at 8:56

GoogleCodeExporter commented 9 years ago
Ok, according to this thread:

http://www.cocoabuilder.com/archive/cocoa/280356-centering-window-on-the-current
-screen-not-the-main-screen.html

I think that the problem is that I'm sending the "center" message to the 
NSWindows immediately after they're created, but apparently "center" always 
positions the window on the main screen rather than the screen that the window 
is in.  So I think it can be fixed by just using some manual centering code.  
I'll look at it some more later today.

Original comment by evil.phillip@gmail.com on 21 Mar 2012 at 12:22

GoogleCodeExporter commented 9 years ago
Pushed a new change so that windows should be centered on their screen, rather 
than on the main display.
This still may not totally fix your problem, because multiple windows are set 
to cascade upon open, but please let me know if you are at least able to get a 
single window to open on your desired screen.

Original comment by evil.phillip@gmail.com on 21 Mar 2012 at 10:19

GoogleCodeExporter commented 9 years ago
Thanks for your efforts. I indeed had a change. Before, the screens were:

$ python particle.py 
platform <pyglet.window.Platform object at 0x4956f30>
display <pyglet.canvas.cocoa.CocoaDisplay object at 0x4c14270>
screens [CocoaScreen(x=0, y=0, width=1920, height=1200), CocoaScreen(x=0, 
y=1200, width=1920, height=1200)]
Screen 0: 1920x1200 at (0,0)
Screen 1: 1920x1200 at (0,1200)

and now they show:
$ python particle.py 
platform <pyglet.window.Platform object at 0x49501b0>
display <pyglet.canvas.cocoa.CocoaDisplay object at 0x7955970>
screens [CocoaScreen(x=0, y=0, width=1920, height=1200), CocoaScreen(x=0, 
y=-1200, width=1920, height=1200)]
Screen 0: 1920x1200 at (0,0)
Screen 1: 1920x1200 at (0,-1200)

however, both windows appear overlaid on one screen... perhaps someone with a 
similar configuration (Mac OSX Lion + Enthought Python Distribution -- Version: 
7.2-2 (32-bit) + 2 displays) could try out?

cheers,
Laurent

Original comment by laurent.perrinet on 26 Mar 2012 at 8:54