deprecatedになったというニュースは、10年以上OpenGLESを使ってきた私にとって少なからずショックでした。Vulkanの存在は知っていたものの、当面の間OpenGLESも併存すると考えていたからです。人間になってしまう危機感を強く感じました。いつまでもナウでヤングな人間でいたいので、ある種ショック療法的に、Vulkanの勉強を始めることにしました。Metalじゃないのは、私が組み込み屋だからです。OpenGLESとVulkanとの差分について書いていければと考えています。いう概念のオブジェクトを取得します。それ以降、コンテキストやサーフェースを生成するにあたっての全ての親玉になります。世界観は「すべては画面表示(描画)のため」という思想にたっています。いうオブジェクトを生成するところから始まります。無味乾燥なオブジェクト名にしているのは、GPUを描画用としてだけではなくコンピューティング用として使うことも想定しているからだと思います。vkCreateInstance()VkInstanceを構築するAPIは次の通りです。作成されたインスタンスが格納されるホストCPU側のメモリ確保を行うメモリアロケータを外部から指定することができるあたりに仕様のこだわりを感じます。OpenGLESでは、ライブラリが内部で勝手にバカバカとmalloc()しますが、特に組み込み機器ではメモリ消費量のコントロールができないことが課題にされることもありました。VkInstanceCreateInfo構造体vkCreateInstance()の第一引数では、下記の構造体を設定情報として指定します。Vulkanの世界では、構造体の先頭メンバに、その構造体の型を明示的に記述させるようです。将来的にVulkanのバージョンアップにより構造体メンバの仕様が変更されてもアプリ互換性を維持するという目的のためでしょうか。アプリが誤って間違ったポインタを引数に渡してしまった場合でもそれを検知可能にすることを狙っているのでしょうか。グローバル拡張の名前};アプリが使いたいレイヤ(後述)および拡張機能は、あらかじめインスタンスを生成するタイミングで事前に宣言しておく必要があるようです。OpenGLESでは拡張機能に対する事前宣言の必要はありませんでした。して構造体を初期化しています。ぶら下げることもできます。このアプリ固有情報は設定してもしなくてもどちらでも良いです。アプリが使いたいVulkanのバージョン};アプリ名やエンジン名を指定することができますが、指定すると何が良いことがあるのでしょうか。Vulkanランタイムから見れば、「このアプリは有名なベンチマークアプリだ」ということを検知できるようになるので、例えば特定アプリを動かす時だけはGPUの制御ポリシをベンチマーク専用スペシャルモードに変化させて、電力をガンガン使ってでも、競合ベンダよりも良いスコアを出そうとする、なんてことは想像できます。そんなことを推奨しているのかな。いうズル(?)をするしないに関わらず、ライブラリとアプリとは疎結合であるべきだと思うのですけど。アプリが使いたいVulkanのバージョン指定もこの構造体でひとまとめに設定します。明示的に指定する必要がありました。それと同様に、将来Vulkan2.0が出た時にはここで指定するのでしょうか。今回のまとめvkCreateInstance()とその引数である構造体について勉強しました。OpenGLESでいえば、eglGetDispay()を呼んだにすぎません。こんなペースでやってたら、三角形一個を画面表示できるようになるのはいつになることやら。requestStockLike4@terrykyOpenGLESユーザでしたが、最近Vulkanの勉強を始めました。upLoginユーザーは見つかりませんでした。