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 checkbox: FILTER_ITEM_CHECKBOX,
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}
30
31/// トラックバー項目構造体
32#[repr(C)]
33#[derive(Clone, Copy)]
34pub struct FILTER_ITEM_TRACK {
35    /// 設定の種別(L"track2")
36    pub r#type: LPCWSTR,
37    /// 設定名
38    pub name: LPCWSTR,
39    /// 設定値(フィルタ処理の呼び出し時に現在の値に更新されます)
40    pub value: f64,
41    /// 設定値の最小
42    pub s: f64,
43    /// 設定値の最大
44    pub e: f64,
45    /// 設定値の単位
46    pub step: f64,
47    /// ゼロ値名称 (設定値が0の時にトラックバーに表示する文字列)
48    pub zero_display: LPCWSTR,
49    /// 操作倍率 (設定値の範囲に対してのトラックバー操作範囲の倍率)
50    pub slider_ratio: f64,
51}
52
53/// トラックバーグループ項目構造体
54#[repr(C)]
55#[derive(Clone, Copy)]
56pub struct FILTER_ITEM_TRACK_GROUP {
57    /// 設定の種別(L"trackgroup")
58    pub r#type: LPCWSTR,
59    /// 設定名
60    pub name: LPCWSTR,
61    /// トラックバー項目グループ
62    pub tracks: *mut *mut FILTER_ITEM_TRACK,
63}
64
65/// チェックボックス項目構造体
66#[repr(C)]
67#[derive(Clone, Copy)]
68pub struct FILTER_ITEM_CHECKBOX {
69    /// 設定の種別(L"check")
70    pub r#type: LPCWSTR,
71    /// 設定名
72    pub name: LPCWSTR,
73    /// 設定値(フィルタ処理の呼び出し時に現在の値に更新されます)
74    pub value: bool,
75}
76
77pub type FILTER_ITEM_CHECK = FILTER_ITEM_CHECKBOX;
78
79/// チェックボックス(セクション毎)項目構造体
80#[repr(C)]
81#[derive(Clone, Copy)]
82pub struct FILTER_ITEM_CHECK_SECTION {
83    /// 設定の種別(L"checksection")
84    pub r#type: LPCWSTR,
85    /// 設定名
86    pub name: LPCWSTR,
87    /// 設定値(フィルタ処理の呼び出し時に現在の値に更新されます)
88    pub value: bool,
89    /// セクション毎設定の初期値
90    pub multi_section: bool,
91}
92
93/// 色選択項目構造体
94#[repr(C)]
95#[derive(Clone, Copy)]
96pub struct FILTER_ITEM_COLOR {
97    /// 設定の種別(L"color")
98    pub r#type: LPCWSTR,
99    /// 設定名
100    pub name: LPCWSTR,
101    /// 設定値(フィルタ処理の呼び出し時に現在の値に更新されます)
102    pub value: FILTER_ITEM_COLOR_VALUE,
103}
104
105/// 色選択項目の設定値の色
106#[repr(C)]
107#[derive(Clone, Copy)]
108pub union FILTER_ITEM_COLOR_VALUE {
109    pub code: u32,
110    pub bgrx: [u8; 4],
111}
112
113/// 選択リスト項目構造体
114#[repr(C)]
115#[derive(Clone, Copy)]
116pub struct FILTER_ITEM_SELECT {
117    /// 設定の種別(L"select")
118    pub r#type: LPCWSTR,
119    /// 設定名
120    pub name: LPCWSTR,
121    /// 設定値(フィルタ処理の呼び出し時に現在の値に更新されます)
122    pub value: i32,
123    /// 選択肢リスト (FILTER_ITEM_SELECT_ITEMを列挙して名前がnullのFILTER_ITEM_SELECT_ITEMで終端したリストへのポインタ)
124    pub items: *const FILTER_ITEM_SELECT_ITEM,
125}
126
127/// 選択リスト項目構造体の選択肢項目
128#[repr(C)]
129#[derive(Clone, Copy)]
130pub struct FILTER_ITEM_SELECT_ITEM {
131    /// 選択肢の名前
132    pub name: LPCWSTR,
133    /// 選択肢の値
134    pub value: i32,
135}
136
137/// ファイル選択項目構造体
138#[repr(C)]
139#[derive(Clone, Copy)]
140pub struct FILTER_ITEM_FILE {
141    /// 設定の種別(L"file")
142    pub r#type: LPCWSTR,
143    /// 設定名
144    pub name: LPCWSTR,
145    /// 設定値(フィルタ処理の呼び出し時に現在の値に更新されます)
146    pub value: LPCWSTR,
147    /// ファイルフィルタ
148    pub filefilter: LPCWSTR,
149}
150
151/// 汎用データ項目構造体
152/// `default_value` は最大16KiBまでの任意のデータを格納できます。
153/// フィルタ処理関数内で `value` の参照先データを更新できますが、Undoポイントの作成や編集済みフラグの設定はされません。
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#[repr(C)]
247pub struct VERTEX_COLOR {
248    pub x: f32,
249    pub y: f32,
250    pub z: f32,
251    pub r: f32,
252    pub g: f32,
253    pub b: f32,
254    pub a: f32,
255}
256
257/// 頂点データ構造体(描画色、法線)
258#[repr(C)]
259pub struct VERTEX_COLOR_NORM {
260    pub x: f32,
261    pub y: f32,
262    pub z: f32,
263    pub r: f32,
264    pub g: f32,
265    pub b: f32,
266    pub a: f32,
267    pub vx: f32,
268    pub vy: f32,
269    pub vz: f32,
270}
271
272/// 頂点データ構造体(テクスチャ)
273#[repr(C)]
274pub struct VERTEX_TEXTURE {
275    pub x: f32,
276    pub y: f32,
277    pub z: f32,
278    pub u: f32,
279    pub v: f32,
280    pub a: f32,
281}
282
283/// 頂点データ構造体(テクスチャ、法線)
284#[repr(C)]
285pub struct VERTEX_TEXTURE_NORM {
286    pub x: f32,
287    pub y: f32,
288    pub z: f32,
289    pub u: f32,
290    pub v: f32,
291    pub a: f32,
292    pub vx: f32,
293    pub vy: f32,
294    pub vz: f32,
295}
296
297/// 頂点リストの種別
298#[repr(i32)]
299pub enum VERTEX_TYPE {
300    /// 三角形の `VERTEX_COLOR` のリスト(頂点数は3の倍数になる)
301    TRIANGLE_COLOR = 1,
302    /// 三角形の `VERTEX_COLOR_NORM` のリスト(頂点数は3の倍数になる)
303    TRIANGLE_COLOR_NORM = 2,
304    /// 三角形の `VERTEX_TEXTURE` のリスト(頂点数は3の倍数になる)
305    TRIANGLE_TEXTURE = 3,
306    /// 三角形の `VERTEX_TEXTURE_NORM` のリスト(頂点数は3の倍数になる)
307    TRIANGLE_TEXTURE_NORM = 4,
308    /// 四角形の `VERTEX_COLOR` のリスト(頂点数は4の倍数になる)
309    QUAD_COLOR = 5,
310    /// 四角形の `VERTEX_COLOR_NORM` のリスト(頂点数は4の倍数になる)
311    QUAD_COLOR_NORM = 6,
312    /// 四角形の `VERTEX_TEXTURE` のリスト(頂点数は4の倍数になる)
313    QUAD_TEXTURE = 7,
314    /// 四角形の `VERTEX_TEXTURE_NORM` のリスト(頂点数は4の倍数になる)
315    QUAD_TEXTURE_NORM = 8,
316}
317
318/// サンプラーの種別
319#[repr(i32)]
320pub enum SAMPLER_MODE {
321    /// 領域外は透明色
322    CLIP = 0,
323    /// 領域外は一番外側の色
324    CLAMP = 1,
325    /// 領域外はループ
326    LOOP = 2,
327    /// 領域外は領域を反転しながらループ
328    MIRROR = 3,
329    /// 拡大縮小補間をしない(領域外は透明色)
330    DOT = 4,
331}
332
333/// 合成モードの種別
334#[repr(i32)]
335pub enum BLEND_MODE {
336    /// 通常
337    NONE = 0,
338    /// 加算
339    ADD = 1,
340    /// 減算
341    SUB = 2,
342    /// 乗算
343    MUL = 3,
344    /// スクリーン
345    SCREEN = 4,
346    /// オーバーレイ
347    OVERLAY = 5,
348    /// 比較(明)
349    LIGHT = 6,
350    /// 比較(暗)
351    DARK = 7,
352    /// 輝度
353    BRIGHTNESS = 8,
354    /// 色差
355    CHROMA = 9,
356    /// 陰影
357    SHADOW = 10,
358    /// 明暗
359    LIGHT_DARK = 11,
360    /// 差分
361    DIFF = 12,
362}
363
364/// ビルボードの種別
365#[repr(i32)]
366pub enum BILLBOARD_MODE {
367    /// 標準の向き(何もしない)
368    NONE = 0,
369    /// 横方向のみカメラに向ける
370    SIDE = 1,
371    /// 縦横方向のみカメラに向ける
372    DIRECTION = 2,
373    /// カメラに向ける
374    CAMERA = 3,
375}
376
377/// 出力ブレンド(BlendState)の種別
378#[repr(i32)]
379pub enum BLEND_STATE_MODE {
380    /// 出力をそのままコピー
381    COPY = 0,
382    /// α値のみを乗算 ※RGB値は利用されません
383    MASK = 1,
384    /// 出力をアルファブレンド
385    DRAW = 2,
386    /// 出力を加算合成
387    ADD = 3,
388}
389
390/// 画像入力のピクセルフォーマット種別
391#[repr(i32)]
392#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
393pub enum INPUT_PIXEL_FORMAT {
394    /// DXGI_FORMAT_R8G8B8A8_UNORM ※PIXEL_RGBA
395    RGBA = 28,
396    /// DXGI_FORMAT_B8G8R8A8_UNORM
397    BGRA = 87,
398    /// DXGI_FORMAT_B8G8R8X8_UNORM
399    BGR = 88,
400    /// DXGI_FORMAT_R16G16B16A16_UNORM
401    PA64 = 11,
402    /// DXGI_FORMAT_R16G16B16A16_FLOAT
403    HF64 = 10,
404    /// DXGI_FORMAT_YUY2
405    YUY2 = 107,
406    /// DXGI_FORMAT_R16G16B16A16_SNORM ※互換対応
407    YC48 = 13,
408}
409
410/// 画像出力のピクセルフォーマット種別
411#[repr(i32)]
412#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
413pub enum OUTPUT_PIXEL_FORMAT {
414    /// DXGI_FORMAT_R8G8B8A8_UNORM ※PIXEL_RGBA
415    RGBA = 28,
416    /// DXGI_FORMAT_R16G16B16A16_UNORM
417    PA64 = 11,
418    /// DXGI_FORMAT_R16G16B16A16_FLOAT
419    HF64 = 10,
420}
421
422/// RGBA32bit構造体
423#[repr(C)]
424pub struct PIXEL_RGBA {
425    pub r: u8,
426    pub g: u8,
427    pub b: u8,
428    pub a: u8,
429}
430
431/// シーン情報構造体
432#[repr(C)]
433pub struct SCENE_INFO {
434    /// シーンの解像度(幅)
435    pub width: i32,
436    /// シーンの解像度(高さ)
437    pub height: i32,
438    /// シーンのフレームレート
439    pub rate: i32,
440    /// シーンのフレームレート(スケール)
441    pub scale: i32,
442    /// シーンのサンプリングレート
443    pub sample_rate: i32,
444}
445
446/// オブジェクト情報構造体
447#[repr(C)]
448pub struct OBJECT_INFO {
449    /// オブジェクトのID (アプリ起動毎の固有ID)
450    /// ※描画対象のオブジェクトの固有ID
451    pub id: i64,
452    /// オブジェクトの現在のフレーム番号
453    pub frame: i32,
454    /// オブジェクトの総フレーム数
455    pub frame_total: i32,
456    /// オブジェクトの現在の時間(秒)
457    pub time: f64,
458    /// オブジェクトの総時間(秒)
459    pub time_total: f64,
460    /// オブジェクトの現在の画像サイズの幅 (画像フィルタのみ)
461    pub width: i32,
462    /// オブジェクトの現在の画像サイズの高さ (画像フィルタのみ)
463    pub height: i32,
464    /// オブジェクトの現在の音声サンプル位置 (音声フィルタのみ)
465    pub sample_index: i64,
466    /// オブジェクトの総サンプル数 (音声フィルタのみ)
467    pub sample_total: i64,
468    /// オブジェクトの現在の音声サンプル数 (音声フィルタのみ)
469    pub sample_num: i32,
470    /// オブジェクトの現在の音声チャンネル数 (音声フィルタのみ) ※通常2になります
471    pub channel_num: i32,
472    /// オブジェクトの内の対象エフェクトのID (アプリ起動毎の固有ID)
473    /// ※処理対象のフィルタ効果、オブジェクト入出力の固有ID
474    pub effect_id: i64,
475    /// フラグ
476    pub flag: i32,
477    /// オブジェクトの現在のレイヤー番号
478    pub layer: i32,
479    /// 複数オブジェクト時の現在の対象番号
480    pub index: i32,
481    /// 複数オブジェクト時の対象数 (1 = 単体オブジェクト / 0 = 不定)
482    pub num: i32,
483    /// 全体(シーン)基準のオブジェクトの開始フレーム(0からの番号)
484    pub frame_s: i32,
485    /// 全体(シーン)基準のオブジェクトの終了フレーム(0からの番号)
486    pub frame_e: i32,
487    /// 対象エフェクトの現在のレイヤー番号 ※自身のオブジェクトのレイヤー番号
488    pub effect_layer: i32,
489    /// 全体(シーン)基準のレンダリングの起点フレーム(0からの整数)
490    pub origin_frame: i32,
491}
492
493impl OBJECT_INFO {
494    /// フィルタオブジェクトか?
495    pub const FLAG_FILTER_OBJECT: i32 = 1;
496}
497
498/// オブジェクトの画像パラメータ構造体
499#[repr(C)]
500pub struct OBJECT_IMAGE_PARAM {
501    /// 基準座標
502    pub x: f32,
503    pub y: f32,
504    pub z: f32,
505    /// 回転角度 (360.0で1回転)
506    pub rx: f32,
507    pub ry: f32,
508    pub rz: f32,
509    /// 拡大率 (1.0=等倍)
510    pub sx: f32,
511    pub sy: f32,
512    pub sz: f32,
513    /// 中心座標 (基準座標からの相対)
514    pub cx: f32,
515    pub cy: f32,
516    pub cz: f32,
517    /// 不透明度 (0.0〜1.0/0.0=透明/1.0=不透明)
518    pub alpha: f32,
519}
520
521/// オブジェクトの音声パラメータ構造体
522#[repr(C)]
523pub struct OBJECT_AUDIO_PARAM {
524    /// 音量倍率 (1.0=等倍)
525    pub vol_l: f32,
526    pub vol_r: f32,
527}
528
529/// エフェクト実行の設定パラメータ構造体
530#[repr(C)]
531pub struct EFFECT_ITEM_PARAM {
532    /// 設定名 ※エイリアスファイルの設定のキーの名称
533    pub name: LPCWSTR,
534    /// 設定値(UTF8) ※エイリアスファイルの設定値と同じフォーマット
535    pub value: LPCSTR,
536}
537
538/// 画像フィルタ処理用構造体
539#[repr(C)]
540pub struct FILTER_PROC_VIDEO {
541    /// シーン情報
542    pub scene: *const SCENE_INFO,
543
544    /// オブジェクト情報
545    pub object: *const OBJECT_INFO,
546
547    /// 現在の画像のデータを取得する(VRAMからデータを取得します)
548    /// buffer: 画像データの格納先へのポインタ
549    pub get_image_data: unsafe extern "C" fn(buffer: *mut PIXEL_RGBA),
550
551    /// 現在の画像のデータを設定します(VRAMへデータを書き込みます)
552    /// buffer: 画像データへのポインタ
553    /// width,height: 画像サイズ
554    pub set_image_data: unsafe extern "C" fn(buffer: *const PIXEL_RGBA, width: i32, height: i32),
555
556    // 現在のオブジェクトの画像データのポインタを取得する (ID3D11Texture2Dのポインタを取得します)
557    // 戻り値		: オブジェクトの画像データへのポインタ
558    //				  ※現在の画像が変更(set_image_data)されるかフィルタ処理の終了まで有効
559    pub get_image_texture2d: unsafe extern "C" fn() -> *mut c_void,
560
561    // 現在のフレームバッファの画像データのポインタを取得する (ID3D11Texture2Dのポインタを取得します)
562    // 戻り値		: フレームバッファの画像データへのポインタ
563    //				  ※フィルタ処理の終了まで有効
564    pub get_framebuffer_texture2d: unsafe extern "C" fn() -> *mut c_void,
565
566    /// 編集セクション関数
567    pub edit: *mut EDIT_SECTION,
568
569    /// 現在のオブジェクトの画像パラメータ情報
570    pub param: *mut OBJECT_IMAGE_PARAM,
571
572    /// 指定オブジェクトの画像出力項目のパラメータを取得する
573    pub get_output_image_param: unsafe extern "C" fn(
574        object: OBJECT_HANDLE,
575        offset: f64,
576        param: *mut OBJECT_IMAGE_PARAM,
577        param_size: i32,
578    ) -> bool,
579
580    /// 指定のレイヤーにある画像オブジェクトを取得します
581    pub get_image_object: unsafe extern "C" fn(layer: i32, offset: f64) -> OBJECT_HANDLE,
582
583    /// 指定の画像リソースをフレームバッファに描画します
584    pub draw_image: unsafe extern "C" fn(
585        image: LPCWSTR,
586        x: f32,
587        y: f32,
588        z: f32,
589        rx: f32,
590        ry: f32,
591        rz: f32,
592        sx: f32,
593        sy: f32,
594        sz: f32,
595        alpha: f32,
596    ) -> bool,
597
598    /// 指定の頂点リストのポリゴンをフレームバッファに描画します
599    pub draw_poly: unsafe extern "C" fn(
600        vertex_type: VERTEX_TYPE,
601        vertex_list: *const c_void,
602        vertex_num: i32,
603        image: LPCWSTR,
604    ) -> bool,
605
606    /// 標準のアンカー枠を設定します
607    pub set_default_anchor: unsafe extern "C" fn(width: i32, height: i32),
608
609    /// 描画時の合成モードを設定します
610    pub set_blend_mode: unsafe extern "C" fn(blend: BLEND_MODE),
611
612    /// 描画時の光沢度を設定します
613    pub set_material_shine: unsafe extern "C" fn(shine: f32),
614
615    /// 描画時のサンプラーを設定します
616    pub set_sampler_mode: unsafe extern "C" fn(sampler: SAMPLER_MODE),
617
618    /// 描画時に裏面を非表示にするかを設定します
619    pub set_culling_state: unsafe extern "C" fn(culling: bool),
620
621    /// 描画時にオブジェクトをカメラの方向に向けるかを設定します
622    pub set_billboard_mode: unsafe extern "C" fn(billboard: BILLBOARD_MODE),
623
624    /// 画像リソースを作成する
625    pub create_image_resource:
626        unsafe extern "C" fn(image: LPCWSTR, buffer: *const PIXEL_RGBA, width: i32, height: i32),
627
628    /// 指定の画像リソースのD3D画像リソースのポインタを取得する
629    pub get_image_resource_texture2d: unsafe extern "C" fn(resource: LPCWSTR) -> *mut c_void,
630
631    /// 画像リソースをコピーする
632    pub copy_image_resource:
633        unsafe extern "C" fn(dst_resource: LPCWSTR, src_resource: LPCWSTR) -> bool,
634
635    /// 画像リソースをクリアする
636    pub clear_image_resource: unsafe extern "C" fn(resource: LPCWSTR, color: PIXEL_RGBA) -> bool,
637
638    /// 指定の画像リソースを描画先の画像リソースに描画します
639    pub draw_image_to_resource: unsafe extern "C" fn(
640        dst_resource: LPCWSTR,
641        src_resource: LPCWSTR,
642        x: f32,
643        y: f32,
644        z: f32,
645        rx: f32,
646        ry: f32,
647        rz: f32,
648        sx: f32,
649        sy: f32,
650        sz: f32,
651        alpha: f32,
652    ) -> bool,
653
654    /// 指定の頂点リストのポリゴンを描画先の画像リソースに描画します
655    pub draw_poly_to_resource: unsafe extern "C" fn(
656        dst_resource: LPCWSTR,
657        vertex_type: VERTEX_TYPE,
658        vertex_list: *const c_void,
659        vertex_num: i32,
660        src_resource: LPCWSTR,
661    ) -> bool,
662
663    /// ピクセルシェーダーを実行します
664    pub exec_pixelshader_file: unsafe extern "C" fn(
665        cso_file: LPCWSTR,
666        target: LPCWSTR,
667        resource_list: *mut LPCWSTR,
668        resource_num: i32,
669        constant: *mut c_void,
670        constant_size: i32,
671        blend_state: *mut c_void,
672        sampler_state: *mut c_void,
673    ) -> bool,
674
675    /// コンピュートシェーダーを実行します
676    pub exec_computeshader_file: unsafe extern "C" fn(
677        cso_file: LPCWSTR,
678        target_list: *mut LPCWSTR,
679        target_num: i32,
680        resource_list: *mut LPCWSTR,
681        resource_num: i32,
682        constant: *mut c_void,
683        constant_size: i32,
684        count_x: i32,
685        count_y: i32,
686        count_z: i32,
687        sampler_state: *mut c_void,
688    ) -> bool,
689
690    /// 定義済みのD3Dの出力ブレンドのリソースのポインタを取得する
691    pub get_blend_state: unsafe extern "C" fn(blend: BLEND_STATE_MODE) -> *mut c_void,
692
693    /// 定義済みのD3Dのサンプラーのリソースのポインタを取得する
694    pub get_sampler_state: unsafe extern "C" fn(sampler: SAMPLER_MODE) -> *mut c_void,
695
696    /// ピクセルシェーダーを実行します
697    pub exec_pixelshader_data: unsafe extern "C" fn(
698        data: *const u8,
699        data_size: i32,
700        target: LPCWSTR,
701        resource_list: *mut LPCWSTR,
702        resource_num: i32,
703        constant: *mut c_void,
704        constant_size: i32,
705        blend_state: *mut c_void,
706        sampler_state: *mut c_void,
707    ) -> bool,
708
709    /// コンピュートシェーダーを実行します
710    pub exec_computeshader_data: unsafe extern "C" fn(
711        data: *const u8,
712        data_size: i32,
713        target_list: *mut LPCWSTR,
714        target_num: i32,
715        resource_list: *mut LPCWSTR,
716        resource_num: i32,
717        constant: *mut c_void,
718        constant_size: i32,
719        count_x: i32,
720        count_y: i32,
721        count_z: i32,
722        sampler_state: *mut c_void,
723    ) -> bool,
724
725    /// 指定の画像リソースのサイズを取得する
726    pub get_image_resource_size:
727        unsafe extern "C" fn(resource: LPCWSTR, width: *mut i32, height: *mut i32) -> bool,
728
729    /// 画像リソースから指定フォーマットの画像データを取得する
730    pub get_image_resource_data: unsafe extern "C" fn(
731        resource: LPCWSTR,
732        buffer: *mut c_void,
733        width: i32,
734        height: i32,
735        pitch: i32,
736        format: OUTPUT_PIXEL_FORMAT,
737    ) -> bool,
738
739    /// 画像リソースに指定フォーマットの画像データを設定する
740    pub set_image_resource_data: unsafe extern "C" fn(
741        resource: LPCWSTR,
742        buffer: *const c_void,
743        width: i32,
744        height: i32,
745        pitch: i32,
746        format: INPUT_PIXEL_FORMAT,
747    ) -> bool,
748
749    /// 冗長なので廃止します ※EDIT_SECTIONに移動しました
750    #[deprecated = "冗長なので廃止します ※EDIT_SECTIONに移動しました"]
751    pub deprecated_get_font: unsafe extern "C" fn(font: LPCWSTR) -> *mut c_void,
752
753    /// 指定の汎用データ項目のデータサイズを変更します
754    pub set_filter_item_data_size: unsafe extern "C" fn(filter_item_data: *mut c_void, size: i32),
755
756    /// `func_create` で返却したユーザーデータのポインタ
757    pub userdata: *mut c_void,
758
759    /// 画像リソースを解放します
760    pub release_image_resource: unsafe extern "C" fn(resource: LPCWSTR) -> bool,
761
762    /// 指定のエフェクトを実行します
763    pub exec_effect: unsafe extern "C" fn(
764        name: LPCWSTR,
765        param_list: *mut EFFECT_ITEM_PARAM,
766        param_num: i32,
767        resource: LPCWSTR,
768    ) -> bool,
769}
770
771/// 音声フィルタ処理用構造体
772#[repr(C)]
773pub struct FILTER_PROC_AUDIO {
774    /// シーン情報
775    pub scene: *const SCENE_INFO,
776
777    /// オブジェクト情報
778    pub object: *const OBJECT_INFO,
779
780    /// 現在の音声のデータを取得する
781    /// buffer: 音声データの格納先へのポインタ ※音声データはPCM(float)32bit
782    /// channel: 音声データのチャンネル ( 0 = 左チャンネル / 1 = 右チャンネル )
783    pub get_sample_data: unsafe extern "C" fn(buffer: *mut f32, channel: i32),
784
785    /// 現在の音声のデータを設定する
786    /// buffer: 音声データへのポインタ ※音声データはPCM(float)32bit
787    /// channel: 音声データのチャンネル ( 0 = 左チャンネル / 1 = 右チャンネル )
788    pub set_sample_data: unsafe extern "C" fn(buffer: *const f32, channel: i32),
789
790    /// 編集セクション関数
791    pub edit: *mut EDIT_SECTION,
792
793    /// 現在のオブジェクトの音声パラメータ情報
794    pub param: *mut OBJECT_AUDIO_PARAM,
795
796    /// 指定オブジェクトの音声出力項目のパラメータを取得する
797    pub get_output_audio_param: unsafe extern "C" fn(
798        object: OBJECT_HANDLE,
799        offset: f64,
800        param: *mut OBJECT_AUDIO_PARAM,
801        param_size: i32,
802    ) -> bool,
803
804    /// 指定のレイヤー位置にある音声オブジェクトを取得します
805    pub get_audio_object: unsafe extern "C" fn(layer: i32, offset: f64) -> OBJECT_HANDLE,
806
807    /// 指定の汎用データ項目のデータサイズを変更します
808    pub set_filter_item_data_size: unsafe extern "C" fn(filter_item_data: *mut c_void, size: i32),
809
810    /// `func_create` で返却したユーザーデータのポインタ
811    pub userdata: *mut c_void,
812}
813
814impl FILTER_PLUGIN_TABLE {
815    /// 画像フィルタをサポートする
816    pub const FLAG_VIDEO: i32 = 1;
817    /// 音声フィルタをサポートする
818    pub const FLAG_AUDIO: i32 = 2;
819    /// メディアオブジェクトの初期入力をする (メディアオブジェクトにする場合)
820    pub const FLAG_INPUT: i32 = 4;
821    /// フィルタオブジェクトをサポートする (フィルタオブジェクトに対応する場合)
822    /// フィルタオブジェクトの場合は画像サイズの変更が出来ません
823    pub const FLAG_FILTER: i32 = 8;
824    /// ユーザーデータをサポートする
825    pub const FLAG_USERDATA: i32 = 16;
826}
827
828/// フィルタプラグイン構造体
829#[repr(C)]
830pub struct FILTER_PLUGIN_TABLE {
831    /// フラグ
832    /// 画像と音声のフィルタ処理は別々のスレッドで処理されます
833    pub flag: i32,
834    /// プラグインの名前
835    pub name: LPCWSTR,
836    /// ラベルの初期値 (nullptrならデフォルトのラベルになります)
837    pub label: LPCWSTR,
838    /// プラグインの情報
839    pub information: LPCWSTR,
840
841    /// 設定項目の定義 (FILTER_ITEM_XXXポインタを列挙してnull終端したリストへのポインタ)
842    pub items: *const *const c_void,
843
844    /// 画像フィルタ処理関数へのポインタ (FLAG_VIDEOが有効の時のみ呼ばれます)
845    pub func_proc_video: Option<extern "C" fn(video: *mut FILTER_PROC_VIDEO) -> bool>,
846
847    /// 音声フィルタ処理関数へのポインタ (FLAG_AUDIOが有効の時のみ呼ばれます)
848    pub func_proc_audio: Option<extern "C" fn(audio: *mut FILTER_PROC_AUDIO) -> bool>,
849
850    /// エフェクトのインスタンスが生成される時に呼ばれる関数へのポインタ
851    pub func_create: Option<extern "C" fn(effect_id: i64) -> *mut c_void>,
852
853    /// エフェクトのインスタンスが破棄される時に呼ばれる関数へのポインタ
854    pub func_destroy: Option<extern "C" fn(effect_id: i64, userdata: *mut c_void)>,
855}