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    /// 設定値の単位
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    /// トラックバー項目グループ
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"checksection")
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    /// 選択肢リスト (FILTER_ITEM_SELECT_ITEMを列挙して名前がnullのFILTER_ITEM_SELECT_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/// `default_value` は最大16KiBまでの任意のデータを格納できます。
152/// フィルタ処理関数内で `value` の参照先データを更新できますが、Undoポイントの作成や編集済みフラグの設定はされません。
153/// 保存済みの汎用データが空の場合はデフォルト値に初期化されます。
154#[repr(C)]
155#[derive(Clone, Copy)]
156pub struct FILTER_ITEM_DATA {
157    /// 設定の種別(L"data")
158    pub r#type: LPCWSTR,
159    /// 設定名
160    pub name: LPCWSTR,
161    /// 汎用データのポインタ(フィルタ処理の呼び出し時に現在のポインタに更新されます)
162    pub value: *mut c_void,
163    /// 汎用データのサイズ(フィルタ処理の呼び出し時に現在のサイズに更新されます、16KiB以下)
164    pub size: i32,
165    /// デフォルト値(sizeで指定した長さまで有効)
166    pub default_value: [MaybeUninit<u8>; 16 * 1024],
167}
168
169/// 設定グループ項目構造体
170/// 自身以降の設定項目をグループ化することが出来ます
171/// ※設定名を空にするとグループの終端を定義することが出来ます
172#[repr(C)]
173#[derive(Clone, Copy)]
174pub struct FILTER_ITEM_GROUP {
175    /// 設定の種別(L"group")
176    pub r#type: LPCWSTR,
177    /// 設定名
178    pub name: LPCWSTR,
179    /// デフォルトの表示状態
180    pub default_visible: bool,
181}
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: extern "C" fn(edit_section: *mut EDIT_SECTION),
195}
196
197/// 文字列項目構造体
198/// ※1行の文字列
199#[repr(C)]
200#[derive(Clone, Copy)]
201pub struct FILTER_ITEM_STRING {
202    /// 設定の種別(L"string")
203    pub r#type: LPCWSTR,
204    /// 設定名
205    pub name: LPCWSTR,
206    /// 設定値(フィルタ処理の呼び出し時に現在の値のポインタに更新されます)
207    pub value: LPCWSTR,
208}
209
210/// テキスト項目構造体
211/// ※複数行の文字列
212#[repr(C)]
213#[derive(Clone, Copy)]
214pub struct FILTER_ITEM_TEXT {
215    /// 設定の種別(L"text")
216    pub r#type: LPCWSTR,
217    /// 設定名
218    pub name: LPCWSTR,
219    /// 設定値(フィルタ処理の呼び出し時に現在の値のポインタに更新されます)
220    pub value: LPCWSTR,
221}
222
223/// フォルダ選択項目構造体
224#[repr(C)]
225#[derive(Clone, Copy)]
226pub struct FILTER_ITEM_FOLDER {
227    /// 設定の種別(L"folder")
228    pub r#type: LPCWSTR,
229    /// 設定名
230    pub name: LPCWSTR,
231    /// 設定値(フィルタ処理の呼び出し時に現在の値のポインタに更新されます)
232    pub value: LPCWSTR,
233}
234
235/// セパレーター項目構造体
236#[repr(C)]
237#[derive(Clone, Copy)]
238pub struct FILTER_ITEM_SEPARATOR {
239    /// 設定の種別(L"separator")
240    pub r#type: LPCWSTR,
241    /// 設定名
242    pub name: LPCWSTR,
243}
244
245/// 非表示条件項目構造体
246/// 非表示条件を満たした項目を非表示にすることが出来ます
247#[repr(C)]
248#[derive(Clone, Copy)]
249pub struct FILTER_ITEM_HIDE_RULE {
250    /// 設定の種別(L"hiderule")
251    pub r#type: LPCWSTR,
252    /// 非表示にする設定名 ※設定値を持つ項目のみ
253    pub name: LPCWSTR,
254    /// 非表示の条件の設定名
255    ///
256    /// チェックボックス項目、リスト選択項目、ファイル選択項目、フォルダ選択項目を指定できます。
257    /// セクション毎のチェックボックスはセクション毎が有効の場合は2を返却します(0/1/2)。
258    /// ファイル、フォルダ選択項目は選択されているかを返却します(0/1)。
259    /// nullを指定した場合は常に非表示、`filter` を指定した場合はフィルタオブジェクトかを返却します(0/1)。
260    pub condition_name: LPCWSTR,
261    /// 非表示の条件の比較種別
262    pub condition_operator: FILTER_ITEM_HIDE_RULE_OPERATOR,
263    /// 非表示の条件の比較値
264    pub condition_value: i32,
265}
266
267/// 非表示条件の比較種別
268#[repr(i32)]
269#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
270pub enum FILTER_ITEM_HIDE_RULE_OPERATOR {
271    /// 等しい
272    EQUAL = 0,
273    /// 等しくない
274    NOT_EQUAL = 1,
275    /// より大きい
276    GREATER = 2,
277    /// より小さい
278    LESS = 3,
279}
280
281/// 頂点データ構造体(描画色)
282#[repr(C)]
283pub struct VERTEX_COLOR {
284    pub x: f32,
285    pub y: f32,
286    pub z: f32,
287    pub r: f32,
288    pub g: f32,
289    pub b: f32,
290    pub a: f32,
291}
292
293/// 頂点データ構造体(描画色、法線)
294#[repr(C)]
295pub struct VERTEX_COLOR_NORM {
296    pub x: f32,
297    pub y: f32,
298    pub z: f32,
299    pub r: f32,
300    pub g: f32,
301    pub b: f32,
302    pub a: f32,
303    pub vx: f32,
304    pub vy: f32,
305    pub vz: f32,
306}
307
308/// 頂点データ構造体(テクスチャ)
309#[repr(C)]
310pub struct VERTEX_TEXTURE {
311    pub x: f32,
312    pub y: f32,
313    pub z: f32,
314    pub u: f32,
315    pub v: f32,
316    pub a: f32,
317}
318
319/// 頂点データ構造体(テクスチャ、法線)
320#[repr(C)]
321pub struct VERTEX_TEXTURE_NORM {
322    pub x: f32,
323    pub y: f32,
324    pub z: f32,
325    pub u: f32,
326    pub v: f32,
327    pub a: f32,
328    pub vx: f32,
329    pub vy: f32,
330    pub vz: f32,
331}
332
333/// 頂点リストの種別
334#[repr(i32)]
335pub enum VERTEX_TYPE {
336    /// 三角形の `VERTEX_COLOR` のリスト(頂点数は3の倍数になる)
337    TRIANGLE_COLOR = 1,
338    /// 三角形の `VERTEX_COLOR_NORM` のリスト(頂点数は3の倍数になる)
339    TRIANGLE_COLOR_NORM = 2,
340    /// 三角形の `VERTEX_TEXTURE` のリスト(頂点数は3の倍数になる)
341    TRIANGLE_TEXTURE = 3,
342    /// 三角形の `VERTEX_TEXTURE_NORM` のリスト(頂点数は3の倍数になる)
343    TRIANGLE_TEXTURE_NORM = 4,
344    /// 四角形の `VERTEX_COLOR` のリスト(頂点数は4の倍数になる)
345    QUAD_COLOR = 5,
346    /// 四角形の `VERTEX_COLOR_NORM` のリスト(頂点数は4の倍数になる)
347    QUAD_COLOR_NORM = 6,
348    /// 四角形の `VERTEX_TEXTURE` のリスト(頂点数は4の倍数になる)
349    QUAD_TEXTURE = 7,
350    /// 四角形の `VERTEX_TEXTURE_NORM` のリスト(頂点数は4の倍数になる)
351    QUAD_TEXTURE_NORM = 8,
352}
353
354/// サンプラーの種別
355#[repr(i32)]
356pub enum SAMPLER_MODE {
357    /// 領域外は透明色
358    CLIP = 0,
359    /// 領域外は一番外側の色
360    CLAMP = 1,
361    /// 領域外はループ
362    LOOP = 2,
363    /// 領域外は領域を反転しながらループ
364    MIRROR = 3,
365    /// 拡大縮小補間をしない(領域外は透明色)
366    DOT = 4,
367}
368
369/// 合成モードの種別
370#[repr(i32)]
371pub enum BLEND_MODE {
372    /// 通常
373    NONE = 0,
374    /// 加算
375    ADD = 1,
376    /// 減算
377    SUB = 2,
378    /// 乗算
379    MUL = 3,
380    /// スクリーン
381    SCREEN = 4,
382    /// オーバーレイ
383    OVERLAY = 5,
384    /// 比較(明)
385    LIGHT = 6,
386    /// 比較(暗)
387    DARK = 7,
388    /// 輝度
389    BRIGHTNESS = 8,
390    /// 色差
391    CHROMA = 9,
392    /// 陰影
393    SHADOW = 10,
394    /// 明暗
395    LIGHT_DARK = 11,
396    /// 差分
397    DIFF = 12,
398}
399
400/// ビルボードの種別
401#[repr(i32)]
402pub enum BILLBOARD_MODE {
403    /// 標準の向き(何もしない)
404    NONE = 0,
405    /// 横方向のみカメラに向ける
406    SIDE = 1,
407    /// 縦横方向のみカメラに向ける
408    DIRECTION = 2,
409    /// カメラに向ける
410    CAMERA = 3,
411}
412
413/// 出力ブレンド(BlendState)の種別
414#[repr(i32)]
415pub enum BLEND_STATE_MODE {
416    /// 出力をそのままコピー
417    COPY = 0,
418    /// α値のみを乗算 ※RGB値は利用されません
419    MASK = 1,
420    /// 出力をアルファブレンド
421    DRAW = 2,
422    /// 出力を加算合成
423    ADD = 3,
424}
425
426/// 画像入力のピクセルフォーマット種別
427#[repr(i32)]
428#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
429pub enum INPUT_PIXEL_FORMAT {
430    /// DXGI_FORMAT_R8G8B8A8_UNORM ※PIXEL_RGBA
431    RGBA = 28,
432    /// DXGI_FORMAT_B8G8R8A8_UNORM
433    BGRA = 87,
434    /// DXGI_FORMAT_B8G8R8X8_UNORM
435    BGR = 88,
436    /// DXGI_FORMAT_R16G16B16A16_UNORM
437    PA64 = 11,
438    /// DXGI_FORMAT_R16G16B16A16_FLOAT
439    HF64 = 10,
440    /// DXGI_FORMAT_YUY2
441    YUY2 = 107,
442    /// DXGI_FORMAT_R16G16B16A16_SNORM ※互換対応
443    YC48 = 13,
444}
445
446/// 画像出力のピクセルフォーマット種別
447#[repr(i32)]
448#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
449pub enum OUTPUT_PIXEL_FORMAT {
450    /// DXGI_FORMAT_R8G8B8A8_UNORM ※PIXEL_RGBA
451    RGBA = 28,
452    /// DXGI_FORMAT_R16G16B16A16_UNORM
453    PA64 = 11,
454    /// DXGI_FORMAT_R16G16B16A16_FLOAT
455    HF64 = 10,
456}
457
458/// RGBA32bit構造体
459#[repr(C)]
460pub struct PIXEL_RGBA {
461    pub r: u8,
462    pub g: u8,
463    pub b: u8,
464    pub a: u8,
465}
466
467/// シーン情報構造体
468#[repr(C)]
469pub struct SCENE_INFO {
470    /// シーンの解像度(幅)
471    pub width: i32,
472    /// シーンの解像度(高さ)
473    pub height: i32,
474    /// シーンのフレームレート
475    pub rate: i32,
476    /// シーンのフレームレート(スケール)
477    pub scale: i32,
478    /// シーンのサンプリングレート
479    pub sample_rate: i32,
480}
481
482/// オブジェクト情報構造体
483#[repr(C)]
484pub struct OBJECT_INFO {
485    /// オブジェクトのID (アプリ起動毎の固有ID)
486    /// ※描画対象のオブジェクトの固有ID
487    pub id: i64,
488    /// オブジェクトの現在のフレーム番号
489    pub frame: i32,
490    /// オブジェクトの総フレーム数
491    pub frame_total: i32,
492    /// オブジェクトの現在の時間(秒)
493    pub time: f64,
494    /// オブジェクトの総時間(秒)
495    pub time_total: f64,
496    /// オブジェクトの現在の画像サイズの幅 (画像フィルタのみ)
497    pub width: i32,
498    /// オブジェクトの現在の画像サイズの高さ (画像フィルタのみ)
499    pub height: i32,
500    /// オブジェクトの現在の音声サンプル位置 (音声フィルタのみ)
501    pub sample_index: i64,
502    /// オブジェクトの総サンプル数 (音声フィルタのみ)
503    pub sample_total: i64,
504    /// オブジェクトの現在の音声サンプル数 (音声フィルタのみ)
505    pub sample_num: i32,
506    /// オブジェクトの現在の音声チャンネル数 (音声フィルタのみ) ※通常2になります
507    pub channel_num: i32,
508    /// オブジェクトの内の対象エフェクトのID (アプリ起動毎の固有ID)
509    /// ※処理対象のフィルタ効果、オブジェクト入出力の固有ID
510    pub effect_id: i64,
511    /// フラグ
512    pub flag: i32,
513    /// オブジェクトの現在のレイヤー番号
514    pub layer: i32,
515    /// 複数オブジェクト時の現在の対象番号
516    pub index: i32,
517    /// 複数オブジェクト時の対象数 (1 = 単体オブジェクト / 0 = 不定)
518    pub num: i32,
519    /// 全体(シーン)基準のオブジェクトの開始フレーム(0からの番号)
520    pub frame_s: i32,
521    /// 全体(シーン)基準のオブジェクトの終了フレーム(0からの番号)
522    pub frame_e: i32,
523    /// 対象エフェクトの現在のレイヤー番号 ※自身のオブジェクトのレイヤー番号
524    pub effect_layer: i32,
525    /// 全体(シーン)基準のレンダリングの起点フレーム(0からの整数)
526    pub origin_frame: i32,
527}
528
529impl OBJECT_INFO {
530    /// フィルタオブジェクトか?
531    pub const FLAG_FILTER_OBJECT: i32 = 1;
532}
533
534/// オブジェクトの画像パラメータ構造体
535#[repr(C)]
536pub struct OBJECT_IMAGE_PARAM {
537    /// 基準座標
538    pub x: f32,
539    pub y: f32,
540    pub z: f32,
541    /// 回転角度 (360.0で1回転)
542    pub rx: f32,
543    pub ry: f32,
544    pub rz: f32,
545    /// 拡大率 (1.0=等倍)
546    pub sx: f32,
547    pub sy: f32,
548    pub sz: f32,
549    /// 中心座標 (基準座標からの相対)
550    pub cx: f32,
551    pub cy: f32,
552    pub cz: f32,
553    /// 不透明度 (0.0〜1.0/0.0=透明/1.0=不透明)
554    pub alpha: f32,
555}
556
557/// オブジェクトの音声パラメータ構造体
558#[repr(C)]
559pub struct OBJECT_AUDIO_PARAM {
560    /// 音量倍率 (1.0=等倍)
561    pub vol_l: f32,
562    pub vol_r: f32,
563}
564
565/// エフェクト実行の設定パラメータ構造体
566#[repr(C)]
567pub struct EFFECT_ITEM_PARAM {
568    /// 設定名 ※エイリアスファイルの設定のキーの名称
569    pub name: LPCWSTR,
570    /// 設定値(UTF8) ※エイリアスファイルの設定値と同じフォーマット
571    pub value: LPCSTR,
572}
573
574/// 画像フィルタ処理用構造体
575#[repr(C)]
576pub struct FILTER_PROC_VIDEO {
577    /// シーン情報
578    pub scene: *const SCENE_INFO,
579
580    /// オブジェクト情報
581    pub object: *const OBJECT_INFO,
582
583    /// 現在の画像のデータを取得する(VRAMからデータを取得します)
584    /// buffer: 画像データの格納先へのポインタ
585    pub get_image_data: unsafe extern "C" fn(buffer: *mut PIXEL_RGBA),
586
587    /// 現在の画像のデータを設定します(VRAMへデータを書き込みます)
588    /// buffer: 画像データへのポインタ
589    /// width,height: 画像サイズ
590    pub set_image_data: unsafe extern "C" fn(buffer: *const PIXEL_RGBA, width: i32, height: i32),
591
592    // 現在のオブジェクトの画像データのポインタを取得する (ID3D11Texture2Dのポインタを取得します)
593    // 戻り値		: オブジェクトの画像データへのポインタ
594    //				  ※現在の画像が変更(set_image_data)されるかフィルタ処理の終了まで有効
595    pub get_image_texture2d: unsafe extern "C" fn() -> *mut c_void,
596
597    // 現在のフレームバッファの画像データのポインタを取得する (ID3D11Texture2Dのポインタを取得します)
598    // 戻り値		: フレームバッファの画像データへのポインタ
599    //				  ※フィルタ処理の終了まで有効
600    pub get_framebuffer_texture2d: unsafe extern "C" fn() -> *mut c_void,
601
602    /// 編集セクション関数
603    pub edit: *mut EDIT_SECTION,
604
605    /// 現在のオブジェクトの画像パラメータ情報
606    pub param: *mut OBJECT_IMAGE_PARAM,
607
608    /// 指定オブジェクトの画像出力項目のパラメータを取得する
609    pub get_output_image_param: unsafe extern "C" fn(
610        object: OBJECT_HANDLE,
611        offset: f64,
612        param: *mut OBJECT_IMAGE_PARAM,
613        param_size: i32,
614    ) -> bool,
615
616    /// 指定のレイヤーにある画像オブジェクトを取得します
617    pub get_image_object: unsafe extern "C" fn(layer: i32, offset: f64) -> OBJECT_HANDLE,
618
619    /// 指定の画像リソースをフレームバッファに描画します
620    pub draw_image: unsafe extern "C" fn(
621        image: LPCWSTR,
622        x: f32,
623        y: f32,
624        z: f32,
625        rx: f32,
626        ry: f32,
627        rz: f32,
628        sx: f32,
629        sy: f32,
630        sz: f32,
631        alpha: f32,
632    ) -> bool,
633
634    /// 指定の頂点リストのポリゴンをフレームバッファに描画します
635    pub draw_poly: unsafe extern "C" fn(
636        vertex_type: VERTEX_TYPE,
637        vertex_list: *const c_void,
638        vertex_num: i32,
639        image: LPCWSTR,
640    ) -> bool,
641
642    /// 標準のアンカー枠を設定します
643    pub set_default_anchor: unsafe extern "C" fn(width: i32, height: i32),
644
645    /// 描画時の合成モードを設定します
646    pub set_blend_mode: unsafe extern "C" fn(blend: BLEND_MODE),
647
648    /// 描画時の光沢度を設定します
649    pub set_material_shine: unsafe extern "C" fn(shine: f32),
650
651    /// 描画時のサンプラーを設定します
652    pub set_sampler_mode: unsafe extern "C" fn(sampler: SAMPLER_MODE),
653
654    /// 描画時に裏面を非表示にするかを設定します
655    pub set_culling_state: unsafe extern "C" fn(culling: bool),
656
657    /// 描画時にオブジェクトをカメラの方向に向けるかを設定します
658    pub set_billboard_mode: unsafe extern "C" fn(billboard: BILLBOARD_MODE),
659
660    /// 画像リソースを作成する
661    pub create_image_resource:
662        unsafe extern "C" fn(image: LPCWSTR, buffer: *const PIXEL_RGBA, width: i32, height: i32),
663
664    /// 指定の画像リソースのD3D画像リソースのポインタを取得する
665    pub get_image_resource_texture2d: unsafe extern "C" fn(resource: LPCWSTR) -> *mut c_void,
666
667    /// 画像リソースをコピーする
668    pub copy_image_resource:
669        unsafe extern "C" fn(dst_resource: LPCWSTR, src_resource: LPCWSTR) -> bool,
670
671    /// 画像リソースをクリアする
672    pub clear_image_resource: unsafe extern "C" fn(resource: LPCWSTR, color: PIXEL_RGBA) -> bool,
673
674    /// 指定の画像リソースを描画先の画像リソースに描画します
675    pub draw_image_to_resource: unsafe extern "C" fn(
676        dst_resource: LPCWSTR,
677        src_resource: LPCWSTR,
678        x: f32,
679        y: f32,
680        z: f32,
681        rx: f32,
682        ry: f32,
683        rz: f32,
684        sx: f32,
685        sy: f32,
686        sz: f32,
687        alpha: f32,
688    ) -> bool,
689
690    /// 指定の頂点リストのポリゴンを描画先の画像リソースに描画します
691    pub draw_poly_to_resource: unsafe extern "C" fn(
692        dst_resource: LPCWSTR,
693        vertex_type: VERTEX_TYPE,
694        vertex_list: *const c_void,
695        vertex_num: i32,
696        src_resource: LPCWSTR,
697    ) -> bool,
698
699    /// ピクセルシェーダーを実行します
700    pub exec_pixelshader_file: unsafe extern "C" fn(
701        cso_file: LPCWSTR,
702        target: LPCWSTR,
703        resource_list: *mut LPCWSTR,
704        resource_num: i32,
705        constant: *mut c_void,
706        constant_size: i32,
707        blend_state: *mut c_void,
708        sampler_state: *mut c_void,
709    ) -> bool,
710
711    /// コンピュートシェーダーを実行します
712    pub exec_computeshader_file: unsafe extern "C" fn(
713        cso_file: LPCWSTR,
714        target_list: *mut LPCWSTR,
715        target_num: i32,
716        resource_list: *mut LPCWSTR,
717        resource_num: i32,
718        constant: *mut c_void,
719        constant_size: i32,
720        count_x: i32,
721        count_y: i32,
722        count_z: i32,
723        sampler_state: *mut c_void,
724    ) -> bool,
725
726    /// 定義済みのD3Dの出力ブレンドのリソースのポインタを取得する
727    pub get_blend_state: unsafe extern "C" fn(blend: BLEND_STATE_MODE) -> *mut c_void,
728
729    /// 定義済みのD3Dのサンプラーのリソースのポインタを取得する
730    pub get_sampler_state: unsafe extern "C" fn(sampler: SAMPLER_MODE) -> *mut c_void,
731
732    /// ピクセルシェーダーを実行します
733    pub exec_pixelshader_data: unsafe extern "C" fn(
734        data: *const u8,
735        data_size: i32,
736        target: LPCWSTR,
737        resource_list: *mut LPCWSTR,
738        resource_num: i32,
739        constant: *mut c_void,
740        constant_size: i32,
741        blend_state: *mut c_void,
742        sampler_state: *mut c_void,
743    ) -> bool,
744
745    /// コンピュートシェーダーを実行します
746    pub exec_computeshader_data: unsafe extern "C" fn(
747        data: *const u8,
748        data_size: i32,
749        target_list: *mut LPCWSTR,
750        target_num: i32,
751        resource_list: *mut LPCWSTR,
752        resource_num: i32,
753        constant: *mut c_void,
754        constant_size: i32,
755        count_x: i32,
756        count_y: i32,
757        count_z: i32,
758        sampler_state: *mut c_void,
759    ) -> bool,
760
761    /// 指定の画像リソースのサイズを取得する
762    pub get_image_resource_size:
763        unsafe extern "C" fn(resource: LPCWSTR, width: *mut i32, height: *mut i32) -> bool,
764
765    /// 画像リソースから指定フォーマットの画像データを取得する
766    pub get_image_resource_data: unsafe extern "C" fn(
767        resource: LPCWSTR,
768        buffer: *mut c_void,
769        width: i32,
770        height: i32,
771        pitch: i32,
772        format: OUTPUT_PIXEL_FORMAT,
773    ) -> bool,
774
775    /// 画像リソースに指定フォーマットの画像データを設定する
776    pub set_image_resource_data: unsafe extern "C" fn(
777        resource: LPCWSTR,
778        buffer: *const c_void,
779        width: i32,
780        height: i32,
781        pitch: i32,
782        format: INPUT_PIXEL_FORMAT,
783    ) -> bool,
784
785    /// 冗長なので廃止します ※EDIT_SECTIONに移動しました
786    #[deprecated = "冗長なので廃止します ※EDIT_SECTIONに移動しました"]
787    pub deprecated_get_font: unsafe extern "C" fn(font: LPCWSTR) -> *mut c_void,
788
789    /// 指定の汎用データ項目のデータサイズを変更します
790    pub set_filter_item_data_size: unsafe extern "C" fn(filter_item_data: *mut c_void, size: i32),
791
792    /// `func_create` で返却したユーザーデータのポインタ
793    pub userdata: *mut c_void,
794
795    /// 画像リソースを解放します
796    pub release_image_resource: unsafe extern "C" fn(resource: LPCWSTR) -> bool,
797
798    /// 指定のエフェクトを実行します
799    pub exec_effect: unsafe extern "C" fn(
800        name: LPCWSTR,
801        param_list: *mut EFFECT_ITEM_PARAM,
802        param_num: i32,
803        resource: LPCWSTR,
804    ) -> bool,
805}
806
807/// 音声フィルタ処理用構造体
808#[repr(C)]
809pub struct FILTER_PROC_AUDIO {
810    /// シーン情報
811    pub scene: *const SCENE_INFO,
812
813    /// オブジェクト情報
814    pub object: *const OBJECT_INFO,
815
816    /// 現在の音声のデータを取得する
817    /// buffer: 音声データの格納先へのポインタ ※音声データはPCM(float)32bit
818    /// channel: 音声データのチャンネル ( 0 = 左チャンネル / 1 = 右チャンネル )
819    pub get_sample_data: unsafe extern "C" fn(buffer: *mut f32, channel: i32),
820
821    /// 現在の音声のデータを設定する
822    /// buffer: 音声データへのポインタ ※音声データはPCM(float)32bit
823    /// channel: 音声データのチャンネル ( 0 = 左チャンネル / 1 = 右チャンネル )
824    pub set_sample_data: unsafe extern "C" fn(buffer: *const f32, channel: i32),
825
826    /// 編集セクション関数
827    pub edit: *mut EDIT_SECTION,
828
829    /// 現在のオブジェクトの音声パラメータ情報
830    pub param: *mut OBJECT_AUDIO_PARAM,
831
832    /// 指定オブジェクトの音声出力項目のパラメータを取得する
833    pub get_output_audio_param: unsafe extern "C" fn(
834        object: OBJECT_HANDLE,
835        offset: f64,
836        param: *mut OBJECT_AUDIO_PARAM,
837        param_size: i32,
838    ) -> bool,
839
840    /// 指定のレイヤー位置にある音声オブジェクトを取得します
841    pub get_audio_object: unsafe extern "C" fn(layer: i32, offset: f64) -> OBJECT_HANDLE,
842
843    /// 指定の汎用データ項目のデータサイズを変更します
844    pub set_filter_item_data_size: unsafe extern "C" fn(filter_item_data: *mut c_void, size: i32),
845
846    /// `func_create` で返却したユーザーデータのポインタ
847    pub userdata: *mut c_void,
848}
849
850impl FILTER_PLUGIN_TABLE {
851    /// 画像フィルタをサポートする
852    pub const FLAG_VIDEO: i32 = 1;
853    /// 音声フィルタをサポートする
854    pub const FLAG_AUDIO: i32 = 2;
855    /// メディアオブジェクトの初期入力をする (メディアオブジェクトにする場合)
856    pub const FLAG_INPUT: i32 = 4;
857    /// フィルタオブジェクトをサポートする (フィルタオブジェクトに対応する場合)
858    /// フィルタオブジェクトの場合は画像サイズの変更が出来ません
859    pub const FLAG_FILTER: i32 = 8;
860    /// ユーザーデータをサポートする
861    pub const FLAG_USERDATA: i32 = 16;
862}
863
864/// フィルタプラグイン構造体
865#[repr(C)]
866pub struct FILTER_PLUGIN_TABLE {
867    /// フラグ
868    /// 画像と音声のフィルタ処理は別々のスレッドで処理されます
869    pub flag: i32,
870    /// プラグインの名前
871    pub name: LPCWSTR,
872    /// ラベルの初期値 (nullptrならデフォルトのラベルになります)
873    pub label: LPCWSTR,
874    /// プラグインの情報
875    pub information: LPCWSTR,
876
877    /// 設定項目の定義 (FILTER_ITEM_XXXポインタを列挙してnull終端したリストへのポインタ)
878    pub items: *const *const c_void,
879
880    /// 画像フィルタ処理関数へのポインタ (FLAG_VIDEOが有効の時のみ呼ばれます)
881    pub func_proc_video: Option<extern "C" fn(video: *mut FILTER_PROC_VIDEO) -> bool>,
882
883    /// 音声フィルタ処理関数へのポインタ (FLAG_AUDIOが有効の時のみ呼ばれます)
884    pub func_proc_audio: Option<extern "C" fn(audio: *mut FILTER_PROC_AUDIO) -> bool>,
885
886    /// エフェクトのインスタンスが生成される時に呼ばれる関数へのポインタ
887    pub func_create: Option<extern "C" fn(effect_id: i64) -> *mut c_void>,
888
889    /// エフェクトのインスタンスが破棄される時に呼ばれる関数へのポインタ
890    pub func_destroy: Option<extern "C" fn(effect_id: i64, userdata: *mut c_void)>,
891}