我创建了简单的Android插件,它应该通过简单的OpenGL命令绘制Unity Texture2D。
这是我的Unity代码:
private void InitAndroidStreamerObject()
{
androidStreamerObj = new AndroidJavaObject("makeitbetter.figazzz.com.vitamiousing7.AndroidStreamer");
_testTex = new Texture2D(50, 50, TextureFormat.RGB24, false);
System.IntPtr testPTR = _testTex.GetNativeTexturePtr();
androidStreamerObj.Call("UpdateTestTexture", testPTR.ToInt32());
_testTex.Apply();
Debug.Log("Updated");
}
这是我的Android插件:
public void UpdateTestTexture(int nTexId)
{
Log.d("Unity", "hop hop hop");
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, nTexId);
checkGlError("glBindTexture");
int[] buf = new int[50 * 50];
textureBuffer = ByteBuffer.allocateDirect(buf.length * 4).order(ByteOrder.nativeOrder());
byte[] colors = new byte[] {(byte) 255, (byte) 10, (byte) 10, (byte) 200};
textureBuffer.put(colors);
GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGB, 50, 50, 0, GLES20.GL_RGB, GLES20.GL_UNSIGNED_BYTE, textureBuffer);
checkGlError("glTexImage2D");
//GLES20.glTexSubImage2D(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, 0, GLES20.GL_RGB, 50, 50, 0, GLES20.GL_RGB, GLES20.GL_UNSIGNED_BYTE, textureBuffer);
GLES20.glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
checkGlError("glClearColor");
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
checkGlError("glClear");
}
我已经苦苦挣扎了2天,但质地仍然没有改变。我正在检查所有opengl操作,它们似乎没问题。我做错了什么?