Я пытаюсь прочитать данные в текстуру с помощью glTexImage2D.Кажется, что независимо от того, что я пытаюсь, первая строка текселей читается правильно, но дальнейшие строки создаются из памяти за пределами заданного std :: vector:
GLuint renderedTexture;
glGenTextures(1, &renderedTexture);
glBindTexture(GL_TEXTURE_2D, renderedTexture);
int w = 8;
int h = 8;
std::vector<GLuint> emptyData(w*h, 0);
emptyData[0] = 0xFF<<8; //blue
emptyData[1] = 0xFF<<16; //green
emptyData[3] = 0xFF<<24; //red
emptyData[w] = 0xFF<<16; // <- should be in second row, but is not shown
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0,GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, emptyData.data());
В зависимости от размератекстуры кодаЯ уже пытался использовать вектор GLubytes, но это тоже не сработало.Я также попробовал glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
, но это тоже не сработало.Что мне здесь не хватает?
Редактировать: Дальнейшие эксперименты показали, что минимальная ширина, предполагаемая при считывании в пикселях, составляет 128 пикселей.Поэтому, если я создаю текстуру размером 64 * 64 и хочу один пиксель при x = 10, y = 14, я должен записать в emptyData[10 + 14*128]
и заранее зарезервировать соответствующий объем памяти.Кто-нибудь знает, зависит ли это от платформы или почему?