Patric Stout
19fdbac287
Fix: [Win32] now we are drawing on a tick, no longer use WM_PAINT
...
WM_PAINT hits when-ever Windows feels like, but always after we
marked the screen as dirty. In result, it was lagging behind,
giving a sub-60fps experience.
With the new draw-tick there is no longer a need to be driven by
WM_PAINT, so it is better anyway to drive the drawing ourself. As
an added bonus this makes the win32 driver more like the others.
2021-02-20 14:25:56 +01:00
Patric Stout
c4df0f95ae
Fix: during switching of game-mode, drawing could show closed windows that shouldn't be closed yet
...
The higher your refresh-rate, the more likely this is. Mostly you
notice this when creating a new game or when abandoning a game.
This is a bit of a hack to keep the old behaviour, as before this
patch the game was already freezing your mouse while it was changing
game-mode, and it does this too after this patch. Just now it
freezes too a few frames earlier, to prevent not drawing windows
people still expect to see.
2021-02-19 10:43:15 +01:00
Patric Stout
fa170b9ace
Feature: configurable refresh-rate and change default to 60fps
...
Most modern games run on 60 fps, and for good reason. This gives
a much smoother experiences.
As some people have monitors that can do 144Hz or even 240Hz, allow
people to configure the refresh rate. Of course, the higher you
set the value, the more time the game spends on drawing pixels
instead of simulating the game, which has an effect on simulation
speed.
The simulation will still always run at 33.33 fps, and is not
influences by this setting.
2021-02-19 10:43:15 +01:00
Patric Stout
eb9b1ad68d
Change: sleep till the next tick in the main loop
...
Sleep for 1ms (which is always (a lot) more than 1ms) is just
randomly guessing and hoping you hit your deadline, give or take.
But given we can calculate when our next frame is happening, we
can just sleep for that exact amount. As these values are often
a bit larger, it is also more likely the OS can schedule us back
in close to our requested target. This means it is more likely we
hit our deadlines, which makes the FPS a lot more stable.
2021-02-19 10:43:15 +01:00
Patric Stout
ae7a2b9f02
Change: allow video-drivers to miss deadlines slightly
...
Before, every next frame was calculated from the current time.
If for some reason the current frame was drifting a bit, the
next would too, and the next more, etc etc. This meant we rarely
hit the targets we would like, like 33.33fps.
Instead, allow video-drivers to drift slightly, and schedule the
next frame based on the time the last should have happened. Only
if the drift gets too much, that deadlines are missed for longer
period of times, schedule the next frame based on the current
time.
This makes the FPS a lot smoother, as sleeps aren't as exact as
you might think.
2021-02-19 10:43:15 +01:00
Patric Stout
c81c6e5eb7
Add: draw the screen at a steady pace, also during fast-forward
...
During fast-forward, the game was drawing as fast as it could. This
means that the fast-forward was limited also by how fast we could
draw, something that people in general don't expect.
To give an extreme case, if you are fully zoomed out on a busy
map, fast-forward would be mostly limited because of the time it
takes to draw the screen.
By decoupling the draw-tick and game-tick, we can keep the pace
of the draw-tick the same while speeding up the game-tick. To use
the extreme case as example again, if you are fully zoomed out
now, the screen only redraws 33.33 times per second, fast-forwarding
or not. This means fast-forward is much more likely to go at the
same speed, no matter what you are looking at.
2021-02-19 10:43:15 +01:00
Patric Stout
5bfa014505
Codechange: track _realtime_tick more accurate
...
_realtime_tick was reset every time the diff was calculated. This
means if it would trigger, say, every N.9 milliseconds, it would
after two iterations already drift a millisecond. This adds up
pretty quick.
2021-02-19 10:43:15 +01:00
Patric Stout
25f6851ca1
Codechange: switch all video drivers to std::chrono for keeping time
...
On all OSes we tested the std::chrono::steady_clock is of a high
enough resolution to do millisecond measurements, which is all we
need.
By accident, this fixes a Win32 driver bug, where we would never
hit our targets, as the resolution of the clock was too low to
do accurate millisecond measurements with (it was ~16ms resolution
instead).
2021-02-19 10:43:15 +01:00
milek7
751f595bb6
Fix: VkMapping declarations violated C++ ODR rule.
2021-02-14 23:19:50 +01:00
Michael Lutz
f175e38666
Add: [Win32] Automatic zoom level suggestion for Win32 video driver.
...
The zoom level suggestion is based on the DPI scaling set in Windows.
We use 150% scaling as the threshold for 2X zoom and 300% scaling
as the threshold for 4X zoom.
2021-02-14 14:16:40 +01:00
Patric Stout
1eceee915e
Codechange: [SDL2/Win32] Be consistent how 0bpp blitters are not allowed
...
Sometimes it returned an usererror(), sometimes Start() failed.
Now it always fails on Start(), so nothing else has to check again
what blitter is used.
AfterBlitterChange() can never change to a 0bpp, so it is sufficient
to guard this with an assert().
2021-01-17 19:57:36 +01:00
Patric Stout
49df9c4155
Codechange: [Win32] Use _local_palette for most operations
...
Other drivers do this too, and this makes the world a bit more
the same.
2021-01-17 19:57:36 +01:00
Patric Stout
881d17d8f1
Codechange: [Win32] use CSleep() instead of Sleep() like everywhere else
...
Functional it is identical. Just helps future-us when searching
for sleeps.
2021-01-17 19:57:36 +01:00
Patric Stout
689404a4a1
Codechange: [Win32] Use return-early in RegisterWndClass()
2021-01-17 19:57:36 +01:00
Michael Lutz
7415964a4d
Codechange: [Win32] Remove Windows 95 specific mouse tracking work-around.
2021-01-17 19:57:36 +01:00
Michael Lutz
fa60c1f8b9
Feature: Choose a sensible window size on a fresh OTTD config file. ( #8536 )
2021-01-14 21:53:06 +01:00
Charles Pigott
9b800a96ed
Codechange: Remove min/max functions in favour of STL variants ( #8502 )
2021-01-08 11:16:18 +01:00
Patric Stout
34051c10df
Doc: some comments for the win32 video driver ( #8409 )
...
Co-authored-by: Niels Martin Hansen <nielsm@indvikleren.dk>
2020-12-21 22:28:56 +01:00
Michael Lutz
37bc2f8064
Codechange: Use std::string in the driver and blitter selection code.
2020-05-21 20:02:34 +02:00
S. D. Cloudt
13cc8a0cee
Cleanup: Removed SVN headers
2019-11-10 17:59:20 +00:00
glx
9195f2337a
Codechange: use std::vector for _resolutions
2019-04-18 21:49:34 +02:00
Henry Wilson
7c8e7c6b6e
Codechange: Use null pointer literal instead of the NULL macro
2019-04-10 23:22:20 +02:00
Michael Lutz
967b27a2c1
Codechange: C++11 STL has a function for getting the number of CPU cores.
2019-04-06 11:27:39 +02:00
Michael Lutz
05bc2ed7cb
Codechange: Replace custom thread code with C++11 thread objects.
...
We assume a conforming C++11 compiler environment that has a valid <thread>-header.
Failure to run a real thread is handled gracefully.
2019-04-06 11:27:39 +02:00
Michael Lutz
05f4e73608
Codechange: Replace custom mutex code with C++11 mutex'es.
...
A conforming compiler with a valid <mutex>-header is expected.
Most parts of the code assume that locking a mutex will never fail unexpectedly,
which is generally true on all common platforms that don't just pretend to
be C++11. The use of condition variables in driver code is checked.
2019-04-06 11:27:39 +02:00
Charles Pigott
fe8c24e081
Codechange: Remove unnecessarily defined functions under MinGW
2019-01-17 21:55:15 +00:00
Charles Pigott
2d981a4b2c
Fix: A few minor compile warnings under MinGW
2019-01-17 21:55:15 +00:00
Niels Martin Hansen
2a868b9f3b
Feature: Framerate display window ( #6822 )
...
Frame rate and various game loop/graphics timing measurements and graphs. Accessible via the Help menu, and can print some stats in the console via the fps command.
2018-07-19 21:17:07 +02:00
Michael Lutz
dbfc417e65
Fix: [Win32] Garbage in OS window title if branch name was too long.
...
This was caused by a missing \0-character on reaching the buffer limit.
2018-06-27 22:16:43 +02:00
Patric Stout
aef69443e7
Remove: WinCE support
2018-04-29 15:32:16 +02:00
Michael Lutz
4bfd277017
Codechange: [Win32] Use OS function for mouse tracking if present.
2018-04-10 21:07:27 +02:00
michi_cc
c722cb26b8
(svn r27935) -Fix [FS#6629]: [Win32] Right mouse scrolling didn't work properly with the Windows 10 Fall Creators Update.
2017-12-09 19:21:45 +00:00
frosch
b4b98e5165
(svn r27893) -Codechange: Use fallthrough attribute. (LordAro)
2017-08-13 18:38:42 +00:00
frosch
b1fe837b8e
(svn r27775) -Fix [FS#6510]: Insufficient thread synchronisation when switching blitters. (JGR)
2017-03-11 13:05:54 +00:00
michi_cc
c83306391e
(svn r27673) -Add: [Win32] Thread names for windows debuggers.
2016-10-30 18:22:55 +00:00
frosch
352e528cda
(svn r27167) -Fix: [SDL, Windows] Right-mouse-button scrolling scrolled/jumped way to far, when OpenTTD lagged during mouse event processing.
2015-02-22 23:06:45 +00:00
planetmaker
3df230af62
(svn r26943) -Fix: [Win32] Silence a warning about comparison of signed and unsigned variables when using gcc
2014-09-30 21:10:32 +00:00
rubidium
b476086c39
(svn r26538) -Codechange: remove double accounting of the drivers
2014-04-28 21:06:51 +00:00
frosch
631e8b45fd
(svn r26522) -Add: A config-file-only setting to disable usage of 8bpp video modes.
...
-Remove: [win32] fullscreen_bpp setting, which is replaced by above setting.
-Change: Disable usage of 8bpp blitters and video modes by default. Many modern OS and hardware cause issues with those.
2014-04-27 12:15:14 +00:00
rubidium
0463dbdc9e
(svn r26482) -Codechange: add an include that allows us to undefine/redefine "unsafe" functions to prevent them from being used, and thus having to care about certain aspects of their return values
2014-04-23 20:13:33 +00:00
michi_cc
e15446bc58
(svn r26367) -Fix: [Win32] Use a separate event to indicate that the drawing thread has finished initialising, preventing potential deadlocks.
2014-02-23 16:08:50 +00:00
fonsinchen
d8eda06a5a
(svn r26366) -Fix: Protect the windows video driver from concurrent access (frosch123)
2014-02-23 14:16:36 +00:00
fonsinchen
b4a015a4bd
(svn r26365) -Fix [FS#5867]: Don't draw the cursor when its sprite isn't ready and set _screen.dst_ptr immediately when the buffer changes (frosch123)
2014-02-23 14:15:55 +00:00
frosch
aaa6d0f9ae
(svn r26360) -Revert (r25550) / Fix [FS#5922]: ClientSizeChanged is only called via WndProcGdi which already has the mutex. The issue which r25550 tried to fix still exists as FS#5867.
2014-02-22 14:26:07 +00:00
rubidium
a942619911
(svn r26247) -Fix [FS#5854, FS#5855]: Possible out of bounds reads with the sse blitters (MJP)
2014-01-13 17:54:24 +00:00
rubidium
fb05674cb7
(svn r26211) -Add: specialised non-animated SS2 blitter (MJP)
...
With 32bpp base set about 30% faster than 32bpp-optimized, or about 10% for 8bpp base sets in the Draw function. Respectively about 5 and 1% of total run time
2014-01-02 23:12:32 +00:00
rubidium
2618d960e3
(svn r26209) -Codechange: remove some template magic and simplify some code
2014-01-02 22:41:58 +00:00
rubidium
3b9f92e14c
(svn r26009) -Fix: warning about conditional expression with enumeral with non-enumeral type
2013-11-16 10:05:57 +00:00
michi_cc
0883cf76e3
(svn r25684) -Change: [Win32] Draw the composition string ourselves if possible.
2013-08-05 20:37:25 +00:00
michi_cc
cbdfd31a3c
(svn r25682) -Change: [Win32] Position the IME candidate window at the caret position.
2013-08-05 20:37:18 +00:00
michi_cc
da09fd3077
(svn r25681) -Change: [Win32] Position the IME composition window at the caret position.
2013-08-05 20:37:14 +00:00
michi_cc
21126aec62
(svn r25680) -Codechange: [Win32] Cancel the current IME composition when the input focus changes.
2013-08-05 20:37:11 +00:00
michi_cc
7422120014
(svn r25679) -Codechange: [Win32] Get the result string of an IME input directly without a trip through the window messaging system.
2013-08-05 20:37:06 +00:00
michi_cc
63332afcf0
(svn r25675) -Fix: [Win32] Handle DBCS characters correctly in the non-Unicode build.
2013-08-05 20:36:51 +00:00
michi_cc
e37968aadd
(svn r25673) -Fix: [Win32] Use the right code page for converting ANSI strings into UTF-8 for non-Unicode builds. And don't crap out on DBCS code pages either.
2013-08-05 20:36:43 +00:00
michi_cc
fdc436b531
(svn r25672) -Fix: [Win32] Handle Unicode characters from outside the BMP correctly.
2013-08-05 20:36:40 +00:00
michi_cc
019984a14f
(svn r25671) -Codechange: Pass character and key code separately to the keyboard handler.
2013-08-05 20:36:36 +00:00
michi_cc
923eb009e8
(svn r25667) -Fix: [Win32] Only forward key presses to the IME system if an edit box has the input focus.
2013-08-05 20:36:20 +00:00
rubidium
d9065fbfbe
(svn r25550) -Fix [FS#5571]: [Windows] Race condition between two drawing threads could crash OpenTTD
2013-07-01 19:48:52 +00:00
planetmaker
c24374f99c
(svn r24900) -Fix [FS#5389]: Comments with typos (most fixes supplied by Eagle_rainbow)
2013-01-08 22:46:42 +00:00
michi_cc
02f39ab1ee
(svn r24781) -Fix (r24762): [Win32] MinGW compiler warning.
2012-12-03 22:08:00 +00:00
michi_cc
e67c717c2f
(svn r24762) -Fix [FS#5359]: [Win32] Don't crash when switching to an unsupported fullscreen display mode (like 8 bpp modes in Windows 8).
2012-11-25 12:14:13 +00:00
glx
ad48f766f7
(svn r24394) -Fix (r24188): changing resolution didn't resize the window
2012-07-10 17:47:03 +00:00
truebrain
353fd97de6
(svn r24189) -Fix: when going to fullscreen and back, restore to the resolution you were, not to the fullscreen resolution (Windows only)
2012-04-30 16:49:26 +00:00
truebrain
39912b7bde
(svn r24188) -Fix-ish [FS#5151] (r1): when changing the basics of a window (fullscreen, 8bpp/32bpp), and a window already exists, it was forced out of maximize mode, and its resolution/position was reset, often causing unwanted side-effects. As a "bonus", a WC_SIZE was triggered, and if the system was going from 8bpp to 32pp, this caused a forced window update in a limbo-state of the blitter (not fully 32bpp just yet, but for sure no longer 8bpp); this could cause random memory access which could lead to ACCESS_VIOLATIONS
2012-04-30 16:48:47 +00:00
michi_cc
52175a4260
(svn r23749) -Fix: [Win32] Work around a possible deadlock when initialising threaded drawing.
2012-01-04 00:45:36 +00:00
rubidium
fd559171b4
(svn r23527) -Codechange: unify colo(u)r as far as it goes
2011-12-15 22:02:00 +00:00
michi_cc
7099faba28
(svn r23482) -Change: [Win32] Move re-painting the window and doing palette animation into a separate thread.
2011-12-10 16:54:46 +00:00
rubidium
61625e53c9
(svn r23448) -Fix: keep a local copy of the palette in the 32bpp animated blitter so changes of the palette data during the game don't influence drawing (with SDL)
2011-12-08 19:37:33 +00:00
rubidium
2ccbd2a6f5
(svn r23446) -Codechange: move _cur_palette and it's related first/count dirty variables into a single structure
2011-12-08 18:13:29 +00:00
rubidium
6e31c2f068
(svn r23241) -Codechange: make the decision when to go to the custom drawn cursor more prominently during the initialisation of OpenTTD
2011-11-17 21:09:08 +00:00
michi_cc
6dbb050a32
(svn r22999) -Codechange: Allow changing the blitter during the running game.
2011-10-04 21:35:40 +00:00
rubidium
4d5dbf5170
(svn r22410) -Document: some more bits ;)
2011-05-02 16:14:23 +00:00
rubidium
3e5924b10f
(svn r22149) -Fix [FS#4521]: Windows video driver crashed when it couldn't go to full screen at the resolution of the configuration file when starting OpenTTD
2011-02-26 19:13:58 +00:00
alberth
31386c42a7
(svn r22145) -Codechange: Do explicit test for non-bool values.
2011-02-25 22:04:38 +00:00
glx
1b2ef66416
(svn r22081) -Fix [FS#4489]: if fullscreen fails with current resolution, use desktop resolution
2011-02-14 20:16:36 +00:00
rubidium
1d0d7635e0
(svn r22021) -Fix (r22019): ofcourse make doesn't notice files are gone, so it doesn't recompile everything that needs to be recompiled...
2011-02-07 22:49:38 +00:00
rubidium
ab44c91778
(svn r21252) -Codechange: introduce a constant for the number of milliseconds per game tick and use it
2010-11-19 10:35:59 +00:00
rubidium
e356cb9405
(svn r20281) -Codechange: unify case scope closure + break coding style
2010-08-01 18:53:30 +00:00
terkhen
88ca183191
(svn r20239) -Doc: Give a common name to all fall throughs (FALL THROUGH).
2010-07-29 14:26:28 +00:00
alberth
be6c058424
(svn r20211) -Codechange: Indented code should have curly braces around it.
2010-07-24 10:14:39 +00:00
rubidium
b8487afe54
(svn r20192) -Cleanup: bye bye variables.h, bye bye VARDEF... you won't be missed :)
2010-07-19 17:28:27 +00:00
glx
4796be85a5
(svn r20084) -Fix [FS#3919] (r7157): don't try to handle mouse events when the cursor ha left the window
2010-07-06 21:10:47 +00:00
peter1138
abb147d974
(svn r18709) -Fix (r10227,FS#3464): Animation buffer for 32bpp-anim blitter was only validated during sprite blitting, other drawing operations didn't check it. Initial startup and window resize could therefore lead to crash.
2010-01-04 02:32:36 +00:00
rubidium
88a7e23897
(svn r18031) -Codechange: since basically r7157 adding up 'all' mouse movement isn't needed anymore because after each even that movement is handled and the counter is reset. As such simply assigning instead of adding works.
2009-11-09 16:07:03 +00:00
rubidium
cbf4b80b86
(svn r18030) -Fix: screen jumped a bit for at least SDL and Allegro when right-click-dragging
2009-11-09 16:05:24 +00:00
rubidium
bc8e66c202
(svn r17336) -Codechange: move some os specific files into src/os/
2009-08-31 22:38:37 +00:00
rubidium
7fbc33dae1
(svn r17248) -Fix: add GPL license notice where appropriate
2009-08-21 20:21:05 +00:00
alberth
9b070b5405
(svn r16677) -Codechange: Dimension width and height are unsigned.
2009-06-27 20:53:45 +00:00
rubidium
2664f2a2d9
(svn r16242) -Codechange: rework pausing
...
-Fix [FS#2864]: autopause and manual pausing conflict with eachother
-Fix: new game + pause on new game + autopause make the game not unpause on the first join
2009-05-06 15:06:57 +00:00
rubidium
b25a4f8231
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
2009-03-15 00:32:18 +00:00
glx
1692ce8312
(svn r15710) -Fix (r15706): for non MSVC io.h needs to be included before defining unlink. Also remove redundant tchar.h includes as it is already in stdafx.h.
2009-03-14 15:42:53 +00:00
rubidium
11da45ee55
(svn r14949) -Cleanup: pointer coding style
2009-01-10 00:31:47 +00:00
rubidium
cda853872a
(svn r14944) -Cleanup: add spaces around some operators
2009-01-09 22:56:28 +00:00
rubidium
86f1a98ac8
(svn r14397) -Fix: possible buffer overrun, wrong parameter type passed to printf and && where || is meant. Found by MSVC's code analysis (Darkvater)
2008-09-24 23:25:24 +00:00
glx
fe5cc9c839
(svn r14363) -Fix [FS#2206]: some keypress combinations could be handled twice
2008-09-20 16:07:56 +00:00
rubidium
3b7ffcf759
(svn r14260) -Fix [FS#2277]: merge keycode for "normal" 0-9 keys and keypad 0-9 keys so people don't get confused that the keypad doesn't work as expected.
2008-09-07 11:55:28 +00:00
glx
fbd2db34e6
(svn r14094) -Revert (r14071): caused more problems than it solved
2008-08-17 15:03:54 +00:00
rubidium
20ee6f1158
(svn r14071) -Fix [FS#2057]: the screen wouldn't be centered on Windows multimonitor systems if the first monitor is right of the second one.
2008-08-13 19:09:27 +00:00
rubidium
d0c1a989a4
(svn r14047) -Codechange: move chatmessage handling to the network directory as that's the only case chat messages are used. Furthermore remove any trace of chatmessages when compiling without network support.
2008-08-11 22:45:11 +00:00