syghの新フラグメント置き場

プログラミングTipsやコード断片の保管場所です。お絵描きもときどき載せます。

プログラミングTips

Visual Studio正規表現の否定先読み

(これは2010-08-06に書いた故OCNブログの記事を移植したものです)ある文字列を「含まない」行を正規表現(Regex)で検索したいとき、先読み機能が使えるPerlやPython、.NET、ECMAScriptなどでは、下記のようにします。 ^((?!foo).)*$先読み機能がないと、…

Direct2D Effectsで発光する雷をプロシージャル生成する

Windows 8で使えるようになったDirect2D 1.1には、多数の便利な機能が追加されています。ブレンドモード(Composite Mode)の制御のほか、シェーダーを利用したエフェクトが使えるようになりました。 エフェクトは頂点シェーダーで実装されているとおぼしき…

Visual StudioのツールボックスにWin32/MFC向けのコントロール一覧が表示されないとき

これはときどき発生する現象で、Visual Studio 2008など以前のバージョンでも存在していた現象なのですが、今回Windows 8.1にインストールしたVisual Studio 2012/2013両方にて発生しました。 何が原因でこの現象が発生するのかはよく分かっていないんですが…

OpenGLコンピュートシェーダー

(これは2013-01-30に書いた故OCNブログの記事を移植したものです)2013-01-05に公開されたNVIDIAのリテールドライバー310.90で、ようやくOpenGL 4.3が正式に使えるようになりました。最新世代のKeplerのほか、旧世代のFermiアーキテクチャのグラフィックス…

size_t, ptrdiff_tのprintf書式指定

(これは2010-12-05に書いた故OCNブログの記事を移植したものです)size_tとptrdiff_tはポインタ同様、32bit向け(_M_IX86とか)と64bit向け(_M_X64とか)でサイズと上下限が変わるプラットフォーム依存の整数型なので、printf()系の関数で出力する場合、書…

MSDN DirectX SDKヘルプの記載ミス

(これは2011-02-12に書いた、故OCNブログの記事を移植したものです)D3DX10 のヘッダーを調べればすぐに分かることなんですが、下記の ID3DX10Mesh::Optimize() メソッドに関して、2011-02-12 現在、MSDN のヘルプが間違っているので備忘録として残しておき…

PowerShellで特定の拡張子のファイルを再帰的に削除

(これは2011-02-12に書いた故OCNブログの記事を移植したものです)特定の拡張子(例えば.dat)のファイルを、下位のフォルダ内のファイルを含めて再帰的に削除したいとき、コマンド プロンプトでは del *.dat /sとすればいいんですが、問答無用で即コマンド…

C++正規表現ライブラリ(Regex)でCSV解析

(これは2011-01-30に書いた故OCNブログの記事を移植したものです)C++11 (C++0x TR1) には正規表現ライブラリとして <regex> が存在するんですが、こいつを使って簡単なCSV文字列解析処理を書いてみました。参考にしたのは下記。 CSV形式のファイルをDataTableや配</regex>…

HLSL warningの3000番台はdisableできない?

(これは2011-01-10に書いた故OCNブログの記事を移植したものです)例えばこういうHLSLコード(Direct3D 9, XNA)をコンパイルすると、X3550の警告が出ます。 // 指定したインデックスのボーン行列をテクスチャからフェッチする。 void VTFBoneMatrix(out fl…

Visual C++ 2010以降の追加ディレクトリ

(これは2010-05-04に書いた故OCNブログの記事を加筆修正したものです)2015-12-03追記: Visual C++ 2015にも言及するように修正しました。VC++ 2008までは、「ツール」→「オプション」→「プロジェクトおよびソリューション」→「VC++ディレクトリ」で設定で…

shared_ptrとconst

(これは2011-01-17に書いた故OCNブログの記事を加筆修正したものです)あんまり言及してる人がいないんですが、これはshared_ptrとconstを組み合わせて使う上でとても重要な機能です。普通組込のconstポインタあるいはconst参照経由では、const操作しかでき…

C++のmutableの使い道

(これは2010-10-20に書いた故OCNブログの記事を加筆修正したものです)C++のmutableはconstメソッド内でも変更可能なフィールドを定義する場合などに使います。mutableはヘタに使うと混乱を招くだけの余計な機能なんですが、こんな感じでスレッドセーフなク…

VC++ 2010以降のstd::set::iterator

(これは2011-02-13に書いた故OCNブログの記事を加筆修正したものです)C++11 (C++0x) 対応関連でSTLのstd::set::iteratorの仕様が変わって、VC++ 2010以降ではstd::set::const_iteratorと同じ型になっています。MS Connectへの報告はすでに存在しますが、こ…

GLSLが使いにくい件について

(これは2011-09-20に書いた故OCNブログの記事を加筆修正したものです)個人的にグラフィックス プログラミングが好きで、仕事でも趣味でもDirectXやOpenGLを使っているんですが、OpenGLの不甲斐なさにそろそろ愛想が尽きてきました。 具体的にDirectX (Dire…

コンピュートシェーダーの性能

(これは2011-10-08に書いた故OCNブログの記事を加筆修正したものです)DirectX 9世代のシェーダーモデル3.0までは、画面座標系でのポスト エフェクト処理(たとえばガウスぼかしやブルーム、トーン マッピング、SSAOなど)はレンダーターゲットを切り替えて…

boolとgetter/setterの命名

C++の命名規則に関する話です。普通getter/setter(いわゆるアクセッサ)であるようなメソッド名(メンバー関数名)には接頭辞にGet/Setもしくはget/setを付け、その後に内部フィールド名(メンバー変数名)などを続けるような形で命名すると思いますが、boo…

HTMLヘルプ作成でハマったこと

(これは2012-02-05に書いた故OCNブログの記事を移植したものです)Visual StudioのMFCアプリケーション プロジェクト ウィザードで、「高度な機能」の「コンテキスト ヘルプ(HTML)」ってのにチェックを入れておくと、HTMLヘルプ(コンパイル済みヘルプ、C…

WPFのAero2/AeroLiteテーマ

以前書いたModern UI for WPFの導入に関する記事にて、WPF 4.5におけるAero2/AeroLiteテーマの外観上の問題点について言及しましたが、具体的にどういうことなのか説明しましょう。 まずはサンプルコードから。WpfAero2ThemeTest1.zip以下はWindows 7でのス…

SquirrelスクリプトをWindowsストア アプリで使う

前回LuaスクリプトをWindowsストア アプリで使うという記事を書きましたが、それのSquirrel版です。本体はSquirrel Ver.3.0.6、C++バインダーには2014年現時点で最も完成度が高く導入しやすいと思われるSqrat Ver.0.9を使いました*1。Lua同様Squirrelも若干…

LuaスクリプトをWindowsストア アプリで使う

(これは2013-04-25に書いた故OCNブログの記事を加筆修正したものです)Windows 8上で動作する、Windowsストア アプリでスクリプト言語Lua 5.2とそのC++バインダーであるLuabind 0.9を使う方法です。そもそも公式の Luabind 0.9.1 はLua 5.2.x系列に対応して…

WPFアプリの外観をストア アプリ風に ―Modern UI for WPF―

(これは2013-05-13に書いた故OCNブログの記事を加筆修正したものです)Windowsストア アプリ(Windowsランタイム アプリ、WinRTアプリ)や、Outlook.com、OneDrive(旧SkyDrive)などで採用されている、Modern UI(旧称Metro UI)は、他のMS製デスクトップ …

Win32/MFCとWinForms/WPF相互運用

(これは2012-06-14に書いた故OCNブログの記事を移植したものです)以前からWin32/MFCとWPFの相互運用性(主にWPF 3.5 *1)に関して独自調査を続けているんですが、メッセージまわりでやはり問題がいくつか発生することが判明してきています。基本的にはWin3…

ダウンキャストに潜む罠

(これは2012-05-18に書いた故OCNブログの記事を移植したものです)C++のダウンキャスト(特に多重継承した場合)にまつわるお話です。例えばこんな感じ。 #include <cstdio> #include <conio.h> class Base1 { protected: virtual ~Base1() { puts(__FUNCSIG__); } }; class </conio.h></cstdio>…

C関数のis*系ルーチンの注意点

(これは2012-06-03に書いた故OCNブログの記事を移植したものです)C言語の <ctype.h> もしくはC++の <cctype> におけるisdigit(), isalpha(), isalnum(), isupper(), islower(), isspace(), ...とかの話です。もともとこいつらは引数の型がcharではなくintになっているんです</cctype></ctype.h>…

WPFレイヤードウィンドウのヒットテストを無効化

(これは2012-08-24に書いた故OCNブログの記事を移植したものです)WPFでレイヤード ウィンドウを作る場合、 WindowStyle="None" Background="Transparent" AllowsTransparency="True" のように設定するだけで簡単に実現できます。ピクセル単位のアルファ透…

AFX_EXT_API/AFX_EXT_DATA/AFX_EXT_CLASSの罠

(これは2012-06-05に書いた故OCNブログの記事を移植したものです)Visual C++のMFC拡張DLLを使って名前空間レベルのグローバル関数・グローバル変数やクラスそのものをエクスポートするとき、 extern AFX_EXT_API void MyGlobalFunc(); extern AFX_EXT_DATA…

XAMLルート要素のプロパティのローカライズ

(これは2012-06-19に書いた故OCNブログの記事を移植したものです)コレ、結構悩んだんですが、WPFにおいてWindowとかUserControlとかPageとかのルート要素のフォントなどをローカライズするためにリソース文字列を指定するには、(Attribute Syntaxは使わず…

不定値IND・非数NaNと浮動小数点演算速度

コードの単体パフォーマンステストをやっていて興味深い現象に遭遇しました。 演算途中で発生した不定値 IND (indeterminate value, -1.#IND) や、非数 NaN (not a number, 1.#QNAN) をそのまま計算に使い続けると、環境によっては正常値で演算する場合と比…

同次変換行列

(これは2012-08-04に書いた故OCNブログの記事を移植したものです)MSDNにあるDirect2Dの付録ページに書いてある、2次元の回転の3x3同次変換行列の数式が2012年8月現時点で間違っているので、とりあえず正しいものをC言語構造体っぽい形式で書いておきます。…

C++コンストラクタの初期化子リスト

(これは2010-09-24に書いた故OCNブログの記事を移植したものです)ちょっとしたマイナーテクですが、クラスのメンバー変数をコンストラクタでゼロクリアする際、下記のように書けます。 class SomeClass { struct Vector3 { float x, y, z; }; int m_intVal…