在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