読者です 読者をやめる 読者になる 読者になる

S.F. Page

Programming,Music,etc...

CPlayerクラスを改造する

CPlayerクラスをそのまま使ってみようかなと思ったが、ソースコードはHRESULTの嵐である。まあ互換性を重視して、というかSDKのサンプルとして書くとこうなるのだろう。Vistaあたりの時代だからこうなるというのもあるね。 HRESULTのエラー処理をすべて例外…

キャプチャしながら再生するプログラムの作成(8)

ぼちぼちと直していたのだが、オーディオ・キャプチャ部分以外は割と動くようになった。ほとんどがBUG。エラー処理をきちんとしていないとか、COMポインタのRelease忘れとかそんなのだ。 ソースコード

キャプチャしながら再生するプログラムの作成(7)

出力・入力デバイスの管理クラスを作り直しているところ。DeviceWatcherを使ってでデバイスの情報取得・変更管理を行おうとしている。 やはりDeviceInformationからDeviceClassの値を得ることはできないようなので、DeviceInformation::CreateWatcherすると…

DeviceInformationからDeviceClassの情報は得られない?

DeviceInformation::PropertiesのKeyを列挙してみると下記の通りであった。 System.ItemNameDisplay System.Devices.Icon {51236583-0C4A-4FE8-B81F-166AEC13F510} 123 System.Devices.IsDefault System.Devices.DeviceInstanceId System.Devices.InterfaceE…

DeviceInformationからDeviceClassを得る方法

これがよくわからないんだな。 DeviceWatcher::Start()直後からEnumrationCompleteイベントまで既存のデバイスの情報がAddイベントの2番目の引数、DeviceInformationで通知される。その通知されるDeviceInformationがどのDeviceClassに属するか知りたい。列…

キャプチャしながら再生するプログラムの作成(6) – DeviceWatcherAdapter

結局TypedEventHandlerのアダプタはやめて、DeviceWatcherクラスのアダプタとして、イベントをboost.signalに変換するようにしてみた。 namespace en = Windows::Devices::Enumeration; namespace f = Windows::Foundation; ref class DeviceWatcherAdapter …

Using Advanced Query Syntax Programmatically (Windows)

Using Advanced Query Syntax Programmatically (Windows). DeviceInformation::CreateWatcherの引数で出てくるAQSなるもの。まだよくわかっていない。

キャプチャしながら再生するプログラムの作成(5) – イベント(デリゲート)をstd::functionに変換するラッパクラス | S.F.Page

前回作成したクラス(アダプタクラス typed_event_handler_adapterに改名)を使ってみたところ一応コンパイルは通ったが、ref newしたクラスの生存期間が?でかなり危険なコードのような気がする。 watcher_ = DeviceInformation::CreateWatcher(); watcher_…

キャプチャしながら再生するプログラムの作成(4) – イベント(デリゲート)をstd::functionに変換するラッパクラス

イベント(デリゲート)をstd::functionに変換するラッパクラスを作ってみた。 template <typename TSender,typename TResult> ref class typed_event_handler_wrapper { internal: typedef std::function<void (TSender,TResult)> wrapped_method_type; typed_event_handler_wrapper(wrapped_method_type wrapped_method</void></typename>…

キャプチャしながら再生するプログラムの作成(3) – デリゲートに使用できる関数ポインタ

DeviceWatcherのイベントにバインドするには、TypedEventHandlerにthisポインタとメンバ関数ポインタを引数にセットしてバインドすればいい。 watcher_ = DeviceInformation::CreateWatcher(); watcher_->Added += ref new TypedEventHandler<DeviceWatcher^,DeviceInformation^>(this,&wasapi_d</devicewatcher^,deviceinformation^>…

ビルドできるようになった。

ようやくC++/CXを使ってWinRT APIをDesktopアプリからいじれるようになった。ただいまコンパイルエラーと格闘中である。 WinRTで置き換わっている部分は古いAPIを使わないでおこう。PPLや新しいAPIたちも積極的に使っていこう。

C++CX入門/プロジェクトの作成 - WisdomSoft

C++CX入門/プロジェクトの作成 - WisdomSoft. WinRTをコンソールアプリからアクセスする方法。基本的にはIntelのサイトに載っていた情報と同じ。

C++/CX Part 0 of [n]: An Introduction - Visual C++ Team Blog - Site Home - MSDN Blogs を読む(1)

C++/CX Part 0 of [n]: An Introduction引用元: C++/CX Part 0 of [n]: An Introduction - Visual C++ Team Blog - Site Home - MSDN Blogs. この記事を少しずつ読んでいる。この記事の目的はWindows Runtime コンポーネントのABIを議論したり、C++で書いた…

C++/CX Part 0 of [n]: An Introduction - Visual C++ Team Blog - Site Home - MSDN Blogs

C++/CX Part 0 of [n]: An Introduction - Visual C++ Team Blog - Site Home - MSDN Blogs. C++/CX Part 1 of [n]: A Simple Class - Visual C++ Team Blog - Site Home - MSDN Blogs. C++/CXの解説かな?頑張って読んでみようか。

Windows 8 RTM ではURL エンコード/デコード APIが追加されている。

「Windows 8 RTM を開発者向けに提供開始 - Windows 8 アプリ開発者ブログ - Site Home - MSDN Blogs」にRelease Previewからの移行ガイドへのリンクがあったので読んでいたら、新しいAPIとしてWindows::Foundation::Uri::EscapeComponent/UnescapeComponent…

Twitterのアプリ承認部分の実装を進める

OAuthとかWeb認証とかそのあたり。まああんまり詳しくないので基本的なところから勉強している。コードについてはサンプル・コードを見ながらMVVMっぽくなるようにスクラッチで作るつもり。もちろんAPIでカバーできるところは使うけれど。

c++ で INotifyProperyChanged をどう実現するか? | Moonmile Solutions Blog

c++ で INotifyProperyChanged をどう実現するか? | Moonmile Solutions Blog. 私はまだこれを理解し使えるレベルにはなっていないのだがとりあえずチェックしておこう。

c++/cx metro の場合 mvvm がどのように実装されているか | Moonmile Solutions Blog

c++/cx metro の場合 mvvm がどのように実装されているか | Moonmile Solutions Blog. ちょうどいいタイミングでこのコンテンツを発見。

チュートリアル: C++ を使った初めての Metro スタイル アプリの作成

チュートリアル: C++ を使った初めての Metro スタイル アプリの作成. おとといから読んでいるが結構長いのでまだ読み切れていない。

std::function と ref classとlambdaとdelegate

下記のコードがコンパイルエラーになる。 MainPage::MainPage(GameMain^ g) : gameMain_(g) { InitializeComponent(); std::function<void (Windows::UI::Xaml::Controls::Page^ )> f(std::bind(&MainPage::Subframe,*this,std::placeholders::_1)); gameMain_->SetSubFrameFunc(f); } void MainPage::Sub</void>…

インテリセンスの問題は回避した

いろいろ試してみた結果、ref classを前方参照しているヘッダから前方参照を取り除いてみると回避できた。 でもコンパイルは元のままでも通るんだよね。言語的には問題はないということだよね。やっぱりインテリセンスのBugかな。

VC2012のインテリセンスが使えなくなってしまった

インクルードファイルの構成を変更してたらインテリセンスが使えなくなってしまった。パラメータヒントを表示しようとするとステータス表示に進捗表示されるのだがそのままいくら待っても表示されない。そのまま応答なしになってお陀仏である。 強制終了して…

リソース管理で混乱する

XAMLでUI作っていくとWinRTオブジェクトが当然登場するのだけれども、これと旧COMを混同したりとか、スマポとか従来C++のリソース管理がごちゃごちゃしてきて頭の中がこんがらがってくる。3つの異なるリソース管理をしないといけないのは面倒だね。

XAMLによるUIの実装を続ける

Boost.MSMで状態管理ができるようになったので、XAMLによるUIの実装を続けることにする。

Metro Style Appsのmain関数

app.g.hppにあった。普段は目にしないけど、コンパイラが自動生成するんだね。パラメータがString^なのが目新しいところか。DISABLE_XAML_GENERATED_MAINを定義すると自前でmain関数を定義できるんだな。 #ifndef DISABLE_XAML_GENERATED_MAIN int main(Array<String^></string^>…

プロジェクトファイルの作り直し

XAMLに取り組む前に、プロジェクト・ファイルを作り直すことにした。続いてテンプレートで作られるコードに以前作ったものをConsumer PreviewからRelease Previewへの変化を考慮しながらマージしていく。もちろんサンプルも参考にしながら。 サンプルコード…

threadをtaskに

音声再生処理をスレッドから非同期タスクに変更してみた。まあ内部的にはスレッドを使用してるんだろうけどコードの見た目わかりやすいので。サンプルコードを見ていてもうスレッドを生で使うようなことはしていない。とうとうスレッドも抽象化され隠ぺいさ…

Release Previewで動くようになった

とりあえず動くようにしてみた。ActivateAudioInterfaceAsyncへの対応はすこししょぼい感じになってしまった。PPLやWinRTなどの知識が肥えてきたらまた見直すことにしよう。 ソースコード

COMとWinRTが頭の中でごっちゃになっている

「ActivateAudioInterfaceがdeprecateになってしまった」件で、私はIActivateAudioInterfaceAsyncOperationがIAsyncOperationの継承インターフェースかなと思っていたんだけど違っていた。IActivateAudioInterfaceAsyncOperationはレガシーCOMスタイルのイン…

ref classはsealedでないとpublic:が使えない。

Visual Studio 2012からref classはsealedでないとpublic:が使えなくなった。public:の代替としてinternal:を使うようだ。以前のコードをコンパイルしてわかった。

Implementing MicroThread / Coroutine via esp-swap for Danmaku Shoot...

Implementing MicroThread / Coroutine via esp-swap for Danmaku Shoot.... マイクロ・スレッド(コルーチン)によるシューティングゲームの製作。コルーチンを使うと状態変数の数が減ってコードの見通しもすごく良くなる。シューティングゲームにはもって…

サウンド再生スレッドを別スレッドにしてみた

XAudio2によるサウンド再生部分を別スレッドにしてみた。スレッドはstd::threadを使用した。 GameMain::GameMain() : backBufferViewPort_(0.0f,0.0f,BACKBUFFER_WIDTH,BACKBUFFER_HEIGHT), isDestroy_(false) { // サウンド再生スレッドの開始 soundThread_…

テクスチャをセル単位で表示できるようにする

テクスチャをセル単位で表示できるようにSimpleSpriteサンプルを変更している。たとえば下記のテクスチャだと赤い枠で囲った部分だけを表示できるようにする。 やり方はテクスチャのuv座標をいじって対象矩形をマッピングするだけだ。新たにシェーダーに矩形…

結局Z座標でソートした

結局描画前にZ座標でソートすることで優先順位制御をすることにした。下のスクリーンショットは飛行機を右斜めしたに順に優先順位が高くなるように描画してみたものだ。

GPUとCPUとのコミュニケーション

CPUとGPU間のコミュニケーション・コードとかHLSLとかまだよくわかんないな。。でも面白いな。 このあたりをいじっているとFM-7を思い出す。「YAMAUCHI」コマンドとかなんとかでビデオ処理のSUBCPUにプログラムを送って動かしたりできたよね。

スプライトの優先順位に取り組む

SimpleSpriteサンプルをベースにZバッファを使ってスプライトの優先順位を設定できるようにコードを変更し始めた。 HLSLまわりをいじってZバッファーに指定した値を書き込めるようにすればよいのかな? SimpleSpriteサンプルはテッセレーションの機能を使っ…

バックバッファの拡大表示

バックバッファの拡大表示はできた。まあ実画面サイズにスケーリングするだけなので簡単だが。 真ん中に32*32のスプライトを配置してみた。32*32でもでかいね..。アンチエイリアスが効いているのでぼけた感じがする。アンチエイリアスを無効化するか..。

UIデザイナーの問題はまだ解決しない

SwapChainBackgroundPanelを配置したXAMLコードをコンパイルするとUIデザイナで表示されなくなる問題はまだ解決していない。もう少し切り分けしてみるかな。。

スワップチェーンとSwapChainBackgroundPanelとの結び付け

Simple3DGameXAMLサンプルコードをぼちぼちと読んでいる。興味のあるところはスワップチェーンとSwapChainBackgroundPanelとの結び付けの部分だ。こうなっていた。 // Create the swap chain and then associate it with the SwapChainBackgroundPanel DX::T…

Metro Style Appでの初期化処理

Metro Style Appではwaitなどのブロックは継続をパラメータとしたtask::then中以外では禁止となっているようだ。とすると常に非同期を意識して処理しなければならない。初期化処理も同様である。私の場合初期化処理は時間がかかってもまあいいだろうとか思っ…

出た!STAの例外

wasapi管理クラスをテストしたら出た!STAに関する例外! スレッドモデルのルールに抵触しそうなことはまだしてないんだけどね。。というかまだルールもわかっていないので抵触しているのかさえもわからない状態。スレッドモデルのところはきっちり押さえと…

WASAPI管理クラスのコンパイルは通るようになった。

WASAPI管理クラスのコンパイルは通るようになった。 これをMetro UIと結び付ける必要があるのだが、面倒臭いんだよね。データバインドを使いたいところだけど、WASAPI管理クラスはref classじゃないので簡単にはできなさそう。ref classを使うとデータバイン…

XAML と DirectX の統合 - Windows 8 アプリ開発者ブログ - Site Home - MSDN Blogs

XAML と DirectX の統合 - Windows 8 アプリ開発者ブログ - Site Home - MSDN Blogs. おお、ようやく翻訳されたか。

コードの変更

以前作ったCore Audio管理クラス群をWindows8に移植し始めた。今のところ、 __com_ptrはMicrosoft::WRL::ComPtrに変更 MMDeviceによるデバイス列挙はWindows::Devices::Enumerationに変更 IAudioClient2のActivateはActivateAudioInterfaceに変更 eDataFlow…

Threading and Marshaling

Threading and Marshaling. スレッドモデルとマーシャリングに関する情報。大の苦手。

STAとMTA

STAとMTA. Metro StyleであってもSTA/MTAの考え方は健在なようだ。XAML UIはやっぱり伝統のSTAなのかな? このあたりかなりいい加減な知識なので整理して覚えておきたい。

Sleepの代替

Sleepが使えないというのはちょっとした話題になっていたようだ。 How used sleep function in windows 8 consumer preview version Thread.Sleep in Win8 Is there a supported API in Metro for replacing "Sleep" ? Sleepの代替としては.NET4.5のTask.Del…

非同期プログラミング - PPL を使用した C++ での非同期プログラミング

非同期プログラミング - PPL を使用した C++ での非同期プログラミング. Windows 8ではPPLを多用しそうだ。勉強せねば。。

IAudioClientをActivateするには?

Windows::Devices::Enumerationでサウンドデバイスを列挙することができることはわかったが、DeviceInformationからどのようにしてIAudioClientを得るのかがよくわからない。おそらくActivateAudioInterfaceなのだろうがドキュメント化されていない。ヘッダ…

Asynchronous programming in C++

Asynchronous programming in C++. Concurrency Runtimeを使用したC++における非同期処理について。