00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "LampBasic.h"
00026 #include "Graphics2D/SpriteState/BlendSpriteState.h"
00027 #include "Graphics/Renderer/RenderingDevice.h"
00028
00029 namespace Lamp{
00030
00031
00032 const BlendSpriteState BlendSpriteState::translucent(blendModeAdd,
00033 blendStateSourceAlpha, blendStateInverseSourceAlpha);
00034
00035
00036 const BlendSpriteState BlendSpriteState::addState(blendModeAdd,
00037 blendStateSourceAlpha, blendStateOne);
00038
00039
00040 const BlendSpriteState BlendSpriteState::defaultState(translucent);
00041
00042
00043 const String BlendSpriteState::blendModeStringTable[] = {
00044 "Disable",
00045 "Add",
00046 "Subtract",
00047 "InverseSubtract",
00048 "Minimum",
00049 "Maximum",
00050 };
00051
00052
00053 const String BlendSpriteState::blendStateStringTable[] = {
00054 "Zero",
00055 "One",
00056 "SourceColor",
00057 "InverseSourceColor",
00058 "SourceAlpha",
00059 "InverseSourceAlpha",
00060 "SourceAlphaSaturate",
00061 "DestinationColor",
00062 "InverseDestinationColor",
00063 "DestinationAlpha",
00064 "InverseDestinationAlpha",
00065 };
00066
00067
00068
00069 BlendSpriteState::BlendSpriteState() :
00070 blendMode_(blendModeAdd), blendSource_(blendStateSourceAlpha),
00071 blendDestination_(blendStateInverseSourceAlpha){
00072 }
00073
00074
00075 BlendSpriteState::BlendSpriteState(BlendMode blendMode,
00076 BlendState blendSource, BlendState blendDestination) :
00077 blendMode_(blendMode), blendSource_(blendSource),
00078 blendDestination_(blendDestination){
00079 Assert((blendMode_ >= 0) && (blendMode_ < blendModeMax));
00080 Assert((blendSource_ >= 0) && (blendSource_ < blendStateMax));
00081 Assert((blendDestination_ >= 0) && (blendDestination_ < blendStateMax));
00082 }
00083
00084
00085 BlendSpriteState::~BlendSpriteState(){
00086 }
00087
00088
00089
00090
00091 void BlendSpriteState::apply(SpriteRenderState* renderState){
00092 RenderingDevice* device = RenderingDevice::getInstance();
00093 if(blendMode_ == blendModeDisable){
00094 device->setBlending(false);
00095 }else{
00096 device->setBlending(true);
00097 device->setBlendMode(blendMode_, blendSource_, blendDestination_);
00098 }
00099 }
00100
00101
00102
00103
00104 const String& BlendSpriteState::blendModeToString(BlendMode blendMode){
00105 Assert(blendMode >= 0);
00106 Assert(blendMode < blendModeMax);
00107 return blendModeStringTable[blendMode];
00108 }
00109
00110
00111 BlendSpriteState::BlendMode BlendSpriteState::blendModeFromString(
00112 const String& blendModeString){
00113 for(int i = 0; i < blendModeMax; i++){
00114 if(blendModeStringTable[i].equals(blendModeString)){
00115 return BlendMode(i);
00116 }
00117 }
00118 ErrorOut("BlendSpriteState::blendModeFromString() " + blendModeString);
00119 return blendModeMax;
00120 }
00121
00122
00123
00124
00125 const String& BlendSpriteState::blendStateToString(BlendState blendState){
00126 Assert(blendState >= 0);
00127 Assert(blendState < blendStateMax);
00128 return blendStateStringTable[blendState];
00129 }
00130
00131
00132 BlendSpriteState::BlendState BlendSpriteState::blendStateFromString(
00133 const String& blendStateString){
00134 for(int i = 0; i < blendStateMax; i++){
00135 if(blendStateStringTable[i].equals(blendStateString)){
00136 return BlendState(i);
00137 }
00138 }
00139 ErrorOut("BlendSpriteState::blendStateFromString() " + blendStateString);
00140 return blendStateMax;
00141 }
00142
00143 }
00144