1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: gd_OutputStage.h 4 5 Copyright (C)2011 Nintendo Co., Ltd. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 *---------------------------------------------------------------------------*/ 14 #ifndef NN_GD_CTR_GD_OUTPUTSTAGE_H_ 15 #define NN_GD_CTR_GD_OUTPUTSTAGE_H_ 16 17 #include <nn/gd/CTR/gd_Types.h> 18 #include <nn/gd/CTR/gd_Result.h> 19 20 #include <nn/gd/CTR/gd_Memory.h> 21 #include <nn/gd/CTR/gd_Resource.h> 22 23 #if NN_GD_DOCUMENT_TYPE == ENGLISH 24 /* Please see man pages for details 25 26 27 28 */ 29 #else 30 /* Please see man pages for details 31 32 33 34 */ 35 #endif 36 37 namespace nn { 38 namespace gd { 39 namespace CTR { 40 41 #if NN_GD_DOCUMENT_TYPE == ENGLISH 42 /* Please see man pages for details 43 */ 44 #else 45 /* Please see man pages for details 46 */ 47 #endif 48 class BlendState; 49 50 #if NN_GD_DOCUMENT_TYPE == ENGLISH 51 /* Please see man pages for details 52 */ 53 #else 54 /* Please see man pages for details 55 */ 56 #endif 57 class DepthStencilState; 58 59 #if NN_GD_DOCUMENT_TYPE == ENGLISH 60 /* Please see man pages for details 61 */ 62 #else 63 /* Please see man pages for details 64 */ 65 #endif 66 class RenderTarget; 67 68 #if NN_GD_DOCUMENT_TYPE == ENGLISH 69 /* Please see man pages for details 70 */ 71 #else 72 /* Please see man pages for details 73 */ 74 #endif 75 class DepthStencilTarget; 76 77 #if NN_GD_DOCUMENT_TYPE == ENGLISH 78 /* Please see man pages for details 79 */ 80 #else 81 /* Please see man pages for details 82 */ 83 #endif 84 class DepthStencilStateDescription; 85 86 #if NN_GD_DOCUMENT_TYPE == ENGLISH 87 /* Please see man pages for details 88 */ 89 #else 90 /* Please see man pages for details 91 */ 92 #endif 93 class BlendStateDescription; 94 95 #if NN_GD_DOCUMENT_TYPE == ENGLISH 96 /* Please see man pages for details 97 */ 98 #else 99 /* Please see man pages for details 100 */ 101 #endif 102 class RenderTargetDescription; 103 104 #if NN_GD_DOCUMENT_TYPE == ENGLISH 105 /* Please see man pages for details 106 */ 107 #else 108 /* Please see man pages for details 109 */ 110 #endif 111 class DepthStencilTargetDescription; 112 113 #if NN_GD_DOCUMENT_TYPE == ENGLISH 114 /* Please see man pages for details 115 */ 116 #else 117 /* Please see man pages for details 118 */ 119 #endif 120 class TargetProperties; 121 122 #if NN_GD_DOCUMENT_TYPE == ENGLISH 123 /* Please see man pages for details 124 125 126 127 128 129 130 */ 131 #else 132 /* Please see man pages for details 133 134 135 136 137 138 139 */ 140 #endif 141 class OutputStage 142 { 143 public: 144 145 #if NN_GD_DOCUMENT_TYPE == ENGLISH 146 /* Please see man pages for details */ 147 #else 148 /* Please see man pages for details */ 149 #endif 150 enum DepthBufferType 151 { 152 #if NN_GD_DOCUMENT_TYPE == ENGLISH 153 /* Please see man pages for details */ 154 #else 155 /* Please see man pages for details */ 156 #endif 157 DEPTHBUFFER_LINEAR = 0, 158 159 #if NN_GD_DOCUMENT_TYPE == ENGLISH 160 /* Please see man pages for details */ 161 #else 162 /* Please see man pages for details */ 163 #endif 164 DEPTHBUFFER_RECIPROCAL_FUNCTION = 1, 165 166 DEPTHBUFFER_RESERVED_MAX_U32 = 0xffffffffu 167 }; 168 169 #if NN_GD_DOCUMENT_TYPE == ENGLISH 170 /* Please see man pages for details */ 171 #else 172 /* Please see man pages for details */ 173 #endif 174 enum FragmentOperationMode 175 { 176 #if NN_GD_DOCUMENT_TYPE == ENGLISH 177 /* Please see man pages for details */ 178 #else 179 /* Please see man pages for details */ 180 #endif 181 FRAGMENT_OPERATION_MODE_FRAGMENT_COLOR = 0, 182 183 #if NN_GD_DOCUMENT_TYPE == ENGLISH 184 /* Please see man pages for details */ 185 #else 186 /* Please see man pages for details */ 187 #endif 188 FRAGMENT_OPERATION_MODE_GAS_ACCUMULATION = 1, 189 190 #if NN_GD_DOCUMENT_TYPE == ENGLISH 191 /* Please see man pages for details */ 192 #else 193 /* Please see man pages for details */ 194 #endif 195 FRAGMENT_OPERATION_MODE_SHADOW_MAP = 3, 196 197 FRAGMENT_OPERATION_MAPRESERVED_MAX_U32 = 0xffffffffu 198 }; 199 200 #if NN_GD_DOCUMENT_TYPE == ENGLISH 201 /* Please see man pages for details */ 202 #else 203 /* Please see man pages for details */ 204 #endif 205 enum BlendType 206 { 207 BLEND_TYPE_LOGICOP = 0, 208 BLEND_TYPE_BLENDING = 1, 209 210 BLEND_RESERVED_MAX_U32 = 0xffffffffu 211 }; 212 213 #if NN_GD_DOCUMENT_TYPE == ENGLISH 214 /* Please see man pages for details */ 215 #else 216 /* Please see man pages for details */ 217 #endif 218 enum BlendFunction 219 { 220 BLEND_FUNCTION_ZERO = 0, 221 BLEND_FUNCTION_ONE = 1, 222 BLEND_FUNCTION_SRC_COLOR = 2, 223 BLEND_FUNCTION_ONE_MINUS_SRC_COLOR = 3, 224 BLEND_FUNCTION_DST_COLOR = 4, 225 BLEND_FUNCTION_ONE_MINUS_DST_COLOR = 5, 226 BLEND_FUNCTION_SRC_ALPHA = 6, 227 BLEND_FUNCTION_ONE_MINUS_SRC_ALPHA = 7, 228 BLEND_FUNCTION_DST_ALPHA = 8, 229 BLEND_FUNCTION_ONE_MINUS_DST_ALPHA = 9, 230 BLEND_FUNCTION_CONSTANT_COLOR = 10, 231 BLEND_FUNCTION_ONE_MINUS_CONSTANT_COLOR = 11, 232 BLEND_FUNCTION_CONSTANT_ALPHA = 12, 233 BLEND_FUNCTION_ONE_MINUS_CONSTANT_ALPHA = 13, 234 BLEND_FUNCTION_SRC_ALPHA_SATURATE = 14, 235 236 BLEND_FUNCTION_RESERVED_MAX_U32 = 0xffffffffu 237 }; 238 239 #if NN_GD_DOCUMENT_TYPE == ENGLISH 240 /* Please see man pages for details */ 241 #else 242 /* Please see man pages for details */ 243 #endif 244 enum BlendEquation 245 { 246 BLEND_OPERATION_ADD = 0, 247 BLEND_OPERATION_SUBTRACT = 1, 248 BLEND_OPERATION_REV_SUBTRACT = 2, 249 BLEND_OPERATION_MIN = 3, 250 BLEND_OPERATION_MAX = 4, 251 252 BLEND_OPERATION_RESERVED_MAX_U32 = 0xffffffffu 253 }; 254 255 #if NN_GD_DOCUMENT_TYPE == ENGLISH 256 /* Please see man pages for details */ 257 #else 258 /* Please see man pages for details */ 259 #endif 260 enum LogicOperator 261 { 262 LOGIC_OPERATOR_CLEAR = 0, 263 LOGIC_OPERATOR_AND = 1, 264 LOGIC_OPERATOR_AND_REVERSE = 2, 265 LOGIC_OPERATOR_COPY = 3, 266 LOGIC_OPERATOR_SET = 4, 267 LOGIC_OPERATOR_COPY_INVERTED = 5, 268 LOGIC_OPERATOR_NOOP = 6, 269 LOGIC_OPERATOR_INVERT = 7, 270 LOGIC_OPERATOR_NAND = 8, 271 LOGIC_OPERATOR_OR = 9, 272 LOGIC_OPERATOR_NOR = 10, 273 LOGIC_OPERATOR_XOR = 11, 274 LOGIC_OPERATOR_EQUIV = 12, 275 LOGIC_OPERATOR_AND_INVERTED = 13, 276 LOGIC_OPERATOR_OR_REVERSE = 14, 277 LOGIC_OPERATOR_OR_INVERTED = 15, 278 279 LOGIC_OPERATOR_RESERVED_MAX_U32 = 0xffffffffu 280 }; 281 282 #if NN_GD_DOCUMENT_TYPE == ENGLISH 283 /* Please see man pages for details */ 284 #else 285 /* Please see man pages for details */ 286 #endif 287 enum ColorWriteMask 288 { 289 COLOR_WRITE_MASK_ENABLE_RED = 0x1, 290 COLOR_WRITE_MASK_ENABLE_GREEN = 0x2, 291 COLOR_WRITE_MASK_ENABLE_BLUE = 0x4, 292 COLOR_WRITE_MASK_ENABLE_ALPHA = 0x8, 293 COLOR_WRITE_MASK_ENABLE_ALL = ( COLOR_WRITE_MASK_ENABLE_RED | COLOR_WRITE_MASK_ENABLE_GREEN | 294 COLOR_WRITE_MASK_ENABLE_BLUE | COLOR_WRITE_MASK_ENABLE_ALPHA ), 295 COLOR_WRITE_MASK_RESERVED_MAX_U32 = 0xffffffffu 296 }; 297 298 #if NN_GD_DOCUMENT_TYPE == ENGLISH 299 /* Please see man pages for details */ 300 #else 301 /* Please see man pages for details */ 302 #endif 303 enum DepthFunction 304 { 305 DEPTH_FUNCTION_NEVER = 0, 306 DEPTH_FUNCTION_ALWAYS = 1, 307 DEPTH_FUNCTION_EQUAL = 2, 308 DEPTH_FUNCTION_NOTEQUAL = 3, 309 DEPTH_FUNCTION_LESS = 4, 310 DEPTH_FUNCTION_LEQUAL = 5, 311 DEPTH_FUNCTION_GREATER = 6, 312 DEPTH_FUNCTION_GEQUAL = 7, 313 314 DEPTH_FUNCTION_RESERVED_MAX_U32 = 0xffffffffu 315 }; 316 317 #if NN_GD_DOCUMENT_TYPE == ENGLISH 318 /* Please see man pages for details */ 319 #else 320 /* Please see man pages for details */ 321 #endif 322 enum DepthWriteMask 323 { 324 DEPTH_WRITE_MASK_ZERO = 0, 325 DEPTH_WRITE_MASK_ALL = 1, 326 327 DEPTH_WRITE_MASK_RESERVED_MAX_U32 = 0xffffffffu 328 }; 329 330 #if NN_GD_DOCUMENT_TYPE == ENGLISH 331 /* Please see man pages for details */ 332 #else 333 /* Please see man pages for details */ 334 #endif 335 enum StencilFunction 336 { 337 STENCIL_FUNCTION_NEVER = 0, 338 STENCIL_FUNCTION_ALWAYS = 1, 339 STENCIL_FUNCTION_EQUAL = 2, 340 STENCIL_FUNCTION_NOTEQUAL = 3, 341 STENCIL_FUNCTION_LESS = 4, 342 STENCIL_FUNCTION_LEQUAL = 5, 343 STENCIL_FUNCTION_GREATER = 6, 344 STENCIL_FUNCTION_GEQUAL = 7, 345 346 STENCIL_FUNCTION_RESERVED_MAX_U32 = 0xffffffffu 347 }; 348 349 #if NN_GD_DOCUMENT_TYPE == ENGLISH 350 /* Please see man pages for details */ 351 #else 352 /* Please see man pages for details */ 353 #endif 354 enum StencilFailOperation 355 { 356 STENCIL_OPERATION_KEEP = 0, 357 STENCIL_OPERATION_ZERO = 1, 358 STENCIL_OPERATION_REPLACE = 2, 359 STENCIL_OPERATION_INCR = 3, 360 STENCIL_OPERATION_DECR = 4, 361 STENCIL_OPERATION_INVERT = 5, 362 STENCIL_OPERATION_INCR_WRAP = 6, 363 STENCIL_OPERATION_DECR_WRAP = 7, 364 365 STENCIL_OPERATION_RESERVED_MAX_U32 = 0xffffffffu 366 }; 367 368 #if NN_GD_DOCUMENT_TYPE == ENGLISH 369 /* Please see man pages for details */ 370 #else 371 /* Please see man pages for details */ 372 #endif 373 enum AlphaFunction 374 { 375 ALPHA_FUNCTION_NEVER = 0, 376 ALPHA_FUNCTION_ALWAYS = 1, 377 ALPHA_FUNCTION_EQUAL = 2, 378 ALPHA_FUNCTION_NOTEQUAL = 3, 379 ALPHA_FUNCTION_LESS = 4, 380 ALPHA_FUNCTION_LEQUAL = 5, 381 ALPHA_FUNCTION_GREATER = 6, 382 ALPHA_FUNCTION_GEQUAL = 7, 383 384 ALPHA_FUNCTION_RESERVED_MAX_U32 = 0xffffffffu 385 }; 386 387 #if NN_GD_DOCUMENT_TYPE == ENGLISH 388 /* Please see man pages for details 389 390 391 392 393 394 395 396 397 398 399 400 401 */ 402 #else 403 /* Please see man pages for details 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 */ 429 #endif 430 static nnResult CreateRenderTarget(const Texture2DResource *texture2DResource, const RenderTargetDescription *desc, RenderTarget **renderTarget); 431 432 #if NN_GD_DOCUMENT_TYPE == ENGLISH 433 /* Please see man pages for details 434 435 436 */ 437 #else 438 /* Please see man pages for details 439 440 441 442 443 444 445 */ 446 #endif 447 static nnResult GetRenderTargetProperties(const RenderTarget* renderTarget, TargetProperties* properties); 448 449 #if NN_GD_DOCUMENT_TYPE == ENGLISH 450 /* Please see man pages for details 451 452 */ 453 #else 454 /* Please see man pages for details 455 456 457 458 459 460 */ 461 #endif 462 static nnResult ReleaseRenderTarget(RenderTarget *renderTarget); 463 464 465 #if NN_GD_DOCUMENT_TYPE == ENGLISH 466 /* Please see man pages for details 467 468 469 470 471 472 473 474 475 476 */ 477 #else 478 /* Please see man pages for details 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 */ 501 #endif 502 static nnResult CreateDepthStencilTarget(const Texture2DResource *texture2DResource, const DepthStencilTargetDescription *desc, DepthStencilTarget **depthStencil); 503 504 #if NN_GD_DOCUMENT_TYPE == ENGLISH 505 /* Please see man pages for details 506 507 508 */ 509 #else 510 /* Please see man pages for details 511 512 513 514 515 516 517 */ 518 #endif 519 static nnResult GetDepthStencilTargetProperties(const DepthStencilTarget* depthStencil, TargetProperties* properties); 520 521 #if NN_GD_DOCUMENT_TYPE == ENGLISH 522 /* Please see man pages for details 523 524 */ 525 #else 526 /* Please see man pages for details 527 528 529 530 531 532 */ 533 #endif 534 static nnResult ReleaseDepthStencilTarget(DepthStencilTarget *depthStencil); 535 536 #if NN_GD_DOCUMENT_TYPE == ENGLISH 537 /* Please see man pages for details 538 539 */ 540 #else 541 /* Please see man pages for details 542 543 544 545 546 547 */ 548 #endif 549 static nnResult SetRenderTarget(const RenderTarget *renderTarget); 550 551 #if NN_GD_DOCUMENT_TYPE == ENGLISH 552 /* Please see man pages for details 553 554 */ 555 #else 556 /* Please see man pages for details 557 558 559 560 561 562 */ 563 #endif 564 static nnResult SetDepthStencilTarget(const DepthStencilTarget *depthStencil); 565 566 #if NN_GD_DOCUMENT_TYPE == ENGLISH 567 /* Please see man pages for details 568 569 */ 570 #else 571 /* Please see man pages for details 572 573 */ 574 #endif 575 static void SetFragOpMode(FragmentOperationMode fragOpMode); 576 577 #if NN_GD_DOCUMENT_TYPE == ENGLISH 578 /* Please see man pages for details 579 580 581 */ 582 #else 583 /* Please see man pages for details 584 585 586 587 588 589 590 591 592 */ 593 #endif 594 static nnResult CreateBlendState(const BlendStateDescription *desc, BlendState **blendState); 595 596 #if NN_GD_DOCUMENT_TYPE == ENGLISH 597 /* Please see man pages for details 598 599 */ 600 #else 601 /* Please see man pages for details 602 603 604 605 606 607 608 */ 609 #endif 610 static nnResult ReleaseBlendState(BlendState *blendState); 611 612 #if NN_GD_DOCUMENT_TYPE == ENGLISH 613 /* Please see man pages for details 614 615 */ 616 #else 617 /* Please see man pages for details 618 619 620 621 622 623 */ 624 #endif 625 static nnResult SetBlendState(const BlendState *blendState); 626 627 #if NN_GD_DOCUMENT_TYPE == ENGLISH 628 /* Please see man pages for details 629 630 631 632 633 */ 634 #else 635 /* Please see man pages for details 636 637 638 639 640 */ 641 #endif 642 static void SetBlendColor(u8 R, u8 G, u8 B, u8 A); 643 644 #if NN_GD_DOCUMENT_TYPE == ENGLISH 645 /* Please see man pages for details 646 647 648 649 */ 650 #else 651 /* Please see man pages for details 652 653 654 655 */ 656 #endif 657 static void SetAlphaTest(gdBool enable, AlphaFunction func, u8 alphaRef); 658 659 #if NN_GD_DOCUMENT_TYPE == ENGLISH 660 /* Please see man pages for details 661 662 663 */ 664 #else 665 /* Please see man pages for details 666 667 668 669 670 671 672 673 */ 674 #endif 675 static nnResult CreateDepthStencilState(const DepthStencilStateDescription *desc, DepthStencilState **DepthStencilState); 676 677 #if NN_GD_DOCUMENT_TYPE == ENGLISH 678 /* Please see man pages for details 679 680 */ 681 #else 682 /* Please see man pages for details 683 684 685 686 687 688 689 */ 690 #endif 691 static nnResult ReleaseDepthStencilState(DepthStencilState *DepthStencilState); 692 693 #if NN_GD_DOCUMENT_TYPE == ENGLISH 694 /* Please see man pages for details 695 696 697 */ 698 #else 699 /* Please see man pages for details 700 701 702 703 704 705 */ 706 #endif 707 static nnResult SetDepthStencilState(const DepthStencilState* state, u8 stencilRef); 708 709 #if NN_GD_DOCUMENT_TYPE == ENGLISH 710 /* Please see man pages for details 711 712 */ 713 #else 714 /* Please see man pages for details 715 716 */ 717 #endif 718 static void SetColorWriteMask(u32 mask); 719 720 #if NN_GD_DOCUMENT_TYPE == ENGLISH 721 /* Please see man pages for details 722 723 724 */ 725 #else 726 /* Please see man pages for details 727 728 729 */ 730 #endif 731 static void SetPenumbraScaleBias(f32 Scale, f32 Bias); 732 733 #if NN_GD_DOCUMENT_TYPE == ENGLISH 734 /* Please see man pages for details 735 736 737 738 739 */ 740 #else 741 /* Please see man pages for details 742 743 744 745 746 */ 747 #endif 748 static void SetDepthRangeMode(DepthBufferType type, f32 depthRangeNear, f32 depthRangeFar, s32 offset); 749 750 }; // class OutputStage 751 752 753 #if NN_GD_DOCUMENT_TYPE == ENGLISH 754 /* Please see man pages for details 755 756 757 */ 758 #else 759 /* Please see man pages for details 760 761 762 */ 763 #endif 764 class RenderTargetDescription 765 { 766 public: 767 #if NN_GD_DOCUMENT_TYPE == ENGLISH 768 /* Please see man pages for details */ 769 #else 770 /* Please see man pages for details */ 771 #endif 772 u32 m_MipLevelIndex; 773 }; 774 775 776 #if NN_GD_DOCUMENT_TYPE == ENGLISH 777 /* Please see man pages for details 778 779 780 */ 781 #else 782 /* Please see man pages for details 783 784 785 */ 786 #endif 787 class DepthStencilTargetDescription 788 { 789 public: 790 #if NN_GD_DOCUMENT_TYPE == ENGLISH 791 /* Please see man pages for details */ 792 #else 793 /* Please see man pages for details */ 794 #endif 795 u32 m_MipLevelIndex; 796 }; 797 798 799 #if NN_GD_DOCUMENT_TYPE == ENGLISH 800 /* Please see man pages for details 801 802 803 */ 804 #else 805 /* Please see man pages for details 806 807 808 */ 809 #endif 810 class TargetProperties 811 { 812 public: 813 #if NN_GD_DOCUMENT_TYPE == ENGLISH 814 /* Please see man pages for details */ 815 #else 816 /* Please see man pages for details */ 817 #endif 818 u32 m_Width; 819 820 #if NN_GD_DOCUMENT_TYPE == ENGLISH 821 /* Please see man pages for details */ 822 #else 823 /* Please see man pages for details */ 824 #endif 825 u32 m_Height; 826 827 #if NN_GD_DOCUMENT_TYPE == ENGLISH 828 /* Please see man pages for details */ 829 #else 830 /* Please see man pages for details */ 831 #endif 832 u32 m_PixelSize; 833 834 #if NN_GD_DOCUMENT_TYPE == ENGLISH 835 /* Please see man pages for details */ 836 #else 837 /* Please see man pages for details */ 838 #endif 839 Resource::NativeResourceFormat m_Format; 840 841 #if NN_GD_DOCUMENT_TYPE == ENGLISH 842 /* Please see man pages for details */ 843 #else 844 /* Please see man pages for details */ 845 #endif 846 Memory::MemoryLayout m_MemLayout; 847 848 #if NN_GD_DOCUMENT_TYPE == ENGLISH 849 /* Please see man pages for details */ 850 #else 851 /* Please see man pages for details */ 852 #endif 853 Memory::MemoryLocation m_MemLocation; 854 855 #if NN_GD_DOCUMENT_TYPE == ENGLISH 856 /* Please see man pages for details */ 857 #else 858 /* Please see man pages for details */ 859 #endif 860 u8* m_MemAddr; 861 }; // TargetProperties 862 863 864 #if NN_GD_DOCUMENT_TYPE == ENGLISH 865 /* Please see man pages for details 866 867 868 */ 869 #else 870 /* Please see man pages for details 871 872 873 */ 874 #endif 875 876 /* 877 Default = SetBlendMode_NoBlend 878 m_BlendType BLEND_TYPE_BLENDING 879 m_LogicOp LOGIC_OPERATOR_CLEAR 880 m_SrcRgb; BLEND_FUNCTION_ZERO 881 m_DstRgb; BLEND_FUNCTION_ONE 882 m_SrcAlpha; BLEND_FUNCTION_ZERO 883 m_DstAlpha; BLEND_FUNCTION_ONE 884 m_EqRgb; BLEND_OPERATION_ADD 885 m_EqAlpha; BLEND_OPERATION_ADD 886 887 SetBlendMode_DefaultBlending 888 m_BlendType BLEND_TYPE_BLENDING 889 m_LogicOp LOGIC_OPERATOR_CLEAR 890 m_SrcRgb; BLEND_FUNCTION_SRC_ALPHA 891 m_DstRgb; BLEND_FUNCTION_ONE_MINUS_SRC_ALPHA 892 m_SrcAlpha; BLEND_FUNCTION_SRC_ALPHA 893 m_DstAlpha; BLEND_FUNCTION_ONE_MINUS_SRC_ALPHA 894 m_EqRgb; BLEND_OPERATION_ADD 895 m_EqAlpha; BLEND_OPERATION_ADD 896 897 SetBlendMode_NoBlend 898 m_BlendType BLEND_TYPE_BLENDING 899 m_LogicOp LOGIC_OPERATOR_CLEAR 900 m_SrcRgb; BLEND_FUNCTION_ZERO 901 m_DstRgb; BLEND_FUNCTION_ONE 902 m_SrcAlpha; BLEND_FUNCTION_ZERO 903 m_DstAlpha; BLEND_FUNCTION_ONE 904 m_EqRgb; BLEND_OPERATION_ADD 905 m_EqAlpha; BLEND_OPERATION_ADD 906 907 SetLogicOperatorMode_Default 908 m_BlendType BLEND_TYPE_LOGICOP 909 m_LogicOp LOGIC_OPERATOR_CLEAR 910 m_SrcRgb; BLEND_FUNCTION_ZERO 911 m_DstRgb; BLEND_FUNCTION_ONE 912 m_SrcAlpha; BLEND_FUNCTION_ZERO 913 m_DstAlpha; BLEND_FUNCTION_ONE 914 m_EqRgb; BLEND_OPERATION_ADD 915 m_EqAlpha; BLEND_OPERATION_ADD 916 */ 917 class BlendStateDescription 918 { 919 public: 920 #if NN_GD_DOCUMENT_TYPE == ENGLISH 921 /* Please see man pages for details */ 922 #else 923 /* Please see man pages for details */ 924 #endif 925 OutputStage::BlendType m_BlendType; 926 927 #if NN_GD_DOCUMENT_TYPE == ENGLISH 928 /* Please see man pages for details */ 929 #else 930 /* Please see man pages for details */ 931 #endif 932 OutputStage::LogicOperator m_LogicOp; 933 934 #if NN_GD_DOCUMENT_TYPE == ENGLISH 935 /* Please see man pages for details */ 936 #else 937 /* Please see man pages for details */ 938 #endif 939 OutputStage::BlendFunction m_SrcRgb; 940 941 #if NN_GD_DOCUMENT_TYPE == ENGLISH 942 /* Please see man pages for details */ 943 #else 944 /* Please see man pages for details */ 945 #endif 946 OutputStage::BlendFunction m_DstRgb; 947 948 #if NN_GD_DOCUMENT_TYPE == ENGLISH 949 /* Please see man pages for details */ 950 #else 951 /* Please see man pages for details */ 952 #endif 953 OutputStage::BlendFunction m_SrcAlpha; 954 955 #if NN_GD_DOCUMENT_TYPE == ENGLISH 956 /* Please see man pages for details */ 957 #else 958 /* Please see man pages for details */ 959 #endif 960 OutputStage::BlendFunction m_DstAlpha; 961 962 #if NN_GD_DOCUMENT_TYPE == ENGLISH 963 /* Please see man pages for details */ 964 #else 965 /* Please see man pages for details */ 966 #endif 967 OutputStage::BlendEquation m_EqRgb; 968 969 #if NN_GD_DOCUMENT_TYPE == ENGLISH 970 /* Please see man pages for details */ 971 #else 972 /* Please see man pages for details */ 973 #endif 974 OutputStage::BlendEquation m_EqAlpha; 975 976 public: 977 978 #if NN_GD_DOCUMENT_TYPE == ENGLISH 979 /* Please see man pages for details 980 981 982 983 984 985 */ 986 #else 987 /* Please see man pages for details 988 989 990 991 992 993 */ 994 #endif SetBlendFunc(OutputStage::BlendFunction src,OutputStage::BlendFunction dst,OutputStage::BlendEquation eq)995 void SetBlendFunc(OutputStage::BlendFunction src, OutputStage::BlendFunction dst, OutputStage::BlendEquation eq) 996 { 997 m_SrcRgb = m_SrcAlpha = src; 998 m_DstRgb = m_DstAlpha = dst; 999 m_EqRgb = m_EqAlpha = eq; 1000 } 1001 1002 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1003 /* Please see man pages for details 1004 1005 1006 1007 1008 1009 1010 1011 1012 */ 1013 #else 1014 /* Please see man pages for details 1015 1016 1017 1018 1019 1020 1021 1022 1023 */ 1024 #endif SetBlendFunc(OutputStage::BlendFunction srcRgb,OutputStage::BlendFunction dstRgb,OutputStage::BlendFunction srcAlpha,OutputStage::BlendFunction dstAlpha,OutputStage::BlendEquation eqRgb,OutputStage::BlendEquation eqAlpha)1025 void SetBlendFunc(OutputStage::BlendFunction srcRgb, OutputStage::BlendFunction dstRgb, OutputStage::BlendFunction srcAlpha, 1026 OutputStage::BlendFunction dstAlpha, OutputStage::BlendEquation eqRgb, OutputStage::BlendEquation eqAlpha) 1027 { 1028 m_SrcRgb = srcRgb; 1029 m_DstRgb = dstRgb; 1030 m_SrcAlpha = srcAlpha; 1031 m_DstAlpha = dstAlpha; 1032 m_EqRgb = eqRgb; 1033 m_EqAlpha = eqAlpha; 1034 } 1035 1036 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1037 /* Please see man pages for details 1038 1039 1040 */ 1041 #else 1042 /* Please see man pages for details 1043 1044 1045 1046 1047 1048 1049 1050 */ 1051 #endif SetBlendMode_DefaultBlending()1052 void SetBlendMode_DefaultBlending() 1053 { 1054 m_BlendType = OutputStage::BLEND_TYPE_BLENDING; 1055 m_LogicOp = OutputStage::LOGIC_OPERATOR_COPY; 1056 SetBlendFunc(OutputStage::BLEND_FUNCTION_SRC_ALPHA, OutputStage::BLEND_FUNCTION_ONE_MINUS_SRC_ALPHA, OutputStage::BLEND_OPERATION_ADD); 1057 } 1058 1059 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1060 /* Please see man pages for details 1061 1062 1063 */ 1064 #else 1065 /* Please see man pages for details 1066 1067 1068 1069 1070 1071 1072 1073 */ 1074 #endif SetBlendMode_NoBlend()1075 void SetBlendMode_NoBlend() 1076 { 1077 m_BlendType = OutputStage::BLEND_TYPE_BLENDING; 1078 m_LogicOp = OutputStage::LOGIC_OPERATOR_COPY; 1079 SetBlendFunc(OutputStage::BLEND_FUNCTION_ONE, OutputStage::BLEND_FUNCTION_ZERO, OutputStage::BLEND_OPERATION_ADD); 1080 } 1081 1082 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1083 /* Please see man pages for details 1084 1085 1086 */ 1087 #else 1088 /* Please see man pages for details 1089 1090 1091 1092 1093 1094 1095 1096 */ 1097 #endif SetLogicOperatorMode_Default()1098 void SetLogicOperatorMode_Default() 1099 { 1100 m_BlendType = OutputStage::BLEND_TYPE_LOGICOP; 1101 m_LogicOp = OutputStage::LOGIC_OPERATOR_COPY; 1102 SetBlendFunc(OutputStage::BLEND_FUNCTION_ONE, OutputStage::BLEND_FUNCTION_ZERO, OutputStage::BLEND_OPERATION_ADD); 1103 } 1104 1105 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1106 /* Please see man pages for details 1107 1108 1109 1110 */ 1111 #else 1112 /* Please see man pages for details 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 */ 1123 #endif SetLogicOperatorMode(OutputStage::LogicOperator logicOp)1124 void SetLogicOperatorMode(OutputStage::LogicOperator logicOp) 1125 { 1126 m_BlendType = OutputStage::BLEND_TYPE_LOGICOP; 1127 m_LogicOp = logicOp; 1128 SetBlendFunc(OutputStage::BLEND_FUNCTION_ONE, OutputStage::BLEND_FUNCTION_ZERO, OutputStage::BLEND_OPERATION_ADD); 1129 } 1130 1131 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1132 /* Please see man pages for details */ 1133 #else 1134 /* Please see man pages for details */ 1135 #endif ToDefault()1136 void ToDefault() 1137 { 1138 SetBlendMode_NoBlend(); 1139 } 1140 }; // BlendStateDescription 1141 1142 1143 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1144 /* Please see man pages for details 1145 1146 1147 */ 1148 #else 1149 /* Please see man pages for details 1150 1151 1152 */ 1153 #endif 1154 1155 /* 1156 Default value 1157 m_DepthEnable GD_FALSE (0x0) 1158 m_DepthMask DEPTH_WRITE_MASK_ALL (0x1) 1159 m_DepthFunc DEPTH_FUNCTION_LESS (0x4) 1160 m_StencilEnable GD_FALSE (0x0) 1161 m_StencilWriteMask (0xff) 1162 m_StencilReadMask (0xff) 1163 m_StencilFunc STENCIL_FUNCTION_NEVER (0x0) 1164 m_StencilFail STENCIL_OPERATION_KEEP (0x0) 1165 m_StencilZFail STENCIL_OPERATION_KEEP (0x0) 1166 m_StencilZPass STENCIL_OPERATION_KEEP (0x0) 1167 */ 1168 class DepthStencilStateDescription 1169 { 1170 public: 1171 1172 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1173 /* Please see man pages for details */ 1174 #else 1175 /* Please see man pages for details */ 1176 #endif 1177 gdBool m_DepthEnable; 1178 1179 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1180 /* Please see man pages for details */ 1181 #else 1182 /* Please see man pages for details */ 1183 #endif 1184 gdBool m_StencilEnable; 1185 1186 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1187 /* Please see man pages for details */ 1188 #else 1189 /* Please see man pages for details */ 1190 #endif 1191 u8 m_StencilWriteMask; 1192 1193 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1194 /* Please see man pages for details */ 1195 #else 1196 /* Please see man pages for details */ 1197 #endif 1198 u8 m_StencilReadMask; 1199 1200 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1201 /* Please see man pages for details */ 1202 #else 1203 /* Please see man pages for details */ 1204 #endif 1205 OutputStage::DepthWriteMask m_DepthMask; 1206 1207 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1208 /* Please see man pages for details */ 1209 #else 1210 /* Please see man pages for details */ 1211 #endif 1212 OutputStage::DepthFunction m_DepthFunc; 1213 1214 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1215 /* Please see man pages for details */ 1216 #else 1217 /* Please see man pages for details */ 1218 #endif 1219 OutputStage::StencilFunction m_StencilFunc; 1220 1221 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1222 /* Please see man pages for details */ 1223 #else 1224 /* Please see man pages for details */ 1225 #endif 1226 OutputStage::StencilFailOperation m_StencilFail; 1227 1228 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1229 /* Please see man pages for details */ 1230 #else 1231 /* Please see man pages for details */ 1232 #endif 1233 OutputStage::StencilFailOperation m_StencilZFail; 1234 1235 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1236 /* Please see man pages for details */ 1237 #else 1238 /* Please see man pages for details */ 1239 #endif 1240 OutputStage::StencilFailOperation m_StencilZPass; 1241 1242 public: 1243 1244 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1245 /* Please see man pages for details 1246 */ 1247 #else 1248 /* Please see man pages for details 1249 */ 1250 #endif DepthStencilStateDescription()1251 DepthStencilStateDescription() 1252 { 1253 ToDefault(); 1254 } 1255 1256 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1257 /* Please see man pages for details */ 1258 #else 1259 /* Please see man pages for details */ 1260 #endif ToDefault()1261 void ToDefault() 1262 { 1263 m_StencilWriteMask = m_StencilReadMask = 0xff; 1264 m_DepthMask = OutputStage::DEPTH_WRITE_MASK_ALL; 1265 m_DepthFunc = OutputStage::DEPTH_FUNCTION_LESS; 1266 1267 m_DepthEnable = m_StencilEnable = GD_FALSE; 1268 m_StencilFunc = OutputStage::STENCIL_FUNCTION_NEVER; 1269 m_StencilFail = m_StencilZFail = m_StencilZPass = OutputStage::STENCIL_OPERATION_KEEP; 1270 } 1271 }; // DepthStencilStateDescription 1272 1273 1274 } // namespace CTR 1275 } // namespace gd 1276 } // namespace nn 1277 1278 #endif // NN_GD_CTR_GD_OUTPUTSTAGE_H_ 1279