21.130 Каков максимальный размер текстурной карты, которую мое устройство будет отображать с аппаратным ускорением?
Хорошая реализация OpenGL будет рендериться с аппаратным ускорением, когда это возможно. Однако реализация свободна, чтобы не делать аппаратное ускорение. OpenGL не предоставляет механизма, который бы гарантировал, что приложение использует аппаратное ускорение, и не запрашивает, использует ли оно аппаратное ускорение. Учитывая эту информацию, может быть полезным следующее:
Вы можете получить оценку максимального размера текстуры, поддерживаемого вашей реализацией, с помощью следующего вызова:
GLint texSize;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &texSize);
Если ваша текстура не аппаратно ускорена, но все еще находится в пределах ограничений размера, возвращаемых GL_MAX_TEXTURE_SIZE
, она все равно должна отображаться правильно.
Это только оценка, потому что функция glGet*()
не знает, какой формат, внутренний формат, тип и другие параметры вы будете использовать для любой данной текстуры. OpenGL 1.1 и выше решает эту проблему, разрешая прокси текстуры.
Вот пример использования текстуры прокси:
glTexImage2D(GL_PROXY_TEXTURE_2D, level, internalFormat, width, height, border, format, type, NULL);
Обратите внимание, что параметр пикселей равен NULL, поскольку OpenGL не загружает тексельные данные, когда целевой параметр равен GL_PROXY_TEXTURE_2D
. Вместо этого OpenGL просто рассматривает, может ли он вместить текстуру указанного размера и описания. Если указанная текстура не может быть размещена, значения текстуры ширины и высоты будут установлены на ноль. После вызова прокси текстуры вы захотите запросить следующие значения:
GLint width;
glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
if (width==0) {
/* Can't use that texture */
}