Я пытаюсь рисовать текстуры с помощью языка шейдеров OpenGL 4.1.
На Windows он работает абсолютно нормально, так что я уверен, что нет проблем с шейдером или координатами.
На Mac, однако, текстуры повреждены, как на картинке:
Если вы заметите - есть две небольшие текстуры, выглядит нормально. Уникальным в них является то, что один имеет размер 16, а второй имеет ширину 32 пикселя (степень 2). Поэтому это должно быть что-то в конфигурации или хранилище пикселей. Не может быть, чтобы текстуры, не являющиеся степенью 2, не поддерживаются, поскольку они были в устаревшем контексте openGL (не GLSL). Вот пример генерации моей текстуры:
unsigned char* pixels = convertedImage->m_pixelbufs.at(0);
GLuint imageDepth = convertedImage->GetBitsPerPixel() == 24 ? GL_RGB : GL_RGBA;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, convertedImage->GetWidth(), convertedImage->GetHeight(), 0, imageDepth, GL_UNSIGNED_BYTE, pixels);
glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE);
glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glBindTexture(GL_TEXTURE_2D, 0);
Я пытался играть с другими параметрами glPixelStorei, но текстуры всегда были повреждены. Любая подсказка?