--------------------------------------------------------------------------
【  ソフト名   】HSPCL32.dll
【 バージョン  】4.02
【    作者     】pippi
【  必要環境１ 】WindowsXP以降
【  必要環境２ 】HSP Ver3.0以降
【  必要環境３ 】OpenCL,OpenGL対応グラフィックボードまたはCPUまたはCellプロセッサー
			GeForce 200 Series以降（？）
			R700 世代 (HD 4xxx)以降（？）
			HD Graphics 2500/4000以降(Ivy Bridge以降)
【  取扱種別   】フリープラグイン
【    内容     】HSP3用GPGPUプラグイン
【     HP      】http://toropippi.web.fc2.com/
--------------------------------------------------------------------------

■使用方法
１、「HSPCL32.dll」をHSPインストールフォルダ「C:\hsp332」ないしは「C:\Program Files (x86)\hsp332」か「C:\Program Files\hsp332」へコピーして下さい。
２、「hspcl32.as」をHSPインストールフォルダの「common」フォルダの中へ入れて下さい。
３、ヘルプデータをコピーしたい場合は、「doclib」フォルダ自体をそのままHSPインストールフォルダの中へ上書きして下さい。




■概要
これはHSP3から簡単にOpenCLを扱うことができるプラグインです。
最短で2つの命令で、OpenCLによる計算を行うことができます。
これを導入することにより、すぐにGPGPUで高速演算を楽しむことができるようになります。


今やGPGPUプログラミングで使う言語はCUDAかOpenCLです。
CUDAにしろOpenCLにしろC++をまず勉強してからじゃないとなかなかすぐには扱えません。
C++に至ってもまずVC＋＋の使い方を学ばなければいけません。
ディレクトリ設定から始まり、32bitアプリケーションにするか64bitアプリケーションにするか、コンソールアプリケーションにするかウィンドウアプリケーションにするか、マルチ バイト文字セットを使用するだのUnicodeだの、V100だのV90だのWindows7.1SDKだのと、GPUで計算したいだけなのに、こんな意味のないことに時間を割くのは余りにバカらしいですよね。

このプラグインはHSPをインストールして「HSPCL32.dll」と「hspcl32.as」を正しい位置にいれればすぐにGPGPUができるので、導入が非常に楽です。


今すぐに数値計算を行ないたい人にピッタリです！


またHSP3プログラムソース内でfloat型も扱えるようになります。
またOpenGLの関数を利用したモジュールも豊富に使えます。


■インストール
HSPインストールフォルダにHSPCL32.dllをコピー
アンインストールはゴミ箱に削除


■注意点
このプラグインでは速度を優先したためメモリアクセス違反に対して防護する機能がありません。
よって、アクセス違反によるエラーがシステムに影響を及ぼすことがあります。

最悪、ブルースクリーンになったり、グラボからの信号が途絶え画面が落ちたり、グラボがフリーズしたりなどの現象が起こります。
サンプルに陥りやすいエラーサンプルを用意したので、それを参考になるべくコードミスはないように気をつけて下さい。
基本的に同じソースなら、メモリアクセス違反は１つの環境で起こらなければ別の環境でも起きることはないと考えてください。

これに関するいかなる損失も、当方は責任を負えません。
十分注意して下さい。


■配布場所
http://toropippi.web.fc2.com/
■スペシャルサンクス
このプラグインの完成のために何百回とデバッグして下さったdedpさんは、本当にありがとうございます。
デバッグ環境はNVidia GTX 460でした。
■連絡先
efghiqippi@yahoo.co.jp
■免責
このプラグインの使用により発生した如何なる問題について当方は一切の責任を負いません。

■著作権
著作権は一部を除いて、pippiが保有します。

HSPCL32.asの「varsize」関数は「Kerupani129 Project」さんから拝借し
HSPCL32.dllの「HSP3でfloat型変数が扱える」機能は、HSPインストールフォルダの「hspsdk」内のサンプルをそのまま拝借、使用しております。
サンプル内の飛行機のモデルデータは
https://sites.google.com/site/tobashomesouko/home/hikouki-3dcgdeta
から拝借いたしました。

■更新履歴
    Ver 4.02
	2014/11/24
	一部の命令の高速化
    Ver 4.01
	2014/10/30
	HCLini実行時、HCLbye実行時、一部のデバイスで画面が黒くなる現象を改善
    Ver 4.0
	2014/10/29
	mqoファイルを読み込めるように命令追加。
	リファレンス、サンプルを充実(?)
	「HCLDoKrn1_sub」追加
	「HCLCall」のローカルワークサイズの指定を自動に
	「HCLDoKrn1」〜「HCLDoKrn3」と「HCLDoKernel」でローカルワークサイズに0を指定した場合にローカルワークサイズが自動で決定されるように変更
	「HCLini」に引数を指定できるように変更
	「clGetDevInfo」の廃止
	HCLGetDevCLflgデバイス情報取得
	HCLGetDevfp64flgデバイス情報取得
	HCLGetDevGLflgデバイス情報取得
	HCLGetDeviceInfo_iデバイス情報取得
	HCLGetDeviceInfo_s
	を追加
	「HCLCreateProgramWithSource」追加
	「HCLCreateBuffer」ですぐにバッファーが作られないバグ修正
	convRGBAtoRGBフォーマット変換
	convRGBtoBGRフォーマット変換
	convRGBtoRGBAフォーマット変換
	HGLCreateBufferVRAM作成
	HGLCreateTexture1テクスチャ作成
	HGLCreateTexture1_texload画像テクスチャ作成
	HGLCreateTexture2テクスチャ作成
	HGLCreateTexture3レンダリング可能テクスチャ作成
	HGLgcopy2D画像描画
	HGLgrotate2D画像回転描画
	HGLMqoDrawmqo描画
	HGLmqoloadmqoデータロード
	HGLMqoSetAngmqo回転
	HGLMqoSetPosmqo位置セット
	HGLMqoSetScalemqo倍率変更
	HGLmulQuaternionクオータニオン掛けあわせ
	HGLReadBufferVRAMから読み込み
	HGLReadTextureテクスチャ読み込み
	HGLReleaseBufferVRAM破棄
	HGLReleaseTextureレンダリング可能テクスチャ解放
	HGLReleaseTexture3レンダリング可能テクスチャ解放
	HGLRotate3dbyQuaternion座標回転
	HGLSetView画面初期化
	HGLWriteBufferVRAMへ書き込み
	HGLWriteTexture
	追加
	他いろいろ
    Ver 3.2
	2014/10/8
	「HCLDoKrn1」〜「HCLDoKrn3」で正常に行われなかった場合今までエラーメッセージ出さなかったものを出すように修正
	OpenGL関連の命令大幅追加
	モジュール命令・関数の追加修正
	clGetDevInfoの仕様変更
	clGetDevInfoの仕様変更
	全ての命令、関数の先頭に「hcl」がつくよう変更
	ただしOpenGL.dllの外部DLL呼び出し命令は、そのままの名称を使用している。
    Ver 3.10
	2014/9/4
	モジュール内命令・関数の大幅増強
	OpenGL関連の命令追加
	「clGetLastEvent」「clWaitEvent」を削除（メモリ消費が増え続ける現象があったため）
	一命令ですぐopenclを使える「HCLCall」を搭載
    Ver 3.01
	2014/6/13
	「clGetLastEvent」「clWaitEvent」を修正
	OpenGLとの連携強化
	エラーメッセージの強化
    Ver 3.0
	2014/3/4
	OpenGLとの連携可能に
	画面表示関連の命令充実
	「clGetLastEvent」「clWaitEvent」を追加
	clGetDevInfoの内容にOpenGLの項目を追加
	OpenGL関連の命令を大幅追加
    Ver 2.0
	2013/8/29
	HCLbye実行時の不具合を修正
	HCLDoKrn1〜3まで追加
	HCLWaitTaskでタスク待できるように
	メモリアクセス違反以外の大概のプログラムミスに対しエラーメッセージを出すようにチェック機能搭載
	その他エラーメッセージがでるように機能追加
	リリース前最終調整
    Ver 1.11
	2013/8/10
	カーネル実行においてlocal_work_sizeとglobal_work_sizeに配列を指定できるように変更
    Ver 1.10
	2013/5/14
	プログラムビルド、カーネル、メモリ周りの実装
    Ver 1.0
	2013/5/9
	コンテキストの作成命令