简体   繁体   中英

Using GL_TEXTURE_EXTERNAL_OES in OpenGLES 3.x for ArCore

I try to render the ArFrame into a render target using OpenGLES 3.2. The ArCore example shows the usage of GLES2 but inside GLES3 the extension is not available. Now I have found the extension GL_OES_EGL_image_external_essl3 to use samplerExternalOES . Therefore I have included gl3.h and the gl2ext.h.

The creation of the texture is similar to the ArCore example:

glGenTextures(1, &g_TextureID);
glBindTexture(GL_TEXTURE_EXTERNAL_OES, g_TextureID);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

ArSession_setCameraTextureName(m_pARSession, g_TextureID);

Inside the rendering loop:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_EXTERNAL_OES, g_TextureID);

My shaders look like this:

constexpr char kVertexShader[] = R"(
    #version  320 es

    layout(location = 0) in vec2 in_UV;
    layout(location = 0) out vec2 out_UV;

    void main()
    {
        vec2 Vertices[4];

        Vertices[0] = vec2(-1.0f, -1.0f);
        Vertices[1] = vec2( 1.0f, -1.0f);
        Vertices[2] = vec2(-1.0f,  1.0f);
        Vertices[3] = vec2( 1.0f,  1.0f);

        out_UV = in_UV;

        gl_Position = vec4(Vertices[gl_VertexID], 0.0f, 1.0f);
    }
)";

constexpr char kFragmentShader[] = R"(
    #version 320 es

    #extension GL_OES_EGL_image_external_essl3 : require

    precision mediump float;

    layout(location = 0) uniform samplerExternalOES in_ExtOESTexture;

    layout(location = 0) in vec2 in_UV;

    layout(location = 0) out vec4 out_Output;

    void main()
    {
        out_Output = texture(in_ExtOESTexture, in_UV); //vec4(in_UV, 0, 1);
    }
)";

Rendering only the in_UV with out_Output = vec4(in_UV, 0, 1); , the result is a perfectly looking UV texture on the screen.

在此处输入图片说明

But using the texture, everything is black. The size of the the texture (using textureSize(in_ExtOESTexture, 0) ) is zero for both dimensions.

Any idea how to solve this problem?

The problem was that no "arcore-preview2.apk" was installed on the device. So, no error is raised if this APK is not installed. The screen remains just black. Moreover, the google examples on GitHub are working without this APK. I have created a new issue on GitHub because of this unexpected behavior.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM