Привет у меня есть 35 изображений для рисования на дисплее. Я рисую это в сетке 7X5. Изображения загружаются из Интернета. Каждый раз, когда изображение загружается, я пытаюсь нарисовать все 35 изображений. Но некоторые из них еще не загружены. Поэтому я рисую для них плитку по умолчанию. Проблема в том, что каждый раз, когда изображение загружается, я снова рисую ранее нарисованные изображения. Я хочу уменьшить это. Поэтому я думал о создании чего-то вроде текстурного атласа. Я пытаюсь сделать это вручную. Я делаю это, делая большое изображение с glTexImage2D
и добавив к нему изображения glTexSubImage2D
,
glGenTextures(1, tex);
glBindTexture(GL_TEXTURE_2D, (*tex));
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, textureImageInfo->format, textureImageInfo->texWidth, textureImageInfo->texHeight, 0, textureImageInfo->format, GL_UNSIGNED_BYTE, NULL);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, textureImageInfo->imageWidth, textureImageInfo->imageHeight, textureImageInfo->format, GL_UNSIGNED_BYTE, textureImageInfo->image);
Я звоню 35 glTexSubImage2D
добавить все 35 изображений в большой glTexImage2D
, Здесь я написал только один для более легкого объяснения. Тогда, наконец, я делаю
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, this->tileCoordList);
glTexCoordPointer(3, GL_FLOAT, 0, this->tileTextureCoordList);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
Что меня смущает, так это то, нужно ли мне генерировать и связывать текстуры 35 раз за 35 вызовов glTexSubImage2D
?? Или достаточно сделать один раз. Реальная проблема, которую я не понимаю, что связывает текстуру, что-то делать с этим. Благодарю.
В текстуре нет такого понятия, как «образ». В текстуре только изображения. glTexImage2D
выделяет хранилище для конкретного изображения в текстуре и при необходимости загружает данные в это изображение. glTexSubImage2D
только загружает данные в изображение. «Sub» означает, что вы можете обновить часть изображения, не обязательно все это.
glTexImage2D
как malloc
с последующим memcpy
, glTexSubImage2D
это просто memcpy
, Вот почему вы должны позвонить glTexImage2D
первый.
Других решений пока нет …