Blitter.h
Go to the documentation of this file.00001 00012 #ifndef __Blitter_H__ 00013 #define __Blitter_H__ 00014 00015 // Includes 00016 00017 // Forward declares 00018 00019 // Blitter 00020 class Blitter 00021 { 00022 #define INLINE __forceinline static 00023 public: 00024 struct OpArgs; 00025 struct StepArgs; 00026 typedef void (*Operation)(OpArgs& opArgs); 00027 typedef void (*Step)(OpArgs& opArgs, StepArgs& stepArgs); 00028 00029 struct BlitArgs 00030 { 00031 unsigned short color; 00032 unsigned char alpha; 00033 unsigned short* sourceColor; 00034 unsigned char* sourceAlpha; 00035 unsigned short* targetColor; 00036 unsigned char* targetAlpha; 00037 int sourceHPitch; 00038 int sourceVPitch; 00039 int targetHPitch; 00040 int sourceX; 00041 int sourceY; 00042 int sourceWidth; 00043 int sourceHeight; 00044 int targetX; 00045 int targetY; 00046 }; 00047 00048 template<Operation operation, Step stepX, Step stepY> static void Normal(BlitArgs& blitArgs); 00049 00050 template<Operation operation, Step stepX, Step stepY> static void Rot090(BlitArgs& blitArgs); 00051 00052 template<Operation operation, Step stepX, Step stepY> static void Rot180(BlitArgs& blitArgs); 00053 00054 template<Operation operation, Step stepX, Step stepY> static void Rot270(BlitArgs& blitArgs); 00055 00056 template<Operation operation, Step stepX, Step stepY> static void Flip_X(BlitArgs& blitArgs); 00057 00058 template<Operation operation, Step stepX, Step stepY> static void Flip_Y(BlitArgs& blitArgs); 00059 00060 // targetAlpha is filled with alpha 00061 inline static void Normal_Fill_Alpha_TA(BlitArgs& blitArgs); 00062 00063 // sourceColor is copied to targetColor 00064 inline static void Normal_Copy_SC_TC(BlitArgs& blitArgs); 00065 00066 // sourceColor is copied to targetColor 00067 inline static void Flip_Y_Copy_SC_TC(BlitArgs& blitArgs); 00068 00069 // sourceAlpha is copied to targetAlpha 00070 inline static void Normal_Copy_SA_TA(BlitArgs& blitArgs); 00071 00072 // sourceAlpha is copied to targetAlpha 00073 inline static void Flip_Y_Copy_SA_TA(BlitArgs& blitArgs); 00074 00075 struct OpArgs 00076 { 00077 unsigned short color; 00078 unsigned char alpha; 00079 unsigned short* sourceColor; 00080 unsigned char* sourceAlpha; 00081 unsigned short* targetColor; 00082 unsigned char* targetAlpha; 00083 }; 00084 00085 // targetColor is filled with color 00086 INLINE void OpFill_Color_TC(OpArgs& opArgs); 00087 00088 // targetAlpha is filled with alpha 00089 INLINE void OpFill_Alpha_TA(OpArgs& opArgs); 00090 00091 // sourceColor is copied to targetColor 00092 INLINE void OpCopy_SC_TC(OpArgs& opArgs); 00093 00094 // sourceColor*color is copied to targetColor 00095 INLINE void OpCopy_Color_SC_TC(OpArgs& opArgs); 00096 00097 // sourceAlpha is copied to targetAlpha 00098 INLINE void OpCopy_SA_TA(OpArgs& opArgs); 00099 00100 // sourceColor is blended (sourceAlpha) with targetColor 00101 INLINE void OpBlend_SC_SA_TC(OpArgs& opArgs); 00102 00103 // sourceColor*color is blended (sourceAlpha) with targetColor 00104 INLINE void OpBlend_Color_SC_SA_TC(OpArgs& opArgs); 00105 00106 // sourceColor is blended (alpha) with targetColor 00107 INLINE void OpBlend_Alpha_SC_TC(OpArgs& opArgs); 00108 00109 // sourceColor*color is blended (alpha) with targetColor 00110 INLINE void OpBlend_Color_Alpha_SC_TC(OpArgs& opArgs); 00111 00112 // sourceColor is blended (sourceAlpha*alpha) with targetColor 00113 INLINE void OpBlend_Alpha_SC_SA_TC(OpArgs& opArgs); 00114 00115 // sourceColor*color is blended (sourceAlpha*alpha) with targetColor 00116 INLINE void OpBlend_Color_Alpha_SC_SA_TC(OpArgs& opArgs); 00117 00118 // color is blended (alpha) with targetColor 00119 INLINE void OpBlend_Color_Alpha_TC(OpArgs& opArgs); 00120 00121 // color is blended (sourceAlpha) with targetColor 00122 INLINE void OpBlend_Color_SA_TC(OpArgs& opArgs); 00123 00124 // color is blended (sourceAlpha*alpha) with targetColor 00125 INLINE void OpBlend_Color_Alpha_SA_TC(OpArgs& opArgs); 00126 00127 // targetAlpha is set to max(alpha,targetAlpha) 00128 INLINE void OpMax_Alpha_TA(OpArgs& opArgs); 00129 00130 // targetAlpha is set to max(sourceAlpha,targetAlpha) 00131 INLINE void OpMax_SA_TA(OpArgs& opArgs); 00132 00133 // targetAlpha is set to max(sourceAlpha*alpha,targetAlpha) 00134 INLINE void OpMax_Alpha_SA_TA(OpArgs& opArgs); 00135 00136 struct StepArgs 00137 { 00138 int sourceRowStep; 00139 int targetRowStep; 00140 int sourceHPitch; 00141 }; 00142 00143 00144 #define DefArgs OpArgs& opArgs, StepArgs& stepArgs 00145 #define PassArgs opArgs, stepArgs 00146 00147 INLINE void StepX_Normal_TC (DefArgs) { StepFunc<X_Normal_TC> (PassArgs); }; 00148 INLINE void StepY_Normal_TC (DefArgs) { StepFunc<Y_Normal_TC> (PassArgs); }; 00149 INLINE void StepX_Normal_TA (DefArgs) { StepFunc<X_Normal_TA> (PassArgs); }; 00150 INLINE void StepY_Normal_TA (DefArgs) { StepFunc<Y_Normal_TA> (PassArgs); }; 00151 INLINE void StepX_Normal_SC_TC (DefArgs) { StepFunc<X_Normal_SC, X_Normal_TC> (PassArgs); }; 00152 INLINE void StepY_Normal_SC_TC (DefArgs) { StepFunc<Y_Normal_SC, Y_Normal_TC> (PassArgs); }; 00153 INLINE void StepX_Normal_SA_TA (DefArgs) { StepFunc<X_Normal_SA, X_Normal_TA> (PassArgs); }; 00154 INLINE void StepY_Normal_SA_TA (DefArgs) { StepFunc<Y_Normal_SA, Y_Normal_TA> (PassArgs); }; 00155 INLINE void StepX_Normal_SA_TC (DefArgs) { StepFunc<X_Normal_SA, X_Normal_TC> (PassArgs); }; 00156 INLINE void StepY_Normal_SA_TC (DefArgs) { StepFunc<Y_Normal_SA, Y_Normal_TC> (PassArgs); }; 00157 INLINE void StepX_Normal_SC_SA_TC (DefArgs) { StepFunc<X_Normal_SC, X_Normal_SA, X_Normal_TC> (PassArgs); }; 00158 INLINE void StepY_Normal_SC_SA_TC (DefArgs) { StepFunc<Y_Normal_SC, Y_Normal_SA, Y_Normal_TC> (PassArgs); }; 00159 00160 INLINE void StepX_Rot090_TC (DefArgs) { StepFunc<X_Rot090_TC> (PassArgs); }; 00161 INLINE void StepY_Rot090_TC (DefArgs) { StepFunc<Y_Rot090_TC> (PassArgs); }; 00162 INLINE void StepX_Rot090_TA (DefArgs) { StepFunc<X_Rot090_TA> (PassArgs); }; 00163 INLINE void StepY_Rot090_TA (DefArgs) { StepFunc<Y_Rot090_TA> (PassArgs); }; 00164 INLINE void StepX_Rot090_SC_TC (DefArgs) { StepFunc<X_Rot090_SC, X_Rot090_TC> (PassArgs); }; 00165 INLINE void StepY_Rot090_SC_TC (DefArgs) { StepFunc<Y_Rot090_SC, Y_Rot090_TC> (PassArgs); }; 00166 INLINE void StepX_Rot090_SA_TA (DefArgs) { StepFunc<X_Rot090_SA, X_Rot090_TA> (PassArgs); }; 00167 INLINE void StepY_Rot090_SA_TA (DefArgs) { StepFunc<Y_Rot090_SA, Y_Rot090_TA> (PassArgs); }; 00168 INLINE void StepX_Rot090_SA_TC (DefArgs) { StepFunc<X_Rot090_SA, X_Rot090_TC> (PassArgs); }; 00169 INLINE void StepY_Rot090_SA_TC (DefArgs) { StepFunc<Y_Rot090_SA, Y_Rot090_TC> (PassArgs); }; 00170 INLINE void StepX_Rot090_SC_SA_TC (DefArgs) { StepFunc<X_Rot090_SC, X_Rot090_SA, X_Rot090_TC> (PassArgs); }; 00171 INLINE void StepY_Rot090_SC_SA_TC (DefArgs) { StepFunc<Y_Rot090_SC, Y_Rot090_SA, Y_Rot090_TC> (PassArgs); }; 00172 00173 00174 INLINE void StepX_Rot180_TC (DefArgs) { StepFunc<X_Rot180_TC> (PassArgs); }; 00175 INLINE void StepY_Rot180_TC (DefArgs) { StepFunc<Y_Rot180_TC> (PassArgs); }; 00176 INLINE void StepX_Rot180_TA (DefArgs) { StepFunc<X_Rot180_TA> (PassArgs); }; 00177 INLINE void StepY_Rot180_TA (DefArgs) { StepFunc<Y_Rot180_TA> (PassArgs); }; 00178 INLINE void StepX_Rot180_SC_TC (DefArgs) { StepFunc<X_Rot180_SC, X_Rot180_TC> (PassArgs); }; 00179 INLINE void StepY_Rot180_SC_TC (DefArgs) { StepFunc<Y_Rot180_SC, Y_Rot180_TC> (PassArgs); }; 00180 INLINE void StepX_Rot180_SA_TA (DefArgs) { StepFunc<X_Rot180_SA, X_Rot180_TA> (PassArgs); }; 00181 INLINE void StepY_Rot180_SA_TA (DefArgs) { StepFunc<Y_Rot180_SA, Y_Rot180_TA> (PassArgs); }; 00182 INLINE void StepX_Rot180_SA_TC (DefArgs) { StepFunc<X_Rot180_SA, X_Rot180_TC> (PassArgs); }; 00183 INLINE void StepY_Rot180_SA_TC (DefArgs) { StepFunc<Y_Rot180_SA, Y_Rot180_TC> (PassArgs); }; 00184 INLINE void StepX_Rot180_SC_SA_TC (DefArgs) { StepFunc<X_Rot180_SC, X_Rot180_SA, X_Rot180_TC> (PassArgs); }; 00185 INLINE void StepY_Rot180_SC_SA_TC (DefArgs) { StepFunc<Y_Rot180_SC, Y_Rot180_SA, Y_Rot180_TC> (PassArgs); }; 00186 00187 INLINE void StepX_Rot270_TC (DefArgs) { StepFunc<X_Rot270_TC> (PassArgs); }; 00188 INLINE void StepY_Rot270_TC (DefArgs) { StepFunc<Y_Rot270_TC> (PassArgs); }; 00189 INLINE void StepX_Rot270_TA (DefArgs) { StepFunc<X_Rot270_TA> (PassArgs); }; 00190 INLINE void StepY_Rot270_TA (DefArgs) { StepFunc<Y_Rot270_TA> (PassArgs); }; 00191 INLINE void StepX_Rot270_SC_TC (DefArgs) { StepFunc<X_Rot270_SC, X_Rot270_TC> (PassArgs); }; 00192 INLINE void StepY_Rot270_SC_TC (DefArgs) { StepFunc<Y_Rot270_SC, Y_Rot270_TC> (PassArgs); }; 00193 INLINE void StepX_Rot270_SA_TA (DefArgs) { StepFunc<X_Rot270_SA, X_Rot270_TA> (PassArgs); }; 00194 INLINE void StepY_Rot270_SA_TA (DefArgs) { StepFunc<Y_Rot270_SA, Y_Rot270_TA> (PassArgs); }; 00195 INLINE void StepX_Rot270_SA_TC (DefArgs) { StepFunc<X_Rot270_SA, X_Rot270_TC> (PassArgs); }; 00196 INLINE void StepY_Rot270_SA_TC (DefArgs) { StepFunc<Y_Rot270_SA, Y_Rot270_TC> (PassArgs); }; 00197 INLINE void StepX_Rot270_SC_SA_TC (DefArgs) { StepFunc<X_Rot270_SC, X_Rot270_SA, X_Rot270_TC> (PassArgs); }; 00198 INLINE void StepY_Rot270_SC_SA_TC (DefArgs) { StepFunc<Y_Rot270_SC, Y_Rot270_SA, Y_Rot270_TC> (PassArgs); }; 00199 00200 INLINE void StepX_Flip_X_TC (DefArgs) { StepFunc<X_Flip_X_TC> (PassArgs); }; 00201 INLINE void StepY_Flip_X_TC (DefArgs) { StepFunc<Y_Flip_X_TC> (PassArgs); }; 00202 INLINE void StepX_Flip_X_TA (DefArgs) { StepFunc<X_Flip_X_TA> (PassArgs); }; 00203 INLINE void StepY_Flip_X_TA (DefArgs) { StepFunc<Y_Flip_X_TA> (PassArgs); }; 00204 INLINE void StepX_Flip_X_SC_TC (DefArgs) { StepFunc<X_Flip_X_SC, X_Flip_X_TC> (PassArgs); }; 00205 INLINE void StepY_Flip_X_SC_TC (DefArgs) { StepFunc<Y_Flip_X_SC, Y_Flip_X_TC> (PassArgs); }; 00206 INLINE void StepX_Flip_X_SA_TA (DefArgs) { StepFunc<X_Flip_X_SA, X_Flip_X_TA> (PassArgs); }; 00207 INLINE void StepY_Flip_X_SA_TA (DefArgs) { StepFunc<Y_Flip_X_SA, Y_Flip_X_TA> (PassArgs); }; 00208 INLINE void StepX_Flip_X_SA_TC (DefArgs) { StepFunc<X_Flip_X_SA, X_Flip_X_TC> (PassArgs); }; 00209 INLINE void StepY_Flip_X_SA_TC (DefArgs) { StepFunc<Y_Flip_X_SA, Y_Flip_X_TC> (PassArgs); }; 00210 INLINE void StepX_Flip_X_SC_SA_TC (DefArgs) { StepFunc<X_Flip_X_SC, X_Flip_X_SA, X_Flip_X_TC> (PassArgs); }; 00211 INLINE void StepY_Flip_X_SC_SA_TC (DefArgs) { StepFunc<Y_Flip_X_SC, Y_Flip_X_SA, Y_Flip_X_TC> (PassArgs); }; 00212 00213 INLINE void StepX_Flip_Y_TC (DefArgs) { StepFunc<X_Flip_Y_TC> (PassArgs); }; 00214 INLINE void StepY_Flip_Y_TC (DefArgs) { StepFunc<Y_Flip_Y_TC> (PassArgs); }; 00215 INLINE void StepX_Flip_Y_TA (DefArgs) { StepFunc<X_Flip_Y_TA> (PassArgs); }; 00216 INLINE void StepY_Flip_Y_TA (DefArgs) { StepFunc<Y_Flip_Y_TA> (PassArgs); }; 00217 INLINE void StepX_Flip_Y_SC_TC (DefArgs) { StepFunc<X_Flip_Y_SC, X_Flip_Y_TC> (PassArgs); }; 00218 INLINE void StepY_Flip_Y_SC_TC (DefArgs) { StepFunc<Y_Flip_Y_SC, Y_Flip_Y_TC> (PassArgs); }; 00219 INLINE void StepX_Flip_Y_SA_TA (DefArgs) { StepFunc<X_Flip_Y_SA, X_Flip_Y_TA> (PassArgs); }; 00220 INLINE void StepY_Flip_Y_SA_TA (DefArgs) { StepFunc<Y_Flip_Y_SA, Y_Flip_Y_TA> (PassArgs); }; 00221 INLINE void StepX_Flip_Y_SA_TC (DefArgs) { StepFunc<X_Flip_Y_SA, X_Flip_Y_TC> (PassArgs); }; 00222 INLINE void StepY_Flip_Y_SA_TC (DefArgs) { StepFunc<Y_Flip_Y_SA, Y_Flip_Y_TC> (PassArgs); }; 00223 INLINE void StepX_Flip_Y_SC_SA_TC (DefArgs) { StepFunc<X_Flip_Y_SC, X_Flip_Y_SA, X_Flip_Y_TC> (PassArgs); }; 00224 INLINE void StepY_Flip_Y_SC_SA_TC (DefArgs) { StepFunc<Y_Flip_Y_SC, Y_Flip_Y_SA, Y_Flip_Y_TC> (PassArgs); }; 00225 00226 #undef DefArgs 00227 #undef PassArgs 00228 00229 private: 00230 INLINE void X_Normal_TC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetColor++; }; 00231 INLINE void Y_Normal_TC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetColor+=stepArgs.targetRowStep; }; 00232 INLINE void X_Normal_TA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetAlpha++; }; 00233 INLINE void Y_Normal_TA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetAlpha+=stepArgs.targetRowStep; }; 00234 INLINE void X_Normal_SC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceColor++; }; 00235 INLINE void Y_Normal_SC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceColor+=stepArgs.sourceRowStep; }; 00236 INLINE void X_Normal_SA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceAlpha++; }; 00237 INLINE void Y_Normal_SA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceAlpha+=stepArgs.sourceRowStep; }; 00238 00239 INLINE void X_Rot090_TC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetColor++; }; 00240 INLINE void Y_Rot090_TC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetColor+=stepArgs.targetRowStep; }; 00241 INLINE void X_Rot090_TA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetAlpha++; }; 00242 INLINE void Y_Rot090_TA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetAlpha+=stepArgs.targetRowStep; }; 00243 INLINE void X_Rot090_SC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceColor-=stepArgs.sourceHPitch; }; 00244 INLINE void Y_Rot090_SC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceColor+=stepArgs.sourceRowStep; }; 00245 INLINE void X_Rot090_SA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceAlpha-=stepArgs.sourceHPitch; }; 00246 INLINE void Y_Rot090_SA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceAlpha+=stepArgs.sourceRowStep;}; 00247 00248 INLINE void X_Rot180_TC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetColor++; }; 00249 INLINE void Y_Rot180_TC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetColor+=stepArgs.targetRowStep; }; 00250 INLINE void X_Rot180_TA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetAlpha++; }; 00251 INLINE void Y_Rot180_TA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetAlpha+=stepArgs.targetRowStep; }; 00252 INLINE void X_Rot180_SC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceColor--; }; 00253 INLINE void Y_Rot180_SC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceColor+=stepArgs.sourceRowStep; }; 00254 INLINE void X_Rot180_SA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceAlpha--; }; 00255 INLINE void Y_Rot180_SA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceAlpha+=stepArgs.sourceRowStep; }; 00256 00257 INLINE void X_Rot270_TC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetColor++; }; 00258 INLINE void Y_Rot270_TC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetColor+=stepArgs.targetRowStep; }; 00259 INLINE void X_Rot270_TA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetAlpha++; }; 00260 INLINE void Y_Rot270_TA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetAlpha+=stepArgs.targetRowStep; }; 00261 INLINE void X_Rot270_SC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceColor+=stepArgs.sourceHPitch; }; 00262 INLINE void Y_Rot270_SC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceColor+=stepArgs.sourceRowStep; }; 00263 INLINE void X_Rot270_SA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceAlpha+=stepArgs.sourceHPitch; }; 00264 INLINE void Y_Rot270_SA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceAlpha+=stepArgs.sourceRowStep; }; 00265 00266 INLINE void X_Flip_X_TC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetColor++; }; 00267 INLINE void Y_Flip_X_TC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetColor+=stepArgs.targetRowStep; }; 00268 INLINE void X_Flip_X_TA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetAlpha++; }; 00269 INLINE void Y_Flip_X_TA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetAlpha+=stepArgs.targetRowStep; }; 00270 INLINE void X_Flip_X_SC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceColor--; }; 00271 INLINE void Y_Flip_X_SC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceColor+=stepArgs.sourceRowStep; }; 00272 INLINE void X_Flip_X_SA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceAlpha--; }; 00273 INLINE void Y_Flip_X_SA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceAlpha+=stepArgs.sourceRowStep; }; 00274 00275 INLINE void X_Flip_Y_TC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetColor++; }; 00276 INLINE void Y_Flip_Y_TC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetColor+=stepArgs.targetRowStep; }; 00277 INLINE void X_Flip_Y_TA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetAlpha++; }; 00278 INLINE void Y_Flip_Y_TA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.targetAlpha+=stepArgs.targetRowStep; }; 00279 INLINE void X_Flip_Y_SC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceColor++; }; 00280 INLINE void Y_Flip_Y_SC(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceColor+=stepArgs.sourceRowStep; }; 00281 INLINE void X_Flip_Y_SA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceAlpha++; }; 00282 INLINE void Y_Flip_Y_SA(OpArgs& opArgs, StepArgs& stepArgs) { opArgs.sourceAlpha+=stepArgs.sourceRowStep; }; 00283 00284 template<Step opA> INLINE void StepFunc(OpArgs& opArgs, StepArgs& stepArgs) { opA(opArgs,stepArgs); }; 00285 template<Step opA, Step opB> INLINE void StepFunc(OpArgs& opArgs, StepArgs& stepArgs) { opA(opArgs,stepArgs); opB(opArgs,stepArgs); }; 00286 template<Step opA, Step opB, Step opC> INLINE void StepFunc(OpArgs& opArgs, StepArgs& stepArgs) { opA(opArgs,stepArgs); opB(opArgs,stepArgs); opC(opArgs,stepArgs); }; 00287 template<Step opA, Step opB, Step opC, Step opD> INLINE void StepFunc(OpArgs& opArgs, StepArgs& stepArgs) { opA(opArgs,stepArgs); opB(opArgs,stepArgs); opC(opArgs,stepArgs); opD(opArgs,stepArgs); }; 00288 00289 }; 00290 00291 #include "Blitter.inl" 00292 00293 #endif /* __Blitter_H__ */ 00294
Reproduction/republishing of any material on this site without permission is strictly prohibited.
