ďťż

Ładny brzuch

Witam,
mam pewien kod (nie robiony przezemnie tylko osoby , ktore sie powinny na tym dobrze znac - jest on przetestowany na visual studio i devc++ , ja pracuje w BCB ale to chyba nie pwoinno miec wiekszegoznaczenia)

jest to program, ktory w OpenGL rysuje spirale, siatke szescianu , jakies linie itp - w zaleznosci od wyboru ... taki w sumie sam szablon OGL i troche rysuje;P
ale podczas uruchamiania tego pojawia mi sie taki blad:

'Invalid floating point operation'. Process stopped. Use Step or Run to continue.'
nie bede przytaczal calego kodu , bo ma kilaset linijek:(
pojawia sie ten blad po wybraniu czy chce pracowac w oknie czy nie (niezaleznie od tego co wybiore) - po kliknieciu na messagebox
czyli w tym momencie:
(to jest funkcja winmain:)
if(MessageBox(NULL, "Czy chcesz uruchomić aplikację w oknie?",      "Okno ?", MB_YESNO | MB_ICONQUESTION) == IDYES)   { g_bFullScreen = false; }   unsigned long ulWndStyle = 0, ulExWndStyle = 0;  // style okna CreatewAppWindow())   int iWndWidth = 640, iWndHeight = 480;   if(g_bFullScreen)      {         ulExWndStyle = WS_EX_APPWINDOW;         ulWndStyle = WS_POPUP;      }      else ulWndStyle = WS_OVERLAPPEDWINDOW;    RegisterWndClass("MyClass", WndProc);        g_hWnd = CreateAppWindow(       0, 0, iWndWidth, iWndHeight, "MyClass", "OpenGL - Prymitywy",       true, ulWndStyle, ulExWndStyle); // tworzenie okna - (definicja funkcji nizej) (napisalem komantarz tam gdzie byly tworzone)    if(!g_hWnd) return 0;    if(g_bFullScreen)       ChangeScreenMode(iWndWidth, iWndHeight, 32);    ShowWindow(g_hWnd, SW_SHOW);   // pokazanie okna    UpdateWindow(g_hWnd);       // update okna    InitOpenGL(g_hWnd);    UpdateView(iWndWidth, iWndHeight);    MSG msg = {0};    while(true)    {       if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))   // pompa wiadomosci       {          if(msg.message == WM_QUIT) break;          TranslateMessage(&msg);          DispatchMessage(&msg);       }       DrawGLScene();       SwapBuffers(g_hDC);       CheckKeys();    }    return (int)msg.wParam; } // end WinMain

czy przypuszczacie chociaz co moze byc tego przyczyna?:/
blad w kodzie raczej nie, bo niby byl on testowany (chociaz niczego nie mozna wykluczyc na 100%) takze byc moze to sprawa bibliotek albo czegos takiego...

:(
pozdro
Ka-



Ja nie bardzo rozumiem tą linię:

MSG msg = {0};

Może to nie o to chodzi, ale dla mnie jest podejrzana. Jak jest w porządku, to poprosiłbym kogoś, żeby mi wyjaśnił czemu jest tak, a nie:

MSG msg = 0;

Co do MSG msg = {0}; to chyba chodzi o to, ze MSG jest struktura i klamry powoduja wyzerowanie kazdej zmiennej zawartej w tej strukturze, ale pewnosci nie mam.

Zarowno opengl jak i d3d z przyczyn wydajnosciowych zakladaja, ze obsluga wyjatkow zmiennoprzecinkowych jest wylaczona. Nie jest sprawdzana poprawnosc obliczen. D3D wylacza sobie obsluge tych wyjatkow, z ogl nie pamietam juz. BCB domyslnie wlacza ich obsluge (vc++ np nie). I stad problem. Trzeba sobie zagooglac w jaki sposob sie wylacza "floating exceptions" (_control87 - to taka mala podpowiedz ;)). I bedzie ok.
Użytkownik st3tc edytował ten post 17 maj 2006, 11:17


szukam juz z godzinke ale nic nie znalazlem:/ tzn. znalazlem w sumie dosc sporo ale nadal nie wiem jak to wylaczyc:/
Ty wiesz jak to zrobic? jezeli tak, to prosze o pomoc:)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •