主题中讨论的其他器件:TDA2
在 TDA4上使用离屏渲染来报告0x506错误 GL_INVALID_frameBuffer_operation。
QNX~、SDK 版本7.3 μ m
在基于 Linux 系统3.7和3.8SDK 的 TDA2上、同样的离屏渲染效果是可以的。 您说支持 TDA4、下面是实施基本代码。
帮助分析它。 如果您需要提供其他补充资料、请指出~
代码如下所示:
//初始化
void SvEglRenderBase:InitFrameBufferOpt()
{
//创建帧缓冲对象:FBO
glGenFramebuffers (1、&m_nSvTopviewFbo);
glGetIntegerv (GL_framebuffer_binding、&m_nSvDefaultFbo);
glBindFramebuffer (gL_framebuffer、m_nSvTopviewFbo);
int nTestId;
glGetIntegerv (GL_framebuffer_binding、&nTestId);
//创建脱机渲染纹理
格网格纹理(1、&m_nSvTopviewTexture);
glBindTexture (GL_纹 理_2D、m_nSvTopviewTexture);
GlTextImage2D (GL_Texture_2D、0、GL_RGB、SV_2D_LUT_width、SV_2D_LUT_Height、 0、GL_RGB、GL_unsigned_byte、NULL);
//设置纹理参数:内插方法。 最远和最接近的内插方法可以不同地设置。
GlTextParameteri (GL_turete_2D、GL_turete_min_filter、GL_linear);
GlTextParameteri (GL_turete_2D、GL_turete_mag_filter、GL_linear);
//将2D 纹理绑定到默认纹理通常用于破坏以前的纹理绑定关系
//并将 OpenGL 的纹理绑定状态恢复为默认状态。
glBindTexture (GL_Texture_2D、0);
//将外部绑定到 FBO
glFramebufferTexture2D (GL_framebuffer、GL_color_ATTACHMENT0、GL_t纹 理_2D、m_nSvTopviewTexture、0);
glBindFramebuffer (gL_framebuffer、m_nSvDefaultFbo);
//创建帧缓冲对象:FBO
glGenFramebuffers (1、&m_nSvPart3dFbo);
//创建脱机渲染纹理
格网格纹理(1、&m_nSvPart3dTexture);
//如果需要3D 离屏渲染,则此处需要深度缓冲器
glGenRenderbuffers (1、&m_nSvPart3dDepthId);
//Bind FBO:要使用 FBO,它必须首先被绑定。 使其成为当前渲染缓冲区。
glBindFramebuffer (gL_framebuffer、m_nSvPart3dFbo);
//创建脱机渲染纹理:纹理必须在绑定到 FBO 时创建
glBindTexture (GL_纹 理_2D、m_nSvPart3dTexture);
GlTextImage2D (GL_Texture_2D、0、GL_RGB、SV_3D_View_width、SV_3D_View_Height、0、 gL_RGB、gL_unsigned_byte、NULL);
//设置纹理参数:内插方法。 最远和最接近的内插方法可以不同地设置。
GlTextParameteri (GL_turete_2D、GL_turete_min_filter、GL_linear);
GlTextParameteri (GL_turete_2D、GL_turete_mag_filter、GL_linear);
//将2D 纹理绑定到默认纹理通常用于破坏以前的纹理绑定关系
//并将 OpenGL 的纹理绑定状态恢复为默认状态。
glBindTexture (GL_Texture_2D、0);
//将外部绑定到 FBO
glFramebufferTexture2D (GL_framebuffer、GL_color_ATTACHMENT0、GL_t纹 理_2D、m_nSvPart3dTexture、0);
glBindRenderbuffer (GL_RENDERBUFFER、m_nSvPart3dDepthId);
glRenderBufferStorage (GL_RENDERBUFFER、GL_DEPTH COMPONENT16、SV_3D_View_width、SV_3D_View_Height);
glFramebufferRenderbuffer (gL_framebuffer、gL_depte_attachment、gL_RENDERBUFFER、m_nSvPart3dDepthId);
glBindRenderbuffer (GL_RENDERBUFFER、0);
glBindFramebuffer (gL_framebuffer、m_nSvDefaultFbo);
//在 TDA4中键入0
//在 TDA4中键入0
//在 TDA4中键入0
//在 TDA4中键入0
GLenum eErrStatus = glCheckFramebufferStatus (gL_framebuffer);
printf ("[AVM] glCheckFramebufferStatus Complete eErrStatus = 0x%x.\n"、eErrStatus);
if (eErrStatus!= gL_framebuffer_complete)
{
switch (eErrStatus)
{
案例 GL_frameBuffer_complete:
printf ("[AVM]帧缓冲完成。\n");
中断;
案例 GL_framebuffer_incomplete_attachment:
printf ("[AVM][ERROR]帧缓冲不完整:附件未完成。\n");
中断;
案例 GL_framebuffer_incomplete_missing_attachment:
printf ("[AVM][ERROR]帧缓冲不完整:没有图像附加到 FBO。\n");
中断;
案例 GL_framebuffer_incomplete_dimensions:
printf ("[AVM][ERROR]帧缓冲不完整:附加的图像具有不同的尺寸。\n");
中断;
案例 GL_framebuffer_unsupported:
printf (FBO 实现不支持"[AVM][ERROR]。\n");
中断;
默认值:
printf ("[AVM][ERROR]未知错误。\n");
中断;
}
}
}
//渲染和绘图
glBindFramebuffer (gL_framebuffer、m_pEGLRenderBase->m_nSvTopviewFbo);
DrawOffline1();
DrawOffline2();
DrawOffline3();
glBindFramebuffer (gL_framebuffer、m_pEGLRenderBase->m_nSvDefaultFbo);
DrawAll();
//在这里报告0x506错误 gl_invalid_framebuffer_operation
GLenum nErrId = glGetError();
如果(nErrId!= GL_NO_ERROR
帮助分析它。 如果您需要提供其他补充资料、请指出~
请~
谢谢~
