OpenGL does not work in the Android plugin

  • Unity5.3.7f1
  • Nexus6(Android7)

I expect the following code to made a texture on Android, and the texture was to be drawn in green, but in fact it was drawn in black.
There is no runtime error.
Where would be the problem?

C#

	    AndroidJavaObject javaObject = new AndroidJavaObject ("com.example.myclass");
		AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
		context  = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

		Texture2D texture = new Texture2D(640, 480, TextureFormat.ARGB32, false);
	    gameObj.GetComponent<Renderer>().material.mainTexture = texture;
	    var id = javaObject.Call<int>("getTexture");
		Debug.Log("texture pointer :" + id);
	    var p = new IntPtr(id);
		Texture2D nativeTexture = Texture2D.CreateExternalTexture(640, 480, TextureFormat.ARGB32, false, true, p);
	    texture.UpdateExternalTexture(nativeTexture.GetNativeTexturePtr());

Android(Java)

    public int getTexture(){
        Log.d(TAG, "getTexture called");
        GLES20.glEnable(GLES20.GL_TEXTURE_2D);
        int[] tmp = new int[1];  
        GLES20.glGenTextures(1, tmp, 0);
        int textureId = tmp[0];
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId);
        GLES20.glViewport(0,0,640,480);

        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
                GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
                GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
                GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT);
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
                GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT);

        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId);
        GLES20.glViewport(0,0,640,480);
        GLES20.glClearColor(0, 1, 0, 1); // green
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
        GLES20.glFlush();
        Log.d(TAG, "textureId is:" + textureId);
        return textureId;
    }

Maybe multithreaded rendering turned on.
See:
https://stackoverflow.com/questions/47779970/get-bitmap-to-unity-through-android-plugin-using-gles20/47781134#47781134