C++

XAudio2を使ってみる。その5-スレッドによるポーリング-

ようやくthreadクラスが出来たので、以前(XAudio2を使ってみる。その4-ストリーミング再生- - while( c++ );)のストリーミング再生と組み合わせて、まずはポーリングスレッドを作ってみましょう。 auto_reset_event end( false ); //ポーリングスレッド終…

threadクラスの実装。その3-eventクラス-

condition variableのほうが一般的でしょうか? とりあえずwindowsなので、イベントのラッパーを作ってみます。 eventクラス #include <windows.h> class event { typedef HANDLE handle_t; public: event( bool manual_reset, bool init_state ) { handle = CreateEven</windows.h>…

threadクラスの実装。その2-intrusive_ptrを使う-

出来るだけdeleteは書きたくないので、前回実装したintrusive_ptrを使って修正します。 修正する項目は thread_data_baseクラスのデストラクタをprotectedにする thread_data_baseクラスに参照カウンタを追加。 thread_data_baseクラスにintrusive_ptr_add_r…

intrusive_ptrの実装。

C++

最近、個人的にはshared_ptrより使用頻度の高いintrusive_ptrを実装してみます。参照先のオブジェクト側で参照カウンタを管理するスマートポインタですね。 intrusive_ptrが実体化、コピーされるときにintrusive_ptr_add_ref(T*)、破棄されるときにintrusive…

threadクラスの実装。その1

XAudio2のイベント通知のためにthreadクラスが必要になったので、テンプレートを使って実装してみたいと思います。ただし、pthreadは使ったことがないので、windowsのみの実装になります。 参考サイト Boost.Threads 前回雑記で書いたthreadクラスの実装を晒…

XAudio2を使ってみる。まとめ

XAudio2のまとめ XAudio2を使ってみる。その1-初期化- - while( c++ ); XAudio2を使ってみる。その2-音の再生- - while( c++ ); XAudio2を使ってみる。その3-WAVファイルの再生- - while( c++ ); XAudio2を使ってみる。その4-ストリーミング再生- - whil…

XAudio2を使ってみる。その4-ストリーミング再生-

ゲームなどのBGMでWAVファイルを使用する場合、数十Mバイトのバッファを用意するのは現実的ではないので、数秒程度のバッファを使って少しずつ再生していきます。まずはイベント通知型ではなく、ポーリング型で実装してみたいと思います。 解説 SubmitSource…

XAudio2を使ってみる。その3-WAVファイルの再生-

XAudio2で音を再生する場合、音データを格納したバッファと音源となるSourceVoiceが必要になります。 // // SourceVoiceの作成 // if( FAILED( xaudio->CreateSourceVoice( &source_voice, WAVEフォーマット ) ) ) throw "CreateSourceVoice"; // // SourceV…

XAudio2を使ってみる。その1-初期化-

WindowsVista以降、DirectSound3Dを使ってハードウェア的に3Dオーディオエフェクトをかけることはできません。DirectSound - Wikipediaクロスプラットフォーム(WindowsとXbox)で共通に使える低レベルオーディオAPIである「Xaudio2」に置き換えられるそうです…

XAudio2を使ってみる。その2-音の再生-

音データを格納する「バッファ」と、音源となる「ソース」を作成し、音の再生を行います。 バッファの作成 音データのフォーマットはWAVEFORMATEX構造体で記述します。設定するメンバは「チャンネル数」「1サンプルあたりのビット数」「サンプリング周波数…

スレッドからSendMessageしてはいけない(場合がある)。

↑のような、スレッドを使ったストップウォッチ(StopWatch)を作っています。 Start/Stopボタン スレッドの開始/停止 Resetボタン 表示0、スレッド停止 スレッド 経過時間を表示 MVCのControllerは概ね以下のような処理になると思います。 class StopWatchCont…

階層型有限状態機械(Hierarchical Finite State Machine)の実装

C++

前回有限状態機械(Finite State Machine:FSM)の実装 - while( c++ );の続きです。 参考サイト http://www.issei.org/diary/?20040108 以下のような階層化されたステートマシンを実装します。 現在の状態 イベント 次の状態 アクション start state_0 state…

有限状態機械(Finite State Machine:FSM)の実装

C++

マルチスレッドなアプリケーションの状態遷移が楽になるかも? ということで、ステートマシンを使ってみます。 参考サイト、書籍 The Boost Statechart Library - Tutorial - 1.36.0 ゲームAI連続セミナー「ゲームAIを読み解く」 第4回 レポート (1/3):Code…

MVC

こちらOpenGL GUI Applicationを参考にMVCを使ったwindowsアプリに修正します。 まずは、OpenGLを使わずに単純なアプリで実験します。 ボタンを押した回数をカウントするだけのアプリ download VC++2008EE MVC Model アプリケーションのデータを動作を定義 V…

OpenGLを使ってみる。その4.2 -描画スレッドの停止条件を追加(WM_ENABLE)-

前回OpenGLを使ってみる。その4.1 -描画スレッドの停止と再開について- - while( c++ );のサンプルでバグがあったので修正します。 1.メニュー→ヘルプ→バージョン情報でモーダルダイアログを表示すると、ウィンドウが無効状態でも描画スレッドが実行さ…

SDKっぽいプロジェクトの作り方。

C++

DirectX SDKのようなSDKを作ってみましょう。(DLLは次の機会に) プロジェクトの設定 とりあえず以下のような構成でプロジェクトとディレクトリを作成します。 (VC++2008ExpressEdition) app(Win32プロジェクト) sdk(スタティックリンクライブラリ) i…

OpenGLを使ってみる。その4.1 -描画スレッドの停止と再開について-

前回OpenGLを使ってみる。その4 -描画スレッド- - while( c++ );のサンプルでは、ウィンドウのリサイズ時(WM_SIZE)のみ描画スレッドを停止していました。 つまり、ウィンドウを最大化・最小化した時や、メニューを選択している時も描画ループが実行されま…

OpenGLを使ってみる。その4 -描画スレッド-

リアルタイムな描画を行うために、描画スレッドを導入します。 一般的にはメインスレッド内でPeekMessageを使ってwindowsイベントを処理し、 アイドル時に描画する形になると思いますが、 メインスレッドはwindowsイベントに専念し、サブスレッドで描画して…

OpenGLを使ってみる。その3 -テクスチャ-

※terragenで生成した画像です。 サンプル opengl03.zip VC++2008EE OpenGLには画像をロードするための関数が用意されていません。 そのため、自力でロードするか、既存のライブラリを利用することになります。何を使うか迷ったのですが、プラットフォームはw…

OpenGLを使ってみる。その2 -2Dポリゴンの描画-

まずは2Dポリゴンを描画します。 サンプル [download] VC++2008EE ビューポートの設定 スクリーン上の座標で頂点座標を指定できるように、ビューポート、プロジェクション行列、ビュー行列を設定します。 プロジェクション行列はglOrthoで正射影行列を設定…

Aero Glass2

文字色の問題は原因がわからないので、先にAero GrassAero Glassの方を進めて行きます。クライアント領域を透明化する方法は、とりあえず2種類あるようです。 DwmEnableBlurBehindWindow()で指定したregionを透明化。NULLを指定するとクライアント領域全体 D…

Aero Glass

以下のようにクライアント領域全体を透明化してみましょう。 ただしボタンなどの黒い部分も透明になってしまいます。 C#で試してみる 参考サイト http://msdn.microsoft.com/ja-jp/magazine/cc163435.aspx サンプルをダウンロードして実行すると以下のような…

マニフェストを使ったビジュアルスタイルの変更。

あけましておめでとうございます。 今後も突っ込みどころ満載な、微妙な内容の日記になると思いますが、 宜しくお願い致します。 さて、2009年一発目は前回delegate5 - while( c++ );のコメントで教えて頂いた、マニフェストによるビジュアルスタイルの変更…

delegate5

前回delegate4 - while( c++ );の続き。以下のようなプログラムでフォームに対してボタンを配置することが出来る様になりました。 class HogeForm : public Form { private: ButtonPtr button1; ButtonPtr button2; public: HogeForm() : Form() , button1( …

delegate4

前回delegate3-C#風windowsアプリ - while( c++ );の続き。 日があいてしまったので、別エントリに書きます。 class.h アプリケーションで使用しているnamespace、クラス、列挙型の一覧を記述しておきます。 shared_ptrで管理するクラスはdef_managed_class…

delegate3-C#風windowsアプリ

以前の http://d.hatena.ne.jp/setuna-kanata/20081207/1228668906 delegate2 - while( c++ ); を使って、C#に近い形でwindowsアプリを作ってみます。もちろんC++/nativeです。 C#・C++/CLIを使え、とか突っ込まないで下さいw 目標 Formを継承したメインフ…

delegate2

C++

delegate1-boost::signalを読む - while( c++ );の続き。何となくboost::signalの仕組みがわかってきたので実装してみます。 目標 int hoge( int, float ) { return 1; } struct piyo { int operator()( int, float ) { return 2; } }; class fuga { public:…

delegate1-boost::signalを読む

C++

C++でC#っぽいdelegateを作ってみよう、というよくあるネタです。 というか、boost::signalですね。 ここBoost.Signals �`���[�g���A��を読むと非常に面白いです。 delegateを実装する際、戻り値の扱いをどうしようか迷っていたのですが、ここに解決策があり…

function-まとめ

とりあえず最低限の機能だけです。 function1 - while( c++ ); function2 - while( c++ ); function3-mem_fun - while( c++ ); function4-mem_fun - while( c++ ); function5-bind - while( c++ ); function6-bind - while( c++ ); function7-placeholder - …

function9-perlを使ってみる

絶望した!preprocessorに絶望した! 可読性が悪すぎですね。。。 VCでデバッグするのも一苦労です。 偉い人が言ってましたが、「使っておいしいものは使え。使えるものは使うな。」 まさにこれですね。 ということで、perl使ってみましょう。とりあえずwind…