В настоящее время я могу загрузить текстуру статического размера, которую я создал. В данном случае это 512 х 512.
Этот код из шапки:
#define TEXTURE_WIDTH 512
#define TEXTURE_HEIGHT 512
GLubyte textureArray[TEXTURE_HEIGHT][TEXTURE_WIDTH][4];
Вот использование glTexImage2D:
glTexImage2D(
GL_TEXTURE_2D, 0, GL_RGBA,
TEXTURE_WIDTH, TEXTURE_HEIGHT,
0, GL_RGBA, GL_UNSIGNED_BYTE, textureArray);
А вот как я заполняю массив (грубый пример, не точная копия из моего кода):
for (int i = 0; i < getTexturePixelCount(); i++)
{
textureArray[column][row][0] = (GLubyte)pixelValue1;
textureArray[column][row][1] = (GLubyte)pixelValue2;
textureArray[column][row][2] = (GLubyte)pixelValue3;
textureArray[column][row][3] = (GLubyte)pixelValue4;
}
Как мне изменить это так, чтобы не было необходимости в TEXTURE_WIDTH и TEXTURE_HEIGHT? Возможно, я мог бы использовать массив стилей указателя и динамически распределять память ...
Edit:
Я думаю, что вижу проблему, в C ++ это не может быть сделано. Обходной путь, как указал Будрик, заключается в использовании одномерного массива, но с использованием всех трех измерений, умноженных для представления индексов:
GLbyte *array = new GLbyte[xMax * yMax * zMax];
А чтобы получить доступ, например, к x / y / z 1/2/3, вам нужно сделать:
GLbyte byte = array[1 * 2 * 3];
Однако проблема в том, что я не думаю, что функция glTexImage2D
поддерживает это. Может кто-нибудь придумать обходной путь, который будет работать с этой функцией OpenGL?
Редактировать 2:
Внимание разработчиков OpenGL, это можно преодолеть, используя одномерный массив пикселей ...
[0]: столбец 0> [1]: строка 0> [2]: канал 0 ... n> [n]: строка 1 ... n> [n]: столбец 1 .. n
... нет необходимости использовать трехмерный массив. В этом случае мне пришлось использовать эту работу, так как 3-мерные массивы, очевидно, не являются строго возможными в C ++.