[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
プログラミング、3DCGとその他いろいろについて
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
こちらも合わせてお読みください。
前回はGPUやCPUといったハードウェアを司るデバイスオブジェクトを扱いました。
しかし実はデバイスオブジェクトでは大したことはできません。
そこらへんXnaやDirectXに似ていますね。
そこで登場するのがこのコンテキストオブジェクトです。
コンテキストはひとつ以上のデバイスをまとめるオブジェクトです。
OpenCLに必要なGPUを動かす命令、メモリ領域などは全てこれを通して作ります。
コンテキストを生成するには、ComputeContextのコンストラクタを使います。
public ComputeContext(ComputeDeviceTypes deviceType, ComputeContextPropertyList properties, ComputeContextNotifier notify, IntPtr userDataPtr); public ComputeContext(ICollection<ComputeDevice> devices, ComputeContextPropertyList properties, ComputeContextNotifier notify, IntPtr notifyDataPtr);
deviceTypeはコンテキストが保持するデバイスのタイプです。
devicesはこのコンテキストを生成するのに使うデバイスです。つまり、コンテキストというのはデバイスをひとつ以上まとめたオブジェクトなわけですね。重複して同じデバイスが入っている場合は片方が無視されると昔の私のメモに書いてありました。propertiesはコンテキストを生成する時の情報です。プラットフォームの情報はここに入れます。
notifyはエラー情報を受け取るコールバック関数です。nullでも構いません。
userDataPtrとnotifyDataPtrは同じものでしょうか?とりあえずSystem.IntPtr.Zeroでいいでしょう。おそらくコールバックに渡されるユーザーデータでしょう。
using Cloo; using System.Linq; class Program { static void Main() { ComputePlatform platform = ComputePlatform.Platforms[0]; ComputeContext context = new ComputeContext( platform.Devices.Where(d => d.Type == ComputeDeviceTypes.Gpu).ToArray(), new ComputeContextPropertyList(platform), null, System.IntPtr.Zero ); context.Dispose(); } }
このプログラムは何も表示しません。
とりあえず、コンテキストの生成と破棄をするだけのプログラムです。