celine.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. //---------------------------------------------------------------------------
  2. //
  3. // celine.cpp - This file contains the code for the VFX Line Element
  4. //
  5. //---------------------------------------------------------------------------//
  6. // Copyright (C) Microsoft Corporation. All rights reserved. //
  7. //===========================================================================//
  8. //---------------------------------------------------------------------------
  9. // Include files
  10. #ifndef CELINE_H
  11. #include "celine.h"
  12. #endif
  13. #ifndef VPORT_H
  14. #include "vport.h"
  15. #endif
  16. #ifndef TGL_H
  17. #include "tgl.h"
  18. #endif
  19. #ifndef CLIP_H
  20. #include "clip.h"
  21. #endif
  22. #include <gameos.hpp>
  23. //---------------------------------------------------------------------------
  24. // Static Globals
  25. extern bool hasGuardBand;
  26. //---------------------------------------------------------------------------
  27. LineElement::LineElement (Stuff::Vector4D &pos1, Stuff::Vector4D &pos2, long clr, MemoryPtr fTable, long endClr) : Element(0L)
  28. {
  29. startPos = pos1;;
  30. endPos = pos2;
  31. color = clr;
  32. fadeTable = fTable;
  33. endColor = endClr;
  34. }
  35. //---------------------------------------------------------------------------
  36. void LineElement::draw (void)
  37. {
  38. if (endColor == -1)
  39. {
  40. gos_VERTEX gVertex[2];
  41. gVertex[0].x = startPos.x;
  42. gVertex[0].y = startPos.y;
  43. gVertex[0].z = startPos.z;
  44. if (startPos.w > Stuff::SMALL)
  45. gVertex[0].rhw = 1.0f / startPos.w;
  46. else
  47. gVertex[0].rhw = 0.00001f;
  48. gVertex[0].argb = color;
  49. gVertex[0].frgb = 0xff000000;
  50. gVertex[0].u = 0.0;
  51. gVertex[0].v = 0.0;
  52. gVertex[1].x = endPos.x;
  53. gVertex[1].y = endPos.y;
  54. gVertex[1].z = endPos.z;
  55. if (endPos.w > Stuff::SMALL)
  56. gVertex[1].rhw = 1.0f / endPos.w;
  57. else
  58. gVertex[1].rhw = 0.00001f;
  59. gVertex[1].argb = color;
  60. gVertex[1].frgb = 0xff000000;
  61. gVertex[1].u = 0.0;
  62. gVertex[1].v = 0.0;
  63. //--------------------------------
  64. //Set States for Software Renderer
  65. if (Environment.Renderer == 3)
  66. {
  67. gos_SetRenderState( gos_State_AlphaMode, gos_Alpha_OneZero);
  68. gos_SetRenderState( gos_State_ShadeMode, gos_ShadeGouraud);
  69. gos_SetRenderState( gos_State_MonoEnable, 1);
  70. gos_SetRenderState( gos_State_Perspective, 0);
  71. gos_SetRenderState( gos_State_Clipping, 0);
  72. gos_SetRenderState( gos_State_AlphaTest, 0);
  73. gos_SetRenderState( gos_State_Specular, 0);
  74. gos_SetRenderState( gos_State_Dither, 0);
  75. gos_SetRenderState( gos_State_TextureMapBlend, gos_BlendModulate);
  76. gos_SetRenderState( gos_State_Filter, gos_FilterNone);
  77. // gos_SetRenderState( gos_State_TextureAddress, gos_TextureClamp );
  78. gos_SetRenderState( gos_State_Texture, 0);
  79. }
  80. //--------------------------------
  81. //Set States for Hardware Renderer
  82. else
  83. {
  84. gos_SetRenderState( gos_State_AlphaMode, gos_Alpha_AlphaInvAlpha);
  85. gos_SetRenderState( gos_State_ShadeMode, gos_ShadeGouraud);
  86. gos_SetRenderState( gos_State_MonoEnable, 0);
  87. gos_SetRenderState( gos_State_Perspective, 1);
  88. gos_SetRenderState( gos_State_Clipping, 1);
  89. gos_SetRenderState( gos_State_AlphaTest, 1);
  90. gos_SetRenderState( gos_State_Specular, 0);
  91. gos_SetRenderState( gos_State_Dither, 1);
  92. gos_SetRenderState( gos_State_TextureMapBlend, gos_BlendModulate);
  93. gos_SetRenderState( gos_State_Filter, gos_FilterBiLinear);
  94. // gos_SetRenderState( gos_State_TextureAddress, gos_TextureClamp );
  95. gos_SetRenderState( gos_State_Texture, 0);
  96. if (!fadeTable)
  97. {
  98. gos_SetRenderState( gos_State_ZCompare, 1);
  99. gos_SetRenderState( gos_State_ZWrite, 1);
  100. }
  101. else
  102. {
  103. gos_SetRenderState( gos_State_ZCompare, 0);
  104. gos_SetRenderState( gos_State_ZWrite, 0);
  105. }
  106. }
  107. //--------------------------------------------------------------------------------
  108. // Reject Any triangle which has vertices off screeen in software for now.
  109. // Do real cliping in geometry layer for software and hardware that needs it!
  110. if ((gVertex[0].z >= 0.0f) &&
  111. (gVertex[0].z < 1.0f) &&
  112. (gVertex[1].z >= 0.0f) &&
  113. (gVertex[1].z < 1.0f))
  114. {
  115. gos_DrawLines(gVertex, 2);
  116. }
  117. }
  118. else
  119. {
  120. //---------------------------------
  121. // Draw from start to end color.
  122. }
  123. }
  124. //---------------------------------------------------------------------------