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}