Hello community,
I would like to ask for your assistance. Attached below please find a "small" thinBasic program that's supposed to show if "image stutter" is seen on your computers when rendering moving 3D objects in OpenGL.
Terminology1. By "image stutter" I mean very short momentary stop-overs of the 3D ball as it bounces horizontally in the window. There may be as few as just 1 or 2 such stopovers per the entire session; alternatively, heavy stuttering may be observed practically in every mode the program runs in. Once stopped for a fraction of a second, the balls "jumps" a little farther forward than it normally should or it may even bounce back a little if image stutter is heavy.
2. Similar to image stutter, another artifact may be observed especially if vertical synchronization is switched off:
This artifact is called "image tear" and it would affect a part of the ball that didn't have a chance to be drawn before the monitor started to draw another frame. This usually happens at very high FPS rates but it shouldn't happen with VSYNC set to 60 or 30 FPS. A visible difference between stutter and tear is that when the ball stutters, its entire image freezes momentarily while image tear would let the torn parts of the ball go on moving more or less smoothly.
Program Control1. Those who have nVidia video cards and drivers, please open up your nVidia Control Center and make sure that your driver is controlled by this test application otherwise you won't be able to toggle its vertical synchronization settings:
A similar feature should be selected in ATi Catalyst Control Center if you happen to own an ATi Radeon video card.
2. The program starts with VSYNC set to none. The VSYNC settings are shown in the window title. You'll be able to toggle VSYNC between None, 60FPS and 30FPS by pressing 0, 1, and 2 number keys, respectively.
ObjectivesThe main objective is to test the program for image stutter in normal and maximized windowed modes under Classic, Basic, and Aero themes. If under XP only, Classic and any other theme should be tried.
Tactics1. Set your desktop theme to Classic.
2. The program starts at the center of the screen. Here you probably won't see any stutter. Please drag the window to the top right then bottom left corner of the screen and let it stay there while you're watching the ball as it makes two or three successive bounces off the window borders. If the ball stutters at least once in any window position, image stuttering is considered to be present.
3. Press 1 to set VSYNC to 60FPS and repeat as described in Step 2.
4. Press 2 to set VSYNC to 30FPS and repeat as described in Step 2.
5. Maximize your window and see if image stutter occurs under VSYNC=None, then 60FPS, then 30FPS.
6. Set your desktop theme to Basic where available and repeat Steps 2 to 5. Set any theme other than Classic if you're under XP.
7. Set your desktop theme to any Aero theme and repeat Steps 2 to 5 (not applicable to XP).
PrognosisPlease inform us of your results in this thread. Most probably, ball movement will be:
-- absolutely smooth and stutter-less under Windows XP;
-- heavily stuttering in Classic and Basic themes but only occasionally stuttering in an Aero theme under Windows Vista; and
-- heavily stuttering in Classic, occasionally stuttering in Basic, and practically not stuttering in an Aero theme under Windows 7.
Reports for Windows 8 and 8.1 as well as other video cards would also be highly appreciated. Thanks a lot in advance.
Awaiting your soonest results,
P.S. Oh, and please have your browsers closed while running the tests. Modern browsers normally use OpenGL to render their content even if there are no pictures in view. Having OpenGL run several applications at once while benchmarking wouldn't seem very practical.
P.P.S. And oh one more time. If anybody wants the TB script I used, here it goes:
Uses "UI"
Uses "TBGL"
Function TBMain()
Local hWnd As DWord
Local x, k, diffx As Single
Local dir As Long
hWnd = TBGL_CreateWindowEx("-=:: Image Stutter Test ::=- VSYNC=None", 620, 500, 32, %TBGL_WS_CLOSEBOX Or %TBGL_WS_MINIMIZEBOX Or %TBGL_WS_MAXIMIZEBOX Or %TBGL_WS_DONTKEEPASPECTRATIO)
TBGL_ShowWindow
TBGL_ResetKeyState
TBGL_UseLightSource %GL_LIGHT0, %TRUE
TBGL_UseLighting %TRUE
dir = 1
x = 0
diffx = .02
TBGL_UseVSync 0
While TBGL_IsWindow(hWnd)
TBGL_ClearFrame
TBGL_Camera 1.5,2,4,1.5,0,0
TBGL_Color 0,200,200
If x > 3 Then dir = -1
If x < 0 Then dir = 1
k = TBGL_GetFrameRate / 60
x = x + diffx / k * dir
TBGL_PushMatrix
TBGL_Translate x, 0, 0
TBGL_Sphere 0.75
TBGL_PopMatrix
TBGL_DrawFrame
If TBGL_GetWindowKeyState(hWnd, %VK_ESCAPE) Then Exit While
If TBGL_GetAsyncKeyState(%VK_0) Then
TBGL_UseVSync 0
Win_SetTitle(hWnd, "-=:: Image Stutter Test ::=- VSYNC=None")
ElseIf TBGL_GetAsyncKeyState(%VK_1) Then
TBGL_UseVSync 1
Win_SetTitle(hWnd, "-=:: Image Stutter Test ::=- VSYNC=60FPS")
ElseIf TBGL_GetAsyncKeyState(%VK_2) Then
TBGL_UseVSync 2
Win_SetTitle(hWnd, "-=:: Image Stutter Test ::=- VSYNC=30FPS")
End If
Wend
TBGL_DestroyWindow
End Function
.