Разработка нативного видео -плагина для Unity для Android - поверхность всегда черная, что я делаю не так?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Разработка нативного видео -плагина для Unity для Android - поверхность всегда черная, что я делаю не так?

Сообщение Anonymous »

Я разрабатываю нативный плагин Android (C ++ и Kotlin), чтобы заменить встроенный видеоплал Unity, который плохо работает в AR (аудио и видео не синхронизировано, задержка и низкая частота кадров). Цель состоит в том, чтобы транслировать высокопроизводительный видеоконтент на текстуру Unity, которая может использоваться в AR сценах (отображается на вершине маркеров AR). < /P>

Я создаю внешнюю серферестуру с использованием нативной текстуры Opengl
(Glgentextures) и перенесен на unity. Указатель текстур и используйте
texture2d.createexternalTexture (), чтобы связать его с материалом. < /li>
Я правильно вижу и слышу воспроизведение звука, и журналы показывают видео
декодирование успешно. /> в C ++ (GL Texture+ интерфейс JNI):
Я создаю текстуру с GL_TEXTURE_EXTERNAL_OES` с использованием OpenGL в потоке рендеринга, затем вызовите в котлин, используя < /code> jnito configure a MediaCodecdecoder and attach it to a Surface wrapping the surfacetexture` `. Декодировать и рендеринговые рамки
i call .updateTexImage () из нативного моста с использованием gl.issuepluginevent () (запускаемые Updatesurfacetexture () Каждый кадр)
unity c#:
glaSuePlugNevent (). Обновление)
I Связываю текстуру с использованием createexternaltexture () с указателем из плагина
i назначить текстуру на материал на Quad (Shader Unlit/Texture). буферы)
Указатель текстуры-это ненулевое < /p>
SurfaceTexture.updateTexImage()< /code> называется
, но ничего не отображается; screen stays black
I verified OpenGL texture is generated correctly
Using UpdateExternalTexture() every frame
Using Unlit/Texture material in Unity
Calling GL.IssuePluginEvent(..., 3) from OnRenderObject() and Update()
Adding a Surfacetexture.setonframeaVailElelistener () (но не стреляет)
Есть ли лучший способ связать нативную текстуру OES с surfacetexture в котлине? longptr.toint () в котлине повредить указатель текстуры?
c ++:
glGenTextures(1, &g_VideoTextureId);
glBindTexture(GL_TEXTURE_EXTERNAL_OES, g_VideoTextureId);
glTexParameteri(...);
< /code>
kotlin: < /p>
globalSurfaceTexture = SurfaceTexture(longPtr.toInt())
surface = Surface(globalSurfaceTexture)
< /code>
Unity C#: < /p>
IntPtr ptr = new IntPtr(_longPtrValue);
videoTexture = Texture2D.CreateExternalTexture(width, height, TextureFormat.RGBA32, false, false, ptr);
targetRenderer.material.mainTexture = videoTexture;


Подробнее здесь: https://stackoverflow.com/questions/796 ... ways-black
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»