Я получил следующий код работает прекрасно на прошивке и Android:портирования OpenGL ES Framebuffer в OpenGL
unsigned int depth_texture = 0,
framebuffer = 0;
glGenTextures(1, &depth_texture);
glBindTexture(GL_TEXTURE_2D, depth_texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D,
0,
GL_DEPTH_COMPONENT,
256,
256,
0,
GL_DEPTH_COMPONENT,
GL_UNSIGNED_INT,
NULL);
glBindTexture(GL_TEXTURE_2D, 0);
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER,
GL_DEPTH_ATTACHMENT,
GL_TEXTURE_2D,
depth_texture,
0);
unsigned int type = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(type == GL_FRAMEBUFFER_COMPLETE)
{ printf("Complete!"); }
else
{ printf("Error!"); }
Сейчас я портирование этого кода OpenGL Desktop (2.1 и выше) и он отказывается работать. Я всегда получаю ошибку GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER
. Единственный способ заставить его работать - указать COLOR_ATTACHMENT (который исправит ошибку буфера рисования). Я читал документы GL glrameBuffer, и я не могу понять, почему приведенный выше код не сработает. Все, что я хочу, это сделать ТОЛЬКО глубину в текстуре ... Я что-то упустил?
немой вопрос - 'FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE' для цветных вложений не должен быть ничем для полноты. И 'glDrawBuffer (GL_NONE)' не устанавливает его в none? Или же 'glDrawBuffer (GL_NONE)' имеет другое значение – Kiran
Сортировка, но не совсем. В вашем случае 'FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE' NONE для всех точек привязки цветов, потому что у вас нет цветовых вложений. Но на основе значения по умолчанию для буфера рисования «GL_COLOR_ATTACHMENT0» будет «назван DRAW_BUFFERi». Поэтому соответствующее вложение «не должно быть NONE», но оно есть. Поэтому ошибка! –
Что касается того, почему это исчезло в 4.1: Это происходит через [GL_ARB_ES2_compatibility] (https://www.opengl.org/registry/specs/ARB/ES2_compatibility.txt): «Удалить все ссылки на буферы рисования/чтения, влияющие на полноту», а также добавить «Если GL связан с объектом фреймбуфера, а буфер рисования выбирает вложение, которое не имеет прикрепленного изображения, то этот цвет фрагмента не записывается ни в какое буфер «. – derhass