Это просто поделиться тем, что заняло у меня много времени, чтобы разобраться. Если вам не нужен ваш Depthbuffer или у вас нет настройки точки вставки буфера глубины в EGL, это может помочь.glCheckFramebufferStatus возвращает 36054 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
По какой-то причине я не мог получить рендеринг в текстуру для работы установки визуализации буфера объекта RBO в буфер глубины: как ошибки так
GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER,
GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D,
juliaTex[0], 0);
rain.checkGlError("glFramebufferTexture2D");
GLES20.glFramebufferRenderbuffer(GLES20.GL_FRAMEBUFFER,
GLES20.GL_DEPTH_ATTACHMENT, GLES20.GL_RENDERBUFFER,
juliaRBO[0]);
rain.checkGlError("glFramebufferRenderbuffer");
int status = GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER);
вызывает status == GLES20.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
Если меняет визуализацию хранения буфера GLES20.GL_RGBA4
, в отличие от GLES20.DEPTH_COMPONENT16
и изменить GLES20.GL_DEPTH_ATTACHMENT
к GLES20.GL_COLOR_ATTACHMENT0
то ошибка уходит,
изменить этот
// create render buffer and bind 16-bit depth buffer
GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, juliaRBO[0]);
rain.checkGlError("glBindRenderBuffer");
GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER, GLES20.DEPTH_COMPONENT16,
rain.width, rain.height);
к этому
// create render buffer and bind 16-bit depth buffer
GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, juliaRBO[0]);
rain.checkGlError("glBindRenderBuffer");
GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER, GLES20.GL_RGBA4,
rain.width, rain.height);
И исходный код к этому:
GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER,
GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D,
juliaTex[0], 0);
rain.checkGlError("glFramebufferTexture2D");
GLES20.glFramebufferRenderbuffer(GLES20.GL_FRAMEBUFFER,
GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_RENDERBUFFER,
juliaRBO[0]);
rain.checkGlError("glFramebufferRenderbuffer");
затем status == GLES20.GL_FRAMEBUFFER_COMPLETE
Но текстура пуст.
здесь вызов для создания текстуры ХРАНЕНИЯ
// bind texture
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, juliaTex[0]);
// clamp texture to edges
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,
GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,
GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER,
GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,
GLES20.GL_LINEAR);
rain.checkGlError("glTexParameter JuliaTex");
// create it
/*
int[] buf = new int[rain.width * rain.height];
juliaTexBuff = ByteBuffer.allocateDirect(buf.length
* rain.FLOAT_SIZE_BYTES).order(ByteOrder.nativeOrder()).asIntBuffer();
*/
// generate the textures
GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA,
rain.width, rain.height, 0, GLES20.GL_RGBA,
GLES20.GL_UNSIGNED_SHORT_4_4_4_4, null);
** - 1 **: Вы сделали больше, чем просто добавили текстуру в этот код. Фактически вы привязали ваш рендеринг к точке подключения ** 0 **, а затем заменили это приложение на ваше изображение текстуры. Это сильно отличается от того, что вы пытались изначально. Обновите свой вопрос, чтобы показать, как вы распределяете хранилище для своей текстуры и вашего рендеринга, поскольку это почти наверняка, где ваша ошибка *** на самом деле ***. При этой текущей настройке у вас нет буфера глубины. –
Я не думаю, что моя настройка EGL имеет точку привязки буфера глубины. Это и является причиной ошибки. Вероятно, вы знаете намного больше об этом, чем я, и это решение может показаться глупым, но это всего лишь обходное решение, которое, вероятно, поможет большему количеству хакеров, чем прибегать к компоненту Attachment Point. каждому его – HPP
Все FBOs имеют точку подключения буфера глубины, но формат и размеры изображения RBO/текстуры, которое вы можете прикрепить, могут быть очень ограничительными. Основная проблема, которую я вижу сейчас, заключается в том, что ваша текстура juliaTex [0] ', вероятно, не имеет таких же размеров, как ваш RBO, поэтому я просил посмотреть, как вы выделили хранилище для этой текстуры. Нет оснований даже создавать/присоединять RBO к тому, что вы делаете прямо сейчас, потому что вы немедленно связываете что-то еще над RBO. –