Редактировать: я сузил причину и упростил проблему
Я заметил, что при работе с многоуровневым рендерингом OpenGL у драйверов / графических процессоров Nvidia возникают проблемы с кадровыми буферами, имеющими карту кубов.текстуры связаны с ними.У Intel IGPU нет проблем с этим, но когда я переключаюсь на свой выделенный графический процессор, я получаю ошибку
Код ниже воссоздает ошибку:
GLuint environment = 0; glCreateTextures(GL_TEXTURE_CUBE_MAP, 1, &environment);
constexpr GLsizei resolution = 512;
glTextureStorage2D(environment, 1, GL_RGB32F, resolution, resolution);
glTextureParameteri(environment, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTextureParameteri(environment, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTextureParameteri(environment, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTextureParameteri(environment, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTextureParameteri(environment, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
glTextureParameteri(environment, GL_TEXTURE_BASE_LEVEL, 0);
glTextureParameteri(environment, GL_TEXTURE_MAX_LEVEL, 0);
GLuint capture_fbo = 0; glCreateFramebuffers(1, &capture_fbo);
GLuint capture_rbo = 0; glCreateRenderbuffers(1, &capture_rbo);
glNamedRenderbufferStorage(capture_rbo, GL_DEPTH_COMPONENT32F, resolution, resolution);
glNamedFramebufferTexture(capture_fbo, GL_COLOR_ATTACHMENT0, environment, 0);
glNamedFramebufferRenderbuffer(capture_fbo, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, capture_rbo);
if (glCheckNamedFramebufferStatus(capture_fbo, GL_DRAW_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE)
{
fmt::print("Framebuffer Complete!\n");
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, capture_fbo);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
else fmt::print("Framebuffer Not Complete!\n");
Когда я запрашиваю кадровый буфер после попыткичтобы запустить приведенный выше код, он говорит, что он не завершен, пока я не откреплю / не перепривязаю кадровый буфер.После чего он говорит, что он снова завершен, хотя ничего не изменилось.
Вывод консоли на Nvidia:
Manufacturer: NVIDIA Corporation
GPU: GeForce GTX 1060 with Max-Q Design/PCIe/SSE2
OpenGL Version: 4.5.0 NVIDIA 416.34
GLSL Version: 4.50 NVIDIA
Framebuffer Complete!
OpenGL [API Error 1286] (High): GL_INVALID_FRAMEBUFFER_OPERATION error generated. Operation is not valid because a bound framebuffer is not framebuffer complete.
Вывод консоли на Intel:
Manufacturer: Intel
GPU: Intel(R) UHD Graphics 630
OpenGL Version: 4.5.0 - Build 23.20.16.4973
GLSL Version: 4.50 - Build 23.20.16.4973
Framebuffer Complete!
AmЯ сталкиваюсь с ошибкой?Поскольку он работает на одном поставщике, а не на другом, есть ли какая-то специальная спецификация для кадровых буферов Nvidia?