Согласно справочной странице opengl, структура glTexImage2D выглядит следующим образом:
void glTexImage2D( GLenum target,
GLint level,
GLint internalformat,
GLsizei width,
GLsizei height,
GLint border,
GLenum format,
GLenum type,
const GLvoid * data);
Насколько я знаю, последние 3 параметра - это то, как функция должна интерпретировать данные изображения, заданные как const GLvoid * data
Тем временем я изучал тему кадровых буферов. А в разделе «Кадровые буферы с плавающей точкой» этой ссылки https://learnopengl.com/Advanced-Lighting/HDR, автор создает цветовое вложение кадрового буфера, как это
glBindTexture(GL_TEXTURE_2D, colorBuffer);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, SCR_WIDTH, SCR_HEIGHT, 0, GL_RGBA, GL_FLOAT, NULL);
У меня вопрос: почему он дал GL_FLOAT в качестве параметра для GLenum type
? Если const GLvoid * data
равно NULL
, нужно ли использовать GL_FLOAT? Сначала я подумал, что это что-то, связанное с GL_RGBA16F
, но 16 бит - это 2 байта, а число с плавающей запятой - 4 байта, поэтому я думаю, что это вообще не связано.
Кроме того, до этого урока писатель делал цветовые вложения вроде этого:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, SCR_WIDTH, SCR_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
В этом случае, почему он использовал GL_UNSIGNED_BYTE
для параметра GLenum type
?