duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

Macros.fxh (21411B)


      1 ////////////////////////////////////////////////////////////
      2 // BASIC MACROS FOR RESHADE 4                             //
      3 // AUTHOR: TREYM                                          //
      4 ////////////////////////////////////////////////////////////
      5 // Modified by dddfault                                   //
      6 //                                                        //
      7 // Changelogs :                                           //
      8 //   Added Sampler texture boundary resolver option       //
      9 //   Added float2 parameters option                       //
     10 ////////////////////////////////////////////////////////////
     11 // Macros Guide:                                          //
     12 ////////////////////////////////////////////////////////////
     13 
     14 /*  ////////////////////////////////////////////////////  *
     15  *  ////////////////////////////////////////////////////  *
     16 
     17   Usage of these macros is very simple once you understand
     18  the syntax and variable names. Let's start with a Simple
     19  integer slider. To begin, type:
     20 
     21     UI_INT
     22 
     23   Next we need to add _S to indicate that this is a
     24  "slider" widget. Follow the syntax below:
     25 
     26     UI_INT_S(INT_NAME, "Label", "Tooltip", 0, 100, 50)
     27 
     28   Using just a single line of code, we have created a UI
     29  tweakable integer named INT_NAME with a minimum value of
     30  0, a maximum value of 100, and a default value of 50.
     31 
     32   Next, let's create that same widget, but within a UI
     33  category. This time, we'll type:
     34 
     35     CAT_INT_S(INT_NAME, "Category", "Label", "Tooltip", 0, 100, 50)
     36 
     37   As you can see, the syntax follows the same pattern but
     38  with a new input for "Category"
     39 
     40   Below you will find a useful list of examples to get you
     41  started. I hope you find these useful and they help your
     42  workflow. Happy coding!
     43 
     44  - TreyM
     45 
     46  *  ////////////////////////////////////////////////////  *
     47  *  ////////////////////////////////////////////////////  *
     48 
     49     Widget Types
     50         Input   = _I
     51         Slider  = _S
     52         Drag    = _D
     53 
     54  *  ////////////////////////////////////////////////////  *
     55 
     56     BOOLEAN Macro
     57         UI_BOOL(BOOL_NAME, "Label", "Tooltip", true)
     58 
     59     BOOLEAN Categorized Macro
     60         CAT_BOOL(BOOL_NAME, "Category", "Label", "Tooltip", true)
     61 
     62  *  ////////////////////////////////////////////////////  *
     63 
     64     INTEGER Combo Widget
     65         UI_COMBO(INT_NAME, "Label", "Tooltip", 0, 2, 0, "Item 1\0Item 2\0Item 3\0")
     66 
     67     INTEGER Drag Widget
     68         UI_INT_D(INT_NAME, "Label", "Tooltip", 0, 100, 50)
     69 
     70     INTEGER Input Widget
     71         UI_INT_I(INT_NAME, "Label", "Tooltip", 0, 100, 50)
     72 
     73     INTEGER Radio Widget
     74         UI_RADIO(INT_NAME, "Label", "Tooltip", 0, 2, 0, " Item 1 \0 Item 2 \0 Item 3\0")
     75 
     76     INTEGER Slider Widget
     77         UI_INT_S(INT_NAME, "Label", "Tooltip", 0, 100, 50)
     78 
     79     INTEGER Categorized Combo Widget
     80         CAT_COMBO(INT_NAME, "Category", "Label", "Tooltip", 0, 2, 0, " Item 1 \0 Item 2 \0 Item 3\0")
     81 
     82     INTEGER Categorized Drag Widget
     83         CAT_INT_D(INT_NAME, "Category", "Label", "Tooltip", 0, 100, 50)
     84 
     85     INTEGER Categorized Input Widget
     86         CAT_INT_I(INT_NAME, "Category", "Label", "Tooltip", 0, 100, 50)
     87 
     88     INTEGER Categorized Radio Widget
     89         CAT_RADIO(INT_NAME, "Category", "Label", "Tooltip", 0, 2, 0, " Item 1 \0 Item 2 \0 Item 3\0")
     90 
     91     INTEGER Categorized Slider Widget
     92         CAT_INT_S(INT_NAME, "Category", "Label", "Tooltip", 0, 100, 50)
     93 
     94  *  ////////////////////////////////////////////////////  *
     95 
     96     FLOAT Drag Widget
     97         UI_FLOAT_D(FLOAT_NAME, "Label", "Tooltip", 0.0, 1.0, 0.5)
     98 
     99     FLOAT Input Widget
    100         UI_FLOAT_I(FLOAT_NAME, "Label", "Tooltip", 0.0, 1.0, 0.5)
    101 
    102     FLOAT Slider Widget
    103         UI_FLOAT_S(FLOAT_NAME, "Label", "Tooltip", 0.0, 1.0, 0.5)
    104 
    105     FLOAT Categorized Drag Widget
    106         CAT_FLOAT_D(FLOAT_NAME, "Category", "Label", "Tooltip", 0.0, 1.0, 0.5)
    107 
    108     FLOAT Categorized Input Widget
    109         CAT_FLOAT_I(FLOAT_NAME, "Category", "Label", "Tooltip", 0.0, 1.0, 0.5)
    110 
    111     FLOAT Categorized Slider Widget
    112         CAT_FLOAT_S(FLOAT_NAME, "Category", "Label", "Tooltip", 0.0, 1.0, 0.5)
    113 
    114     FLOAT macro with full control (value after "Tooltip" is ui_step)
    115         UI_FLOAT_FULL(FLOAT_NAME, "ui_type", "Label", "Tooltip", 0.1, 0.0, 1.0, 0.5)
    116 
    117     FLOAT Categorized macro with full control (value after "Tooltip" is ui_step)
    118         CAT_FLOAT_FULL(FLOAT_NAME, "ui_type", "Category", "Label", "Tooltip", 0.1, 0.0, 1.0, 0.5)
    119 
    120   *  ////////////////////////////////////////////////////  *
    121 
    122      FLOAT2 Drag Widget
    123          UI_FLOAT2_D(FLOAT_NAME, "Label", "Tooltip", 0.0, 1.0, 0.5, 0.5)
    124 
    125      FLOAT2 Input Widget
    126          UI_FLOAT2_I(FLOAT_NAME, "Label", "Tooltip", 0.0, 1.0, 0.5, 0.5)
    127 
    128      FLOAT2 Slider Widget
    129          UI_FLOAT2_S(FLOAT_NAME, "Label", "Tooltip", 0.0, 1.0, 0.5, 0.5)
    130 
    131      FLOAT2 Categorized Drag Widget
    132          CAT_FLOAT2_D(FLOAT_NAME, "Category", "Label", "Tooltip", 0.0, 1.0, 0.5, 0.5)
    133 
    134      FLOAT2 Categorized Input Widget
    135          CAT_FLOAT2_I(FLOAT_NAME, "Category", "Label", "Tooltip", 0.0, 1.0, 0.5, 0.5)
    136 
    137      FLOAT2 Categorized Slider Widget
    138          CAT_FLOAT2_S(FLOAT_NAME, "Category", "Label", "Tooltip", 0.0, 1.0, 0.5, 0.5)
    139 
    140      FLOAT2 macro with full control (value after "Tooltip" is ui_step)
    141          UI_FLOAT2_FULL(FLOAT_NAME, "ui_type", "Label", "Tooltip", 0.1, 0.0, 1.0, 0.5, 0.5)
    142 
    143      FLOAT2 Categorized macro with full control (value after "Tooltip" is ui_step)
    144          CAT_FLOAT2_FULL(FLOAT_NAME, "ui_type", "Category", "Label", "Tooltip", 0.1, 0.0, 1.0, 0.5, 0.5)
    145 
    146  *  ////////////////////////////////////////////////////  *
    147 
    148     FLOAT3 Drag Widget
    149         UI_FLOAT3_D(FLOAT_NAME, "Label", "Tooltip", 0.5, 0.5, 0.5)
    150 
    151     FLOAT3 Input Widget
    152         UI_FLOAT3_I(FLOAT_NAME, "Label", "Tooltip", 0.5, 0.5, 0.5)
    153 
    154     FLOAT3 Slider Widget
    155         UI_FLOAT3_S(FLOAT_NAME, "Label", "Tooltip", 0.5, 0.5, 0.5)
    156 
    157     FLOAT3 Categorized Drag Widget
    158         CAT_FLOAT3_D(FLOAT_NAME, "Category", "Label", "Tooltip", 0.5, 0.5, 0.5)
    159 
    160     FLOAT3 Categorized Input Widget
    161         CAT_FLOAT3_I(FLOAT_NAME, "Category", "Label", "Tooltip", 0.5, 0.5, 0.5)
    162 
    163     FLOAT3 Categorized Slider Widget
    164         CAT_FLOAT3_S(FLOAT_NAME, "Category", "Label", "Tooltip", 0.5, 0.5, 0.5)
    165 
    166  *  ////////////////////////////////////////////////////  *
    167 
    168     FLOAT3 Color Widget
    169         UI_COLOR(FLOAT_NAME, "Label", "Tooltip", 0.5, 0.5, 0.5)
    170 
    171     FLOAT3 Categorized Color Widget
    172         CAT_COLOR(FLOAT_NAME, "Category", "Label", "Tooltip", 0.5, 0.5, 0.5)
    173 
    174  *  ////////////////////////////////////////////////////  *
    175 
    176     SAMPLER Macro
    177         SAMPLER(SamplerName, TextureName)
    178 
    179     SAMPLER Macro with texture boundary resolver option
    180         SAMPLER_UV(SamplerName, TextureName, ResolverType)
    181 
    182     TEXTURE Macro
    183         TEXTURE(TextureName, "TexturePath")
    184 
    185     TEXTURE Full Macro
    186         TEXTURE_FULL(TextureName, "TexturePath", Width, Height, Format)
    187 
    188  *  ////////////////////////////////////////////////////  *
    189 
    190     TECHNIQUE Macro
    191         TECHNIQUE(TechniqueName, PassMacro)
    192 
    193     PASS Macro
    194         PASS(PassID, VertexShader, PixelShader)
    195 
    196     PASS Macro with RenderTarget
    197         PASS_RT(PassID, VertexShader, PixelShader, RenderTarget)
    198 
    199     ////////////////////////////////////////////////////
    200  *  ////////////////////////////////////////////////////  */
    201 
    202 // INTEGER MACROS ////////////////////////////////
    203     #define UI_COMBO(var, label, tooltip, minval, maxval, defval, items) \
    204         uniform int var \
    205         < \
    206             ui_type     = "combo"; \
    207             ui_label    = label; \
    208             ui_tooltip  = tooltip; \
    209             ui_items    = items; \
    210             ui_min      = minval; \
    211             ui_max      = maxval; \
    212         >               = defval;
    213 
    214     #define CAT_COMBO(var, category, label, tooltip, minval, maxval, defval, items) \
    215         uniform int var \
    216         < \
    217             ui_type     = "combo"; \
    218             ui_category = category; \
    219             ui_label    = label; \
    220             ui_tooltip  = tooltip; \
    221             ui_items    = items; \
    222             ui_min      = minval; \
    223             ui_max      = maxval; \
    224         >               = defval;
    225 
    226     #define UI_INT_I(var, label, tooltip, minval, maxval, defval) \
    227         uniform int var \
    228         < \
    229             ui_type     = "input"; \
    230             ui_label    = label; \
    231             ui_tooltip  = tooltip; \
    232             ui_min      = minval; \
    233             ui_max      = maxval; \
    234         >               = defval;
    235 
    236     #define CAT_INT_I(var, category, label, tooltip, minval, maxval, defval) \
    237         uniform int var \
    238         < \
    239             ui_type     = "input"; \
    240             ui_category = category; \
    241             ui_label    = label; \
    242             ui_tooltip  = tooltip; \
    243             ui_min      = minval; \
    244             ui_max      = maxval; \
    245         >               = defval;
    246 
    247     #define UI_INT_S(var, label, tooltip, minval, maxval, defval) \
    248         uniform int var \
    249         < \
    250             ui_type     = "slider"; \
    251             ui_label    = label; \
    252             ui_tooltip  = tooltip; \
    253             ui_min      = minval; \
    254             ui_max      = maxval; \
    255         >               = defval;
    256 
    257     #define CAT_INT_S(var, category, label, tooltip, minval, maxval, defval) \
    258         uniform int var \
    259         < \
    260             ui_type     = "slider"; \
    261             ui_category = category; \
    262             ui_label    = label; \
    263             ui_tooltip  = tooltip; \
    264             ui_min      = minval; \
    265             ui_max      = maxval; \
    266         >               = defval;
    267 
    268     #define UI_INT_D(var, label, tooltip, minval, maxval, defval) \
    269         uniform int var \
    270         < \
    271             ui_type     = "drag"; \
    272             ui_label    = label; \
    273             ui_tooltip  = tooltip; \
    274             ui_min      = minval; \
    275             ui_max      = maxval; \
    276         >               = defval;
    277 
    278     #define CAT_INT_D(var, category, label, tooltip, minval, maxval, defval) \
    279         uniform int var \
    280         < \
    281             ui_type     = "drag"; \
    282             ui_category = category; \
    283             ui_label    = label; \
    284             ui_tooltip  = tooltip; \
    285             ui_min      = minval; \
    286             ui_max      = maxval; \
    287         >               = defval;
    288 
    289         #define UI_RADIO(var, label, tooltip, minval, maxval, defval, items) \
    290             uniform int var \
    291             < \
    292                 ui_type     = "radio"; \
    293                 ui_label    = label; \
    294                 ui_tooltip  = tooltip; \
    295                 ui_items    = items; \
    296                 ui_min      = minval; \
    297                 ui_max      = maxval; \
    298             >               = defval;
    299 
    300         #define CAT_RADIO(var, category, label, tooltip, minval, maxval, defval, items) \
    301             uniform int var \
    302             < \
    303                 ui_type     = "radio"; \
    304                 ui_category = category; \
    305                 ui_label    = label; \
    306                 ui_tooltip  = tooltip; \
    307                 ui_items    = items; \
    308                 ui_min      = minval; \
    309                 ui_max      = maxval; \
    310             >               = defval;
    311 
    312 // BOOL MACROS ///////////////////////////////////
    313     #define UI_BOOL(var, label, tooltip, def) \
    314         uniform bool var \
    315         < \
    316             ui_label    = label; \
    317             ui_tooltip  = tooltip; \
    318         >               = def;
    319 
    320     #define CAT_BOOL(var, category, label, tooltip, def) \
    321         uniform bool var \
    322         < \
    323             ui_category = category; \
    324             ui_label    = label; \
    325             ui_tooltip  = tooltip; \
    326         >               = def;
    327 
    328 // FLOAT MACROS //////////////////////////////////
    329     #define UI_FLOAT_D(var, label, tooltip, minval, maxval, defval) \
    330         uniform float var \
    331         < \
    332             ui_type     = "drag"; \
    333             ui_label    = label; \
    334             ui_tooltip  = tooltip; \
    335             ui_min      = minval; \
    336             ui_max      = maxval; \
    337         >               = defval;
    338 
    339     #define CAT_FLOAT_D(var, category, label, tooltip, minval, maxval, defval) \
    340         uniform float var \
    341         < \
    342             ui_type     = "drag"; \
    343             ui_category = category; \
    344             ui_label    = label; \
    345             ui_tooltip  = tooltip; \
    346             ui_min      = minval; \
    347             ui_max      = maxval; \
    348         >               = defval;
    349 
    350     #define UI_FLOAT_FULL(var, uitype, label, tooltip, uistep, minval, maxval, defval) \
    351         uniform float var \
    352         < \
    353             ui_type     = uitype; \
    354             ui_label    = label; \
    355             ui_tooltip  = tooltip; \
    356             ui_step     = uistep; \
    357             ui_min      = minval; \
    358             ui_max      = maxval; \
    359         >               = defval;
    360 
    361     #define CAT_FLOAT_FULL(var, uitype, category, label, tooltip, uistep, minval, maxval, defval) \
    362         uniform float var \
    363         < \
    364             ui_type     = uitype; \
    365             ui_category = category; \
    366             ui_label    = label; \
    367             ui_tooltip  = tooltip; \
    368             ui_step     = uistep; \
    369             ui_min      = minval; \
    370             ui_max      = maxval; \
    371         >               = defval;
    372 
    373     #define UI_FLOAT_I(var, label, tooltip, minval, maxval, defval) \
    374         uniform float var \
    375         < \
    376             ui_type     = "input"; \
    377             ui_label    = label; \
    378             ui_tooltip  = tooltip; \
    379             ui_min      = minval; \
    380             ui_max      = maxval; \
    381         >               = defval;
    382 
    383     #define CAT_FLOAT_I(var, category, label, tooltip, minval, maxval, defval) \
    384         uniform float var \
    385         < \
    386             ui_type     = "input"; \
    387             ui_category = category; \
    388             ui_label    = label; \
    389             ui_tooltip  = tooltip; \
    390             ui_min      = minval; \
    391             ui_max      = maxval; \
    392         >               = defval;
    393 
    394     #define UI_FLOAT_S(var, label, tooltip, minval, maxval, defval) \
    395         uniform float var \
    396         < \
    397             ui_type     = "slider"; \
    398             ui_label    = label; \
    399             ui_tooltip  = tooltip; \
    400             ui_min      = minval; \
    401             ui_max      = maxval; \
    402         >               = defval;
    403 
    404     #define CAT_FLOAT_S(var, category, label, tooltip, minval, maxval, defval) \
    405         uniform float var \
    406         < \
    407             ui_type     = "slider"; \
    408             ui_category = category; \
    409             ui_label    = label; \
    410             ui_tooltip  = tooltip; \
    411             ui_min      = minval; \
    412             ui_max      = maxval; \
    413         >               = defval;
    414 
    415     #define UI_FLOAT2_D(var, label, tooltip, minval, maxval, defval1, defval2) \
    416         uniform float2 var \
    417         < \
    418             ui_type     = "drag"; \
    419             ui_label    = label; \
    420             ui_tooltip  = tooltip; \
    421             ui_min      = minval; \
    422             ui_max      = maxval; \
    423         >               = float2(defval1, defval2);
    424 
    425     #define CAT_FLOAT2_D(var, category, label, tooltip, minval, maxval, defval1, defval2) \
    426         uniform float2 var \
    427         < \
    428             ui_type     = "drag"; \
    429             ui_category = category; \
    430             ui_label    = label; \
    431             ui_tooltip  = tooltip; \
    432             ui_min      = minval; \
    433             ui_max      = maxval; \
    434         >               = float2(defval1, defval2);
    435 
    436     #define UI_FLOAT2_FULL(var, uitype, label, tooltip, uistep, minval, maxval, defval1, defval2) \
    437         uniform float2 var \
    438         < \
    439             ui_type     = uitype; \
    440             ui_label    = label; \
    441             ui_tooltip  = tooltip; \
    442             ui_step     = uistep; \
    443             ui_min      = minval; \
    444             ui_max      = maxval; \
    445         >               = float2(defval1, defval2);
    446 
    447     #define CAT_FLOAT2_FULL(var, uitype, category, label, tooltip, uistep, minval, defval1, defval2) \
    448         uniform float2 var \
    449         < \
    450             ui_type     = uitype; \
    451             ui_category = category; \
    452             ui_label    = label; \
    453             ui_tooltip  = tooltip; \
    454             ui_step     = uistep; \
    455             ui_min      = minval; \
    456             ui_max      = maxval; \
    457         >               = float2(defval1, defval2);
    458 
    459     #define UI_FLOAT2_I(var, label, tooltip, minval, maxval, defval1, defval2) \
    460         uniform float2 var \
    461         < \
    462             ui_type     = "input"; \
    463             ui_label    = label; \
    464             ui_tooltip  = tooltip; \
    465             ui_min      = minval; \
    466             ui_max      = maxval; \
    467         >               = float2(defval1, defval2);
    468 
    469     #define CAT_FLOAT2_I(var, category, label, tooltip, minval, maxval, defval1, defval2) \
    470         uniform float2 var \
    471         < \
    472             ui_type     = "input"; \
    473             ui_category = category; \
    474             ui_label    = label; \
    475             ui_tooltip  = tooltip; \
    476             ui_min      = minval; \
    477             ui_max      = maxval; \
    478         >               = float2(defval1, defval2);
    479 
    480     #define UI_FLOAT2_S(var, label, tooltip, minval, maxval, defval1, defval2) \
    481         uniform float2 var \
    482         < \
    483             ui_type     = "slider"; \
    484             ui_label    = label; \
    485             ui_tooltip  = tooltip; \
    486             ui_min      = minval; \
    487             ui_max      = maxval; \
    488         >               = float2(defval1, defval2);
    489 
    490     #define CAT_FLOAT2_S(var, category, label, tooltip, minval, maxval, defval1, defval2) \
    491         uniform float2 var \
    492         < \
    493             ui_type     = "slider"; \
    494             ui_category = category; \
    495             ui_label    = label; \
    496             ui_tooltip  = tooltip; \
    497             ui_min      = minval; \
    498             ui_max      = maxval; \
    499         >               = float2(defval1, defval2);
    500 
    501     #define UI_FLOAT3_D(var, label, tooltip, defval1, defval2, defval3) \
    502         uniform float3 var \
    503         < \
    504             ui_type     = "drag"; \
    505             ui_label    = label; \
    506             ui_tooltip  = tooltip; \
    507         >               = float3(defval1, defval2, defval3);
    508 
    509     #define CAT_FLOAT3_D(var, category, label, tooltip, defval1, defval2, defval3) \
    510         uniform float3 var \
    511         < \
    512             ui_type     = "drag"; \
    513             ui_category = category; \
    514             ui_label    = label; \
    515             ui_tooltip  = tooltip; \
    516         >               = float3(defval1, defval2, defval3);
    517 
    518     #define UI_FLOAT3_I(var, label, tooltip, defval1, defval2, defval3) \
    519         uniform float3 var \
    520         < \
    521             ui_type     = "input"; \
    522             ui_label    = label; \
    523             ui_tooltip  = tooltip; \
    524         >               = float3(defval1, defval2, defval3);
    525 
    526     #define CAT_FLOAT3_I(var, category, label, tooltip, defval1, defval2, defval3) \
    527         uniform float3 var \
    528         < \
    529             ui_type     = "input"; \
    530             ui_category = category; \
    531             ui_label    = label; \
    532             ui_tooltip  = tooltip; \
    533         >               = float3(defval1, defval2, defval3);
    534 
    535     #define UI_FLOAT3_S(var, label, tooltip, defval1, defval2, defval3) \
    536         uniform float3 var \
    537         < \
    538             ui_type     = "slider"; \
    539             ui_label    = label; \
    540             ui_tooltip  = tooltip; \
    541         >               = float3(defval1, defval2, defval3);
    542 
    543     #define CAT_FLOAT3_S(var, category, label, tooltip, defval1, defval2, defval3) \
    544         uniform float3 var \
    545         < \
    546             ui_type     = "slider"; \
    547             ui_category = category; \
    548             ui_label    = label; \
    549             ui_tooltip  = tooltip; \
    550         >               = float3(defval1, defval2, defval3);
    551 
    552 
    553 // COLOR WIDGET MACROS ///////////////////////////
    554     #define UI_COLOR(var, label, tooltip, defval1, defval2, defval3) \
    555         uniform float3 var \
    556         < \
    557             ui_type     = "color"; \
    558             ui_label    = label; \
    559             ui_tooltip  = tooltip; \
    560         >               = float3(defval1, defval2, defval3);
    561 
    562     #define CAT_COLOR(var, category, label, tooltip, defval1, defval2, defval3) \
    563         uniform float3 var \
    564         < \
    565             ui_type     = "color"; \
    566             ui_category = category; \
    567             ui_label    = label; \
    568             ui_tooltip  = tooltip; \
    569         >               = float3(defval1, defval2, defval3);
    570 
    571 
    572 // SAMPLER MACRO /////////////////////////////////
    573     #define SAMPLER(sname, tname) \
    574         sampler	sname \
    575         { \
    576             Texture     = tname; \
    577         };
    578 
    579     #define SAMPLER_UV(sname, tname, addUVW) \
    580         sampler	sname \
    581         { \
    582             Texture  = tname; \
    583             AddressU = addUVW; \
    584             AddressV = addUVW; \
    585             AddressW = addUVW; \
    586         };
    587 
    588 
    589 // TEXTURE MACROs ////////////////////////////////
    590     #define TEXTURE(tname, src) \
    591         texture tname <source=src;> \
    592         { \
    593             Width       = BUFFER_WIDTH; \
    594             Height      = BUFFER_HEIGHT; \
    595             Format      = RGBA8; \
    596         };
    597 
    598     #define TEXTURE_FULL(tname, src, width, height, fomat) \
    599         texture tname <source=src;> \
    600         { \
    601             Width       = width; \
    602             Height      = height; \
    603             Format      = fomat; \
    604         };
    605 
    606 
    607 // TECHNIQUE MACROS //////////////////////////////
    608     #define TECHNIQUE(tname, pass) \
    609         technique tname \
    610         { \
    611             pass \
    612         }
    613 
    614     #define PASS(ID, vs, ps) pass \
    615         { \
    616             VertexShader  = vs; \
    617             PixelShader   = ps; \
    618         }
    619 
    620     #define PASS_RT(ID, vs, ps, rt) pass \
    621         { \
    622             VertexShader  = vs; \
    623             PixelShader   = ps; \
    624             RenderTarget  = rt; \
    625         }