2014/04/30
Intel HD Graphics 4000 GPU と OpenGL
Intel HD 4000 は環境によって使用できる OpenGL Version に差があります。
詳細は下記ページに追加しました。
・Desktop GPU Extensions
Linux では OpenGL 3.3 止まりで Tessellator が使用できません。
その代わり Linux だけ GL_ARB_ES3_compatibility に対応しており OpenGL ES 3.0 命令が通ります。
libgles2-mesa-dev でも OpenGL ES 3.0 の DRI に対応していました。
・Desktop 向け OpenGL ES 2.0 / OpenGL ES 3.0 / OpenGL ES 3.1 実行環境
Windows 版ドライバも細かくアップデートされており、
10.18.10.3496 では GL_FRAMEHBUFFER_SRGB が有効になっていました。
以前は問題があった部分です。
GeForce/RADEON と比べると環境によって機能差が大きかったり、
いろいろ問題も多かったのですが、少しずつ改良が進んでいることがわかります。
関連エントリ
・Mac OS X 10.9 Mavericks の OpenGL 4.1 対応と Windows 8.1 Intel HD 4000 Driver
・OpenGL と sRGB
・OpenGL の各バージョンと GLSL の互換性
Intel HD 4000 OpenGL ES2 ES3 Driver ----------------------------------------------------------- Windows 8.1 x64 OpenGL 4.0 Y N (10.18.10.3496) Mac OS X 10.9 OpenGL 4.1 Y N Ubuntu 14.04 x64 OpenGL 3.3 Y Y
詳細は下記ページに追加しました。
・Desktop GPU Extensions
Linux では OpenGL 3.3 止まりで Tessellator が使用できません。
その代わり Linux だけ GL_ARB_ES3_compatibility に対応しており OpenGL ES 3.0 命令が通ります。
libgles2-mesa-dev でも OpenGL ES 3.0 の DRI に対応していました。
EGL_CLIENT_APIS: OpenGL OpenGL_ES OpenGL_ES2 OpenGL_ES3 GL_VERSION: OpenGL ES 3.0 Mesa 10.1.0 GL_RENDERER: Mesa DRI Intel(R) Ivybridge Mobile GL_VENDOR: Intel Open Source Technology Center GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.0
・Desktop 向け OpenGL ES 2.0 / OpenGL ES 3.0 / OpenGL ES 3.1 実行環境
Windows 版ドライバも細かくアップデートされており、
10.18.10.3496 では GL_FRAMEHBUFFER_SRGB が有効になっていました。
以前は問題があった部分です。
GeForce/RADEON と比べると環境によって機能差が大きかったり、
いろいろ問題も多かったのですが、少しずつ改良が進んでいることがわかります。
関連エントリ
・Mac OS X 10.9 Mavericks の OpenGL 4.1 対応と Windows 8.1 Intel HD 4000 Driver
・OpenGL と sRGB
・OpenGL の各バージョンと GLSL の互換性
2014/04/23
Maya 2015 ShaderFX のノード情報を読みだしてみる
ShaderFX は Plugin で実現されており、shaderfx コマンドを介して情報にアクセスできます。
内部の Node 構造は予想以上に複雑で、初期状態のデフォルトでも 1244個。
普段は Group 化されているため表に出てきませんが、
Group をすべて展開していくとこれだけの数になるようです。
以下、すべて読みだしてみるスクリプト。
HLSL/GLSL 等のシェーダー命令を 1つ 1つ Node 化しているようなイメージです。
関連エントリ
・Maya 2014 の Output Window と stderr
・Maya ShaderFX
内部の Node 構造は予想以上に複雑で、初期状態のデフォルトでも 1244個。
普段は Group 化されているため表に出てきませんが、
Group をすべて展開していくとこれだけの数になるようです。
以下、すべて読みだしてみるスクリプト。
// mel global proc a7ListShaderFx() { string $node_name= "ShaderfxShader1"; // 展開する Node 名 int $count= `shaderfx -sfxnode $node_name -getNodeCount`; int $root= `shaderfx -sfxnode $node_name -getHwShaderNodeRootGrpID`; int $hwnode= `shaderfx -sfxnode $node_name -getHwShaderNodeID`; print ( "count=" + $count + "\n" ); print ( "root=" + $root + "\n" ); print ( "hwnode=" + $hwnode + "\n" ); string $indent= ""; int $ni; for( $ni= 0 ; $ni< $count ; $ni++ ){ int $uid= `shaderfx -sfxnode $node_name -getNodeUIDFromIndex $ni`; string $class_name= `shaderfx -sfxnode $node_name -getNodeClassName $uid`; string $name= `shaderfx -sfxnode $node_name -getPropertyValue $uid "name"`; string $flag= ""; if( `shaderfx -sfxnode $node_name -isGroupStart $uid` ){ int $gend_uid= `shaderfx -sfxnode $node_name -getGroupEndUID $uid`; $flag+= "* Group START from " + $uid + " to " + $gend_uid; print "group start {\n"; $indent= " "; } if( `shaderfx -sfxnode $node_name -isGroupEnd $uid` ){ $flag+= "* Group END"; } if( `shaderfx -sfxnode $node_name -isGroupFromDisk $uid` ){ int $value= `shaderfx -sfxnode $node_name -isGroupFromDisk $uid`; $flag+= "* Group FROM DISK (" + $value + ")"; } print ( $indent + $uid + ": <" + $class_name + "> " + $name + " " + $flag + "\n" ); // Properties string $prop_list[]= `shaderfx -sfxnode $node_name -listProperties $uid`; for( $prop_name in $prop_list ){ string $prop_type= `shaderfx -sfxnode $node_name -getPropertyType $uid $prop_name`; switch( $prop_type ){ case "float4": print ( $indent + " " + $prop_name + " <" + $prop_type + ">= skip...\n" ); break; case "stringlist": { string $prop_value[]= `shaderfx -sfxnode $node_name -getPropertyValue $uid $prop_name`; print ( $indent + " " + $prop_name + " <" + $prop_type + ">=\n" ); for( $si in $prop_value ){ print ( $indent + " [" + $si + "]\n" ); } } break; default: { string $prop_value= `shaderfx -sfxnode $node_name -getPropertyValue $uid $prop_name`; print ( $indent + " " + $prop_name + " <" + $prop_type + ">= [" + $prop_value + "]\n" ); } break; } } // Sockets int $socket_type; for( $socket_type= 0 ; $socket_type < 2 ; $socket_type++ ){ int $socket_count= `shaderfx -sfxnode $node_name -getSocketCount $uid $socket_type`; int $si; if( $socket_count != 0 ){ switch( $socket_type ){ case 0: print ( $indent + " ** input socket\n" ); break; case 1: print ( $indent + " ** output socket\n" ); break; } } for( $si= 0 ; $si < $socket_count ; $si++ ){ string $socket_name= `shaderfx -sfxnode $node_name -getSocketName $uid $socket_type $si`; string $socket_stype= `shaderfx -sfxnode $node_name -getSocketType $uid $socket_type $si`; int $connected_count= `shaderfx -sfxnode $node_name -getConnectedSocketCount $uid $socket_type $si`; print ( $indent + " socket("+ $si + "): " + $socket_name + " <" + $socket_stype + "> c:" + $connected_count + "\n" ); int $ci; for( $ci= 0 ; $ci < $connected_count ; $ci++ ){ string $connected_node= `shaderfx -sfxnode $node_name -getConnectedNodeID $uid $socket_type $si $ci false`; string $connected_id= `shaderfx -sfxnode $node_name -getConnectedSocketIndex $uid $socket_type $si $ci false`; print ( $indent + " connected: uid=" + $connected_node + " socket(" + $connected_id + ")\n" ); } } } if( `shaderfx -sfxnode $node_name -isGroupEnd $uid` ){ $indent= ""; print "}\n"; } } }
HLSL/GLSL 等のシェーダー命令を 1つ 1つ Node 化しているようなイメージです。
関連エントリ
・Maya 2014 の Output Window と stderr
・Maya ShaderFX
2014/04/21
OpenGL ES 2.0/3.0/3.1 Emulator 情報
wiki 更新しました。
3.0 対応化が進んでおり、3.1 の機能も一部使えるようになっています。
・Desktop 向け OpenGL ES 2.0 / OpenGL ES 3.0 / OpenGL ES 3.1 実行環境
関連エントリ
・OpenGL ES 2.0/3.0 Emulator
・Desktop の OpenGL ES 2.0 実行環境
・OpenGL ES 2.0 Emulator
3.0 対応化が進んでおり、3.1 の機能も一部使えるようになっています。
・Desktop 向け OpenGL ES 2.0 / OpenGL ES 3.0 / OpenGL ES 3.1 実行環境
関連エントリ
・OpenGL ES 2.0/3.0 Emulator
・Desktop の OpenGL ES 2.0 実行環境
・OpenGL ES 2.0 Emulator
2014/04/06
iOS7 対応 SteelSeries Stratus ワイヤレスゲームコントローラー
iOS7 対応のゲームコントローラを購入してみました。
SteelSeries Stratus ワイヤレスゲームコントローラーです。
小型ですがボタン配列は標準的なもの。

↑大きさ比較 (下が Stratus)
・steelseries STRATUS
アナログスティックと L2/R2 が付いたタイプで、
GameController Framework からは ExtendedGamepad として認識されます。
接続は Bluetooth によるワイヤレスです。
指で画面が見えなくなってしまうこともなく、小さいながらも快適に操作できます。
左右2本のスティック (Thumbstick) はもちろんアナログ値ですが、
他のボタンも感圧式になっており、押した強さを受け取ることが可能です。
これはちょうど PS2 の DUALSHOCK2 や PS3 の SIXAXIS/DUALSHOCK3 のボタンと
同じ仕様になります。
十字キー (Directional Pad) や A/B/X/Y などの各ボタン、L1/L2/R1/R2 は
デジタルな ON/OFF と同時に API からは 0〜1.0 の値も得られます。
中央にある丸いボタンは Pause で、押した時のトリガのみ検出できます。
その上の 4 つの LED はプレイヤーの識別に用いられます。
つまり 4個のコントローラを接続したマルチプレイも考慮されているということ。
プレイヤー番号はコントローラ認識時にアプリケーションが割り当てる必要があります。
ゲームによっては認識したのに 4 つの LED が点滅したままになっている場合がありますが、
おそらくアプリが GCController の playerIndex を設定していないことが原因と思われます。
PC や Android では接続するコントローラによってボタンやスティックのマッピングが
異なっており、個別に対応したりカスタマイズ機能を設ける等の対策が必要でした。
iOS7 では仕様が決められているため、ボタン配列がずれることもなく読み出し方も一定で、非常に扱いやすくなっています。
なお Android 3.1 以降は Xbox360 USB Controller と PS3 (SIXAXIS/DUALSHOCK3)
Controller の有線 (USB) 接続に対応しています。
この両者を使う限りは、ボタンマッピングの食い違いもあまり考慮しなくて
済むようになっています。
Stratus は PC/Android でも HID としてペアリングは出来ますが、
ゲームコントローラとしては利用できませんでした。
関連エントリ
・Linux で Gamepad の値を読み込む & デバイスの判定
・Android 3.1 と GamePad のイベントの詳細 (2)
・Android 3.1 と GamePad のイベントコード
SteelSeries Stratus ワイヤレスゲームコントローラーです。
小型ですがボタン配列は標準的なもの。

↑大きさ比較 (下が Stratus)
・steelseries STRATUS
アナログスティックと L2/R2 が付いたタイプで、
GameController Framework からは ExtendedGamepad として認識されます。
接続は Bluetooth によるワイヤレスです。
指で画面が見えなくなってしまうこともなく、小さいながらも快適に操作できます。
左右2本のスティック (Thumbstick) はもちろんアナログ値ですが、
他のボタンも感圧式になっており、押した強さを受け取ることが可能です。
これはちょうど PS2 の DUALSHOCK2 や PS3 の SIXAXIS/DUALSHOCK3 のボタンと
同じ仕様になります。
十字キー (Directional Pad) や A/B/X/Y などの各ボタン、L1/L2/R1/R2 は
デジタルな ON/OFF と同時に API からは 0〜1.0 の値も得られます。
中央にある丸いボタンは Pause で、押した時のトリガのみ検出できます。
その上の 4 つの LED はプレイヤーの識別に用いられます。
つまり 4個のコントローラを接続したマルチプレイも考慮されているということ。
プレイヤー番号はコントローラ認識時にアプリケーションが割り当てる必要があります。
ゲームによっては認識したのに 4 つの LED が点滅したままになっている場合がありますが、
おそらくアプリが GCController の playerIndex を設定していないことが原因と思われます。
PC や Android では接続するコントローラによってボタンやスティックのマッピングが
異なっており、個別に対応したりカスタマイズ機能を設ける等の対策が必要でした。
iOS7 では仕様が決められているため、ボタン配列がずれることもなく読み出し方も一定で、非常に扱いやすくなっています。
なお Android 3.1 以降は Xbox360 USB Controller と PS3 (SIXAXIS/DUALSHOCK3)
Controller の有線 (USB) 接続に対応しています。
この両者を使う限りは、ボタンマッピングの食い違いもあまり考慮しなくて
済むようになっています。
Stratus は PC/Android でも HID としてペアリングは出来ますが、
ゲームコントローラとしては利用できませんでした。
関連エントリ
・Linux で Gamepad の値を読み込む & デバイスの判定
・Android 3.1 と GamePad のイベントの詳細 (2)
・Android 3.1 と GamePad のイベントコード
2014/04/03
Amazon Fire TV の性能
Amazon Fire TV は Qualcomm Snapdragon 600 APQ8064 搭載。
Kindle Fire HDX の Snapdragon 800 には及ばないものの、
Nexus 7 2013 の Adreno 320 より 1.5 倍高速です。
・Amazon Fire TV
より詳細な比較表は下記にまとめました。
・Game Console スペック
Google によると Nexus 7 (2012) Tegra3 と Nexus 7 (2013) は CPU で 1.8倍、GPU で 4倍差があるとのこと。(Impress 新型 Nexus 7)
また旧 S4 Pro の Adreno 320 と Snapdragon 800 Adreno 330 は演算能力で2倍の差となっています。(Qualcomm Snapdragon blog)
Snapdragon 600 の Adreno 320 はちょうどこの中間の性能。
さらに Snapdragon 600 Adreno 320 は Adreno 305 の 3倍以上の性能。(Snapdragon 600)
Amazon の新しい世代のデバイスは Snapdragon Adreno 3x0 で統一されています。
FireTV, Kindle HDX 向けアプリは Adreno 3x0 向けに最適化していくことになるでしょう。
ただし Fire OS は Android 4.2 (API Level 17) なので OpenGL ES 3.0 未対応。
・Qualcomm New Amazon Fire TV powered by Snapdragon 600 processor
関連ページ
・Game Console スペック一覧
・Mobile GPU bench mark
・CPU FLOPS
Kindle Fire HDX の Snapdragon 800 には及ばないものの、
Nexus 7 2013 の Adreno 320 より 1.5 倍高速です。
・Amazon Fire TV
Console SoC CPU clock core GPU GPU性能比予想 ----------------------------------------------------------------------- OUYA Tegra3 T33 Cortex-A9 1.7GHz 4 ULP GeForce(12) 1 Fire TV S600 APQ8064T Krait 300 1.7GHz 4 Adreno 320 6倍 Vita TV Cortex-A9 ?GHz 4 PVR SGX543MP4+ ? Nexus7 2012 Tegra3 T30L Cortex-A9 1.2GHz 4 ULP GeForce(12) 1 Nexus7 2013 S4 APQ8064 Krait 1.5GHz 4 Adreno 320 4倍 Kindle HDX7 S800 MSM8974 Krait 400 2.2GHz 4 Adreno 330 8倍
より詳細な比較表は下記にまとめました。
・Game Console スペック
Google によると Nexus 7 (2012) Tegra3 と Nexus 7 (2013) は CPU で 1.8倍、GPU で 4倍差があるとのこと。(Impress 新型 Nexus 7)
また旧 S4 Pro の Adreno 320 と Snapdragon 800 Adreno 330 は演算能力で2倍の差となっています。(Qualcomm Snapdragon blog)
Snapdragon 600 の Adreno 320 はちょうどこの中間の性能。
さらに Snapdragon 600 Adreno 320 は Adreno 305 の 3倍以上の性能。(Snapdragon 600)
GPU 比率 ALU ALU比 ---------------------------------------------- Snapdragon 400 Adreno 305 2 6 1.5 Snapdragon S4 Pro Adreno 320 4 16 4 Snapdragon 600 Adreno 320 6 24 6 Snapdragon 800 Adreno 330 8 32 8
Amazon の新しい世代のデバイスは Snapdragon Adreno 3x0 で統一されています。
FireTV, Kindle HDX 向けアプリは Adreno 3x0 向けに最適化していくことになるでしょう。
ただし Fire OS は Android 4.2 (API Level 17) なので OpenGL ES 3.0 未対応。
・Qualcomm New Amazon Fire TV powered by Snapdragon 600 processor
関連ページ
・Game Console スペック一覧
・Mobile GPU bench mark
・CPU FLOPS