FULLSCREEN and DOUBLEBUF
Paul St George
email at paulstgeorge.com
Sun Jun 10 07:15:35 EDT 2018
To recap: this thread started with a question. How do I know whether
DOUBLEBUF has been set with:
screen = pygame.display.set_mode((720,480), pygame.DOUBLEBUF |
pygame.FULLSCREEN)
On 09/06/2018 22:04, Mark Lawrence wrote:
> On 09/06/18 20:31, Paul St George wrote:
>>
>> print pygame.display.get_surface()
>> gives
>> <Surface(720x480x32 SW)>
>>
>> and
>> print screen.get_flags()
>> gives
>> -2147483648
>>
>> The lists of flags at
>> <https://www.pygame.org/docs/ref/surface.html#pygame.Surface.get_flags>
>> and
>> <http://www.rpi.edu/dept/acm/packages/SDL/1.2.6/include/SDL/SDL_video.h>
>>
>> has nothing remotely like -2147483648. I would expect something more
>> like 0x40000000
>>
>> Am I using the wrong code to determine whether I have successfully
>> set DOUBLEBUF with
>>
>> screen = pygame.display.set_mode((720,480), pygame.FULLSCREEN |
>> pygame.DOUBLEBUF)
>>
>> AND
>>
>> What does -2147483648 tell me? Does this number need converting?
>>>
>
> From the interactive interpreter:-
>
> >>> hex(-2147483648)
> '-0x80000000'
> >>> hex(pygame.FULLSCREEN)
> '-0x80000000'
> >>> hex(pygame.DOUBLEBUF)
> '0x40000000'
>
Thanks go to Mark Lawrence and Richard Damon.
Using
print hex(screen.get_flags())
I can see that the order of the two flags does not make a difference.
screen = pygame.display.set_mode((720,480), pygame.DOUBLEBUF | pygame.FULLSCREEN)
screen = pygame.display.set_mode((720,480), pygame.FULLSCREEN | pygame.DOUBLEBUF)
both report the same
print hex(screen.get_flags())
'-0x80000000'
BUT
omitting DOUBLEBUF from the code
screen = pygame.display.set_mode((720,480), pygame.FULLSCREEN)
also makes no difference to the report
print hex(screen.get_flags())
'-0x80000000'
AND
with with only DOUBLEBUF in the code
screen = pygame.display.set_mode((720,480), pygame.DOUBLEBUF)
does not give the expected and desired '-0x40000000'
instead, the report is
print hex(screen.get_flags())
‘0x0’
0x0 (SWSURFACE) is consistent with
print pygame.display.get_surface()
‘<Surface(720x480x32 SW)>’
It seems that DOUBLEBUF is *not* being set. I am guessing this is because the arguments passed by pygame.display.set_mode() are only requests. The actual display will depend on the system, and what is available/possible.
More guessing leads me to wonder whether DOUBLEBUF is only available when HWSURFACE is being used so I tried three flags with:
flags = pygame.FULLSCREEN | pygame.DOUBLEBUF | pygame.HWSURFACE
screen = pygame.display.set_mode((0, 0), flags)
But no change (screen is still SW and DOUBLEBUF is not set):
print pygame.display.get_surface()
<Surface(720x480x32 SW)>
print hex(screen.get_flags())
-0x80000000
QUESTIONS
Can anyone find an error in any of this? I hope so.
Is DOUBLEBUF dependent on HWSURFACE?
If so, how does one force the change to a Hardware surface? ‘set_mode’ is not doing it.
More information about the Python-list
mailing list