在SCNView的文件(这里:https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNView_Class/index.html#//apple_ref/occ/instp/SCNView/eaglContext)则指出:SceneKit支持的OpenGL ES 3.0的子集是什么?
SceneKit supports OpenGL ES 3.0, but some features are disabled when rendering in a OpenGL ES 3.0 context
我找不到任何地方它的功能被禁用。我想使用自己的着色器与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)'将其设置为当前。之后,我可以通过我的所有设置代码将数据作为GPU上的3D纹理发送。通过将我的视图的上下文设置为相同的上下文'scnView.eaglContext = context',SceneKit通过将以下代码放置在'handleBindingOfSymbol(“name_of_uniform_for_my_3D_texture”)':'glUniform1i(GLint(location),0) '。它在视觉上有效,但错误“未知类型名称”sampler3D''仍在此处。 – morph208 2014-08-29 13:28:07