Мы разрабатываем приложение, которое должно отправлять контент Unity WebCamTexture в Java.В настоящее время используется функция GetPixels32 (), маршал копируется в буфер и отправляется в Java.Это работает хорошо, но немного медленно на недорогих телефонах.Другой способ, которым мы пытаемся, это получить исходный ptr текстуры и отправить его на сторону java.Затем с помощью gles получите цветовой буфер.
Коды, как показано ниже:
единичная сторона, код 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.Мы также безуспешно пытались снять флажок «Многопоточный рендеринг» в настройках игроков.
Есть что-то, что мы пропустили?
Заранее спасибо.