Kesalahan memori menggunakan OpenGL glTexImage2D

Saya telah mengikuti tutorial ini tentang OpenGL dan C++: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=06

...dan saya mendapati diri saya menghadapi kesalahan yang cukup besar. Setiap kali saya mencoba mengkompilasi, program saya mogok dengan jenis kesalahan, System.AccessViolationException. Saya telah mengisolasi masalahnya pada fungsi ini:

glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

Jika Anda tidak ingin melihat tutorial itu, memorinya tampak diatur seperti ini:

AUX_RGBImageRec *TextureImage[1];
memset(TextureImage,0,sizeof(void *)*1);

Bantuan apa pun akan luar biasa. Terima kasih.


person Jamie    schedule 14.11.2010    source sumber


Jawaban (2)


Anda mogok karena TextureImage[0] adalah NULL. memset awal di sana menyetelnya ke NULL; jika Anda mengikuti tutorialnya, baris kode berikutnya adalah ini:

if (TextureImage[0]=LoadBMP("Data/NeHe.bmp"))

Perhatikan baik-baik bahwa ada tanda tunggal = di sini, bukan tanda == ganda seperti yang biasa Anda lihat (Anda bahkan mungkin mendapat peringatan kompiler di sini; untuk menyembunyikannya, tambahkan tanda kurung tambahan di sekitar tugas)) . Pastikan Anda menyalin baris kode ini dengan benar dan Anda memiliki satu = di sini.

Jika sebenarnya Anda memiliki satu =, periksa untuk memastikan bahwa LoadBMP mengembalikan nilai bukan NULL. Jika mengembalikan NULL, kemungkinan besar penyebabnya adalah tidak dapat menemukan file bitmap Data/NeHe.bmp, baik karena tidak ada atau mencari di direktori yang salah. Pastikan direktori kerja Anda saat ini sudah diatur dengan benar sehingga dapat menemukan gambar.

person Adam Rosenfield    schedule 14.11.2010
comment
Lebih baik daripada tanda kurung tambahan adalah perbandingan eksplisit. Suka if (NULL != (TextureImage[0] = LoadBMP("Data/NeHe.bmp"))) { ... } - person Ben Voigt; 14.11.2010
comment
Tampaknya tidak mengembalikan NULL, karena saya menguji nilai non-NULL dan tampaknya lulus tes dan masih macet. Untuk mengatur direktori kerja dengan benar, bagaimana cara melakukannya? Saya menggunakan Visual Studio 2010, jika itu membantu. - person Jamie; 14.11.2010

Ternyata bitmap yang saya coba muat terlalu besar. Saya mengecilkannya menjadi 256x256 piksel dan berfungsi dengan sempurna.

person Jamie    schedule 14.11.2010