Ĺ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
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:)