fCgTextureC.cpp 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include <tchar.h>
  4. #pragma hdrstop
  5. #include "fCgTextureC.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. #pragma link "GLS.BaseClasses"
  9. #pragma link "GLS.Cadencer"
  10. #pragma link "GLS.Coordinates"
  11. #pragma link "GLS.Graph"
  12. #pragma link "GLS.Material"
  13. #pragma link "GLS.Objects"
  14. #pragma link "GLS.Scene"
  15. #pragma link "GLS.SceneViewer"
  16. #pragma link "GLS.VectorFileObjects"
  17. #pragma resource "*.dfm"
  18. TForm1 *Form1;
  19. //---------------------------------------------------------------------------
  20. __fastcall TForm1::TForm1(TComponent* Owner)
  21. : TForm(Owner)
  22. {
  23. }
  24. //---------------------------------------------------------------------------
  25. void __fastcall TForm1::FormCreate(TObject *Sender)
  26. {
  27. TFileName Path = GetCurrentAssetPath();
  28. // load Cg proggy from project directory
  29. SetCurrentDir(Path + "\\shader");
  30. CgShader1->VertexProgram->LoadFromFile("cg_texture_vp.cg");
  31. MemoVertCode->Lines->Assign(CgShader1->VertexProgram->Code);
  32. CgShader1->FragmentProgram->LoadFromFile("cg_texture_fp.cg");
  33. MemoFragCode->Lines->Assign(CgShader1->FragmentProgram->Code);
  34. // Load images from media dir
  35. SetCurrentDir(Path + "\\texture");
  36. GLMatLib->Materials->Items[0]->Material->Texture->Image->LoadFromFile("moon.bmp");
  37. GLMatLib->Materials->Items[1]->Material->Texture->Image->LoadFromFile("clover.jpg");
  38. GLMatLib->Materials->Items[2]->Material->Texture->Image->LoadFromFile("marbletiles.jpg");
  39. SetCurrentDir(Path + "\\map");
  40. GLMatLib->Materials->Items[3]->Material->Texture->Image->LoadFromFile("earth.jpg");
  41. }
  42. //---------------------------------------------------------------------------
  43. void __fastcall TForm1::CgShader1Initialize(TCustomCgShader *CgShader)
  44. {
  45. // Due to parameter shadowing (ref. Cg Manual), parameters that doesn't change
  46. // once set can be assigned for once in the OnInitialize event.
  47. // with do begin
  48. CgShader1->FragmentProgram->ParamByName("Map0")->SetToTextureOf(GLMatLib->Materials->Items[0]);
  49. CgShader1->FragmentProgram->ParamByName("Map1")->SetToTextureOf(GLMatLib->Materials->Items[1]);
  50. CgShader1->FragmentProgram->ParamByName("Map2")->SetToTextureOf(GLMatLib->Materials->Items[2]);
  51. CgShader1->FragmentProgram->ParamByName("Map3")->SetToTextureOf(GLMatLib->Materials->Items[3]);
  52. // Alternatively, you can set texture parameters using two other methods:
  53. //CgShader1->FragmentProgram->SetTexture("Map0", GLMatLib->Materials->Items[0]->Material->Texture->Handle);
  54. //or
  55. //CgShader1->FragmentProgram->ParamByName("Map0")->SetAsTexture2D(Materials->Items[0]->Material->Texture->Handle);
  56. // Display profiles used
  57. LabelVertProfile->Caption = "Using profile: " +
  58. CgShader1->VertexProgram->GetProfileStringA();
  59. LabelFragProfile->Caption = "Using profile: " +
  60. CgShader1->FragmentProgram->GetProfileStringA();
  61. }
  62. //---------------------------------------------------------------------------
  63. float conv1(TTrackBar *TrackBar)
  64. {
  65. int half;
  66. half = TrackBar->Max/2;
  67. return (TrackBar->Position-half) / half;
  68. }
  69. void __fastcall TForm1::CgShader1ApplyVP(TCgProgram *CgProgram, TObject *Sender)
  70. {
  71. TGLVector v;
  72. CgProgram->ParamByName("ModelViewProj")->SetAsStateMatrix(CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
  73. // Alternatively, you can set it using:
  74. // CgProgram->SetStateMatrix("ModelViewProj", CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
  75. v = VectorMake(conv1(TrackBar1), conv1(TrackBar2), conv1(TrackBar3), conv1(TrackBar4) );
  76. CgProgram->ParamByName("shifts")->SetAsVector(v);
  77. }
  78. //---------------------------------------------------------------------------
  79. float conv2(TTrackBar *TrackBar)
  80. {
  81. int half;
  82. half = TrackBar->Max/2;
  83. return (TrackBar->Position-half) / half;
  84. }
  85. void __fastcall TForm1::CgShader1ApplyFP(TCgProgram *CgProgram, TObject *Sender)
  86. {
  87. TGLVector v;
  88. CgProgram->ParamByName("Map0")->EnableTexture();
  89. CgProgram->ParamByName("Map1")->EnableTexture();
  90. CgProgram->ParamByName("Map2")->EnableTexture();
  91. CgProgram->ParamByName("Map3")->EnableTexture();
  92. v = VectorMake(conv2(TrackBar5), conv2(TrackBar6), conv2(TrackBar7), conv2(TrackBar8));
  93. CgProgram->ParamByName("weights")->SetAsVector(v);
  94. }
  95. //---------------------------------------------------------------------------
  96. void __fastcall TForm1::CgShader1UnApplyFP(TCgProgram *CgProgram)
  97. {
  98. CgProgram->ParamByName("Map0")->DisableTexture();
  99. CgProgram->ParamByName("Map1")->DisableTexture();
  100. CgProgram->ParamByName("Map2")->DisableTexture();
  101. CgProgram->ParamByName("Map3")->DisableTexture();
  102. }
  103. //---------------------------------------------------------------------------
  104. void __fastcall TForm1::CBVertexProgramClick(TObject *Sender)
  105. {
  106. CgShader1->VertexProgram->Enabled = !CBVertexProgram->Checked;
  107. }
  108. //---------------------------------------------------------------------------
  109. void __fastcall TForm1::CBFragmentProgramClick(TObject *Sender)
  110. {
  111. CgShader1->FragmentProgram->Enabled = !CBFragmentProgram->Checked;
  112. }
  113. //---------------------------------------------------------------------------
  114. void __fastcall TForm1::ButtonApplyFPClick(TObject *Sender)
  115. {
  116. CgShader1->FragmentProgram->Code = MemoFragCode->Lines;
  117. ButtonApplyFP->Enabled = false;
  118. }
  119. //---------------------------------------------------------------------------
  120. void __fastcall TForm1::ButtonApplyVPClick(TObject *Sender)
  121. {
  122. CgShader1->VertexProgram->Code = MemoVertCode->Lines;
  123. ButtonApplyVP->Enabled = false;
  124. }
  125. //---------------------------------------------------------------------------
  126. void __fastcall TForm1::MemoFragCodeChange(TObject *Sender)
  127. {
  128. ButtonApplyFP->Enabled = true;
  129. }
  130. //---------------------------------------------------------------------------
  131. void __fastcall TForm1::MemoVertCodeChange(TObject *Sender)
  132. {
  133. ButtonApplyVP->Enabled = true;
  134. }
  135. //---------------------------------------------------------------------------
  136. void __fastcall TForm1::Button1Click(TObject *Sender)
  137. {
  138. CgShader1->VertexProgram->ListParameters(Memo1->Lines);
  139. }
  140. //---------------------------------------------------------------------------
  141. void __fastcall TForm1::Button2Click(TObject *Sender)
  142. {
  143. CgShader1->FragmentProgram->ListParameters(Memo3->Lines);
  144. }
  145. //---------------------------------------------------------------------------
  146. void __fastcall TForm1::Button3Click(TObject *Sender)
  147. {
  148. CgShader1->FragmentProgram->ListCompilation(Memo3->Lines);
  149. }
  150. //---------------------------------------------------------------------------
  151. void __fastcall TForm1::Button4Click(TObject *Sender)
  152. {
  153. CgShader1->VertexProgram->ListCompilation(Memo1->Lines);
  154. }
  155. //---------------------------------------------------------------------------
  156. void __fastcall TForm1::GLSceneViewer1MouseDown(TObject *Sender, TMouseButton Button,
  157. TShiftState Shift, int X, int Y)
  158. {
  159. mx = X;
  160. my = Y;
  161. }
  162. //---------------------------------------------------------------------------
  163. void __fastcall TForm1::GLSceneViewer1MouseMove(TObject *Sender, TShiftState Shift,
  164. int X, int Y)
  165. {
  166. if (Shift.Contains(ssLeft) || Shift.Contains(ssRight))
  167. {
  168. GLCamera1->MoveAroundTarget(my-Y, mx-X);
  169. mx = X;
  170. my = Y;
  171. }
  172. }
  173. //---------------------------------------------------------------------------
  174. void __fastcall TForm1::GLCadencer1Progress(TObject *Sender, const double deltaTime,
  175. const double newTime)
  176. {
  177. GLSceneViewer1->Invalidate();
  178. }
  179. //---------------------------------------------------------------------------
  180. void __fastcall TForm1::FormMouseWheel(TObject *Sender, TShiftState Shift, int WheelDelta,
  181. TPoint &MousePos, bool &Handled)
  182. {
  183. if (PtInRect(ClientRect, ScreenToClient(MousePos)))
  184. {
  185. GLCamera1->SceneScale = GLCamera1->SceneScale * (1000 - WheelDelta) / 1000;
  186. Handled = true;
  187. }
  188. }
  189. //---------------------------------------------------------------------------
  190. void __fastcall TForm1::Timer1Timer(TObject *Sender)
  191. {
  192. PanelFPS->Caption = Format("%.1f fps",
  193. ARRAYOFCONST ((GLSceneViewer1->FramesPerSecond())));
  194. GLSceneViewer1->ResetPerformanceMonitor();
  195. }
  196. //---------------------------------------------------------------------------
  197. void __fastcall TForm1::FormKeyPress(TObject *Sender, System::WideChar &Key)
  198. {
  199. if (Key == 0x27) Close();
  200. }
  201. //---------------------------------------------------------------------------
  202. void __fastcall TForm1::CheckBox2Click(TObject *Sender)
  203. {
  204. CgShader1->Enabled = CheckBox2->Checked;
  205. }
  206. //---------------------------------------------------------------------------