Open6
em2native: macOS(ANGLE+Metal)対応
さぁラスボスだ。。
macOSにはOpenGL ESが無いものの、ANGLEを使うとOpenGLかMetalでOpenGLESを使用できる。ここはMetalで行きたいよな。。
ANGLEのMetalサポートは割と最近でcompletedとマークされたのが去年の9月となっている。
C
言語指定を見落してた
ココにも残ってるじゃん。 今のPR には入ってないから追加で出さないと。。というか何でGitHubのCIは通ってるの。。?
set_source_files_properties(${COCOA_SOURCES} PROPERTIES LANGUAGE C)
→ PR更新した
うごいた
これは辛いもんがあるぞ。。
SDLのCMakeの修正
明示的にObjective-Cとしてビルドする その2。
ANGLEの修正
diff --git a/src/compiler/translator/tree_ops/vulkan/EarlyFragmentTestsOptimization.h b/src/compiler/translator/tree_ops/vulkan/EarlyFragmentTestsOptimization.h
index 1d6a0b4b4..152d4f820 100644
--- a/src/compiler/translator/tree_ops/vulkan/EarlyFragmentTestsOptimization.h
+++ b/src/compiler/translator/tree_ops/vulkan/EarlyFragmentTestsOptimization.h
@@ -17,15 +17,17 @@ namespace sh
class TCompiler;
class TIntermNode;
-#ifdef ANGLE_ENABLE_VULKAN
+//#ifdef ANGLE_ENABLE_VULKAN
ANGLE_NO_DISCARD bool CheckEarlyFragmentTestsFeasible(TCompiler *compiler, TIntermNode *root);
-#else
+#if 0
+//#else
ANGLE_NO_DISCARD ANGLE_INLINE bool CheckEarlyFragmentTestsFeasible(TCompiler *compiler,
TIntermNode *root)
{
UNREACHABLE();
return false;
}
+//#endif
#endif
} // namespace sh
これはガチで謎。これはcommonなのでVulkanとそうでないところで実装を分ける理由がわからない。。もうちょっとソースを読む必要がありそう。
→ ANGLE_ENABLE_VULKAN
がMetalでも必須だった。というわけで立てるように修正したらパッチ不要になった。
ANGLE + MetalではCALayerを使用する
ANGLE側には特にドキュメントが無いが、とりあえずEGL的なNativeWindowとしてはCALayerを使用しているようだ。
bool DisplayMtl::isValidNativeWindow(EGLNativeWindowType window) const
{
ANGLE_MTL_OBJC_SCOPE
{
NSObject *layer = (__bridge NSObject *)(window);
return [layer isKindOfClass:[CALayer class]];
}
}
SDLにCAMetalLayerを作る機能が付いているので、それを利用して SDL_Window* wnd
から:
pfwnd = SDL_Metal_GetLayer(SDL_Metal_CreateView(wnd));
のようにして CAMetalLayer
を得ることができる。CAMetalLayerはCALayerのサブクラスなので、CALayerとしても使用できる。