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

Zgłoszenie wyjątku podczas próby wczytywania tekstury.

Object Storage Arubacloud
0 głosów
343 wizyt
pytanie zadane 31 stycznia 2022 w C i C++ przez tonn204 Mądrala (7,440 p.)

Witam, stworzyłem klasę która mam rysować prostokąt i teraz chcę dodać możliwość załadowania tekstury. VS studio 2022 wyrzuca mi taki błąd jak poniżej:

Zgłoszono wyjątek w lokalizacji 0x00007FFF6B4AB568 (nvoglv64.dll) w terrain generation.exe: 0xC0000005: Naruszenie zasad dostępu podczas odczytywania w lokalizacji 0x0000029D1B8E8000.

Próbowałem do folderu z projektem dodać ten plik dll ale to nic nie dało. Zmieniałem też kolejność bindowania VAO bo czytałem, że to może powodować problem ale też nic się nie zmieniło. Co tu robię nie tak?

Tile.cpp

Tile::Tile()
{
    float vertices[] = {
         0.5f,  0.5f, 0.0f, 1.0f, 1.0f, 
         0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 
        -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 
        -0.5f,  0.5f, 0.0f, 0.0f, 1.0f  
    };

    unsigned int indices[] = {  
        0, 1, 3,   // first triangle
        1, 2, 3    // second triangle
    };

    position = glm::vec3(0.0f);
    model = glm::mat4(1.0f);
    current_angle = 0.0f;

	vao = new VAO();
    vao->Bind();
    vbo = new VBO(vertices, sizeof(vertices));
    ebo = new EBO(indices, sizeof(indices));
    vao->LinkAttrib(vbo, 0, 3, GL_FLOAT, 5 * sizeof(float), (void*)0);
    vao->LinkAttrib(vbo, 1, 2, GL_FLOAT, 5 * sizeof(float), (void*)(3 * sizeof(float)));

    texture = new Texture("D:/Textures for OpenGL/grass.jpg", GL_TEXTURE_2D, GL_TEXTURE0, GL_RGBA, GL_UNSIGNED_BYTE);
    texture->texUnit(*shaderProgram, "texture0", 0);

    shaderProgram = new Shader("vertexShader.vert", "fragmentShader.frag");
}

void Tile::draw(glm::mat4 projection, glm::mat4 view)
{
    shaderProgram->use();
    shaderProgram->setMat4("model", model);
    shaderProgram->setMat4("projection", projection);
    shaderProgram->setMat4("view", view);
    texture->Bind();
    vao->Bind();
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
}

Texture.cpp

Texture::Texture(const char* image, GLenum texType, GLenum slot, GLenum format, GLenum pixelType)
{
	type = texType;

	int width, height, nrChannels;

	stbi_set_flip_vertically_on_load(true);
	unsigned char* bytes = stbi_load(image, &width, &height, &nrChannels, 0);

	glGenTextures(1, &ID);
	glActiveTexture(slot);
	glBindTexture(texType, ID);

	glTexParameteri(texType, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
	glTexParameteri(texType, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glTexParameteri(texType, GL_TEXTURE_WRAP_S, GL_REPEAT);
	glTexParameteri(texType, GL_TEXTURE_WRAP_T, GL_REPEAT);

	glTexImage2D(texType, 0, GL_RGB, width, height, 0, format, pixelType, bytes);
	glGenerateMipmap(texType);

	stbi_image_free(bytes);
}

void Texture::texUnit(Shader& shader, const char* uniform, GLuint unit)
{
	shader.use();
	shader.setInt(uniform, unit);
}

VAO.cpp

void VAO::LinkAttrib(VBO* VBO, GLuint layout, GLuint numComponents, GLenum type, GLsizeiptr stride, void* offset)
{
	VBO->Bind();
	glVertexAttribPointer(layout, numComponents, type, GL_FALSE, stride, offset);
	glEnableVertexAttribArray(layout);
	VBO->Unbind();
}

 

1
komentarz 31 stycznia 2022 przez Oscar Nałogowiec (29,310 p.)
Kompletnie nie znam tej biblioteki, jedynie moje wątpliwości wzbuda przekazanie sizeof() tabelek do konstruktorów. Czy na pewno ma to być rozmiar tablicy w bajtach, a nie liczba elementów w tablicy? Tego typu błąd to albo wyjście poza tabele lub jakiś kompletna kicha ze wskaźnikami. Nie operujesz jakoś na wskaźnikach więc raczej to ten pierwszy przypadek.
komentarz 31 stycznia 2022 przez tonn204 Mądrala (7,440 p.)
Sizeof jako argument funkcji jest na 100% poprawny sprawdziłem w dokumentacji. Do formatu jpg podałem jako format RGBA zamiast RGB i to powodowało wyjątek. Teraz niby działa ale przy uruchamianiu okno programu ta chwilę się zacina a potem wszystko działa ok. Problem tylko polega na tym, że jak chce narysować więcej niż 1 tak obiekt to program cały czas się ładuje a jedyne co widzę to białe okno Jakieś inne pomysły?

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 164 wizyt
pytanie zadane 6 maja 2020 w C i C++ przez seba Dyskutant (8,900 p.)
0 głosów
1 odpowiedź 209 wizyt
pytanie zadane 11 maja 2017 w C i C++ przez Isild Użytkownik (580 p.)
0 głosów
1 odpowiedź 465 wizyt
pytanie zadane 6 września 2021 w C i C++ przez tonn204 Mądrala (7,440 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 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!

...