Skip to main content

aviutl2_sys/
filter2.rs

1#![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
2
3use std::{ffi::c_void, mem::MaybeUninit};
4
5use crate::{
6    common::LPCWSTR,
7    plugin2::{EDIT_SECTION, LPCSTR},
8};
9
10/// オブジェクトハンドル
11pub type OBJECT_HANDLE = *mut c_void;
12
13#[repr(C)]
14pub union FILTER_ITEM {
15    pub track: FILTER_ITEM_TRACK,
16    pub track_group: FILTER_ITEM_TRACK_GROUP,
17    pub check: FILTER_ITEM_CHECK,
18    pub check_section: FILTER_ITEM_CHECK_SECTION,
19    pub color: FILTER_ITEM_COLOR,
20    pub select: FILTER_ITEM_SELECT,
21    pub file: FILTER_ITEM_FILE,
22    pub data: FILTER_ITEM_DATA,
23    pub group: FILTER_ITEM_GROUP,
24    pub button: FILTER_ITEM_BUTTON,
25    pub string: FILTER_ITEM_STRING,
26    pub text: FILTER_ITEM_TEXT,
27    pub folder: FILTER_ITEM_FOLDER,
28    pub separator: FILTER_ITEM_SEPARATOR,
29    pub hide_rule: FILTER_ITEM_HIDE_RULE,
30}
31
32/// トラックバー項目構造体
33#[repr(C)]
34#[derive(Clone, Copy)]
35pub struct FILTER_ITEM_TRACK {
36    /// 設定の種別(`L"track2"`)
37    pub r#type: LPCWSTR,
38    /// 設定名
39    pub name: LPCWSTR,
40    /// 設定値 (フィルタ処理の呼び出し時に現在の値に更新されます)
41    pub value: f64,
42    /// 設定値の最小、最大
43    pub s: f64,
44    /// 設定値の最小、最大
45    pub e: f64,
46    /// 設定値の単位( 1.0 / 0.1 / 0.01 / 0.001 ) ※0.0001以下も指定出来ますが最大最小値の範囲に応じて調整されます
47    pub step: f64,
48    /// ゼロ値名称 (設定値が0の時にトラックバーに表示する文字列)
49    pub zero_display: LPCWSTR,
50    /// 操作倍率 (設定値の範囲に対してのトラックバー操作範囲の倍率)
51    pub slider_ratio: f64,
52}
53
54/// トラックバーグループ項目構造体
55#[repr(C)]
56#[derive(Clone, Copy)]
57pub struct FILTER_ITEM_TRACK_GROUP {
58    /// 設定の種別(`L"trackgroup"`)
59    pub r#type: LPCWSTR,
60    /// 設定名
61    pub name: LPCWSTR,
62    /// トラックバー項目グループ (FILTER_ITEM_TRACKポインタを列挙してnull終端したリストへのポインタ) ※2か3項目のみ
63    pub tracks: *mut *mut FILTER_ITEM_TRACK,
64}
65
66/// チェックボックス項目構造体
67#[repr(C)]
68#[derive(Clone, Copy)]
69pub struct FILTER_ITEM_CHECK {
70    /// 設定の種別(`L"check"`)
71    pub r#type: LPCWSTR,
72    /// 設定名
73    pub name: LPCWSTR,
74    /// 設定値 (フィルタ処理の呼び出し時に現在の値に更新されます)
75    pub value: bool,
76}
77
78/// チェックボックス(セクション毎)項目構造体
79#[repr(C)]
80#[derive(Clone, Copy)]
81pub struct FILTER_ITEM_CHECK_SECTION {
82    /// 設定の種別(`L"checksection2"`)
83    pub r#type: LPCWSTR,
84    /// 設定名
85    pub name: LPCWSTR,
86    /// 設定値 (フィルタ処理の呼び出し時に現在の値に更新されます)
87    pub value: bool,
88    /// セクション毎設定の初期値
89    pub multi_section: bool,
90}
91
92/// 色選択項目構造体
93#[repr(C)]
94#[derive(Clone, Copy)]
95pub struct FILTER_ITEM_COLOR {
96    /// 設定の種別(`L"color"`)
97    pub r#type: LPCWSTR,
98    /// 設定名
99    pub name: LPCWSTR,
100    /// 設定値 (フィルタ処理の呼び出し時に現在の値に更新されます)
101    pub value: FILTER_ITEM_COLOR_VALUE,
102}
103
104/// 設定値の色
105#[repr(C)]
106#[derive(Clone, Copy)]
107pub union FILTER_ITEM_COLOR_VALUE {
108    pub code: u32,
109    pub bgrx: [u8; 4],
110}
111
112/// 選択リスト項目構造体
113#[repr(C)]
114#[derive(Clone, Copy)]
115pub struct FILTER_ITEM_SELECT {
116    /// 設定の種別(`L"select"`)
117    pub r#type: LPCWSTR,
118    /// 設定名
119    pub name: LPCWSTR,
120    /// 設定値 (フィルタ処理の呼び出し時に現在の値に更新されます)
121    pub value: i32,
122    /// 選択肢リスト (ITEMを列挙して名前がnullのITEMで終端したリストへのポインタ)
123    pub items: *const FILTER_ITEM_SELECT_ITEM,
124}
125
126/// 選択肢項目
127#[repr(C)]
128#[derive(Clone, Copy)]
129pub struct FILTER_ITEM_SELECT_ITEM {
130    /// 選択肢の名前
131    pub name: LPCWSTR,
132    /// 選択肢の値
133    pub value: i32,
134}
135
136/// ファイル選択項目構造体
137#[repr(C)]
138#[derive(Clone, Copy)]
139pub struct FILTER_ITEM_FILE {
140    /// 設定の種別(`L"file"`)
141    pub r#type: LPCWSTR,
142    /// 設定名
143    pub name: LPCWSTR,
144    /// 設定値 (フィルタ処理の呼び出し時に現在の値のポインタに更新されます)
145    pub value: LPCWSTR,
146    /// ファイルフィルタ
147    pub filefilter: LPCWSTR,
148}
149
150/// 汎用データ項目構造体 (設定が表示されない項目になります)
151/// フィルタ処理関数内でvalueの参照先データを更新することが出来ます
152/// ※Undoポイントの作成や編集済みフラグの設定はされません
153/// ※保存済みの汎用データが空の場合はデフォルト値に初期化されます
154/// フィルタ処理関数内のset_filter_item_data_size()関数でデータのサイズを変更出来ます
155#[repr(C)]
156#[derive(Clone, Copy)]
157pub struct FILTER_ITEM_DATA {
158    /// 設定の種別(`L"data"`)
159    pub r#type: LPCWSTR,
160    /// 設定名
161    pub name: LPCWSTR,
162    /// 汎用データのポインタ (フィルタ処理の呼び出し時に現在の汎用データのポインタに更新されます)
163    pub value: *mut c_void,
164    /// 汎用データのサイズ (フィルタ処理の呼び出し時に現在の汎用データのサイズに更新されます) ※16KB以下
165    pub size: i32,
166    /// デフォルト値 (Tの定義でデフォルト値を指定しておく)
167    pub default_value: [MaybeUninit<u8>; 16 * 1024],
168}
169
170/// 設定グループ項目構造体
171/// 自身以降の設定項目をグループ化することが出来ます
172/// ※設定名を空にするとグループの終端を定義することが出来ます
173#[repr(C)]
174#[derive(Clone, Copy)]
175pub struct FILTER_ITEM_GROUP {
176    /// 設定の種別(`L"group"`)
177    pub r#type: LPCWSTR,
178    /// 設定名
179    pub name: LPCWSTR,
180    /// デフォルトの表示状態
181    pub default_visible: bool,
182}
183
184/// ボタン項目構造体
185/// ボタンを押すとコールバック関数が呼ばれます ※plugin2.hの編集のコールバック関数と同様な形になります
186#[repr(C)]
187#[derive(Clone, Copy)]
188pub struct FILTER_ITEM_BUTTON {
189    /// 設定の種別(`L"button"`)
190    pub r#type: LPCWSTR,
191    /// 設定名
192    pub name: LPCWSTR,
193    /// ボタンを押した時のコールバック関数 (呼び出し時に各設定項目の設定値が更新されます)
194    pub callback: Option<extern "C" fn(edit_section: *mut EDIT_SECTION)>,
195    /// 同上
196    pub callback2: Option<
197        extern "C" fn(
198            edit: *mut EDIT_SECTION,
199            object: OBJECT_HANDLE,
200            effect: LPCWSTR,
201            item: LPCWSTR,
202        ),
203    >,
204}
205
206/// 文字列項目構造体 ※1行の文字列
207#[repr(C)]
208#[derive(Clone, Copy)]
209pub struct FILTER_ITEM_STRING {
210    /// 設定の種別(`L"string"`)
211    pub r#type: LPCWSTR,
212    /// 設定名
213    pub name: LPCWSTR,
214    /// 設定値 (フィルタ処理の呼び出し時に現在の値のポインタに更新されます)
215    pub value: LPCWSTR,
216}
217
218/// テキスト項目構造体 ※複数行の文字列
219#[repr(C)]
220#[derive(Clone, Copy)]
221pub struct FILTER_ITEM_TEXT {
222    /// 設定の種別(`L"text"`)
223    pub r#type: LPCWSTR,
224    /// 設定名
225    pub name: LPCWSTR,
226    /// 設定値 (フィルタ処理の呼び出し時に現在の値のポインタに更新されます)
227    pub value: LPCWSTR,
228}
229
230/// フォルダ選択項目構造体
231#[repr(C)]
232#[derive(Clone, Copy)]
233pub struct FILTER_ITEM_FOLDER {
234    /// 設定の種別(`L"folder"`)
235    pub r#type: LPCWSTR,
236    /// 設定名
237    pub name: LPCWSTR,
238    /// 設定値 (フィルタ処理の呼び出し時に現在の値のポインタに更新されます)
239    pub value: LPCWSTR,
240}
241
242/// セパレーター項目構造体
243#[repr(C)]
244#[derive(Clone, Copy)]
245pub struct FILTER_ITEM_SEPARATOR {
246    /// 設定の種別(`L"separator"`)
247    pub r#type: LPCWSTR,
248    /// 設定名
249    pub name: LPCWSTR,
250}
251
252/// 非表示条件項目構造体
253/// 非表示条件を満たした項目を非表示にすることが出来ます
254#[repr(C)]
255#[derive(Clone, Copy)]
256pub struct FILTER_ITEM_HIDE_RULE {
257    /// 設定の種別(`L"hiderule"`)
258    pub r#type: LPCWSTR,
259    /// 非表示にする設定名 ※設定値を持つ項目のみ
260    pub name: LPCWSTR,
261    /// 非表示の条件の設定名
262    /// チェックボックス項目,リスト選択項目,ファイル選択項目,フォルダ選択項目
263    /// ※セクション毎のチェックボックスはセクション毎が有効の場合は2を返却(0/1/2)
264    /// ※ファイル,フォルダ選択項目は選択されているかを返却(0/1)
265    /// ※nullptrを指定した場合は常に非表示
266    /// ※"filter"を指定した場合はフィルタオブジェクトかを返却(0/1)
267    pub condition_name: LPCWSTR,
268    /// 非表示の条件の比較種別
269    pub condition_operator: FILTER_ITEM_HIDE_RULE_OPERATOR,
270    /// 非表示の条件の比較値
271    pub condition_value: i32,
272}
273
274#[repr(i32)]
275#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
276pub enum FILTER_ITEM_HIDE_RULE_OPERATOR {
277    /// == (等しい)
278    EQUAL = 0,
279    /// != (等しくない)
280    NOT_EQUAL = 1,
281    /// > (より大きい)
282    GREATER = 2,
283    /// < (より小さい)
284    LESS = 3,
285}
286
287/// 頂点データ構造体(描画色)
288/// { x, y, z, r, g, b, a }
289#[repr(C)]
290pub struct VERTEX_COLOR {
291    /// 頂点座標
292    pub x: f32,
293    /// 頂点座標
294    pub y: f32,
295    /// 頂点座標
296    pub z: f32,
297    /// 頂点の色(0.0〜1.0の乗算済みα)
298    pub r: f32,
299    /// 頂点の色(0.0〜1.0の乗算済みα)
300    pub g: f32,
301    /// 頂点の色(0.0〜1.0の乗算済みα)
302    pub b: f32,
303    /// 頂点の色(0.0〜1.0の乗算済みα)
304    pub a: f32,
305}
306
307/// 頂点データ構造体(描画色、法線)
308/// { x, y, z, r, g, b, a, vx, vy, vz }
309#[repr(C)]
310pub struct VERTEX_COLOR_NORM {
311    /// 頂点座標
312    pub x: f32,
313    /// 頂点座標
314    pub y: f32,
315    /// 頂点座標
316    pub z: f32,
317    /// 頂点の色(0.0〜1.0の乗算済みα)
318    pub r: f32,
319    /// 頂点の色(0.0〜1.0の乗算済みα)
320    pub g: f32,
321    /// 頂点の色(0.0〜1.0の乗算済みα)
322    pub b: f32,
323    /// 頂点の色(0.0〜1.0の乗算済みα)
324    pub a: f32,
325    /// 法線ベクトル
326    pub vx: f32,
327    /// 法線ベクトル
328    pub vy: f32,
329    /// 法線ベクトル
330    pub vz: f32,
331}
332
333/// 頂点データ構造体(テクスチャ)
334/// { x, y, z, u, v, a }
335#[repr(C)]
336pub struct VERTEX_TEXTURE {
337    /// 頂点座標
338    pub x: f32,
339    /// 頂点座標
340    pub y: f32,
341    /// 頂点座標
342    pub z: f32,
343    /// テクスチャー座標(0.0〜1.0の正規化座標)
344    pub u: f32,
345    /// テクスチャー座標(0.0〜1.0の正規化座標)
346    pub v: f32,
347    /// 頂点のα値
348    pub a: f32,
349}
350
351/// 頂点データ構造体(テクスチャ、法線)
352/// { x, y, z, u, v, a, vx, vy, vz }
353#[repr(C)]
354pub struct VERTEX_TEXTURE_NORM {
355    /// 頂点座標
356    pub x: f32,
357    /// 頂点座標
358    pub y: f32,
359    /// 頂点座標
360    pub z: f32,
361    /// テクスチャー座標(0.0〜1.0の正規化座標)
362    pub u: f32,
363    /// テクスチャー座標(0.0〜1.0の正規化座標)
364    pub v: f32,
365    /// 頂点のα値
366    pub a: f32,
367    /// 法線ベクトル
368    pub vx: f32,
369    /// 法線ベクトル
370    pub vy: f32,
371    /// 法線ベクトル
372    pub vz: f32,
373}
374
375/// 頂点リストの種別
376#[repr(i32)]
377pub enum VERTEX_TYPE {
378    /// 三角形のVERTEX_COLORのリスト (頂点数は3の倍数になる)
379    TRIANGLE_COLOR = 1,
380    /// 三角形のVERTEX_COLOR_NORMのリスト (頂点数は3の倍数になる)
381    TRIANGLE_COLOR_NORM = 2,
382    /// 三角形のVERTEX_TEXTUREのリスト (頂点数は3の倍数になる)
383    TRIANGLE_TEXTURE = 3,
384    /// 三角形のVERTEX_TEXTURE_NORMのリスト (頂点数は3の倍数になる)
385    TRIANGLE_TEXTURE_NORM = 4,
386    /// 四角形のVERTEX_COLORのリスト (頂点数は4の倍数になる)
387    QUAD_COLOR = 5,
388    /// 四角形のVERTEX_COLOR_NORMのリスト (頂点数は4の倍数になる)
389    QUAD_COLOR_NORM = 6,
390    /// 四角形のVERTEX_TEXTUREのリスト (頂点数は4の倍数になる)
391    QUAD_TEXTURE = 7,
392    /// 四角形のVERTEX_TEXTURE_NORMのリスト (頂点数は4の倍数になる)
393    QUAD_TEXTURE_NORM = 8,
394}
395
396/// サンプラー(SampleState)の種別
397#[repr(i32)]
398pub enum SAMPLER_MODE {
399    /// 領域外は透明色
400    CLIP = 0,
401    /// 領域外は一番外側の色
402    CLAMP = 1,
403    /// 領域外はループ
404    LOOP = 2,
405    /// 領域外は領域を反転しながらループ
406    MIRROR = 3,
407    /// 拡大縮小補間をしない(領域外は透明色)
408    DOT = 4,
409}
410
411/// 合成モードの種別
412#[repr(i32)]
413pub enum BLEND_MODE {
414    /// 通常
415    NONE = 0,
416    /// 加算
417    ADD = 1,
418    /// 減算
419    SUB = 2,
420    /// 乗算
421    MUL = 3,
422    /// スクリーン
423    SCREEN = 4,
424    /// オーバーレイ
425    OVERLAY = 5,
426    /// 比較(明)
427    LIGHT = 6,
428    /// 比較(暗)
429    DARK = 7,
430    /// 輝度
431    BRIGHTNESS = 8,
432    /// 色差
433    CHROMA = 9,
434    /// 陰影
435    SHADOW = 10,
436    /// 明暗
437    LIGHT_DARK = 11,
438    /// 差分
439    DIFF = 12,
440}
441
442/// ビルボードの種別
443#[repr(i32)]
444pub enum BILLBOARD_MODE {
445    /// 標準の向き(何もしない)
446    NONE = 0,
447    /// 横方向のみカメラに向ける
448    SIDE = 1,
449    /// 縦横方向のみカメラに向ける
450    DIRECTION = 2,
451    /// カメラに向ける
452    CAMERA = 3,
453}
454
455/// 出力ブレンド(BlendState)の種別
456#[repr(i32)]
457pub enum BLEND_STATE_MODE {
458    /// 出力をそのままコピー
459    COPY = 0,
460    /// α値のみを乗算 ※RGB値は利用されません
461    MASK = 1,
462    /// 出力をアルファブレンド
463    DRAW = 2,
464    /// 出力を加算合成
465    ADD = 3,
466}
467
468/// 画像入力のピクセルフォーマット種別
469#[repr(i32)]
470#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
471pub enum INPUT_PIXEL_FORMAT {
472    /// DXGI_FORMAT_R8G8B8A8_UNORM ※PIXEL_RGBA
473    RGBA = 28,
474    /// DXGI_FORMAT_B8G8R8A8_UNORM
475    BGRA = 87,
476    /// DXGI_FORMAT_B8G8R8X8_UNORM
477    BGR = 88,
478    /// DXGI_FORMAT_R16G16B16A16_UNORM
479    PA64 = 11,
480    /// DXGI_FORMAT_R16G16B16A16_FLOAT
481    HF64 = 10,
482    /// DXGI_FORMAT_YUY2
483    YUY2 = 107,
484    /// DXGI_FORMAT_R16G16B16A16_SNORM ※互換対応
485    YC48 = 13,
486}
487
488/// 画像出力のピクセルフォーマット種別
489#[repr(i32)]
490#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
491pub enum OUTPUT_PIXEL_FORMAT {
492    /// DXGI_FORMAT_R8G8B8A8_UNORM ※PIXEL_RGBA
493    RGBA = 28,
494    /// DXGI_FORMAT_R16G16B16A16_UNORM
495    PA64 = 11,
496    /// DXGI_FORMAT_R16G16B16A16_FLOAT
497    HF64 = 10,
498}
499
500/// RGBA32bit構造体
501#[repr(C)]
502pub struct PIXEL_RGBA {
503    pub r: u8,
504    pub g: u8,
505    pub b: u8,
506    pub a: u8,
507}
508
509/// シーン情報構造体
510#[repr(C)]
511pub struct SCENE_INFO {
512    /// シーンの解像度
513    pub width: i32,
514    /// シーンの解像度
515    pub height: i32,
516    /// シーンのフレームレート
517    pub rate: i32,
518    /// シーンのフレームレート
519    pub scale: i32,
520    /// シーンのサンプリングレート
521    pub sample_rate: i32,
522}
523
524/// オブジェクト情報構造体
525#[repr(C)]
526pub struct OBJECT_INFO {
527    /// オブジェクトのID (アプリ起動毎の固有ID)
528    /// ※描画対象のオブジェクトの固有ID
529    pub id: i64,
530    /// オブジェクトの現在のフレーム番号
531    pub frame: i32,
532    /// オブジェクトの総フレーム数
533    pub frame_total: i32,
534    /// オブジェクトの現在の時間(秒)
535    pub time: f64,
536    /// オブジェクトの総時間(秒)
537    pub time_total: f64,
538    /// オブジェクトの現在の画像サイズ (画像フィルタのみ)
539    pub width: i32,
540    /// オブジェクトの現在の画像サイズ (画像フィルタのみ)
541    pub height: i32,
542    /// オブジェクトの現在の音声サンプル位置 (音声フィルタのみ)
543    pub sample_index: i64,
544    /// オブジェクトの総サンプル数 (音声フィルタのみ)
545    pub sample_total: i64,
546    /// オブジェクトの現在の音声サンプル数 (音声フィルタのみ)
547    pub sample_num: i32,
548    /// オブジェクトの現在の音声チャンネル数 (音声フィルタのみ) ※通常2になります
549    pub channel_num: i32,
550    /// オブジェクトの内の対象エフェクトのID (アプリ起動毎の固有ID)
551    /// ※処理対象のフィルタ効果、オブジェクト入出力の固有ID
552    pub effect_id: i64,
553    /// フラグ
554    pub flag: i32,
555    /// オブジェクトの現在のレイヤー番号 ※描画対象のオブジェクトのレイヤー番号
556    pub layer: i32,
557    /// 複数オブジェクト時の現在の対象番号 ※個別オブジェクト用
558    pub index: i32,
559    /// 複数オブジェクト時の対象数 (1 = 単体オブジェクト / 0 = 不定) ※個別オブジェクト用
560    pub num: i32,
561    /// 全体(シーン)基準のオブジェクトの開始フレーム(0からの番号)
562    pub frame_s: i32,
563    /// 全体(シーン)基準のオブジェクトの終了フレーム(0からの番号)
564    pub frame_e: i32,
565    /// 対象エフェクトの現在のレイヤー番号 ※自身のオブジェクトのレイヤー番号
566    pub effect_layer: i32,
567    /// 全体(シーン)基準のレンダリングの起点フレーム(0からの整数)
568    pub origin_frame: i32,
569}
570
571impl OBJECT_INFO {
572    /// フィルタオブジェクトか?
573    pub const FLAG_FILTER_OBJECT: i32 = 1;
574}
575
576/// オブジェクトの画像パラメータ構造体
577#[repr(C)]
578pub struct OBJECT_IMAGE_PARAM {
579    /// 基準座標
580    pub x: f32,
581    /// 基準座標
582    pub y: f32,
583    /// 基準座標
584    pub z: f32,
585    /// 回転角度 (360.0で1回転)
586    pub rx: f32,
587    /// 回転角度 (360.0で1回転)
588    pub ry: f32,
589    /// 回転角度 (360.0で1回転)
590    pub rz: f32,
591    /// 拡大率 (1.0=等倍)
592    pub sx: f32,
593    /// 拡大率 (1.0=等倍)
594    pub sy: f32,
595    /// 拡大率 (1.0=等倍)
596    pub sz: f32,
597    /// 中心座標 (基準座標からの相対)
598    pub cx: f32,
599    /// 中心座標 (基準座標からの相対)
600    pub cy: f32,
601    /// 中心座標 (基準座標からの相対)
602    pub cz: f32,
603    /// 不透明度 (0.0〜1.0/0.0=透明/1.0=不透明)
604    pub alpha: f32,
605}
606
607/// オブジェクトの音声パラメータ構造体
608#[repr(C)]
609pub struct OBJECT_AUDIO_PARAM {
610    /// 音量倍率 (1.0=等倍)
611    pub vol_l: f32,
612    /// 音量倍率 (1.0=等倍)
613    pub vol_r: f32,
614}
615
616/// エフェクト実行の設定パラメータ構造体
617#[repr(C)]
618pub struct EFFECT_ITEM_PARAM {
619    /// 設定名 ※エイリアスファイルの設定のキーの名称
620    pub name: LPCWSTR,
621    /// 設定値(UTF8) ※エイリアスファイルの設定値と同じフォーマット
622    pub value: LPCSTR,
623}
624
625/// 画像フィルタ処理用構造体
626#[repr(C)]
627pub struct FILTER_PROC_VIDEO {
628    /// シーン情報
629    pub scene: *const SCENE_INFO,
630
631    /// オブジェクト情報
632    pub object: *const OBJECT_INFO,
633
634    /// 現在のオブジェクトの画像データをPIXEL_RGBA形式で取得する (VRAMからデータを取得します)
635    /// buffer : 画像データの格納先へのポインタ
636    pub get_image_data: unsafe extern "C" fn(buffer: *mut PIXEL_RGBA),
637
638    /// 現在のオブジェクトの画像データをPIXEL_RGBA形式で設定する (VRAMへデータを書き込みます)
639    /// buffer : 画像データへのポインタ (nullptrの場合は初期データ無しで画像サイズを変更します)
640    /// width,height : 画像サイズ
641    pub set_image_data: unsafe extern "C" fn(buffer: *const PIXEL_RGBA, width: i32, height: i32),
642
643    // 現在のオブジェクトの画像データのポインタを取得する (ID3D11Texture2Dのポインタを取得します)
644    // 戻り値		: オブジェクトの画像データへのポインタ
645    //				  ※現在の画像が変更(set_image_data)されるかフィルタ処理の終了まで有効
646    /// 現在のオブジェクトのD3D画像リソースのポインタを取得する (ID3D11Texture2Dのポインタを取得します)
647    /// 戻り値 : オブジェクト画像のID3D11Texture2Dのポインタ
648    /// ※現在の画像が変更(set_image_data)されるかフィルタ処理の終了まで有効
649    pub get_image_texture2d: unsafe extern "C" fn() -> *mut c_void,
650
651    // 現在のフレームバッファの画像データのポインタを取得する (ID3D11Texture2Dのポインタを取得します)
652    // 戻り値		: フレームバッファの画像データへのポインタ
653    //				  ※フィルタ処理の終了まで有効
654    /// 現在のフレームバッファのD3D画像リソースのポインタを取得する (ID3D11Texture2Dのポインタを取得します)
655    /// 戻り値 : フレームバッファのID3D11Texture2Dのポインタ
656    /// ※フィルタ処理の終了まで有効
657    pub get_framebuffer_texture2d: unsafe extern "C" fn() -> *mut c_void,
658
659    /// 編集セクション関数
660    /// フィルタ処理中は参照系の関数が利用出来ます
661    pub edit: *mut EDIT_SECTION,
662
663    /// 現在のオブジェクトの画像パラメータ情報
664    /// パラメータを直接変更することが出来ます
665    /// ※このパラメータは画像出力項目のパラメータからの相対設定になります (スクリプトのobj.ox等と同じ)
666    pub param: *mut OBJECT_IMAGE_PARAM,
667
668    /// 指定オブジェクトの画像出力項目のパラメータを取得する
669    /// object : 対象のオブジェクトのハンドル (nullptrを指定すると現在のオブジェクトが対象)
670    /// ※フィルタ処理対象のシーンにあるオブジェクトのみ取得出来ます
671    /// offset : 取得時間のオフセット(秒) (0なら現時間)
672    /// output : パラメータの格納先へのポインタ
673    /// output_size : パラメータの格納先のサイズ ※サイズ分のみ取得されます
674    /// 戻り値 : 取得出来ない場合はfalse (画像オブジェクト以外が指定された場合)
675    pub get_output_image_param: unsafe extern "C" fn(
676        object: OBJECT_HANDLE,
677        offset: f64,
678        param: *mut OBJECT_IMAGE_PARAM,
679        param_size: i32,
680    ) -> bool,
681
682    /// 指定のレイヤーにある画像オブジェクトを取得します
683    /// layer : 対象のレイヤー番号
684    /// offset : 取得時間のオフセット(秒) (0なら現時間)
685    /// 戻り値 : 取得したオブジェクトのハンドル (存在しない場合はnullptrを返却)
686    pub get_image_object: unsafe extern "C" fn(layer: i32, offset: f64) -> OBJECT_HANDLE,
687
688    /// 指定の画像リソースをフレームバッファに描画します
689    /// resource : 画像リソース名
690    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
691    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
692    /// "tempbuffer" = 仮想バッファ
693    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
694    /// "image:xxxx" = 画像ファイル(xxxxは画像ファイルパス) ※画像はVRAMにキャッシュされます
695    /// x,y,z : 基準座標
696    /// rx,ry,rz : 回転角度 (360.0で1回転)
697    /// sx,sy,sz : 拡大率 (1.0=等倍)
698    /// alpha : 不透明度 (0.0〜1.0/0.0=透明/1.0=不透明)
699    /// 戻り値 : 失敗した場合はfalse (画像リソース名が不正な場合等)
700    pub draw_image: unsafe extern "C" fn(
701        image: LPCWSTR,
702        x: f32,
703        y: f32,
704        z: f32,
705        rx: f32,
706        ry: f32,
707        rz: f32,
708        sx: f32,
709        sy: f32,
710        sz: f32,
711        alpha: f32,
712    ) -> bool,
713
714    /// 指定の頂点リストのポリゴンをフレームバッファに描画します
715    /// vertex_type : 頂点リストの種別
716    /// vertex_list : 頂点データリストへのポインタ (指定した種別の頂点データバッファへのポインタ)
717    /// vertex_num : 頂点リストの頂点数 (頂点データの数)
718    /// resource : テクスチャ画像リソース名 ※テクスチャ付きの場合のみ利用
719    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
720    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
721    /// "tempbuffer" = 仮想バッファ
722    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
723    /// "image:xxxx" = 画像ファイル(xxxxは画像ファイルパス) ※画像はVRAMにキャッシュされます
724    /// 戻り値 : 失敗した場合はfalse (頂点数が不正な場合等)
725    pub draw_poly: unsafe extern "C" fn(
726        vertex_type: VERTEX_TYPE,
727        vertex_list: *const c_void,
728        vertex_num: i32,
729        image: LPCWSTR,
730    ) -> bool,
731
732    /// 標準のアンカー枠を設定します ※func_proc_video()でtrueを返却した場合は自動で設定されます
733    /// draw_image()などを利用してオブジェクトの描画を全て自身で処理する場合に利用します
734    /// width,height : オブジェクトのサイズ ※0を指定すると固定サイズのアンカー枠になります
735    pub set_default_anchor: unsafe extern "C" fn(width: i32, height: i32),
736
737    /// 描画時の合成モードを設定します
738    /// フレームバッファへの描画の合成モードは元々の合成モードが通常の場合のみ反映されます
739    /// 合成モードを利用すると描画処理が重くなります
740    /// blend : 合成モード
741    pub set_blend_mode: unsafe extern "C" fn(blend: BLEND_MODE),
742
743    /// 描画時の光沢度を設定します
744    /// カメラ制御の光源設定が有効の時に利用されます
745    /// shine : 光沢度(0.0〜1.0)
746    pub set_material_shine: unsafe extern "C" fn(shine: f32),
747
748    /// 描画時のサンプラーを設定します
749    /// sampler : サンプラー種別
750    pub set_sampler_mode: unsafe extern "C" fn(sampler: SAMPLER_MODE),
751
752    /// 描画時に裏面を非表示にするかを設定します
753    /// culling : 裏面を非表示にするか?
754    pub set_culling_state: unsafe extern "C" fn(culling: bool),
755
756    /// 描画時にオブジェクトをカメラの方向に向けるかを設定します
757    /// billboard : ビルボード種別
758    pub set_billboard_mode: unsafe extern "C" fn(billboard: BILLBOARD_MODE),
759
760    /// 画像リソースを作成する (VRAMへデータを書き込みます)
761    /// 画像リソースはdraw_image()などの描画に利用出来ます
762    /// ※既に存在する画像リソース名を指定した場合はリソースを更新します
763    /// resource : 作成する画像リソース名
764    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
765    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前) ※フィルタ処理後に破棄されます
766    /// "tempbuffer" = 仮想バッファ ※内部実装はキャッシュバッファと同じ
767    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前) ※レンダリング処理共用のキャッシュバッファ
768    /// buffer : 画像データへのポインタ ※PIXEL_RGBA形式 (nullptrの場合は初期データ無しで作成します)
769    /// width,height : 画像サイズ
770    pub create_image_resource:
771        unsafe extern "C" fn(image: LPCWSTR, buffer: *const PIXEL_RGBA, width: i32, height: i32),
772
773    /// 指定の画像リソースのD3D画像リソースのポインタを取得する (ID3D11Texture2Dのポインタを取得します)
774    /// resource : 画像リソース名
775    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
776    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
777    /// "tempbuffer" = 仮想バッファ
778    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
779    /// "image:xxxx" = 画像ファイル(xxxxは画像ファイルパス) ※画像はVRAMにキャッシュされます
780    /// "random" = 乱数バッファ(0.0〜1.0の乱数値の256x256の領域) ※DXGI_FORMAT_R32_FLOAT(r値のみ)になります
781    /// 戻り値 : 画像リソースのID3D11Texture2Dのポインタ (指定リソースが無い場合はnullptrを返却)
782    /// ※画像リソースが変更されるかフィルタ処理の終了まで有効
783    pub get_image_resource_texture2d: unsafe extern "C" fn(resource: LPCWSTR) -> *mut c_void,
784
785    /// 画像リソースをコピーする
786    /// dst_resource : コピー先の画像リソース名
787    /// ※既に存在する画像リソース名を指定した場合はリソースを更新します
788    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
789    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前) ※フィルタ処理後に破棄されます
790    /// "tempbuffer" = 仮想バッファ ※内部実装はキャッシュバッファと同じ
791    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前) ※レンダリング処理共用のキャッシュバッファ
792    /// src_resource : コピー元の画像リソース名
793    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
794    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
795    /// "framebuffer" = フレームバッファ
796    /// "tempbuffer" = 仮想バッファ
797    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
798    /// "image:xxxx" = 画像ファイル(xxxxは画像ファイルパス) ※画像はVRAMにキャッシュされます
799    /// "random" = 乱数バッファ(0.0〜1.0の乱数値の256x256の領域) ※DXGI_FORMAT_R32_FLOAT(r値のみ)になります
800    /// "layer:xxxx[+]" = レイヤー上のオブジェクト(xxxxはレイヤー番号、末尾に"+"指定で追加フィルタを実行)
801    /// "before" = 直前オブジェクト
802    /// 戻り値 : 失敗した場合はfalse (画像リソース名が不正な場合等)
803    pub copy_image_resource:
804        unsafe extern "C" fn(dst_resource: LPCWSTR, src_resource: LPCWSTR) -> bool,
805
806    /// 画像リソースをクリアする
807    /// resource : クリアする画像リソース名
808    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
809    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
810    /// "tempbuffer" = 仮想バッファ
811    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
812    /// color : クリアする色
813    /// 戻り値 : 失敗した場合はfalse (画像リソース名が不正な場合等)
814    pub clear_image_resource: unsafe extern "C" fn(resource: LPCWSTR, color: PIXEL_RGBA) -> bool,
815
816    /// 指定の画像リソースを描画先の画像リソースに描画します
817    /// dst_resource : 描画先の画像リソース名
818    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
819    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
820    /// "tempbuffer" = 仮想バッファ
821    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
822    /// src_resource : 画像リソース名
823    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
824    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
825    /// "tempbuffer" = 仮想バッファ
826    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
827    /// "image:xxxx" = 画像ファイル(xxxxは画像ファイルパス) ※画像はVRAMにキャッシュされます
828    /// x,y,z : 基準座標
829    /// rx,ry,rz : 回転角度 (360.0で1回転)
830    /// sx,sy,sz : 拡大率 (1.0=等倍)
831    /// alpha : 不透明度 (0.0〜1.0/0.0=透明/1.0=不透明)
832    /// 戻り値 : 失敗した場合はfalse (画像リソース名が不正な場合等)
833    pub draw_image_to_resource: unsafe extern "C" fn(
834        dst_resource: LPCWSTR,
835        src_resource: LPCWSTR,
836        x: f32,
837        y: f32,
838        z: f32,
839        rx: f32,
840        ry: f32,
841        rz: f32,
842        sx: f32,
843        sy: f32,
844        sz: f32,
845        alpha: f32,
846    ) -> bool,
847
848    /// 指定の頂点リストのポリゴンを描画先の画像リソースに描画します
849    /// dst_resource : 描画先の画像リソース名
850    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
851    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
852    /// "tempbuffer" = 仮想バッファ
853    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
854    /// vertex_type : 頂点リストの種別
855    /// vertex_list : 頂点データリストへのポインタ (指定した種別の頂点データバッファへのポインタ)
856    /// vertex_num : 頂点リストの頂点数 (頂点データの数)
857    /// src_resource : テクスチャ画像リソース名 ※テクスチャ付きの場合のみ利用
858    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
859    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
860    /// "tempbuffer" = 仮想バッファ
861    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
862    /// "image:xxxx" = 画像ファイル(xxxxは画像ファイルパス) ※画像はVRAMにキャッシュされます
863    /// 戻り値 : 失敗した場合はfalse (頂点数が不正な場合等)
864    pub draw_poly_to_resource: unsafe extern "C" fn(
865        dst_resource: LPCWSTR,
866        vertex_type: VERTEX_TYPE,
867        vertex_list: *const c_void,
868        vertex_num: i32,
869        src_resource: LPCWSTR,
870    ) -> bool,
871
872    /// ピクセルシェーダーを実行します
873    /// cso_file : コンパイル済みピクセルシェーダーのバイナリファイル名 ※ファイル名部分のみ
874    /// プラグインと同じフォルダのファイルから読み込んでキャッシュします
875    /// ※ピクセルシェーダー5.0でコンパイルしたものが利用出来ます
876    /// ピクセルシェーダーの入力は下記が利用できます
877    /// float4 psmain(float4 pos : SV_Position) : SV_Target
878    /// float4 psmain(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target
879    /// ※シェーダーリフレクションを利用してシグネチャから判別しています
880    /// target : 出力先の画像リソース名
881    /// Direct3Dのレンダーターゲットに設定されます
882    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
883    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
884    /// "framebuffer" = フレームバッファ
885    /// "tempbuffer" = 仮想バッファ
886    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
887    /// resource_list : 参照する画像リソース名のリストへのポインタ ※nullptrの場合は設定無し
888    /// Direct3Dのシェーダーリソース(t0〜)に設定されます ※レンダーターゲットと同じリソースは利用出来ません
889    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
890    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
891    /// "tempbuffer" = 仮想バッファ
892    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
893    /// "image:xxxx" = 画像ファイル(xxxxは画像ファイルパス) ※画像はVRAMにキャッシュされます
894    /// "random" = 乱数バッファ(0.0〜1.0の乱数値の256x256の領域) ※DXGI_FORMAT_R32_FLOAT(r値のみ)になります
895    /// resource_num : 参照する画像リソースの数
896    /// constant : 定数バッファへのポインタ ※nullptrの場合は定数バッファの設定無し
897    /// Direct3Dの定数バッファ(b0)に設定します
898    /// constant_size : 定数バッファのサイズ
899    /// blend_state : Direct3DのBlendStateを設定します ※nullptrの場合は出力をそのままコピー
900    /// sampler_state : Direct3DのSamplerState(s0)を設定します ※nullptrの場合は設定無し
901    /// 戻り値 : 失敗した場合はfalse (画像リソース名が不正な場合等)
902    pub exec_pixelshader_file: unsafe extern "C" fn(
903        cso_file: LPCWSTR,
904        target: LPCWSTR,
905        resource_list: *mut LPCWSTR,
906        resource_num: i32,
907        constant: *mut c_void,
908        constant_size: i32,
909        blend_state: *mut c_void,
910        sampler_state: *mut c_void,
911    ) -> bool,
912
913    /// コンピュートシェーダーを実行します
914    /// cso_file : コンパイル済みコンピュートシェーダーのバイナリファイル名 ※ファイル名部分のみ
915    /// プラグインと同じフォルダのファイルから読み込んでキャッシュします
916    /// ※コンピュートシェーダー5.0でコンパイルしたものが利用出来ます
917    /// target_list : 読み書き先の画像リソース名のリストへのポインタ
918    /// Direct3DのUnorderedAccessリソース(u0〜)に設定されます
919    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
920    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
921    /// "framebuffer" = フレームバッファ
922    /// "tempbuffer" = 仮想バッファ
923    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
924    /// target_num : 読み書き先の画像リソースの数
925    /// resource_list : 参照する画像リソース名のリストへのポインタ ※nullptrの場合は設定無し
926    /// Direct3Dのシェーダーリソース(t0〜)に設定されます ※UnorderedAccessリソースと同じリソースは利用出来ません
927    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
928    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
929    /// "tempbuffer" = 仮想バッファ
930    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
931    /// "image:xxxx" = 画像ファイル(xxxxは画像ファイルパス) ※画像はVRAMにキャッシュされます
932    /// "random" = 乱数バッファ(0.0〜1.0の乱数値の256x256の領域) ※DXGI_FORMAT_R32_FLOAT(r値のみ)になります
933    /// resource_num : 参照する画像リソースの数
934    /// constant : 定数バッファへのポインタ ※nullptrの場合は定数バッファの設定無し
935    /// Direct3Dの定数バッファ(b0)に設定します
936    /// constant_size : 定数バッファのサイズ
937    /// count_x : X軸スレッドグループ数
938    /// count_y : Y軸スレッドグループ数
939    /// count_z : Z軸スレッドグループ数
940    /// sampler_state : Direct3DのSamplerState(s0)を設定します ※nullptrの場合は設定無し
941    /// 戻り値 : 失敗した場合はfalse (画像リソース名が不正な場合等)
942    pub exec_computeshader_file: unsafe extern "C" fn(
943        cso_file: LPCWSTR,
944        target_list: *mut LPCWSTR,
945        target_num: i32,
946        resource_list: *mut LPCWSTR,
947        resource_num: i32,
948        constant: *mut c_void,
949        constant_size: i32,
950        count_x: i32,
951        count_y: i32,
952        count_z: i32,
953        sampler_state: *mut c_void,
954    ) -> bool,
955
956    /// 定義済みのD3Dの出力ブレンドのリソースのポインタを取得する (ID3D11BlendStateのポインタを取得します)
957    /// blend : 出力ブレンド種別
958    /// 戻り値 : ID3D11BlendStateのポインタ (指定種別が無い場合はnullptrを返却)
959    pub get_blend_state: unsafe extern "C" fn(blend: BLEND_STATE_MODE) -> *mut c_void,
960
961    /// 定義済みのD3Dのサンプラーのリソースのポインタを取得する (ID3D11SamplerStateのポインタを取得します)
962    /// sampler : サンプラー種別
963    /// 戻り値 : ID3D11SamplerStateのポインタ (指定種別が無い場合はnullptrを返却)
964    pub get_sampler_state: unsafe extern "C" fn(sampler: SAMPLER_MODE) -> *mut c_void,
965
966    /// ピクセルシェーダーを実行します
967    /// data : コンパイル済みピクセルシェーダーのデータへのポインタ(ヘッダーファイルとして出力したデータを利用する)
968    /// data_size : コンパイル済みピクセルシェーダーのサイズ
969    /// ※ピクセルシェーダー5.0でコンパイルしたものが利用出来ます
970    /// ピクセルシェーダーの入力は下記が利用できます
971    /// float4 psmain(float4 pos : SV_Position) : SV_Target
972    /// float4 psmain(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target
973    /// ※シェーダーリフレクションを利用してシグネチャから判別しています
974    /// target : 出力先の画像リソース名
975    /// Direct3Dのレンダーターゲットに設定されます
976    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
977    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
978    /// "framebuffer" = フレームバッファ
979    /// "tempbuffer" = 仮想バッファ
980    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
981    /// resource_list : 参照する画像リソース名のリストへのポインタ ※nullptrの場合は設定無し
982    /// Direct3Dのシェーダーリソース(t0〜)に設定されます ※レンダーターゲットと同じリソースは利用出来ません
983    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
984    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
985    /// "tempbuffer" = 仮想バッファ
986    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
987    /// "image:xxxx" = 画像ファイル(xxxxは画像ファイルパス) ※画像はVRAMにキャッシュされます
988    /// "random" = 乱数バッファ(0.0〜1.0の乱数値の256x256の領域) ※DXGI_FORMAT_R32_FLOAT(r値のみ)になります
989    /// resource_num : 参照する画像リソースの数
990    /// constant : 定数バッファへのポインタ ※nullptrの場合は定数バッファの設定無し
991    /// Direct3Dの定数バッファ(b0)に設定します
992    /// constant_size : 定数バッファのサイズ
993    /// blend_state : Direct3DのBlendStateを設定します ※nullptrの場合は出力をそのままコピー
994    /// sampler_state : Direct3DのSamplerState(s0)を設定します ※nullptrの場合は設定無し
995    /// 戻り値 : 失敗した場合はfalse (画像リソース名が不正な場合等)
996    pub exec_pixelshader_data: unsafe extern "C" fn(
997        data: *const u8,
998        data_size: i32,
999        target: LPCWSTR,
1000        resource_list: *mut LPCWSTR,
1001        resource_num: i32,
1002        constant: *mut c_void,
1003        constant_size: i32,
1004        blend_state: *mut c_void,
1005        sampler_state: *mut c_void,
1006    ) -> bool,
1007
1008    /// コンピュートシェーダーを実行します
1009    /// data : コンパイル済みコンピュートシェーダーのデータへのポインタ(ヘッダーファイルとして出力したデータを利用する)
1010    /// data_size : コンパイル済みコンピュートシェーダーのサイズ
1011    /// ※コンピュートシェーダー5.0でコンパイルしたものが利用出来ます
1012    /// target_list : 読み書き先の画像リソース名のリストへのポインタ
1013    /// Direct3DのUnorderedAccessリソース(u0〜)に設定されます
1014    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
1015    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
1016    /// "framebuffer" = フレームバッファ
1017    /// "tempbuffer" = 仮想バッファ
1018    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
1019    /// target_num : 読み書き先の画像リソースの数
1020    /// resource_list : 参照する画像リソース名のリストへのポインタ ※nullptrの場合は設定無し
1021    /// Direct3Dのシェーダーリソース(t0〜)に設定されます ※UnorderedAccessリソースと同じリソースは利用出来ません
1022    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
1023    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
1024    /// "tempbuffer" = 仮想バッファ
1025    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
1026    /// "image:xxxx" = 画像ファイル(xxxxは画像ファイルパス) ※画像はVRAMにキャッシュされます
1027    /// "random" = 乱数バッファ(0.0〜1.0の乱数値の256x256の領域) ※DXGI_FORMAT_R32_FLOAT(r値のみ)になります
1028    /// resource_num : 参照する画像リソースの数
1029    /// constant : 定数バッファへのポインタ ※nullptrの場合は定数バッファの設定無し
1030    /// Direct3Dの定数バッファ(b0)に設定します
1031    /// constant_size : 定数バッファのサイズ
1032    /// count_x : X軸スレッドグループ数
1033    /// count_y : Y軸スレッドグループ数
1034    /// count_z : Z軸スレッドグループ数
1035    /// sampler_state : Direct3DのSamplerState(s0)を設定します ※nullptrの場合は設定無し
1036    /// 戻り値 : 失敗した場合はfalse (画像リソース名が不正な場合等)
1037    pub exec_computeshader_data: unsafe extern "C" fn(
1038        data: *const u8,
1039        data_size: i32,
1040        target_list: *mut LPCWSTR,
1041        target_num: i32,
1042        resource_list: *mut LPCWSTR,
1043        resource_num: i32,
1044        constant: *mut c_void,
1045        constant_size: i32,
1046        count_x: i32,
1047        count_y: i32,
1048        count_z: i32,
1049        sampler_state: *mut c_void,
1050    ) -> bool,
1051
1052    /// 指定の画像リソースのサイズを取得する
1053    /// resource : 画像リソース名
1054    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
1055    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
1056    /// "tempbuffer" = 仮想バッファ
1057    /// "cache:xxxx" = キャッシュバッファ(xxxxは任意の名前)
1058    /// "image:xxxx" = 画像ファイル(xxxxは画像ファイルパス) ※画像はVRAMにキャッシュされます
1059    /// width,height : 画像サイズの格納先へのポインタ
1060    /// 戻り値 : 失敗した場合はfalse (画像リソース名が不正な場合等)
1061    pub get_image_resource_size:
1062        unsafe extern "C" fn(resource: LPCWSTR, width: *mut i32, height: *mut i32) -> bool,
1063
1064    /// 画像リソースから指定フォーマットの画像データを取得する (VRAMからデータを取得します)
1065    /// resource : 画像リソース名
1066    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
1067    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
1068    /// buffer : 画像データの格納先へのポインタ
1069    /// width,height : 画像データの格納先のサイズ ※画像リソースとサイズが一致する場合のみ取得出来ます
1070    /// pitch : 画像データの格納先の横1ラインのバイト数
1071    /// format : 取得する画像データのピクセルフォーマット
1072    /// 戻り値 : 失敗した場合はfalse (画像リソース名が不正な場合等)
1073    pub get_image_resource_data: unsafe extern "C" fn(
1074        resource: LPCWSTR,
1075        buffer: *mut c_void,
1076        width: i32,
1077        height: i32,
1078        pitch: i32,
1079        format: OUTPUT_PIXEL_FORMAT,
1080    ) -> bool,
1081
1082    /// 画像リソースに指定フォーマットの画像データを設定する (VRAMへデータを書き込みます)
1083    /// ※存在しない画像リソース名を指定した場合は新規作成します
1084    /// resource : 作成する画像リソース名
1085    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
1086    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前) ※フィルタ処理後に破棄されます
1087    /// buffer : 画像データへのポインタ
1088    /// width,height : 画像サイズ
1089    /// pitch : 画像データの横1ラインのバイト数
1090    /// format : 画像データのピクセルフォーマット
1091    /// 戻り値 : 失敗した場合はfalse (画像リソース名が不正な場合等)
1092    pub set_image_resource_data: unsafe extern "C" fn(
1093        resource: LPCWSTR,
1094        buffer: *const c_void,
1095        width: i32,
1096        height: i32,
1097        pitch: i32,
1098        format: INPUT_PIXEL_FORMAT,
1099    ) -> bool,
1100
1101    /// 冗長なので廃止します ※EDIT_SECTIONに移動しました
1102    #[deprecated = "冗長なので廃止します ※EDIT_SECTIONに移動しました"]
1103    pub deprecated_get_font: unsafe extern "C" fn(font: LPCWSTR) -> *mut c_void,
1104
1105    /// 指定の汎用データ項目のデータサイズを変更します
1106    /// サイズを変更すると汎用データのポインタは更新されます
1107    /// filter_item_data : 対象のFILTER_ITEM_DATAへのポインタ
1108    /// size : 汎用データのサイズ
1109    pub set_filter_item_data_size: unsafe extern "C" fn(filter_item_data: *mut c_void, size: i32),
1110
1111    /// ユーザーデータのポインタ (FLAG_USERDATAが有効の時に設定されます)
1112    /// func_create()で返却したユーザーデータのポインタ
1113    pub userdata: *mut c_void,
1114
1115    /// 画像リソースを解放します
1116    /// resource : 解放する画像リソース名
1117    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
1118    /// 戻り値 : 失敗した場合はfalse (画像リソース名が不正な場合等)
1119    pub release_image_resource: unsafe extern "C" fn(resource: LPCWSTR) -> bool,
1120
1121    /// 指定のエフェクトを実行します
1122    /// フィルタ効果、入力項目(図形等)のエフェクトが実行出来ます
1123    /// name : 実行するエフェクト名 (エイリアスファイルのeffect.nameの値)
1124    /// param_list : 設定パラメータのリストへのポインタ ※nullptrの場合は設定無し
1125    /// param_num : 設定パラメータの数
1126    /// resource : エフェクトの処理対象の画像リソース名 ※エフェクトが入力項目の場合は新規作成します
1127    /// "object" = 現在のオブジェクト ※nullptrの指定でも現在のオブジェクトになります
1128    /// "resource:xxxx" = 標準リソース(xxxxは任意の名前)
1129    /// 戻り値 : 失敗した場合はfalse (エフェクト名や画像リソース名が不正な場合等)
1130    pub exec_effect: unsafe extern "C" fn(
1131        name: LPCWSTR,
1132        param_list: *mut EFFECT_ITEM_PARAM,
1133        param_num: i32,
1134        resource: LPCWSTR,
1135    ) -> bool,
1136
1137    /// 描画時の合成モードを設定します
1138    /// set_blend_mode()と異なりフレームバッファへの描画の合成モードも常に反映されます
1139    /// 合成モードを利用すると描画処理が重くなります
1140    /// blend : 合成モード
1141    pub set_blend_mode_force: unsafe extern "C" fn(blend: BLEND_MODE),
1142
1143    /// 現在のオブジェクトに影響しているグループ制御オブジェクトを取得します
1144    /// layer : 上位の影響しているグループ制御のインデックス(0は直前のグループ制御)
1145    /// 戻り値 : 取得したグループ制御オブジェクトのハンドル (グループ制御対象外の場合はnullptrを返却)
1146    pub get_group_control_object: unsafe extern "C" fn(index: i32) -> OBJECT_HANDLE,
1147
1148    /// 現在のオブジェクトに適用されるグループ制御の座標変換行列を取得します (グループ制御対象を結合した行列)
1149    /// 戻り値 : グループ制御対象外の場合はfalse
1150    pub get_group_matrix: unsafe extern "C" fn(matrix: *mut DxmMatrix) -> bool,
1151}
1152
1153/// DirectXMathのXMMATRIX構造体の互換構造体
1154#[repr(C, align(16))]
1155pub struct DxmMatrix {
1156    pub m: [[f32; 4]; 4],
1157}
1158
1159/// 音声フィルタ処理用構造体
1160#[repr(C)]
1161pub struct FILTER_PROC_AUDIO {
1162    /// シーン情報
1163    pub scene: *const SCENE_INFO,
1164
1165    /// オブジェクト情報
1166    pub object: *const OBJECT_INFO,
1167
1168    /// 現在のオブジェクトの音声データを取得する
1169    /// buffer : 音声データの格納先へのポインタ ※音声データはPCM(float)32bit
1170    /// channel : 音声データのチャンネル ( 0 = 左チャンネル / 1 = 右チャンネル )
1171    pub get_sample_data: unsafe extern "C" fn(buffer: *mut f32, channel: i32),
1172
1173    /// 現在のオブジェクトの音声データを設定する
1174    /// buffer : 音声データへのポインタ ※音声データはPCM(float)32bit
1175    /// channel : 音声データのチャンネル ( 0 = 左チャンネル / 1 = 右チャンネル )
1176    pub set_sample_data: unsafe extern "C" fn(buffer: *const f32, channel: i32),
1177
1178    /// 編集セクション関数
1179    /// フィルタ処理中は参照系の関数が利用出来ます
1180    pub edit: *mut EDIT_SECTION,
1181
1182    /// 現在のオブジェクトの音声パラメータ情報
1183    /// パラメータを直接変更することが出来ます
1184    /// ※このパラメータは音声出力項目のパラメータからの相対設定になります
1185    pub param: *mut OBJECT_AUDIO_PARAM,
1186
1187    /// 指定オブジェクトの音声出力項目のパラメータを取得する
1188    /// object : 対象のオブジェクトのハンドル (nullptrを指定すると現在のオブジェクトが対象)
1189    /// ※フィルタ処理対象のシーンにあるオブジェクトのみ取得出来ます
1190    /// offset : 取得時間のオフセット(秒) (0なら現時間)
1191    /// param : パラメータの格納先へのポインタ
1192    /// param_size : パラメータの格納先のサイズ ※サイズ分のみ取得されます
1193    /// 戻り値 : 取得出来ない場合はfalse (音声オブジェクト以外が指定された場合)
1194    pub get_output_audio_param: unsafe extern "C" fn(
1195        object: OBJECT_HANDLE,
1196        offset: f64,
1197        param: *mut OBJECT_AUDIO_PARAM,
1198        param_size: i32,
1199    ) -> bool,
1200
1201    /// 指定のレイヤー位置にある音声オブジェクトを取得します
1202    /// layer : 対象のレイヤー番号
1203    /// offset : 取得時間のオフセット(秒) (0なら現時間)
1204    /// 戻り値 : 取得したオブジェクトのハンドル (存在しない場合はnullptrを返却)
1205    pub get_audio_object: unsafe extern "C" fn(layer: i32, offset: f64) -> OBJECT_HANDLE,
1206
1207    /// 指定の汎用データ項目のデータサイズを変更します
1208    /// サイズを変更すると汎用データのポインタは更新されます
1209    /// filter_item_data : 対象のFILTER_ITEM_DATAへのポインタ
1210    /// size : 汎用データのサイズ (16KB以下)
1211    pub set_filter_item_data_size: unsafe extern "C" fn(filter_item_data: *mut c_void, size: i32),
1212
1213    /// ユーザーデータのポインタ (FLAG_USERDATAが有効の時に設定されます)
1214    /// func_create()で返却したユーザーデータのポインタ
1215    pub userdata: *mut c_void,
1216}
1217
1218impl FILTER_PLUGIN_TABLE {
1219    /// 画像フィルタをサポートする
1220    pub const FLAG_VIDEO: i32 = 1;
1221    /// 音声フィルタをサポートする
1222    /// 画像と音声のフィルタ処理は別々のスレッドで処理されます
1223    pub const FLAG_AUDIO: i32 = 2;
1224    /// メディアオブジェクトの初期入力をする (メディアオブジェクトにする場合)
1225    pub const FLAG_INPUT: i32 = 4;
1226    /// フィルタオブジェクトをサポートする (フィルタオブジェクトに対応する場合)
1227    /// フィルタオブジェクトの場合は画像サイズの変更が出来ません
1228    pub const FLAG_FILTER: i32 = 8;
1229    /// ユーザーデータをサポートする ※func_create(),func_destroy()が呼ばれるようになります
1230    pub const FLAG_USERDATA: i32 = 16;
1231    /// オブジェクト・フィルタ効果の追加メニューリストに表示しない
1232    pub const FLAG_HIDEMENU: i32 = 32;
1233}
1234
1235/// フィルタプラグイン構造体
1236#[repr(C)]
1237pub struct FILTER_PLUGIN_TABLE {
1238    /// フラグ
1239    pub flag: i32,
1240    /// プラグインの名前
1241    pub name: LPCWSTR,
1242    /// ラベルの初期値 (nullptrならデフォルトのラベルになります)
1243    pub label: LPCWSTR,
1244    /// プラグインの情報
1245    pub information: LPCWSTR,
1246
1247    /// 設定項目の定義 (FILTER_ITEM_XXXポインタを列挙してnull終端したリストへのポインタ)
1248    pub items: *const *const c_void,
1249
1250    /// 画像フィルタ処理関数へのポインタ (FLAG_VIDEOが有効の時のみ呼ばれます)
1251    /// 戻り値 : falseを返却すると以降のフィルタや出力処理が中断されます
1252    pub func_proc_video: Option<extern "C" fn(video: *mut FILTER_PROC_VIDEO) -> bool>,
1253
1254    /// 音声フィルタ処理関数へのポインタ (FLAG_AUDIOが有効の時のみ呼ばれます)
1255    /// 戻り値 : falseを返却すると以降のフィルタや出力処理が中断されます
1256    pub func_proc_audio: Option<extern "C" fn(audio: *mut FILTER_PROC_AUDIO) -> bool>,
1257
1258    /// エフェクトのインスタンスが生成される時に呼ばれる関数へのポインタ (FLAG_USERDATAが有効の時のみ呼ばれます)
1259    /// ※オブジェクトと関連しない状態でも呼ばれます
1260    /// effect_id : エフェクトのID (アプリ起動毎の固有ID)
1261    /// 戻り値 : 任意のユーザーデータのポインタ
1262    pub func_create: Option<extern "C" fn(effect_id: i64) -> *mut c_void>,
1263
1264    /// エフェクトのインスタンスが破棄される時に呼ばれる関数へのポインタ (FLAG_USERDATAが有効の時のみ呼ばれます)
1265    /// 編集データやUndoバッファ等の全てのインスタンスが破棄されると呼ばれます
1266    /// ※オブジェクトと関連しない状態でも呼ばれます
1267    /// effect_id : エフェクトのID (アプリ起動毎の固有ID)
1268    /// userdata : func_create()で返却したユーザーデータのポインタ
1269    pub func_destroy: Option<extern "C" fn(effect_id: i64, userdata: *mut c_void)>,
1270}