Использование OpenGL ES 3.1 в Google Tango

Я пытаюсь получить изображение с камеры из API танго, вызвав «TangoService_connectTextureId».

Проблема в том, что не определено "GL_TEXTURE_EXTERNAL_OES", поэтому я не могу создать внешний объект текстуры. Все образцы используют только ES 2, но наличие этого ограничения на таком устройстве просто глупо.

может быть, это моя вина, так что вот моя установка:

  • Visual Studio 2013 с расширением Nsight Tegra.
  • Включает в себя:

    #include <GLES3/gl3.h>
    #include <GLES3/gl3ext.h>
    #include <GLES3/gl3platform.h>
    
    #include <EGL/egl.h>
    #include <EGL/eglext.h>
    
  • Я связываюсь с:

    tango_client_api
    GLESv3
    EGL
    
  • Текстура для передачи TangoService_connectTextureId должна быть создана следующим образом (в то время как использование GL_TEXTURE_2D не работает, поскольку изображение остается черным):

    glGenTextures(1, &texture_id_);
    glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture_id_);
    glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0);
    

person Kai Rohmer    schedule 17.11.2015    source источник


Ответы (1)


Я нашел несколько подсказок и заработал:

https://www.khronos.org/registry/gles/ перечисляет заголовки, которые необходимо включить .

GLES 3.0, включая gl2ext.h, описывает хак для фактического использования заголовков с API 19.

так что это работает для меня сейчас:

#include <GLES3/gl3.h>
#define __gl2_h_                 // what the f***   
#include <GLES2/gl2ext.h>
#include <GLES3/gl3platform.h>

для обработки изображения в шейдере можно начать со следующего фрагмента программы:

#version 300 es
#extension GL_OES_EGL_image_external : require
precision highp float;

// input
uniform samplerExternalOES InputTexture;
in vec2 v_TexCoord;

// output
layout(location = 0) out vec4 OutputColor;

void main()
{
    vec2 flippedCoord = vec2(v_TexCoord.x, 1.0 - v_TexCoord.y);
    OutputColor = texture2D(InputTexture, flippedCoord);
    OutputColor.a = 1.0;
}
person Kai Rohmer    schedule 18.11.2015