• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Access violation przy glfwSwapBuffers

Object Storage Arubacloud
0 głosów
399 wizyt
pytanie zadane 10 maja 2022 w OpenGL, Unity przez letmestay Użytkownik (520 p.)

Podczas nauki OpenGL (używam glfw/glad) napotkałam na problem access violation przy linijce z podmienianiem bufferów. Wcześniej ten problem nie występował, wszystko do tej pory (jakieś proste trójkąty) działały, ale kiedy dodałam EBO nagle pojawiają sie problemy przy kompilacji. Błąd brzmi dokładnie "Exception thrown at 0x00007FFBE1103420 (ig9icd64.dll) in Szachownica.exe: 0xC0000005: Access violation reading location 0x000000000000000C.". 

 

Czy to może być problem z kartą graficzna? Mam zainstalowane najnowsze sterowniki.

while (!glfwWindowShouldClose(window)) {

		glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
		glClear(GL_COLOR_BUFFER_BIT);
		//glUseProgram(shaderProgram);
		//glBindVertexArray(VAO);

		//Linie
		glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
		glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0);

		//Wypelnienie
		glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
		glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, (void*)(3 * sizeof(GL_UNSIGNED_INT)));

		//glDrawArrays(GL_TRIANGLES, 0, 3);
		glfwSwapBuffers(window);

		glfwPollEvents(); //reagowanie na zdarzenia
	}

 

komentarz 10 maja 2022 przez adrian17 Ekspert (344,860 p.)

jeszcze chyba powinnam przed buforem tylnim zrobic te wszystkie

glBindBuffer(GL_ARRAY_BUFFER, 0);

Jeśli od-bindowujesz bufory i nigdy ich z powrotem nie bindujesz przed rysowaniem, to nic się nie narysuje.

komentarz 10 maja 2022 przez adrian17 Ekspert (344,860 p.)
Ah, ok :)
komentarz 10 maja 2022 przez letmestay Użytkownik (520 p.)
hmm zabindowałam VAO w mainie potem  i działa, nie rozumiem do końca po co to odbindowanie w ogóle jest, ogólnie to robie to wszystko według kursu od prowadzącego i nie do końca wszystko jest wytłumaczone
komentarz 10 maja 2022 przez adrian17 Ekspert (344,860 p.)
Jak coś to tutaj też masz rozdział opisujący wszystko po kolei z shaderami i VAO/VBO/EBO (na przykładzie trochę prostszym od Twojego, bo Ty masz jeszcze kolory):

https://learnopengl.com/Getting-started/Hello-Triangle
komentarz 10 maja 2022 przez letmestay Użytkownik (520 p.)
dziękuje bardzo ♥

1 odpowiedź

+1 głos
odpowiedź 10 maja 2022 przez Apled Dyskutant (9,520 p.)

Czy to może być problem z kartą graficzna? Mam zainstalowane najnowsze sterowniki.

Nie, to nie chodzi o to.

Jeżeli używasz Visual Studio, to wystarczy, że po wyrzuceniu błędu przejdziesz do Call Stack i możesz sprawdzić dokładnie gdzie występuję błąd (klasa, plik, funkcja etc.) i czego dokładnie dotyczy. W twoim przypadku jest to problem z odczytem danych, np zmienna jest nullptr, chociaż nie powinna itp.

napotkałam na problem access violation przy linijce z podmienianiem bufferów

zależy jakiego IDE używasz, problem może się wyświetlić na danej linii kodu - tak jak tutaj mówisz, że przy swap bufferze - ale rzeczywisty problem dzieje się jedną instrukcję wcześniej.

komentarz 10 maja 2022 przez letmestay Użytkownik (520 p.)
tyle, że to nie jest taki zwykły error w kodzie (żadnych errorów i warnigów nie mam) tylko exception throw przy samej kompilacji. W jaki sposób mam wtedy sprawdzić ten "Call Stack"?

Tak, korzystam z visual studio 2019
komentarz 10 maja 2022 przez letmestay Użytkownik (520 p.)
Okej, już się doszukałam. Wszystko mam w mainie, więc nie muszę się martwić, gdzie jest błąd. Wskazuje na tą linijke ze swapem. Aktualnie muszę niestety wyjść z mieszkania, ale wieczorem w takim razie będę jeszcze raz analizowała linijka po linijce. Przynajmniej pocieszyłam się, że to nie wina karty graficznej tylko moja : )
komentarz 10 maja 2022 przez Apled Dyskutant (9,520 p.)

tyle, że to nie jest taki zwykły error w kodzie (żadnych errorów i warnigów nie mam)

To jest błąd odczytu, to znaczy, że nie musisz mieć żadnych ostrzeżeń. Chodzi o to, że w trakcie działania programu próbujesz w pewnym momencie odczytać dane ze zmiennej, ale okazuje się, że ta zmienna jest pusta, nullptr czy jakiś inny problem z danymi. Dlatego program nie może nic zrobić, bo nie jest w stanie operować na braku danych.

Tutaj masz przykład Call Stacka (akurat nie z błędem tylko Breakpointem, ale to tak samo działa). Nie skupiaj się na linijce, którą podświetla, tylko na jednej niżej, bo Call Stack - jak nazwa wskazuje - to stos, więc pokazuje "od góry", gdzie program się wysypał i jak problem "schodzi niżej".

Podobne pytania

0 głosów
2 odpowiedzi 191 wizyt
pytanie zadane 19 lipca 2017 w OpenGL, Unity przez Maciek414 Obywatel (1,080 p.)
+1 głos
1 odpowiedź 264 wizyt
0 głosów
1 odpowiedź 342 wizyt
pytanie zadane 14 października 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)

92,565 zapytań

141,418 odpowiedzi

319,602 komentarzy

61,951 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...