Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » OpenGL » Denkfehler fps?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
10.12.2004, 11:04 Uhr
CaesarCortezz
minderer Student


das ist jetzt aber nur dafür da dass er die frames zählt ohne sie dur zeit zu teilen...
--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
10.12.2004, 13:47 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


aso du benutzt Nehe ok, dann poste mal deine komplette WinMain
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
10.12.2004, 15:20 Uhr
CaesarCortezz
minderer Student


WinMain:


C++:
int WINAPI WinMain(    HINSTANCE    hInstance,
            HINSTANCE    hPrevInstance,
            LPSTR        lpCmdLine,
            int        nCmdShow)
{
    MSG    msg;
    BOOL    done=FALSE;
    MessageBox(NULL, "Tastatureingaben:\n ESC - Verlassen\n F1 - Vollbild\n", "Information", MB_OK|MB_ICONINFORMATION);
    if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)
    {
        fullscreen=FALSE;
    }
    if (!CreateGLWindow("CaesarCortezz' OpenGL Prog",640,480,16,fullscreen))
    {
        return 0;
    }
    while(!done)
    {
        if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
        {
            if (msg.message==WM_QUIT)
            {
                done=TRUE;
            }
            else
            {
                    TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
        else
        {
            if (active)
            {
                if (keys[VK_ESCAPE])
                {
                    done=TRUE;
                }
                else
                {
                    DrawGLScene();
                    SwapBuffers(hDC);
                }
            }
            if (keys[VK_F1])
            {
                keys[VK_F1]=FALSE;
                KillGLWindow();
                fullscreen=!fullscreen;
                if (!CreateGLWindow("CaesarCortezz' fps counter",640,480,16,fullscreen))
                {
                    return 0;
                }
            }
        }
    }
    KillGLWindow();
    return (msg.wParam);
}


--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
10.12.2004, 15:52 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ok dann machste es so:


C++:
int fps-counter, fps; // globale vars



in der WinMain:

C++:
//...
SetTimer(hWnd,1,1000,NULL); // evtl hWnd auf deine Fenstervar umbenennen
fps-counter = 0;
fps = 0;
}
    while(!done)
    {
//...
                else
                {
                    fps-counter++;
                    DrawGLScene(); // hier drin dann z.b glPrint("FPS: %d",fps);
                    SwapBuffers(hDC);
                }
// ...



dann in der WndProc:

C++:
//...
switch(uMsg) // oder message oder wie auch immer, dein switch-block halt :)
{
//...
case WM_TIMER:
  {
     switch(wParam)
     {
     case 1:
       {
         fps = fps-counter;
         fps-counter = 0;
       } break;
     }
  } break;
// ...
}
//...



dann sollte er die einigermaßen korrekte framerate anzeigen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
11.12.2004, 13:54 Uhr
CaesarCortezz
minderer Student


hmm also:
1. er meckert schon mal bei fps-counter wegen dem "-"
2. als ich das beseitigt habe, hat er mit 0 fps angezeigt
3 nach diversem probieren ist es leider so geblieben...

vielleicht habe ich da etwas noch nicht verstanden:
laufen die win main und proc auch jeden frame durch?
wenn ja ist es dann nicht ein problem wenn man den timer sozusagen jedes mal neu initialisiert?
wie gesagt habe ich schon eine timer-fkt versucht welche aber gescheitert ist weil ich nicht wusste ob SetTimer einen Wert liefert wenn er duch ist oder ob es nur durch WM_TIMER zu überprüfen ist.

ich dachte mir das evtl. so:


C++:
int timer()
{
    time = SetTimer(hWnd, 1, 1000, NULL);
    return time;
}

int DrawGLScene(GLvoid)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(0.0f,0.0f,-6.0f);
    glColor3f(1.3f,1.3f,0.0f);
    fpscounter++;
    if (timer()==1) // wenn Timer durch
    {
        fps=fpscounter; // bisherige frames
        glRasterPos2f(-0.5f,0.0f);
        glPrint("fps: %1.0f", fps);
        fpscounter=0; // restart
    }
    return TRUE;
}



leider klappt des net
Ich verzweifle noch daran

MfG Caesar
--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
11.12.2004, 14:20 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ist auch schwachsinn was du da machst


C++:
int WINAPI WinMain(    HINSTANCE    hInstance,
            HINSTANCE    hPrevInstance,
            LPSTR        lpCmdLine,
            int        nCmdShow)
{
    MSG    msg;
    BOOL    done=FALSE;
    MessageBox(NULL, "Tastatureingaben:\n ESC - Verlassen\n F1 - Vollbild\n", "Information", MB_OK|MB_ICONINFORMATION);
    if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)
    {
        fullscreen=FALSE;
    }
    if (!CreateGLWindow("CaesarCortezz' OpenGL Prog",640,480,16,fullscreen))
    {
        return 0;
    }
    SetTimer(hWnd, 1, 1000, NULL);
    // ...




C++:
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
   switch(uMsg)
  {
    // ...
  case WM_TIMER:
    {
       fps = fpscounter;
       fpscounter = 0;
    } break;
    // ...
  }
}




C++:
int DrawGLScene(GLvoid)
{
    fpscounter++;

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(0.0f,0.0f,-6.0f);
    glColor3f(1.3f,1.3f,0.0f);
    glRasterPos2f(-0.5f,0.0f);
    glPrint("fps: %1.0f", fps);
    return TRUE;
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
11.12.2004, 15:45 Uhr
CaesarCortezz
minderer Student



11238273 mal thx. es funzt. ich kann dir leider auch nicht sagen wo ichs das letzte mal verpatzt habe (du hast mir die lösung schon in 013 gepostet ) sonst wär ich jetzt auch schlauer.
Aber jetzt hab ichs gecheckt und froi mich dass es geht.

Nochmal thx
MfG Caesar
--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ OpenGL ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: