是否可以将视图(例如,WebView)渲染到FBO,以便它可以用作OpenGL合成中的纹理?
快速摘要:
我正在开发一个VR应用程序,我们想在VR场景中的3D空间中渲染一个网站,最好是在一个纹理上。有许多方法可以在台式机(PC / Mac)上完成此操作,而在Android设备上则没有。
细节:
我们在Windows上有一个可用的原型,该原型依赖Zen Fulcrum的Embedded Browser插件,但我们希望支持Android设备,例如Google DayDream,Gear VR,以及最终将在明年发布的基于Android的独立耳机。
这是到目前为止我发现的所有Unity网页渲染解决方案的列表:
我真的找不到任何信息,说明过去为什么不再支持Android。也许Android堆栈发生了变化?如果我想自己弄乱Chromium并使其在Android上运行,我是否会遇到死胡同杀死了所有这些项目?
Android SDK提供了本地WebView组件,该组件呈现为我们无法真正融入的独立屏幕元素。谷歌刚刚在Daydream中发布了Chrome VR浏览器的预览版,但是它还处于开发初期,我真的不认为他们打算为VR开发人员提供一个解决方案,以供其很快使用。Oculus拥有试验性的Carmel浏览器,但它似乎更专注于呈现WebVR,而不是为VR开发人员提供工具。我一直在与来自Oculus …
我无法将纹理绑定到a SurfaceTexture以在Unity中显示.
更新4:基于更新1中的管道(表面 - >外部纹理通过表面纹理 - > fbo - >纹理2d)我知道SurfaceTexture没有正确地将其表面转换为纹理.我可以通过pixelcopy从其表面获得正确的绘制图片,我可以确认我的FBO绘图到texture2d管道使用一些测试颜色.所以问题是,为什么SurfaceTexture不能将其表面转换为纹理?
我Texture在Java中生成一个并将其指针传递回Unity:
public void initGLTexture()
{
Log.d("Unity", "initGLTexture");
int textures[] = new int[1];
GLES20.glGenTextures(1, textures, 0);
mTextureId = textures[0];
GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTextureId);
GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
}
Run Code Online (Sandbox Code Playgroud)
我SurfaceTexture从id(在Java中)创建一个:
mSurfaceTexture = new SurfaceTexture(mTextureId);
mSurfaceTexture.setDefaultBufferSize(512, 512);
Run Code Online (Sandbox Code Playgroud)
我使用第三方库GeckoView渲染到SurfaceTexture的Surface上.我从Unity调用以下方法OnRenderObject()来保持所有GL渲染在同一个线程上:
mSurfaceTexture.updateTexImage();
Run Code Online (Sandbox Code Playgroud)
我知道上面的代码可以正确地绘制到表面上.
我在Unity中调用以下内容来加载纹理:
_imageTexture2D = Texture2D.CreateExternalTexture(
512,512,TextureFormat.RGBA32,false,true,(IntPtr) mTextureId);
_rawImage.texture = _imageTexture2D;
Run Code Online (Sandbox Code Playgroud)
为什么RawImage应用纹理只显示这个看起来精灵的东西,它应该是一个网页?
更新1:所以我一直在研究以下假设:使用Gecko绘制到Surface,并使用SurfaceTexture将此表面渲染为a GL_TEXTURE_EXTERNAL_OES …
android opengl-es unity-game-engine textureview android-unity-plugin