Как определить размер текстуры OpenGL в текселях? - PullRequest
2 голосов
/ 08 января 2010

Я знаю, что это такой тривиальный вопрос, но я не нашел никакой информации, которая может помочь, начиная с документации glGet(). Я использую свои текстуры в качестве спрайтов, поэтому очень важно отслеживать их размеры в текселях / пикселях.

Когда я создаю свои текстуры с glTexImage2D(), я должен передать ему размер массива данных пикселей. Но OpenGL хранит это где-нибудь, или я должен отслеживать их в моем коде? (Это кажется неудобным, так как клиентский код все еще мог бы перезаписывать текстуру с помощью вызовов glTexImage2D() / glTexSubImage2D() / glCopyTexImage2D() и т. Д., Не изменяя размер соответственно, что приводит к визуальным искажениям.)

Ответы [ 2 ]

6 голосов
/ 08 января 2010

Как говорит Бахбар, glGetTexLevelParameteri может использоваться для запроса GL_TEXTURE_WIDTH.Тем не менее, я настоятельно рекомендую не использовать это в качестве общего метода.Во-первых, вы можете остановить конвейер с помощью вызовов glGet*, поскольку драйвер должен заставить графический процессор завершить то, что он делает, выяснить, что вы спросили, и вернуть ответ.Результатом является огромный удар по производительности.

Так что вам действительно лучше управлять таким состоянием в своем собственном коде.Предположительно, у вас есть класс Sprite (или структура или эквивалент) с дескриптором текстуры.Ничего не стоит выделить несколько байтов для отслеживания ширины и высоты, и это избавит вас от необходимости нажимать драйвер или графический процессор для получения информации.

Что касается glTeSubImage*, то этополитическое решение относительно того, когда и как вы обновите текстуру.

5 голосов
/ 08 января 2010

Если вы действительно хотите положиться на GL, используйте

glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &param)

Тем не менее, я не уверен, что означает клиентский код в вашем контексте, но если вы собираетесь писать промежуточное ПО, которое позволяет вашим клиентам напрямую манипулировать вашим состоянием, у вас проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...