Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

06.11.2004, 21:12

was ist daran falsch?

nabend,

ich dreh bald völlig ab

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    //MessageLoop
    while(1){   
        //wenn eine nachricht eingegangen ist; diese verarbeiten
        if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){           
            TranslateMessage(&msg);
            DispatchMessage(&msg);
            if (msg.message == WM_QUIT){
                break;
            }
        }else{
                
            //wenn das fenster minimiert wird oder den fokus sonst wie verliert,
            //nicht wieter machen
            if (GetFocus() != hwndMain){
                Sleep(10);
                continue;
            }



            switch(gmeStatus){  
        
                //input & rendering zeugs
                
            }   
        
            QueryPerformanceCounter((LARGE_INTEGER*)&nF);
            elapsed = (nF - lF);    
            GAME::fps = (float)(((float)freq/(float)elapsed));              
            lF = nF;                            
        }
            
    }


kann mir jemand erklären, wieso ich mit diesem code bei eingeschaltetem
vsync sehr periodisch totalausfälle hab?
hier mal ein exzerpt aus nem log file (ich log normalerweise nicht,
also liegts auch nicht irgendwelchen virenscanner-geschichten die
ich in diversen foren als antwort bei ähnlichen probs gelesen hab)

framerate vergangene zeit
60.008129 e903
18.372469 2f910
331.623596 2a2a
13160.091797 110 <-------------
109.630486 7f8b
59.979977 e91f
60.055450 e8d4
60.018192 e8f9
...
60.012154 e8ff
60.022217 e8f5
60.019199 e8f8
18.582779 2f073
3836.596924 3a5
15040.105469 ee <-------------------
79.968391 aeda
60.018192 e8f9
60.020206 e8f7
59.983997 e91b
60.028255 e8ef
60.031277 e8ec
60.012154 e8ff
...
60.021210 e8f6
60.005112 e906
60.035305 e8e8
59.998074 e90d
60.008129 e903
22.796165 26560 <----------------------
226.941299 3d9d
234.770447 3b8f
70.908760 c531
60.021210 e8f6
60.007126 e904
60.006119 e905
60.033291 e8ea
60.023224 e8f4
...
60.026245 e8f1
60.026245 e8f1
60.016178 e8fb
60.022217 e8f5
60.011150 e900
17.830416 31033 <-----------------
221.506500 3f20
220.456055 3f6d
234.140823 3bb8
71.931854 c263
60.023224 e8f4
60.009136 e902
60.028255 e8ef
60.001091 e90a
60.044369 e8df
60.021210 e8f6
60.015175 e8fc
60.017185 e8fa
60.022217 e8f5
60.012154 e8ff
59.158211 ec5c

(da wo ... steht hab ich 60.00 fps rausgeschnitten aus platzgründen)

ich berechne die fps um die bewegungen etsprechend anzupassen,
und bei solchen schwankungen könnt ihr euch ja vorstellen wie das
dann immer ruckelt. der fehler muss aber irgendwo beim berrechnen der
framerate liegen, denn wenn ich die fps auf 60 setze, der soll-wert,
dann merkt man beim spielen nix, also geh ich davon aus das
die eigentliche framerate mehr oder weniger konstant 60 ist
im gegensatz zu meiner errechneten

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

2

07.11.2004, 00:30

Was ist denn gmeStatus ? Wenn das immer mal für einen Frame falsch ist, erklärt das die super schnellen Frames.

Ab und zu super langsame Frames zu haben, ist leider normal und da gibts 100e Gründe für, z.B. Nachladen von Dingen von Platte, Neuberechnungen die nur ab und zu nötig sind, Windows selber, Garbadge Collection auf der GraKa, schlecht konvergierende und nicht abgebrochene Iterationen, LoD wechsel, Auslesen von Frame/Z Buffer, Überläufe etc etc. Das ist sicher eines der Hauptprobleme beim Spieleentwickeln.
"Games are algorithmic entertainment."

3

07.11.2004, 01:38

Quellcode

1
2
3
4
switch(gmeStatus){
...
default:return -5;
}


würde da irgendwie mal ein nicht definierter status reinrutschen, würde das programm beenden....

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

4

07.11.2004, 01:44

Gib doch den Status auch mit in die log aus. Und vielleicht auch, ob das Rendern durchlaufen wird. Sollte dann z.B. bei den schnellen Frames immer ein bestimmter Status auftauchen, der sonst nie auftaucht, wäre das schon ein starker Hinweis.
"Games are algorithmic entertainment."

5

07.11.2004, 01:50

hab ich schon gemacht. ist status-unabhängig.

ich hab mitlerweile mal ein anderes programm mit
der gleichen engine geschrieben, das nix macht auser die framerat zu
berechnen und auszugeben...gleiches problem.

ich kapiers nicht.

6

07.11.2004, 02:05

solche logs können doch nicht normal sein.
hat / hatte jemand mal ein ähnliches problem?
704.912354 0 0 0 0
7380.505371 0 0 0 0
29340.533203 0 0 0 0
40676.648438 0 0 0 0
153.188049 0 0 0 0
60.010143 0 0 0 0
60.024231 0 0 0 0
59.958878 0 0 0 0
60.078632 0 0 0 0
60.021210 0 0 0 0
60.023224 0 0 0 0
60.007126 0 0 0 0
60.025238 0 0 0 0
60.022217 0 0 0 0
59.988018 0 0 0 0
60.023224 0 0 0 0
60.042355 0 0 0 0
60.025238 0 0 0 0
60.012154 0 0 0 0
60.022217 0 0 0 0
60.013161 0 0 0 0
60.028255 0 0 0 0
60.013161 0 0 0 0
60.015175 0 0 0 0
60.027252 0 0 0 0
60.016178 0 0 0 0
60.015175 0 0 0 0
60.023224 0 0 0 0
60.016178 0 0 0 0
60.018192 0 0 0 0
60.018192 0 0 0 0
60.021210 0 0 0 0
60.021210 0 0 0 0
60.002094 0 0 0 0
60.033291 0 0 0 0
60.022217 0 0 0 0
60.020206 0 0 0 0
60.014168 0 0 0 0
60.017185 0 0 0 0
60.025238 0 0 0 0
60.011150 0 0 0 0
59.898678 0 0 0 0
60.083675 0 0 0 0
60.079639 0 0 0 0
60.019199 0 0 0 0
59.954861 0 0 0 0
60.029263 0 0 0 0
60.017185 0 0 0 0
60.007126 0 0 0 0
60.026245 0 0 0 0
60.011150 0 0 0 0
60.029263 0 0 0 0
60.023224 0 0 0 0
60.017185 0 0 0 0
60.021210 0 0 0 0
60.016178 0 0 0 0
60.008129 0 0 0 0
60.028255 0 0 0 0
60.023224 0 0 0 0
60.012154 0 0 0 0
60.021210 0 0 0 0
60.020206 0 0 0 0
60.017185 0 0 0 0
60.014168 0 0 0 0
60.027252 0 0 0 0
60.015175 0 0 0 0
60.024231 0 0 0 0
59.819599 0 0 0 0
60.210007 0 0 0 0
60.027252 0 0 0 0
60.012154 0 0 0 0
60.020206 0 0 0 0
60.014168 0 0 0 0
59.977966 0 0 0 0
60.059479 0 0 0 0
60.023224 0 0 0 0
60.027252 0 0 0 0
59.955864 0 0 0 0
60.135155 0 0 0 0
60.020206 0 0 0 0
60.023224 0 0 0 0
60.013161 0 0 0 0
60.018192 0 0 0 0
60.027252 0 0 0 0
60.013161 0 0 0 0
60.017185 0 0 0 0
60.024231 0 0 0 0
60.017185 0 0 0 0
60.018192 0 0 0 0
60.017185 0 0 0 0
59.873631 0 0 0 0
60.164463 0 0 0 0
59.959881 0 0 0 0
60.081657 0 0 0 0
60.021210 0 0 0 0
60.018192 0 0 0 0
60.007126 0 0 0 0
60.030270 0 0 0 0
60.007126 0 0 0 0
60.031277 0 0 0 0
60.018192 0 0 0 0
60.019199 0 0 0 0
60.017185 0 0 0 0
60.023224 0 0 0 0
60.010143 0 0 0 0
60.025238 0 0 0 0
60.023224 0 0 0 0
60.010143 0 0 0 0
60.023224 0 0 0 0
59.946827 0 0 0 0
60.089725 0 0 0 0
60.021210 0 0 0 0
59.954861 0 0 0 0
60.081657 0 0 0 0
60.022217 0 0 0 0
59.940804 0 0 0 0
60.087708 0 0 0 0
60.020206 0 0 0 0
60.024231 0 0 0 0
60.023224 0 0 0 0
59.715813 0 0 0 0
60.318565 0 0 0 0
60.019199 0 0 0 0
60.021210 0 0 0 0
60.016178 0 0 0 0
60.019199 0 0 0 0
60.018192 0 0 0 0
60.018192 0 0 0 0
60.021210 0 0 0 0
60.025238 0 0 0 0
60.019199 0 0 0 0
60.014168 0 0 0 0
60.021210 0 0 0 0
60.003101 0 0 0 0
60.031277 0 0 0 0
60.014168 0 0 0 0
60.028255 0 0 0 0
60.004108 0 0 0 0
60.032284 0 0 0 0
60.015175 0 0 0 0
60.025238 0 0 0 0
60.016178 0 0 0 0
60.016178 0 0 0 0
60.018192 0 0 0 0
60.022217 0 0 0 0
60.022217 0 0 0 0
60.015175 0 0 0 0
59.969929 0 0 0 0
60.066536 0 0 0 0
60.022217 0 0 0 0
60.012154 0 0 0 0
60.026245 0 0 0 0
60.019199 0 0 0 0
60.020206 0 0 0 0
60.015175 0 0 0 0
60.023224 0 0 0 0
60.012154 0 0 0 0
60.019199 0 0 0 0
60.025238 0 0 0 0
60.020206 0 0 0 0
60.008129 0 0 0 0
60.028255 0 0 0 0
60.017185 0 0 0 0
60.025238 0 0 0 0
60.017185 0 0 0 0
60.020206 0 0 0 0
60.011150 0 0 0 0
60.019199 0 0 0 0
60.020206 0 0 0 0
60.016178 0 0 0 0
60.020206 0 0 0 0
60.017185 0 0 0 0
60.025238 0 0 0 0
60.019199 0 0 0 0
60.015175 0 0 0 0
60.025238 0 0 0 0
60.018192 0 0 0 0
60.004108 0 0 0 0
60.027252 0 0 0 0
60.021210 0 0 0 0
60.017185 0 0 0 0
60.019199 0 0 0 0
59.953857 0 0 0 0
60.087708 0 0 0 0
60.014168 0 0 0 0
60.026245 0 0 0 0
59.954861 0 0 0 0
60.078632 0 0 0 0
60.019199 0 0 0 0
60.014168 0 0 0 0
60.023224 0 0 0 0
60.020206 0 0 0 0
60.015175 0 0 0 0
60.023224 0 0 0 0
60.013161 0 0 0 0
60.021210 0 0 0 0
59.990028 0 0 0 0
60.044369 0 0 0 0
60.025238 0 0 0 0
60.019199 0 0 0 0
60.017185 0 0 0 0
60.014168 0 0 0 0
60.025238 0 0 0 0
60.012154 0 0 0 0
60.025238 0 0 0 0
60.015175 0 0 0 0
60.024231 0 0 0 0
60.020206 0 0 0 0
60.018192 0 0 0 0
60.017185 0 0 0 0
60.020206 0 0 0 0
60.016178 0 0 0 0
60.018192 0 0 0 0
60.021210 0 0 0 0
60.018192 0 0 0 0
60.017185 0 0 0 0
60.017185 0 0 0 0
59.979977 0 0 0 0
60.055450 0 0 0 0
60.031277 0 0 0 0
60.013161 0 0 0 0
60.022217 0 0 0 0
60.019199 0 0 0 0
60.019199 0 0 0 0
60.014168 0 0 0 0
60.024231 0 0 0 0
59.921741 0 0 0 0
60.110916 0 0 0 0
59.721790 0 0 0 0
60.322632 0 0 0 0
60.018192 0 0 0 0
60.020206 0 0 0 0
60.017185 0 0 0 0
60.011150 0 0 0 0
60.027252 0 0 0 0
60.015175 0 0 0 0
60.024231 0 0 0 0
60.019199 0 0 0 0
60.019199 0 0 0 0
60.019199 0 0 0 0
60.014168 0 0 0 0
60.025238 0 0 0 0
59.987011 0 0 0 0
60.047390 0 0 0 0
59.993046 0 0 0 0
60.043362 0 0 0 0
60.021210 0 0 0 0
60.023224 0 0 0 0
59.959881 0 0 0 0
60.074600 0 0 0 0
59.905697 0 0 0 0
60.125053 0 0 0 0
59.846603 0 0 0 0
60.199879 0 0 0 0
59.910709 0 0 0 0
60.123032 0 0 0 0
59.902687 0 0 0 0
58.208717 0 0 0 0
62.072678 0 0 0 0
60.013161 0 0 0 0
60.027252 0 0 0 0
59.910709 0 0 0 0
60.126064 0 0 0 0
59.901684 0 0 0 0
60.136162 0 0 0 0
59.915722 0 0 0 0
60.122025 0 0 0 0
60.000084 0 0 0 0
60.040340 0 0 0 0
60.018192 0 0 0 0
60.015175 0 0 0 0
60.022217 0 0 0 0
60.018192 0 0 0 0
60.020206 0 0 0 0
60.019199 0 0 0 0
60.018192 0 0 0 0
60.023224 0 0 0 0
60.016178 0 0 0 0
60.013161 0 0 0 0
60.026245 0 0 0 0
59.888657 0 0 0 0
60.089725 0 0 0 0
60.020206 0 0 0 0
60.076614 0 0 0 0
60.016178 0 0 0 0
60.024231 0 0 0 0
59.798615 0 0 0 0
60.167500 0 0 0 0
60.083675 0 0 0 0
60.029263 0 0 0 0
60.006119 0 0 0 0
18.174061 0 0 0 0
8191.178711 0 0 0 0
35093.578125 0 0 0 0
87.172028 0 0 0 0
60.022217 0 0 0 0
60.018192 0 0 0 0
60.021210 0 0 0 0
60.019199 0 0 0 0
60.020206 0 0 0 0
60.022217 0 0 0 0
58.586941 0 0 0 0
61.516895 0 0 0 0
60.020206 0 0 0 0
60.023224 0 0 0 0
52.416824 0 0 0 0
70.140396 0 0 0 0
60.057465 0 0 0 0
60.021210 0 0 0 0
56.628513 0 0 0 0
63.822433 0 0 0 0
60.039333 0 0 0 0
59.998074 0 0 0 0
60.041348 0 0 0 0
60.012154 0 0 0 0
60.027252 0 0 0 0
60.014168 0 0 0 0
60.014168 0 0 0 0
60.021210 0 0 0 0
60.018192 0 0 0 0
60.020206 0 0 0 0
59.906696 0 0 0 0
60.016178 0 0 0 0
60.074600 0 0 0 0
60.024231 0 0 0 0
59.869625 0 0 0 0
60.165478 0 0 0 0
60.024231 0 0 0 0
60.017185 0 0 0 0
60.074600 0 0 0 0
59.961891 0 0 0 0
59.928764 0 0 0 0
60.113945 0 0 0 0
60.076614 0 0 0 0
59.958878 0 0 0 0
60.017185 0 0 0 0
59.994049 0 0 0 0
60.045376 0 0 0 0
60.016178 0 0 0 0
60.022217 0 0 0 0
60.015175 0 0 0 0
60.026245 0 0 0 0
60.071575 0 0 0 0
60.026245 0 0 0 0
59.950844 0 0 0 0
60.081657 0 0 0 0
60.027252 0 0 0 0
59.936790 0 0 0 0
60.037319 0 0 0 0
60.021210 0 0 0 0
60.015175 0 0 0 0
60.019199 0 0 0 0
60.076614 0 0 0 0
19.210472 0 0 0 0
12648.569336 0 0 0 0
36902.527344 0 0 0 0

7

07.11.2004, 02:07

hier mal der code dazu

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <windows.h>
#include "engine.h"

#define CNAME   "123ASD2"
HWND        hwndMain;
WNDCLASS    wnd;

typedef unsigned int uint;

LRESULT CALLBACK wproc(HWND hwnd, uint msg, WPARAM wparam, LPARAM lparam){
    switch(msg){
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hwnd, msg, wparam, lparam);
}

void initDevice(IDirect3DDevice9 *){
}
int WINAPI WinMain(HINSTANCE hi1, HINSTANCE, LPSTR, int){
    MSG                     msg = {0};
    IDirect3D9              *d3d;
    IDirect3DDevice9        *device;    
    D3DPRESENT_PARAMETERS   param;
    LONGLONG                freq, nF, lF;
    float                   fps;

    QueryPerformanceFrequency((LARGE_INTEGER*)&freq);

    wnd.lpfnWndProc = wproc;
    wnd.hInstance = GetModuleHandle(NULL) ;
    wnd.lpszClassName = CNAME;
    wnd.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
    RegisterClass(&wnd);
    hwndMain = CreateWindow(CNAME, "hallo", WS_OVERLAPPEDWINDOW,
                            100,100,500,420,
                            NULL, NULL, wnd.hInstance, NULL);

    UpdateWindow(hwndMain);
    ShowWindow(hwndMain, SW_SHOWNORMAL);

    fillParamStd(hwndMain, 1280, 1024, 32, false, &param);
    
    d3d = Direct3DCreate9(D3D_SDK_VERSION);
    if (d3d->CreateDevice(0, D3DDEVTYPE_HAL, hwndMain, D3DCREATE_HARDWARE_VERTEXPROCESSING, &param, &device) != D3D_OK){
        d3d->Release();
        return -9;
    }
    int a,b,c,d;
    QueryPerformanceCounter((LARGE_INTEGER*)&lF);
    FILE        *log = fopen("log.txt", "w");

    while(msg.message != WM_QUIT){
        while(PeekMessage(&msg, NULL, 0L, 0L, PM_REMOVE)){
            DispatchMessage(&msg);
        }
        {
            
            QueryPerformanceCounter((LARGE_INTEGER*)&nF);

            if (nF-lF != 0){
                fps = ((float)freq/(float)(nF - lF));
            
            }
            a = device->Clear(0,0,D3DCLEAR_ZBUFFER|D3DCLEAR_TARGET|D3DCLEAR_STENCIL, 0xffffffff, 1.0f, 0L);
            b = device->BeginScene();
            c = device->EndScene();
            d = device->Present(0,0,0,0);
            fprintf(log, "%f %i %i %i %i\n", fps, a, b, c, d);
            lF = nF;
        }
        
    }
    fclose(log);    
    device->Release();
    d3d->Release();

    return 0;
}

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

8

07.11.2004, 02:17

Abgesehen von den super schnellen Frames ist das Log völlig normal (schlecht, aber normal). Langsame Frames können übrigens auch durch Ausgabe auf Platte, z.B. mittels fprintf entstehen :P

Bei den schnellen Frames (Debugausgaben wäre ein besseres Wort als frame) gibt es eigentlich nur zwei Möglichkeiten: Entweder es wird in dem Frame fast nichts gemacht, oder er ist in Wirklichkeit nicht so schnell und es ist nur eine fps-Berechnungs/Ausgabe Problem.

Hast Du mal ausgegeben, ob wirklich bei jedem mal gerendert und das "Bewegungsupdate" durchgeführt wird?
"Games are algorithmic entertainment."

9

07.11.2004, 02:31

"Bei den schnellen Frames (Debugausgaben wäre ein besseres Wort als frame) gibt es eigentlich nur zwei Möglichkeiten: Entweder es wird in dem Frame fast nichts gemacht, oder er ist in Wirklichkeit nicht so schnell und es ist nur eine fps-Berechnungs/Ausgabe Problem."

genau das dachte ich ja auch, das es an meiner framerate berechnung liegt
aber dann sag mir doch bitte was ich falsch mach. ich hab schon alles mögliche ausprobiert...nix funktioniert....oben steht doch der code
wie ich zu fps komm.

>>Hast Du mal ausgegeben, ob wirklich bei jedem mal gerendert und das "Bewegungsupdate" durchgeführt wird?

äh...schau doch bitte mal den code da an. das log stammt daher und
wie du siehst wird dort gar ncihts gerendert nocht sonst was gemacht,
nur clear, beginscene, endscene & present.

wenn du sagst das so ein log normal sei, was genau meinst du dann?
das periodisch diese seltsamen monster-schwankungen
auftreten? ich mein:
60.006119
18.174061
8191.178711
35093.578125
87.172028
60.022217
ist einfach ziemlich krass.
aber wenn das normal ist, wie bitte krieg ich das weg?
der witz is, wenn ich fps konstant auf 60 setze, was eigentlich meine
framerate seien sollte, dann merk ich bei meinen bewegungen
nix von irgendwelchen schwankungen.
daraus schließe ich mal das es nicht wirklich zu so starken schwankungen
kommt sonst würde man doch sicher was merken oder...?

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

10

07.11.2004, 02:51

Wie gesagt, die super hohen fps Zahlen (super schnelle Frames) sind zumindest in einem vollem Spiel nicht normal.

Zitat


der witz is, wenn ich fps konstant auf 60 setze, was eigentlich meine
framerate seien sollte, dann merk ich bei meinen bewegungen
nix von irgendwelchen schwankungen.
daraus schließe ich mal das es nicht wirklich zu so starken schwankungen
kommt sonst würde man doch sicher was merken oder...?


Es gibt tatsächlich eine, wenn auch evtl unwahrscheinliche, andere Möglichkeit:
Sagen wir Du mittelst keine Frameraten und Deine Bewegung ist
x = x + 100 * deltaT
d.h. pro Sekunde 100 Schritte weiter.

Jetzt läßt Du in einem "Frame" Rendern und Bewegung weg. Der Frame ist extrem kurz, sagen wir eine tausendstel Sekunde. Du hast durch den weggefallenen Bewegungsupdate ein Fehler von 100*deltaT in Deiner Position, aber wenn das deltaT gerade die tausendstel Sekunde ist, dann ist das nicht zu merken.
"Games are algorithmic entertainment."

Werbeanzeige