Я использую PBO для быстрой загрузки текстур в моем приложении. Если я использую видеокарту opengl 3 или лучше, я могу легко создать mipmaps с помощью вызова glGenerateMipmap, и он работает нормально.
Но на моей более старой карте opengl 2.1 (radeon x800) эта функция недоступна, поэтому я должен использовать один из двух устаревших методов:
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w,h, 0,GL_RGBA,GL_UNSIGNED_BYTE, src);
или
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA8, w,h, GL_RGBA,GL_UNSIGNED_BYTE, src);
Первый метод не работает даже без PBO, он вводит странные артефакты. Второй, без PBO, создает правильные мипмапы, а с PBO генерирует segfault.
Любой может помочь ??
Для полноты я прилагаю код, который я использую для PBO:
uint pixelBuffer;
glGenBuffers(1, &pixelBuffer);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pixelBuffer);
glBufferData(GL_PIXEL_UNPACK_BUFFER, size*4, NULL, GL_STATIC_READ);
char *pixels = (char*)glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY);
... transfer data
glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
... and then I use the buffer to create the texture
PS Если я не пытаюсь сгенерировать мипмапы, загрузка pbo работает на всех моих видеокартах.