CmD3D11BuiltinMaterialManager.cpp 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "CmD3D11BuiltinMaterialManager.h"
  2. #include "CmRendererManager.h"
  3. #include "CmHighLevelGpuProgram.h"
  4. #include "CmShader.h"
  5. #include "CmTechnique.h"
  6. #include "CmPass.h"
  7. #include "CmMaterial.h"
  8. #include "CmBlendState.h"
  9. namespace CamelotEngine
  10. {
  11. HMaterial D3D11BuiltinMaterialManager::createSpriteTextMaterial() const
  12. {
  13. return Material::create(mSpriteTextShader);
  14. }
  15. HMaterial D3D11BuiltinMaterialManager::createSpriteImageMaterial() const
  16. {
  17. return Material::create(mSpriteImageShader);
  18. }
  19. void D3D11BuiltinMaterialManager::onStartUp()
  20. {
  21. initSpriteTextShader();
  22. initSpriteImageShader();
  23. }
  24. void D3D11BuiltinMaterialManager::initSpriteTextShader()
  25. {
  26. String vsCode = " \
  27. void vs_main( \
  28. in float3 inPos : POSITION, \
  29. in float2 uv : TEXCOORD0, \
  30. out float4 oPosition : SV_Position, \
  31. out float2 oUv : TEXCOORD0) \
  32. { \
  33. float tfrmdX = (inPos.x / 640) - 1.0f; \
  34. float tfrmdY = (inPos.y / 360) + 1.0f; \
  35. \
  36. oPosition = float4(tfrmdX, tfrmdY, 0, 1); \
  37. oUv = uv; \
  38. } \
  39. ";
  40. String psCode = " \
  41. SamplerState mainTexSamp : register(s0); \
  42. Texture2D mainTexture : register(t0); \
  43. \
  44. float4 ps_main(in float4 inPos : SV_Position, float2 uv : TEXCOORD0) : SV_Target \
  45. { \
  46. float4 color = float4(1.0f, 1.0f, 1.0f, mainTexture.Sample(mainTexSamp, uv).r); \
  47. return color; \
  48. }";
  49. HHighLevelGpuProgram vsProgram = HighLevelGpuProgram::create(vsCode, "vs_main", "hlsl", GPT_VERTEX_PROGRAM, GPP_VS_4_0);
  50. HHighLevelGpuProgram psProgram = HighLevelGpuProgram::create(psCode, "ps_main", "hlsl", GPT_FRAGMENT_PROGRAM, GPP_PS_4_0);
  51. vsProgram.waitUntilLoaded();
  52. psProgram.waitUntilLoaded();
  53. mSpriteTextShader = Shader::create("TextShader");
  54. mSpriteTextShader->addParameter("mainTexSamp", "mainTexSamp", GPOT_SAMPLER2D);
  55. mSpriteTextShader->addParameter("mainTexture", "mainTexture", GPOT_TEXTURE2D);
  56. TechniquePtr newTechnique = mSpriteTextShader->addTechnique("D3D11RenderSystem", RendererManager::getCoreRendererName());
  57. PassPtr newPass = newTechnique->addPass();
  58. newPass->setVertexProgram(vsProgram);
  59. newPass->setFragmentProgram(psProgram);
  60. BLEND_STATE_DESC desc;
  61. desc.renderTargetDesc[0].blendEnable = true;
  62. desc.renderTargetDesc[0].srcBlend = BF_SOURCE_ALPHA;
  63. desc.renderTargetDesc[0].dstBlend = BF_INV_SOURCE_ALPHA;
  64. desc.renderTargetDesc[0].blendOp = BO_ADD;
  65. HBlendState blendState = BlendState::create(desc);
  66. newPass->setBlendState(blendState);
  67. }
  68. void D3D11BuiltinMaterialManager::initSpriteImageShader()
  69. {
  70. // TODO
  71. }
  72. }