Unity android Texture Opengl ES 数据通信

来源:互联网 发布:中国贸易数据库 编辑:程序博客网 时间:2024/05/16 11:53

这段代码非常有启发意义

Can someone please help me figure out what is the problem with my code? I am trying to load an image from the native side and send the texture to Unity. I am using Unity Pro 5.0.2f1.

Unity Side:

void Start () {AndroidJavaObject mImageLoader = new AndroidJavaObject("com.saeid.android.LoadTexture2D");Texture2D texture2D = new Texture2D(1920, 1080, TextureFormat.ARGB32, false);Int32 texPtr = mImageLoader.Call <Int32> ("loadImageReturnTexturePtr", "/storage/sdcard0/Images/test.jpg");Debug.Log("texture pointer? " + texPtr);Texture2D nativeTexture = Texture2D.CreateExternalTexture (1920, 1080, TextureFormat.ARGB32 , false, false, (IntPtr)texPtr);texture2D.UpdateExternalTexture(nativeTexture.GetNativeTexturePtr());gameObject.GetComponent<Renderer>().material.mainTexture = texture2D;}

Java Side:

public int loadImageReturnTexturePtr(String imagePath) {Log.d(LOGTAG, "loading image1: " + imagePath);Bitmap bitmap = BitmapFactory.decodeFile(imagePath);Log.d(LOGTAG, "Bitmap is: " + bitmap);ByteBuffer buffer = ByteBuffer.allocate(bitmap.getByteCount());bitmap.copyPixelsToBuffer(buffer);int textures[] = new int[1];GLES20.glGenTextures(1, textures, 0);int textureId = textures[0];GLES20.glActiveTexture(GLES20.GL_TEXTURE0);GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId);GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, 1920, 1080, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, buffer);GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,GLES20.GL_CLAMP_TO_EDGE);GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_CLAMP_TO_EDGE);GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);Log.d(LOGTAG, "texture id returned: " + textureId);return textureId;} 
1 0
原创粉丝点击