C++

_CrtSetAllocHookでメモリアロケーション検知

C++

VC++にはメモリアロケーションをフックするために、_CrtSetAllocHookという関数が用意されています。今回はこれを利用してみたいと思います。ちなみに_DEBUGマクロが定義されていないと動作しません。 Hook関数 アローケーション時にprintfする関数を定義し…

C++でImmutableクラス

C++

C++のクラスは、下記のように普通の書き方をするとmutableなものになります。 struct Person { std::string Name; int Age; }; 今回はこのクラスをImmutableなものにしてみます。 メンバーをconstに 下記のようにメンバーをconstにすると、コンストラクタの…

Boost Preprocessorでコンストラクタ生成

今回は、下記のように記述すると、その下のコードのように展開してくれるマクロを、Boost Preprocessorを利用して作成してみたいと思います。(実際には改行は生成されません。) struct Person { std::string FirstName; std::string LastName; int Age; CO…

C++ AMPで画像処理

今回はC++ AMPを利用して画像処理を行ってみたいと思います。下図のように、赤と青を入れ替える処理を実装していきます。 アプリケーションコード concurrency::arrayを利用するとint配列しか受け付けてくれないため、今回はconcurrency::graphics::texture…

OpenCLで画像処理

今回はOpenCLを用いて画像処理を行ってみたいと思います。下図のように、赤と青を入れ替える処理を実装していきます。 アプリケーションコード clCreateImageでもいいですが、今回はclCreateBufferで実装してみました。BMPの読み書きは下記記事のものを利用…

Direct3D11でボリュームレンダリング

ボリュームレンダリングの手法はいくつかありますが、今回はもっとも単純な、下図のように長方形のスライスを何枚も重ねて実現したものを実装したいと思います。 ボリュームデータ 下記ページにある、bunnyのデータを利用いたしました。 The Stanford volume…

Direct2D --- 画像読み込み

Direct2Dにおいて画像ファイルを読み込んで表示する場合、Windows Imaging Component (WIC)を利用します。今回は実際にそれを実装してみたいと思います。 画像ファイルを32bitRGBAで読み込み まずIWICImagingFactoryを作成し、factory経由でデコードを行いま…

SDL導入

画像処理コードの確認の際、C++で簡単にウィンドウを表示したいと思い、SDLを少し使ってみました。 SDLダウンロード 下記ページよりdllをダウンロードします。 Simple DirectMedia Layer - SDL version 2.0.7 (stable) shared_ptrに変換する関数定義(任意)…

Direct2D 独自Effectの作成(PixelShader利用)

下記記事にて、独自のEffectを作成しました。 Direct2D 独自Effectの作成 - 何でもプログラミングEffectの効果自体は、組み込みのID2D1OffsetTransformを利用していたので、今回は独自の効果(PixelShader)を定義してみたいと思います。下図のように、青と…

Direct2D 独自Effectの作成

下記の記事にて、Direct2Dの組み込みのEffectを利用してみました。 Direct2D Effectの利用 - 何でもプログラミング今回は独自のEffectを作成してみたいと思います。組み込みで用意されているOffset効果を利用して、描画結果をずらしてみます。本記事は上記記…

Direct2D Effectの利用

下記記事にて、ID2D1DeviceContextを利用して楕円を描画するところまで実装しました。 Direct2D導入(ID2D1DeviceContext) - 何でもプログラミング今回はID2D1DeviceContextで利用できるようになったEffectを実装してみたいと思います。上記記事で描画した…

Direct2D導入(ID2D1DeviceContext)

下記記事にて、ID2D1HwndRenderTargetを利用してDirect2Dを利用してみました。 Direct2D導入(ID2D1HwndRenderTarget) - 何でもプログラミングDirect2D 1.1からは、ID2D1DeviceContextを利用して実装するようになっています。今回はID2D1DeviceContextを用…

Direct2D導入(ID2D1HwndRenderTarget)

今回はDirect2Dを用いて、下記のような描画を行うところまで実装してみたいと思います。 ウィンドウ生成、表示関数 Direct2Dの描画先として、通常のWindowsのウィンドウを作成、実行する関数を準備します。内容は一般的なもので、特に変わったものではありま…

SSEで画像処理 --- グレースケール化

下記記事にてSSEで簡単な画像処理をしてみました。 SSEで画像処理 --- 導入 - 何でもプログラミング今回はカラー画像をグレースケール化する処理を実装してみたいと思います。入力はRGBA32bitを仮定しています。(RGB24bitの場合、48Byte毎に処理する必要が…

SSEで画像処理 --- 導入

下記記事にてアラインされたstd::vectorを作成する方法を記述しました。 アラインされたstd::vector - 何でもプログラミング今回はそれを利用して、SSEで簡単な画像処理を行ってみます。 準備 今回はintrinsicを用いて実装するため、#include します。また記…

アラインされたstd::vector

C++

SSEやAVXを利用して処理を高速化する際に、メモリ領域がアラインされている必要があります。アラインされた領域を確保するだけであれば_mm_mallocで可能ですが、_mm_freeを自分で呼ぶ必要があります。今回はstd::vectorでアラインされた領域を確保できるよう…

Bitmap読み書き

C++

下記記事にて、Windows標準ライブラリで画像を読み書きする方法を記述しました。 GDI+ --- 画像ファイル読み書き - 何でもプログラミングBitmapであれば更に何のライブラリも必要なく簡単に読み書きできます。ちょっとした画像関係の動作確認レベルの時に便…

WindowsでOpenGLES --- imgui導入

OpenGL上でGUIを実装するライブラリの一つに、ImGuiがあります。 GitHub - ocornut/imgui: Bloat-free Immediate Mode Graphical User interface for C++ with minimal dependencies数ファイル取り込むだけでGUIを実装できるため、簡単なソフトの作成には便…

WindowsでOpenGLES --- 三角形描画

下記記事にてGLFWで、OpenGLESが初期化されたウィンドウを作成しました。 WindowsでOpenGLES --- GLFW導入 - 何でもプログラミング今回はとりあえず三角形を描画してみたいと思います。 shared_ptrでリソースの管理 OpenGLではCreateとDeleteをきちんと管理…

WindowsでOpenGLES --- GLFW導入

下記の記事にてWIN32APIでOpenGLESを利用する方法を記述しました。 WindowsでOpenGLES --- ANGLE準備 - 何でもプログラミング今回は、ウィンドウの作成やOpenGLESの初期化などをクロスプラットフォームに行ってくれるライブラリ、GLFWを導入してみたいと思い…

WindowsでOpenGLES --- ANGLE準備

WindowsでOpenGLESを使いたい場合は、Google開発のANGLEが利用できます。 GitHub - google/angle: A conformant OpenGL ES implementation for Windows, Mac and Linux.ANGLEを利用すれば、OpenGLESで記述したものを、Direct3DやDesktop OpenGLでレンダリン…