This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA2HG:[OpenGL] FBO:如何使用 glFramebufferTexture

Guru**** 2035740 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/900403/tda2hg-opengl-fbo-how-to-use-glframebuffertexture

器件型号:TDA2HG

您好:

 在 visionsdk 3.05上、我们使用 GL_纹 理_external_OES 导入 NV12映像数据、OpenGL 应在 GL_纹 理_external_OES 目标上运行。

对于 OpenGL 帧缓冲区对象(FBO)

  1. 我们是否应该调用 glFramebufferTexture2D (gL_framebuffer、gL_color_ATTACHENT0、 gL_turese_external_OES、m_stage_tures[i]、0)  
  2. 或者使用 glFramebufferTexture2DOES,当查看我们找到的 visionsdk 源代码时  
1
glFramebufferTexture2DOES = (PFNGLFRAMEBUFFERTEXTURE2DOES)PVRGetProcAddress(glFramebufferTexture2DOES);

    /apps/src/hlos/modules/sgxRenderUtils/Tools/OGLES/PVRTglesExt.cpp.中

这是 使用 glFramebufferTexture2D 的正确方法

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Andy:

    我没有有关 glFramebufferTexture2DOES 支持的信息、我看到这是一个 OPENGLES1 API、但 OPENGLES2不支持。

    谢谢

    RamPrasad  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 RamPrasad:

     在 visonSDK 上,我们使用 glEGLImageTargetTexture2DOES()来创建外转文件 ,并在目标 GL_tecture_external_OES 上运行。

    现在我们使用 glFramebufferTexture(),当我们调用 glFramebufferTexture (GL_tecture_external_OES)时,将会出现 OpenGL 错误。

    因此、我们的产品是使用 glFramebufferTexture 的正确方法

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Andy:

    您能否告诉我返回的 OpenGL 错误是什么?

    我将检查 SGX-um 的源代码在什么条件下返回。

    谢谢

    RAM

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    高 RAM: 
    以下是源代码

    //生成帧缓冲区、渲染缓冲区和纹理对象名称 对于(i = 0;i < FBO_num;i++) { glGenFramebuffers (1、&(m_stage_FBO[i])); glGenRenderbuffers (1、&(m_stage_depte_render_pender_buffer[i])); 光源纹理(1、&(m_stage_t纹 理[i])); // Andy TI 支持 GL_纹 理_external_OES #ifdef APP_RUN_ON_TI //#define GL_纹 理_2D GL_纹 理_external_OES #endif //不需要指定纹理,因为我们将绘制到纹理中 glBindTexture (GL_t纹 理_2D、m_stage_t纹 理[i]); #if global_run_env_Desktop = 0 &&定义的 APP_RUN_ON_IMX6 //将 addr 映射到 OpenGL viv (* g_pFnglTexDirectVIVMap)(gL_turate_2D、宽度、高度、fbo_format、 (void **)&(m_stage_FBO_vaddr[i])、(const GLuint *)(&m_stage_FBO_paddr[i])); #else glTextImage2D (GL_Texture_external_OES、0、FBO_format、宽度、高度、 0、FBO_format、GL_unsigned_byte、NULL); #endif GlTextParameteri (GL_turete_external_OES、GL_turete_mag_filter、GL_linear); GlTextParameteri (GL_turete_external_OES、GL_turete_min_filter、GL_linear_linear); //绑定渲染缓冲区并创建16位深度缓冲区 //渲染缓冲区的宽度和高度=的宽度和高度 //纹理 glBindRenderbuffer (GL_RENDERBUFFER、m_STACE_DEPTY_REBUFF_BUFFER[i]); glRenderBufferStorage (GL_RENDERBUFFER、GL_DEPTY_COMPONENT16、宽度、高度); //绑定帧缓冲区 glBindFramebuffer (gL_framebuffer、m_stage_FBO[i]); //将纹理指定为颜色附件 glFramebufferTexture2D (GL_framebuffer、GL_color_ATTACHMENT0、GL_Texture_external_OES、m_Stage_纹 理[i]、0); eglCheckGlError ("glFramebufferTexture2D"); printf ("Andy debug test glFramebufferTexture2D \n"); //将 depthe_rendbufer 指定为深度附加 glFramebufferRenderbuffer (gL_framebuffer、gL_depth_attachment、gL_RENDERBUFFER、m_stage_delime_render_buffer[i]); //检查帧缓冲完成 GLenum status = glCheckFramebufferStatus (gL_framebuffer); if (status!= gL_framebuffer_complete) { AVMGPU_ERR ("AvmGpu::AVM_GPU_FBO_Generate。 帧缓冲区对象%d 未完成\n",i); 返回1; } } 返回0;

    我们将所有 GL_纹 理_2D 更改为  GL_纹 理_external_OES。

    而 erros 是:

    func:AVM_GPU_FBO_Generate line 1247 GL:After glFrameTexterTexture2d () glError (0x502)
    Andy 调试测试 glFrameerText2D
    func:AVM_GPU_FBO_Generate line 1247 GL:After glFrameTexterTexterTexter2d () glError (0x502) graameerTexterTexterText_Generate
    
    line 1247:GPUgb
    :GPUgra_fundertureVM
    在 glFrameerTexture2D() glError (0x502)
    之后 Andy 调试测试 glFramebufferTexture2D
    func:AVM_GPU_FBO_Generate line 1247 GL:在 glFrameBufferTexture2D()之后 glError (0x502)
    Andy 调试测试 glFrameTextbuffer2D 

    BTW 我们还记得 visionSDK 不支持 glTextImage2D(),对吧?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     您好 RAM:

    任何更新?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    如您所注意到的、并且如以下链接中所述、GL_纹 理_EXTERNAL_OES 不能与 glFrameBufferTexture2D 配合使用:

    https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glFramebufferTexture2D.xml

    您能帮助我们定义您的用例吗? 您是否正在尝试渲染 YUV? 或者您是否只是尝试将 NV12映像用作纹理? 如果您可以解释您的用例、我们将能够提供更好的帮助。

    此致

    Hemant

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Hemant:

    [引用用户="Hemant Hariyani"]您能不能帮助我们定义您的用例?

    请参阅上面的源代码、我们希望将 YUV 渲染到可重复使用的帧缓冲区。 我们称之为 glFramebufferTexture2D  

    如果使用  GL_Texture_2D 调用 glFramebufferTexture2D,则不会出现错误,但不会显示图像。

    在 visionSDK 中、使用 GL_纹 理_external_OES 将 YUV 导入纹理、然后我们要确认是否应使用 GL_纹 理_external_OES  

    glFrameerTexture2D,您看到有错误,那么我们应该像使用这个 glFramebufferTexture2DOES =(PFNGLFRAMEBUFFERTEXTURE2DOES) PVRGetProAddress (glFrbufferTexture2DOES)一样使用它;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    要添加其他观察内容,在共享的示例代码段中,glTextImage2D()如果在该点捕获到错误,因为不能将纹理_external_OES 目标类型用于该调用。 原因是 glTextImage2D()调用可确保纹理由 GPU 管理,但纹理_external_OES 目标用于以 EGLImages 包装的外部分配纹理,因此会出现错误。

    如果目的是将 EGLImage 用作 FBO,则可以使用与您具有的类似流程,但您不必调用 glTextImage2D(),而是将 EGLImage 绑定到纹理_2D 目标。

    如下所示

    在设置中、您将创建纹理和帧缓冲区对象、并将帧缓冲区绑定到纹理目标

    格网格纹理(1、&tex_id)
    光纹理(gL_tuture_2D、tex_id)
    glGenFramebuffers (1、&FBO)
    glBindFrameBuffer (GL_FrameBuffer、FBO)
    glFramebufferTexture2D (GL_framebuffer、GL_color_ATTACHMENT0、GL_tute_2D、tex_id、0)

    在 Draw 调用中,您可以将限制与纹理2D 目标绑定。 如果在两次提取呼叫之间的限制没有变化、您也可以在设置呼叫中执行此操作。

    glEGLImageTargetTexture2DOES (GL_T纹 理_2D、eglImage)

    但请注意、在上面、纹理/EGLImage 必须为 RGBA 格式才能成为有效的 FBO。 NV12格式不支持作为渲染曲面、因此 NV12 EGLImages 不能是帧缓冲区对象。

    谢谢、
    Gowtham

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、 Gowtham:

     谢谢、我们会尝试一下。

     将其标记为已解决。

x 出现错误。请重试或与管理员联系。