Archive for the ‘C++ 0x’ Category:

Metroスタイルアプリ開発をチェック

Friday, March 9th, 2012

Windows 8 consumer previewがリリースされたということもあり、少しずつMetroスタイルアプリの開発をチェックしています。
Learn to build Metro style apps
DirectX(Direct2D/Write/3D)とMetroを組み合わせたサンプルも公開されています。
Create your first Metro style app using DirectX
DirectXのAPIを呼んでいるところは変わりがないので、さほど難しくはなさそうです。
気をつけなければいけないのは、Win32 APIが一部利用できない点。
Win32 and COM for Metro style apps
どういう基準で選んでいるのかわからないけど、ネットワーク系はWinsockもWinHTTPも利用できない模様。Cryptographyも使えません。でも、TSF、UIAなどはOKとなっています。
TouchMindやGame of Life 3Dは移植できそうだけど、winsshlibはWinsockとCryptographyをメインで使っているから、だいぶ書き変えないといけないな…。

Archive for the ‘C++ 0x’ Category:

Metroスタイルアプリ開発をチェック

Friday, March 9th, 2012

Channel9にて公開されているC++ and Beyond 2011の動画にて、Andrei Alexandrescu、Scott Meyers、Herb Sutterの三名が、C++ and Beyond 2011の参加者からの質問に回答している。
その中で4:34からの「On shared_ptr performance and correctness」が興味深い。
質問の主旨としては、shared_ptrを関数やメソッドへ渡す場合、const参照で渡すべきかどうかということらしい。つまり、

void func(std::shared_ptr<std::string> s)
{
  ...
}

int main(int argc, char* argv[])
{
  std::shared_ptr<std::string> s = ...;
  func(s);
}

とするか、const参照にして以下のように渡すか、

void func(const std::shared_ptr<std::string> &s)
{
  ...
}

int main(int argc, char* argv[])
{
  std::shared_ptr<std::string> s = ...;
  func(s);
}

どちらがよいかということである。違いが出てくるのは速度である。const参照で渡さない場合、C/C++は値渡し(pass by value)が基本なので、関数の引数として渡すだけでshared_ptrのコピーが行われ、参照カウンタが+1されてしまう。対して、const参照で渡した場合、当然ながら参照渡し(pass by reference)なので+1されない。
Channel9の動画の中では、const参照で渡しなさいとのことである。

実際に、両方のパターンをQueryPerformanceCounterを使って時間計測してみたが、const参照で渡すケースはさすがに動作が速く、QueryPerformanceCounterでも測れませんでした。
実際のアプリケーションでどれだけの性能差が出るかは微妙ですが、Channel9の動画の質問者の環境では10%未満の差とのことです。
性能が向上するのは確かなので、shared_ptrを渡す際はconst参照で渡すが正しいようです。

Archive for the ‘C++ 0x’ Category:

Metroスタイルアプリ開発をチェック

Friday, March 9th, 2012

土曜日に「Just Do(土) It. × foursquareもくもく会」があったので、飛び入りで参加。せっかくだから、C++でFoursquareのVenues Platform APIにアクセスするAPIを作成しました。無駄にするのももったいないので、需要があるのかわかりませんが、それなりの形にまとめて公開することにしました。ソースコードはCodePlexで公開しています。内部では、WinHTTPでGETリクエストを送り、JSON CPPでJSONをパースしています。

Archive for the ‘C++ 0x’ Category:

Metroスタイルアプリ開発をチェック

Friday, March 9th, 2012

MacでOpenGLをやりたいと思っているのですが、せっかくマルチプラットフォームなOpenGLを使うならWindowsも動作確認をしておきたいということもあり、これから開発するアプリのひな形にと、Windows上で非常に単純なOpenGLアプリを作成してみました。ソースコードはこちらです。
ベースにしたのは、以前、Direct Xで作成したGame of Life 3Dです。こちらから、Direct Xに関連する部分を削除、そしてOpenGLの処理を追加しました。
WindowsでOpenGLを開発しようとして困るのが、どうやってOpenGL Contextを取得するのかという部分です。この部分は、環境依存となっており、統一した方法をOpenGL側では用意していません。そこで、多くの人が使うのがGLUTですが、これを用いると開発は簡単になるのですが、完全にブラックボックスになってしまい、プラットフォームの機能を十分に生かせません。なので、GLUTを使わず、参考にしている書籍「OpenGL 4.0 Shading Language Cookbook」にも書かれているGLEWを用いてみることとしました。また以下のOpenGL.orgの情報も参考にしました。

具体的にOpenGL Contextを作成しているのはGLContext.cpp内でです。58行目のアトリビュートにてOpenGLのバージョンを指定しています。ここでは、IntelのGPUでも動作するように2.1.0を指定しています。最新のGeforceやRadeonであれば4.2.0で動作します(手持ちのRadeon 6570とGeforce 460で確認済み)。

    static const int  att[] = {
        WGL_CONTEXT_MAJOR_VERSION_ARB,   2,
        WGL_CONTEXT_MINOR_VERSION_ARB,   1,
        WGL_CONTEXT_FLAGS_ARB,           0,
        WGL_CONTEXT_PROFILE_MASK_ARB,    WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
        0,
    };

今は単純に三角形を表示しているだけですが、GLSLもきちんと使っています。Ribbonは表示していますが、終了以外は特に何もしません。内部ではTSF、Animation、Touchなどのソースも残していますが、これといって何もしていない状態です。時間があったらもう少しアプリらしくしたいと思います。

Archive for the ‘C++ 0x’ Category:

Metroスタイルアプリ開発をチェック

Friday, March 9th, 2012

TouchMind 1.0.0 was released on December 12. I hope it’s stable. If you have any issues, please inform me.

Archive for the ‘C++ 0x’ Category:

Metroスタイルアプリ開発をチェック

Friday, March 9th, 2012

New application ‘Game of Life 3D’ released.