java - 尝试从 Unity 4.6 中的 Java 插件设置纹理

标签 java android unity-game-engine opengl-es

我正在尝试做什么:

  • 使用 Java 插件从手机上的 SD 卡中提取图像。
  • Unity 将纹理 ID 传递给插件。
  • 插件使用opengl通过ID将图像分配给Unity中的纹理。
  • (最终)将用于在 Unity 中播放手机中的视频剪辑,目前,它只是尝试更改 Unity 之外的纹理。

我的问题:

当我调用插件中的方法并将texture.GetNativeTextureID()传递给它时,纹理不会改变。我目前仅使用简单的黑色 50x50 纹理进行测试,原始纹理是纯白色。

我担心我错过了一些重要的事情,因为这是我第一次在 java 中使用 Gl 调用。类似问题的许多答案都涉及使用 native C++ 而不是 Java,但我找不到具体的答案说必须使用 C++。我想尽力避免为 C++ 编写另一组插件和插件处理程序,但如果这是最有效/唯一的方法来实现此目的,我会这样做,因为我对 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();
    }
}

最佳答案

这很可能是 OpenGL 上下文的问题。最简单的方法是将纹理作为原始字节发送到 Unity,然后在 Unity 中作为纹理上传。

关于java - 尝试从 Unity 4.6 中的 Java 插件设置纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30642503/

相关文章:

java - JPA2/Hibernate - 停止延迟加载?

android - 包括带有 PhoneGap 的 QR 扫描器应用程序

android - 在android中按字母顺序对联系人进行排序

unity-game-engine - Unity 线渲染器不直

c# - 保存和加载音频

java - 什么是使用 JNI 的 byte[] 字节数组的方法描述符/签名?

java - 最终字段初始化顺序

android - Unity Android 调试信息

java - 获取列表Java中最旧的时间戳

java - Android - 找不到合适的构造函数