2017-01-01から1年間の記事一覧

Elm Architectureを利用したMVVM --- C# WPF

下記記事にてF#でElm ArchitectureをWPFに導入してみました。 F#でWPF --- Elm Architectureを利用したMVVM - 何でもプログラミング今回はC#で近いものを実装してみたいと思います。F#の方ではサポートしたModel→ViewModelの変換は省略していますので、必要…

C# Immutableオブジェクト 導出項目のキャッシュ機能

C#

例として下記のようなVector2クラスを考えます。Lengthプロパティは、呼び出される毎に計算を行っています。処理が軽い場合は特に問題ありませんが、導出に時間がかかるプロパティは結果をキャッシュしてあるほうが好ましいです。今回はキャッシュを行う機能…

ImmutableオブジェクトのJSONシリアライズ、デシリアライズ(C#)

C#

今回はNewtonsoft.Jsonを利用して、Immutableオブジェクトをシリアライズ、デシリアライズしてみたいと思います。.NetにはDataContractJsonSerializerが標準で用意されていますが、DataContract、DataMember属性を付加する必要があり、動作のカスタマイズが…

ネストしたImmutableオブジェクトの更新(C#)

C#

C#(7.0)でImmutableクラスを作成する場合、下記のような記述になります。 public class Person { public int Age { get; } public string Name { get; } public Person Child { get; } public Person(int age, string name, Person child) { Age = age; Na…

WPF --- Bindingで配列をObservableCollectionに変換

現状、ItemsControlのItemsSourceに通常の配列をバインドした際、配列を新しくする度にコントロールが全て再作成されます。通常の配列の代わりにObservableCollectionをバインドすることにより、変更箇所のみViewが更新されるようになります。(要素の追加で…

F#でWPF --- Elm Architectureで実装されたUserControl

あるアプリケーションを作成した後に、それをコントロール化して更に大きなアプリケーションを作成したい時があります。今回は、下記記事で作成したカウンタアプリケーションをコントロール化してみたいと思います。 F#でWPF --- Elm Architectureを利用した…

DependencyProperty定義の記述量削減(F#)

下記記事にてC#でDependencyPropertyの記述量を削減してみました。 DependencyProperty定義の記述量削減 - 何でもプログラミング今回はF#でDependencyPropertyの記述量を削減してみたいと思います。内容はほぼAttachedPropertyの時と同じですので、下記記事…

F#でWPF --- ItemsControlのItemのCommand

作成するアプリケーション 複数の、クリック回数を表示するボタンからなるアプリケーションを作成します。追加ボタンにより、クリックできるボタンを動的に増やすことができます。 本記事ではElm Architectureを利用しますので、下記記事を参照してください…

Visual Studio 2017でプロジェクトテンプレート作成

F#でWPFプログラミングをする際、プロジェクトテンプレートにコンソールアプリケーションしか存在しないため、毎回参照設定などを追加する必要があります。今回はWPF用のプロジェクトテンプレートを作成してみたいと思います。 テンプレートの準備 まずは普…

AttachedProperty定義の記述量削減(F#)

下記記事にて、C#でAttachedPropertyの記述を削減してみました。 AttachedProperty定義の記述量削減 - 何でもプログラミング今回はF#でAttachedPropertyの記述を減らしてみたいと思います。C#版同様、プリプロセスやポストプロセスは利用しないで実装してみ…

AttachedProperty定義の記述量削減

下記記事にて、依存プロパティの定義の記述量を削減しました。 DependencyProperty定義の記述量削減 - 何でもプログラミング今回は同様に、添付プロパティの記述量を削減してみたいと思います。素のままでは下記のような記述になり、エディタ上で"propa"とタ…

LINQ独自オペレータ メモ

C#

C#のIEnumerableには、SelectやAggregateなど様々なオペレータが用意されています。本記事では、あったら便利な独自のオペレータを定義してメモしたいと思います。随時更新予定です。 ForEach なんだかんだで、やっぱりあると便利です。 public static void …

T4でImmutableクラスコンストラクタ作成(C#)

T4 C#

C#(7.0)でImmutableクラスを作成する際、下記のような記述が必要になります。 public class Person { public string Name { get; } public int Age { get; } public Person(string name, int age) { Name = name; Age = age; } } F#のレコードと異なり、コ…

DependencyProperty定義の記述量削減

独自のDependencyPropertyを定義する際、コールバックも含めると下記のような記述になります。 public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(int), typeof(Counter), new PropertyMetadata(0, (…

WPFでマウスドラッグイベント

WPFにはデフォルトでドラッグのイベントは用意されていません。今回はドラッグ用のイベントを実装してみたいと思います。記事内で利用しているObservableクラス、Disposeクラス、Subscribe関数は下記記事を参照してください。 C# eventをIObservableに変換 -…

C# eventをIObservableに変換

C#

eventからIObservableへの変換は、下記のRxのFromEvent関数にて行えます。 NuGet Gallery | Reactive Extensions (Rx) - Main Library 3.1.1今回は、Rxを導入するほどでもないとき用に、シンプルなものを自前で実装してみたいと思います。 Observer、Observa…

WPFとDirect3D11の連携 --- テクスチャ貼り付け

下記記事にて三角形を描画するところまで記述しました。 WPFとDirect3D11の連携 --- 三角形描画 - 何でもプログラミング今回はテクスチャを貼り付けて表示してみたいと思います。 Texture作成 Direct3D9側でD3DFMT_A8R8G8B8にてレンダリングターゲットを作成…

WPFとDirect3D11の連携 --- 三角形描画

下記記事にてWPFとDirect3D11を連携してサーフェスを表示しました。 WPFとDirect3D11の連携 --- 導入 - 何でもプログラミング今回は単純な三角形を描画してWPFで表示してみたいと思います。 Shader作成(csoから) csoデータが存在する場合は、下記関数のみ…

WPFとDirect3D11の連携 --- 導入

下記記事にてWPFとDirect3D9Exを連携する方法を記述しました。 WPFとDirect3D9Exの連携 --- 導入 - 何でもプログラミング最近ではDirect3D11の利用がメジャーになっていますので、今回はWPFとDirect3D11を連携させてみたいと思います。WPF自体はDirect3D9で…

WPFとDirect3D9Exの連携 --- テクスチャ貼り付け

下記記事にて三角形を描画するところまで実装しました。 WPFとDirect3D9Exの連携 --- 三角形描画 - 何でもプログラミング今回はさらにテクスチャを貼り付けを実装してみたいと思います。本記事で利用している、CreateVertexShader、CreatePixelShader、Creat…

WPFとDirect3D9Exの連携 --- 三角形描画

下記記事にてIDirect3DSurface9をWPFで表示しました。 WPFとDirect3D9Exの連携 --- 導入 - 何でもプログラミング今回は単純な三角形を描画してWPFで表示してみたいと思います。本記事で利用しているAssertHR、CliComPtr、CreateDevice、CreateRenderTargetに…

WPFとDirect3D9Exの連携 --- 導入

WPFにDirect3Dのレンダリング結果を貼り付けたい場合、D3DImageクラスが利用できます。CPU経由でBitmapSourceを作成するのに比べ、D3DImageはGPU内で完結するため、より効率的です。今回はD3DImageを利用するところまでを実装したいと思います。 C++/CLI用Co…

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でレンダリン…