【发布时间】:2014-08-27 15:41:43
【问题描述】:
在documentation of SCNView 中声明:
SceneKit 支持 OpenGL ES 3.0,但在 OpenGL ES 3.0 上下文中渲染时某些功能会被禁用
我无法在任何地方找到哪些功能被禁用。我想在 SceneKit 中使用我自己的着色器(将 SCNProgram 分配给我的材质),并尝试使用 3D 纹理。但我收到以下错误:
SceneKit: error, C3DBaseTypeFromString: unknown type name 'sampler3D'
所以我猜测 3D 纹理是禁用功能的一部分,但我无法在任何地方找到确认。我是否必须放弃 SceneKit 并手动使用 OpenGL 进行所有渲染才能使用 3D 纹理?
额外问题:为什么 Apple 在 SceneKit 中只支持 OpenGL ES 3.0 的一个子集,因为 iOS 已经完全支持?
【问题讨论】:
-
我设法通过共享上下文使其工作。我的意思是我创建了一个 OpenGL 上下文并使用
EAGLContext.setCurrentContext(context)将其设置为当前。之后,我可以执行所有设置代码,将数据作为 3D 纹理发送到 GPU 上。通过将我的视图的上下文设置为相同的上下文scnView.eaglContext = context,SceneKit 可以通过在handleBindingOfSymbol("name_of_uniform_for_my_3D_texture")中放置以下代码来访问我的纹理:glUniform1i( GLint(location), 0 )。视觉上它可以工作,但错误unknown type name 'sampler3D'仍然存在。
标签: ios objective-c swift scenekit opengl-es-3.0