Advertisement
Guest User

Untitled

a guest
Sep 21st, 2014
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. void ShaderGenPrinterGLSL::printPixelShaderOutputStruct( Stream& stream, const MaterialFeatureData &featureData )
  2. {
  3. // Determine the number of output targets we need
  4. U32 numMRTs = 0;
  5. for (U32 i = 0; i < FEATUREMGR->getFeatureCount(); i++)
  6. {
  7. const FeatureInfo &info = FEATUREMGR->getAt(i);
  8. if (featureData.features.hasFeature(*info.type))
  9. numMRTs |= info.feature->getOutputTargets(featureData);
  10. }
  11.  
  12. WRITESTR("layout(location = 0) out vec4 OUT_FragColor0;\r\n");
  13. for (U32 i = 1; i < 4; i++)
  14. {
  15. if (numMRTs & 1 << i) {
  16. WRITESTR(avar("layout(location = %d) out vec4 OUT_FragColor%d;\r\n", i, i));
  17. extraRTs[i - 1] = true;
  18. }
  19. }
  20. WRITESTR("\r\n");
  21. WRITESTR("\r\n");
  22. }
  23.  
  24. void ShaderGenPrinterGLSL::printPixelShaderCloser( Stream& stream )
  25. {
  26. WRITESTR(" OUT_FragColor0 = col;\r\n");
  27. for (U32 i = 1; i < 4; i++)
  28. {
  29. if (extraRTs[i - 1])
  30. WRITESTR(avar(" OUT_FragColor%d = col%d;\r\n", i, i));
  31. }
  32.  
  33. WRITESTR("}\r\n");
  34. }
  35.  
  36.  
  37. //In the header file
  38. class ShaderGenPrinterGLSL : public ShaderGenPrinter
  39. {
  40. bool extraRTs[3];
  41.  
  42. public:
  43. ShaderGenPrinterGLSL() { for (int i = 0; i < 3; i++) extraRTs[i] = false; }
  44.  
  45. // ShaderGenPrinter
  46. virtual void printShaderHeader(Stream& stream);
  47. virtual void printMainComment(Stream& stream);
  48. virtual void printVertexShaderCloser(Stream& stream);
  49. virtual void printPixelShaderOutputStruct(Stream& stream, const MaterialFeatureData &featureData);
  50. virtual void printPixelShaderCloser(Stream& stream);
  51. virtual void printLine(Stream& stream, const String& line);
  52. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement