Передача NativeTexturePtr из единства в Android Java не работает - PullRequest
0 голосов
/ 14 декабря 2018

Мы разрабатываем приложение, которое должно отправлять контент Unity WebCamTexture в Java.В настоящее время используется функция GetPixels32 (), маршал копируется в буфер и отправляется в Java.Это работает хорошо, но немного медленно на недорогих телефонах.Другой способ, которым мы пытаемся, это получить исходный ptr текстуры и отправить его на сторону java.Затем с помощью gles получите цветовой буфер.

Коды, как показано ниже:

  1. единичная сторона, код C #

    приватная статическая AndroidJavaObject m_ColorGesture;m_ColorGesture = новый AndroidJavaObject ("com.xxxx.yyyy.zzzz", m_UnityActivity);m_ColorGesture.Call ("UpdateImage", WebCamTexture.NativeTexturePtr (). ToInt32 (), WebCamTexture.Width, WebCamTexture.Height);

2. сторона Android, код Java

public void UpdateImage(int textureId, int imageWidth, int imageHeight)
{

    if(bmp == null){
    bmp = Bitmap.createBitmap(imageWidth, imageHeight, Bitmap.Config.ARGB_8888);
    }
    ByteBuffer buffer = ByteBuffer.allocate(bmp.getByteCount());

    //int textures[] = new int[1];
    //GLES20.glGenTextures(1, textures, 0);
    //textures[0] = textureId;
    GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId);
    GLES20.glReadPixels(0, 0, imageWidth, imageHeight, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, buffer);
    bmp.copyPixelsFromBuffer(buffer);

    if(isSaveBmp == true && bmp != null) {
    SaveBmpToJpg(bmp, "/Captures/", "testimage" + new Date().getTime() + ".jpg");
    isSaveBmp = false;
    }

}

Содержимое сохраненного файла jpg полностью запутано.Я посмотрел его в Интернете, и некоторые сказали, что одна из причин заключается в том, что Unity использует многопоточный рендер, и это приводит к тому, что используемый в gles контекст отличается от Unity.Мы также безуспешно пытались снять флажок «Многопоточный рендеринг» в настройках игроков.

Есть что-то, что мы пропустили?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...