Zawieszanie przy wywołaniu draw w nvoglv32.dll na nowej karcie wideo
Kilka dni temu skonfigurowałem komputer i zainstalowałem nową kopię systemu Windows 8 z powodu pewnych zmian sprzętowych. Między innymi zmieniłem kartę graficzną z Radeon HD 7870 na Nvidia GTX 660.
Po ponownym skonfigurowaniu programu Visual Studio 11 pobrałem ostatni projekt OpenGL z Github i przebudowałem cały projekt. Uruchomiłem aplikację z Visual Studio i spowodowała ona awarięnvoglv32.dll
.
Nieobsługiwany wyjątek w 0x5D9F74E3 (nvoglv32.dll) w Application.exe: 0xC0000005: Lokalizacja odczytu naruszenia zasad dostępu 0x00000000.
W starym środowisku aplikacja działała zgodnie z oczekiwaniami. Nic nie zmieniłem w projekcie ani w kodzie źródłowym. Jedyną różnicą był język instalacji Visual Studio, który jest teraz w języku angielskim i był niemiecki. Dlatego utworzyłem nowy projekt i przyjęłem wszystkie ustawienia, ale błąd pozostaje.
Aby zlokalizować awarię, zauważyłem, że cała inicjalizacja (okno, shadery, ...) zakończyła się powodzeniem, a błąd występuje przy wywołaniu losowaniaglDrawElements()
które odsyłają do przejścia gemoetry mojego odroczonego renderera.
Po kilku próbach dowiedziałem się o tymnvoglv32.dll
pochodzi z Nvidii i dotyczy usług zwanychCompatible OpenGL ICD
. Czy to w jakiś sposób oznacza, że moja aplikacja działa w trybie zgodnym? To brzmi jak tryb obsługi starszych aplikacji i chcę, aby mój działał w zwykłym trybie! Przy okazji zainstalowałem najnowsze stabilne sterowniki dla mojej karty wideo.
Szczerze mówiąc, nie mam pojęcia, jak podejść do naprawienia tej awarii. Co może to spowodować i jak to naprawić?
Aktualizacja: znalazłempublikuj na forach Geforce o moim problemie. Chociaż nie było odpowiedzi, autor mógł rozwiązać problem, zmieniając kolejność dwóch wywołań OpenGL.
Cześć wszystkim,
Po kilku godzinach gry kodem źródłowym aplikacji odkryłem, że wywołanie funkcji ...
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, #)
glBindVertexArray(#)
... w tej kolejności powoduje awarię pliku nvoglv64.dll. Odwracanie kolejności tych połączeń do ...
glBindVertexArray(#)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, #)
... zapobiega awariom i wydaje się być dobrze zachowany.
Pozdrawiam, Robert Graf
Ponieważ nie używam tablic wierzchołków, nie mogę tego zrobić prosto, ale może być podobny problem. Zgłosię moje postępy.
Aktualizacja: Nie mam absolutnie żadnego pojęcia, jak rozwiązać mój problem. Próbowałem różnych wersji sterowników wideo, ale to nie ma znaczenia. Całkowicie przepisałem renderer używając minimalnych shaderów i prostego renderowania do przodu. Ale parapet pojawia się przy pierwszym wywołaniu.