「 プログラミング 」一覧

WordPress の記事の中に WebGL (1)


WordPress に埋め込みで、 WebGL などできるのかなと、実験中です。
一応、動くには動くようですが書き方が各所で解説されている方法とは違ってきますね。

WebGL でクリア

クリア処理までですが、ゴリゴリ記事の中に押し込めてみました。


Your browser does not support the canvas tag. This is a static example of what would be seen.




一応記事の中でもこれなら動きそうですね.3Dモデルが出せるくらいになったら解説記事を用意しようと思います。


UWPアプリのローカルインストールについて


Windows10 アニバーサリーアップデート(AU)が配信されて徐々に更新されていっているかと思います。この Windows10 AU で、ユニバーサルWindows プラットフォーム(UWP) アプリのインストールについて、更新がありました。
この変化が個人的に興味深いものだったのでご紹介します。

なお Windows8.xでのストアアプリの情報を把握仕切れていないため、新旧比較の点では間違いが含まれるかもしれませんのでご注意願います。
appx-install-helloappuwp-thumb

続きを読む



RPI2 の Windows10 IoT Core のカーネルデバッグ


Windows10 IoT Core アニバーサリーアップデートを適用した RPI2 で、カーネルデバッグができるように環境を構築してみました。

必要なもの

必要なものは以下の通りです

  • Win10 IoT Core 導入済み RaspberryPI2
  • LANケーブル
  • USB-シリアル変換ケーブル

自分が使用している USB シリアル変換ケーブルは以下のものです。
ちょっとドライバ導入に手間があったりしますが、使えています。


準備(WinDBG)

WinDBG を使う必要があるのでこれを入手します.
これは Windows SDK か Windows Driver Kit に含まれています。
Windows SDK のほうは WinDBG だけインストールも行うことができます。これは インストーラーでどの機能をインストール選択するかの際に、 “Debugging Tools for Windows” のみ選択で、 WinDBG のみをインストールできました。

ドライバの開発という点では Windows Driver Kit を使用しますが、デバッグ目的であれば Windows SDK を選択するのでよいのかなと思います。なお今回使用した Windows Software Development Kit は,Windows 10.0.14393.33 というバージョンのものとなっていました。
続きを読む


Windows10 IoT Core のアニバーサリーアップデート


デスクトップの Windows10 にアニバーサリーアップデートが来たように、 Windows 10 IoT Core についても アニバーサリーアップデートが来ました。今回はこれの導入手順や新機能などを紹介してみたいと思います。

導入について

以前にIoT Core を導入している場合で、 Windows 10 IoT Core Dashboard がインストールされている環境では、 Dashboard を起動すると以下のようにウィンドウが表示されて、更新を促されるので更新を行います。
win10-iot-update-01

ちなみに Windows 10 IoT Core Dashboard は以下のページから取得可能です。
Microsoft Windows 10 IoT Core Get Start
こららの詳細は、以前の導入記事を参照していただければと思います。

win10-iot-update-02
Dashboard から必要事項を入力して microSD カードにイメージデータを書き込みます
他に作業することはないのでしばらく待ちます。

書き込みが完了した microSD カードを Raspberry Pi 2 に装着して、電源をいれます。
初回起動にはそこそこの時間(5分程度)がかかるので、画面が落ち着くまで待ちます。

ちなみに OS のバージョンとしては 10.0.14393.0 となっていました
続きを読む


gcc 組込み関数(memcpyとか)のインライン展開抑制


アライメントに寛容な x86 の話ではなく、 ARM プロセッサのお話になります。OSが動いていてソフトウェア例外を処理できるような状況では非アライメントなデータであってもなんとか動くので表面化しませんが、そのアタリをケアしない状況ではプログラムが停止してしまう原因の1つです。

さて非アライメントなデータ列をコピーしたりクリアしたりする際に、memcpy, memset などを使用することがあります。
デバッグ時にはうまく動いていたのに、最適化を有効にしたリリースビルドでは, このあたりでうまく動作せずに例外を出してしまったりすることがあります。

仕方なくこれらの関数の自前版を用意してこちらを使うようにしてしまうのも1つの手です。しかし memcpy, memset などのまま対処することも可能なことがわかりましたのでここで紹介したいと思います。
ここまでに言い忘れてしまいましたが、 gcc を使用した開発環境でのお話です。

原因

そもそも最適化によって何が起こり、正常に動かなくなってしまうのか。この原因は gcc が自分の組み込み関数を使用し、最適化によってインライン展開されてしまうことによります。

インライン展開されてもアライメント寛容なコードであればまだ良かったりしますが、速度重視のために最適化されているのでそうはならないのが現実です。

対策

gcc のコンパイルオプションで実はこのインライン展開の抑制が可能です。
-fno-builtin-(functionname) というオプションになります。なので、 memset,memcpy らを抑制する場合には、 -fno-builtin-memset, -fno-builtin-memcpy といったようなオプションを指定することとなります。


マウスによるウィンドウのリサイズや移動処理を実装 (wayland)


前回のモデル描画を実装してみたところで中身が入った感じなので、ウィンドウとしてリサイズができるように処理を追加していきたいと思います。
実はこのウィンドウサイズのリサイズの処理のためにも、 EGL を使った描画実装に変更したのです。

まずは動作状況をお見せします。以下のような感じで動作するようになりました。

wayland-resize-window
続きを読む


GPUView の導入について


以前とりあえず GPUView を起動させてみることはやってみました。今回はそんな GPUView をもっと簡単に試せる方法が見つかったのでブログにまとめてみます。

通常の方法

簡単に使える版の前に通常の導入・使用方法をまとめておきます。

Windows Performance Kit の導入

GPUView は Windows Performance Kit の一部として含まれています。現時点ではこれが所属するパッケージが OS の種類によって異なります。

続きを読む


Wayland で EGL を使った描画に変更してみる


Wayland と weston でシンプルなアプリケーションを今まで作ってきましたが、このあたりで EGL を用いた方法に変更することにしました。他の情報ソースを見てみても、共有メモリ実装と EGL を使ったものの2種類に大別されているかなと思います。例によって調べてみて手探りでやっていたりするので、間違っていることもあるかと思いますのでご注意ください。
(Wayland プログラミングな書籍やまとめサイトっていつかできあがってくるのでしょうか)。 続きを読む