LoginSignup
1
2

More than 3 years have passed since last update.

Windows 10 on ARM における OpenGL に関するあれこれ

Last updated at Posted at 2021-01-23

OpenGL のライブラリがない…

現在提供されている Windows SDK (執筆時点では10.0.19041.0) には ARM64 用の OpenGL 関係のライブラリが収録されていません。

gl-lib_cut.png

これにはいろいろと理由が推測されてますが、大ざっぱなところは

  • デスクトップ向け OpenGL だとパフォーマンスが出ない説
    (Snapdragon はモバイルチップなので、GPU が OpenGL ES 向けに最適化されていると言う推測)
  • Windows は DirectX が標準なんだから、それを強制すればいいじゃん説
    (いわゆる Apple 的なあれですねw)
  • Microsoft や Qualcomm の開発リソースが不足している説
    (まあ、売れてないから優先度が下がるのは仕方ないよねぇ…😅)

というような見解が巷にはあります。

とは言え、個人的な趣味ではあるものの OSS なライブラリ等をビルドして使用しようとすると、やっぱり OpenGL ライブラリが欲しくなるのです。

自分に技術力(と、やる気?)があれば、代替えのライブラリ(GLES や Angle それこそ DirectX 等々)を構築して使用したりするのもありなのでしょうが、得てしてこれらは適用先ソースのコード修正が大規模になりがちです。

そんな自分への福音になるかは分かりませんが、一応、最近では こちらの Microsoft のブログ記事 にあるように、後入れプラグイン方式による提供の動きがあります。
(※ プラグイン提供に合わせて、開発用は今後の WinSDK に収録される見通し)

OpenGL のライブラリあるじゃん!(ただし、DLL)

まあ、そんな状況ではあるものの、今現在この状況を変えられるような情報はないものかと、ちょこちょこググっていた折に、 こちらの stack overflow 記事 を見つけました。
「おーっ、強引にバイパスさせるかぁ!」と感心するとともに、「OS側に opengl32.dll あるじゃん!😲」とちょっとテンション上がってサクッと Windows フォルダ内を見てみたところ、

opengl32_cut.png

上図のように、不思議なほどに沢山の(それもサイズの違う…)opengl32.dll が見つかりました。
他にも調べてみると glu32.dll と glmf32.dll がありました。
(※ x86 エミュレーション用や ARM32 用と推測されますが、多過ぎ…)

強引にやっちゃっていい??

そうやって調べているときにふと「そういえば昔 MinGW とかで提供されてない奴があった時に DLL から lib ファイルを作った記憶があるなぁ」と思い出したので、またちょいとググったところ、 Qiita に記事がありました。
(良記事ありがとうございます!)

記事に沿った作業で opengl32.lib, glu32.lib, glmf32.lib がサクッと出来上がりました。
(※ ダイナミックリンク用インポートライブラリです。スタティック用ではありません)
ベースにしたのはネイティブ確率が高そうな System32 直下の奴です。(上のリストで囲っている奴)

とりあえず、 こちらのサイト から OpenGL のサンプルソースを持ってきて(サイト主様ありがとうございます!)ARM64用ビルドして確認してみたところ、基本的な所は問題なさそうな感じでした。

ARM64-Win_OpenGL_20210123.png

こ奴、天狗になっておるぞ!

いやぁ、なんかダイナミックリンク用だけとはいえ、OpenGL ライブラリが手に入っちゃったので、調子に乗って vcpkg で、あれこれと ARM64 用に各種ライブラリをビルドしまっくっちゃいましたw

ARM64-Win_vcpkg-list_20210123_cut.png

とは言え、ARM64 用のビルドは現状いろいろと罠があり、一筋縄ではいかないことが多いですけどね…😅

なお、Windows 10 on ARM 上での vcpkg の効率を幾分でもよくするために、ちょこちょこと使用モジュールをネイティブ化してます。
vcpkg 自体をはじめ CMake や Ninja その他ビルドツール内の PowerShell や 7zip なんかも入れ替えてあります。

あと、vcpkg 作業自体には使用していないけど こちらの Arm Community の記事 を参考にして、Clang(自分のは LLVM R11)を ARM64 ビルドしたり、SakuraEditor(bregonig 含む)なんかも ARM64 ビルドしております。

調子ついでに Python(ARM64)での OpenGL

以前記事にした Python(ARM64)ですが、現在 V3.9x を使用しています。
前回は本体のことについてのみでしたが、やっぱり Python といえば pip ですよね!
とは言うものの、こちらも現状いろいろと罠があり、特にバイナリを含むパッケージは一筋縄ではいかないです…
そんな折、こちらの記事 を見つけました。
この記事を参考にあれやこれやと試行錯誤して、現状以下のようなモジュールを pip インストールしてます。
(一部、超趣味的な dragonpyemulator なんてものも入れていますが気にしないでくださいw)

ARM64-Win_pip-list_20210123.png

とりあえず、PyOpenGL を試してみるのに PyOpenGL-Demo も入れて試そうとしたのですが、これ Python2系 のソースなんですね… orz
困った時のぐぐ様頼みと言うことで、ぐぐ様にご紹介いただいた、こちらの方のブログ記事こちらのQiita記事 を参考に写経いたしました。
(ブログ主様および記事主様ありがとうございました<(_ _)>)

すべてのソースが修正できたわけではありませんが、まあ、7割くらいは問題なく動きました。
(※ 以下のスクショは静止状態ですが、全部ぐるぐる動くタイプのデモです。)

ARM64-Win_PyOpengl_20210123.png

おわりに

Apple が M1 Mac を出してから、にわかに ARM 系のエコシステム状況が変わりつつあるような気もしますが、相も変わらず Windows 10 on ARM は、なかなか相手にしてもらえないようです…😢
それでも、古のホビーパソコン(8bit系 BASICマイコン)のような、「ないものは作る魂」を養えるw 良いアーキテクトマシン だと思っています。
よろしければ皆様も Windows 10 on ARM ワールドに足を踏み入れてみませんか?
(○・ω・)r゙ オイデ~

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2