我想做的事情:
我的问题:
当我在插件中调用方法时,将texture.GetNativeTextureID()
传递给它,纹理不会改变。我目前只使用简单的黑色50x50纹理进行测试,原始纹理是平白色。
我担心我错过了重要的事情,因为这是我第一次使用java中的G1调用。类似问题的大部分答案都涉及使用原生C ++而不是Java,但我无法找到一个具体的答案,说C ++ 必须。我想尽最大努力避免为C ++编写另一组插件和插件处理程序,但如果它是最有效/唯一的方法来实现这一点,我会像i&i那样做#39;我不熟悉OpenGL和C ++
代码:
在附加到主摄像头的脚本中从OnPreRender()
调用插件方法:
if (grabTex) {
int texPtr = m_VideoTex.GetNativeTextureID();
Debug.Log( "texPtr = " + texPtr );
m_JVInterface.SetTex( texPtr );
}
m_VideoTex
是基本Texture2D( 50, 50 )
,所有像素都设置为白色,附加到场景中四边形上的漫反射着色器。
Java插件代码如下:
public void SetTexture(Context cont, int _texPointer) {
if (_texPointer != 0) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
options.inJustDecodeBounds = false;
final Bitmap bitmap = BitmapFactory.decodeFile("/storage/emulated/0/Pictures/black.jpg", options);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, _texPointer);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
Log.i("VideoHandler", "Recieved ID: " + _texPointer);
bitmap.recycle();
}
}
答案 0 :(得分:0)
这很可能是OpenGL Context的一个问题。最简单的方法是将纹理作为原始字节发送到Unity,然后作为纹理在Unity内部上传。