glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glGenTextures(1, &fboTexture);
glBindTexture(GL_TEXTURE_2D, fboTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, dstWidth, dstHeight, 0,
GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// 创建Y分量纹理(R8格式)
glGenTextures(1, &m_yTexture);
glBindTexture(GL_TEXTURE_2D, m_yTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, dstWidth, dstHeight,
0, GL_RED, GL_UNSIGNED_BYTE, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// 创建UV分量纹理(RG8格式,半分辨率)
glGenTextures(1, &m_uvTexture);
glBindTexture(GL_TEXTURE_2D, m_uvTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RG8, dstWidth, dstHeight,
0, GL_RG, GL_UNSIGNED_BYTE, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// 附加Y纹理到颜色附件0
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, m_yTexture, 0);
// 附加UV纹理到颜色附件1
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1,
GL_TEXTURE_2D, m_uvTexture, 0);
// 附加UV纹理到颜色附件1
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2,
GL_TEXTURE_2D, m_yTexture, 0);
GLenum drawBuffers[] = {GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1,GL_COLOR_ATTACHMENT2};
glDrawBuffers(3, drawBuffers);
// 检查FBO完整性
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
qWarning("Framebuffer is not complete!");
//return false;
}
glBindFramebuffer(GL_FRAMEBUFFER, 0); 如何将 pbo中的数据传递
最新发布