Я разрабатываю нативный плагин 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
Разработка нативного видео -плагина для Unity для Android - поверхность всегда черная, что я делаю не так? ⇐ Android
Форум для тех, кто программирует под Android
1746053139
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;
Подробнее здесь: [url]https://stackoverflow.com/questions/79601187/developing-a-native-video-plugin-for-unity-for-android-surface-is-always-black[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия