/src/away3d/materials/methods/ColorTransformMethod.as

http://github.com/away3d/away3d-core-fp11 · ActionScript · 73 lines · 49 code · 8 blank · 16 comment · 0 complexity · 24dc242791cd93ea4c82e7f8025c9168 MD5 · raw file

  1. package away3d.materials.methods
  2. {
  3. import away3d.arcane;
  4. import away3d.core.managers.Stage3DProxy;
  5. import away3d.materials.compilation.ShaderRegisterCache;
  6. import away3d.materials.compilation.ShaderRegisterElement;
  7. import flash.geom.ColorTransform;
  8. use namespace arcane;
  9. /**
  10. * ColorTransformMethod provides a shading method that changes the colour of a material analogous to a
  11. * ColorTransform object.
  12. */
  13. public class ColorTransformMethod extends EffectMethodBase
  14. {
  15. private var _colorTransform:ColorTransform;
  16. /**
  17. * Creates a new ColorTransformMethod.
  18. */
  19. public function ColorTransformMethod()
  20. {
  21. super();
  22. }
  23. /**
  24. * The ColorTransform object to transform the colour of the material with.
  25. */
  26. public function get colorTransform():ColorTransform
  27. {
  28. return _colorTransform;
  29. }
  30. public function set colorTransform(value:ColorTransform):void
  31. {
  32. _colorTransform = value;
  33. }
  34. /**
  35. * @inheritDoc
  36. */
  37. override arcane function getFragmentCode(vo:MethodVO, regCache:ShaderRegisterCache, targetReg:ShaderRegisterElement):String
  38. {
  39. var code:String = "";
  40. var colorMultReg:ShaderRegisterElement = regCache.getFreeFragmentConstant();
  41. var colorOffsReg:ShaderRegisterElement = regCache.getFreeFragmentConstant();
  42. vo.fragmentConstantsIndex = colorMultReg.index*4;
  43. code += "mul " + targetReg + ", " + targetReg.toString() + ", " + colorMultReg + "\n" +
  44. "add " + targetReg + ", " + targetReg.toString() + ", " + colorOffsReg + "\n";
  45. return code;
  46. }
  47. /**
  48. * @inheritDoc
  49. */
  50. override arcane function activate(vo:MethodVO, stage3DProxy:Stage3DProxy):void
  51. {
  52. var inv:Number = 1/0xff;
  53. var index:int = vo.fragmentConstantsIndex;
  54. var data:Vector.<Number> = vo.fragmentData;
  55. data[index] = _colorTransform.redMultiplier;
  56. data[index + 1] = _colorTransform.greenMultiplier;
  57. data[index + 2] = _colorTransform.blueMultiplier;
  58. data[index + 3] = _colorTransform.alphaMultiplier;
  59. data[index + 4] = _colorTransform.redOffset*inv;
  60. data[index + 5] = _colorTransform.greenOffset*inv;
  61. data[index + 6] = _colorTransform.blueOffset*inv;
  62. data[index + 7] = _colorTransform.alphaOffset*inv;
  63. }
  64. }
  65. }