Я пытаюсь использовать текстуру 32F на канал, прикрепленную к буфере кадров, чтобы сделать визуализацию текстуры. Я сделал это правильно с нормальной текстурой без знака RGBA, но мне нужно больше разрешения в каждом канале.
Я изменил внутренний формат текстуры, но, добавив приложение, я выбрал ошибку INVALID_ENUM. Я читал, что можно прикрепить текстуры с помощью этой ссылки для ссылки на формат. Таким образом, ошибка может быть в другом месте.
Вот фрагменты кода:
glGenTextures(1, &mTexId);
glBindTexture(GL_TEXTURE_2D, mTexId);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, _width, _height, 0, GL_RGBA32F , GL_UNSIGNED_BYTE, nullptr);
glBindFramebuffer(GL_FRAMEBUFFER, mBufferId);
glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, mTexId, 0);
checkErrors(); // <<--- Here I check the possible errors and it where i got the INVALID_ENUM
Может ли кто-нибудь мне помочь? Большое спасибо.
Ваш вызов glTexImage2D
недействителен.
GL_RGBA32F
является допустимым внутренним форматом, но не допустимым перечислением формата клиентской стороны. Поскольку вы создаете текстуру без копирования данных из клиентской памяти, формат, который вы там указываете, даже не имеет значения, но он должен оставаться в силе.
использование
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, _width, _height, 0, GL_RGBA, GL_FLOAT, nullptr);
вместо.