通过Android插件绘制Unity Texture2D

时间:2016-02-03 14:04:55

标签: android unity3d opengl-es texture2d

我创建了简单的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操作,它们似乎没问题。我做错了什么?

0 个答案:

没有答案