2011-07-23 15 views
5

Czy istnieje jakiś tryb debugowania, w którym można uruchomić OpenGL w miejscu, w którym wysyła on informacje do konsoli? Mam aplikację dobrze działającą na wielu maszynach, ale niestety nie działa ona na jednym komputerze, który naprawdę ma znaczenie. Nie mam bezpośredniego dostępu do tego komputera, więc staram się dowiedzieć, jak to się nie udaje. Obecnie nie widzę żadnych danych wyjściowych w konsoli. Zauważ, że aplikacja była pierwotnie aplikacją Windows bez konsoli i zmieniłem ją na konsolę za pośrednictwem właściwości projektu. Także, jeśli ma znaczenie, niektóre obiekty nie wyświetlają się, a inne są zablokowane i nie animują - co nie ma dla mnie żadnego sensu.Debugowanie OpenGL lub szczegółowe informacje na konsolę

Odpowiedz

7

Nie, niezupełnie. Musiałbyś napisać hak OpenGL i nagrać wszystkie wywołania, jakie robi (czyli takie narzędzia jak gDEBugger), jeśli naprawdę chcesz mieć jakieś szczegółowe wyniki, ale to wymaga sporo pracy (możesz użyć czegoś takiego jak GLIntercept).) Z własnego doświadczenia: Najprościej będzie uzyskać dostęp do danej maszyny i uruchomić gDEBugger ... lub uzyskać odpowiednik maszyny, aby móc odtworzyć błąd z dołączonym debugerem graficznym.

Alternatywnie można spróbować użyć rozszerzenia ARB_debug_output, które - teoretycznie - powinno dostarczyć więcej wyników. W praktyce wszystko, co otrzymujesz, to wywołanie glGetError po każdym wywołaniu OpenGL API, które może być wystarczająco dobre dla twojego przypadku użycia (tzn. Po prostu zrobić coś, co łamie stan GL). Aby użyć rozszerzenia wyjścia debugowania, musisz zmodyfikować Twoja aplikacja do utworzenia kontekstu debugowania.

+1

Użyteczność ARB_debug_output zależy od implementacji OpenGL. NVIDIA w zasadzie robi wersję 'glGetError', ale wersja AMD jest raczej pomocna. Nie zwraca się po prostu "GL_INVALID_OPERATION"; generalnie mówi przydatne informacje, takie jak funkcja, która spowodowała to i tak dalej. Widziałem, że specjalnie rozpoznaje przestarzałe wywołania funkcji w rdzennym kontekście. Podczas kompilacji shadera i błędów łączenia zrzucane są odpowiednie dzienniki po awarii. I tak dalej. –

+0

'ARG_debug_ouput' jest częścią specyfikacji Core od wersji' 4.3'. –

Powiązane problemy