Я пытаюсь создать данные текстуры вручную. Текстура проявляется неожиданным образом. Поэтому я разделил все на два простых случая для текстур 1x1 и 2x2. Когда я предоставляю текстуру 1x1, это нормально, но она не отображается нормально, когда я использую разные размеры, например 2x2. Все варианты показывают результаты, но не все в порядке.
При использовании текстуры 1x1 все в порядке:
Я пытаюсь создать данные текстуры вручную. Текстура проявляется неожиданным образом. Поэтому я разделил все на два простых случая для текстур 1x1 и 2x2. Когда я предоставляю текстуру 1x1, это нормально, но она не отображается нормально, когда я использую разные размеры, например 2x2. Все варианты показывают результаты, но не все в порядке. При использовании текстуры 1x1 все в порядке: [code]unsigned char x1[1] = {255}; unsigned char x2[4] = {255, 0, 0, 255}; GLuint textureIDText = loadTextureFromData(1, 1, x1); [/code] Отображается так, как и ожидалось: [img]https://i.sstatic.net/pzG4ZpDfm.png[/img]
Когда я пробую текстуру 2x2, она показывает совершенно неожиданный результат: [code]unsigned char x1[1] = {255}; unsigned char x2[4] = {255, 0, 0, 255}; GLuint textureIDText = loadTextureFromData(2, 2, x2); [/code] Вот результат, я ожидал бы здесь шахматную таблицу 2x2 или ее хорошее приближение: [img]https://i.sstatic.net/0bURLWVCm.png[/img]
Когда я анимирую текстуру во время с циклом рендеринга та же история.
Текстура 1x1 анимируется нормально: [code]flushData(textureIDText, 1, 1, x1); [/code] Текстура 2x2 анимируется с такими же неожиданными результатами: [code]flushData(textureIDText, 2, 2, x2); [/code] Вот реализация loadTextureFromData: [code]unsigned int loadTextureFromData(int width, int height, void* pTextureData) { unsigned int textureID = 0; glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_2D, textureID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, pTextureData); glGenerateMipmap(GL_TEXTURE_2D); return textureID; } [/code] А вот реализацияlushData: [code]void flushData(unsigned int textureID, int width, int height, void* pTextureData) { glBindTexture(GL_TEXTURE_2D, textureID); glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, pTextureData); glGenerateMipmap(GL_TEXTURE_2D); } [/code] Полный исходный код находится здесь: [code]#define _USE_MATH_DEFINES