| 37 | */ |
| 38 | template<typename ColorFunc, typename DestType, typename Src0Type, typename Src1Type, typename Src2Type, typename Src3Type> |
| 39 | static inline void ShaderDraw(const DestType& dest_frame, const Src0Type& src0_frame, const Src1Type& src1_frame, const Src2Type& src2_frame, const Src3Type& src3_frame) |
| 40 | { |
| 41 | //creating helper objects |
| 42 | helper::controler<DestType> dest(dest_frame); |
| 43 | helper::controler<Src0Type> src0(src0_frame); |
| 44 | helper::controler<Src1Type> src1(src1_frame); |
| 45 | helper::controler<Src2Type> src2(src2_frame); |
| 46 | helper::controler<Src3Type> src3(src3_frame); |
| 47 | |
| 48 | //get basic draw range in 2d space |
| 49 | GraphSubset end_temp = dest.get_range(); |
| 50 | |
| 51 | //intersections with src ranges |
| 52 | src0.mod_range(end_temp); |
| 53 | src1.mod_range(end_temp); |
| 54 | src2.mod_range(end_temp); |
| 55 | src3.mod_range(end_temp); |
| 56 | |
| 57 | const GraphSubset end = end_temp; |
| 58 | if(end.size_x() == 0 || end.size_y() == 0) |
| 59 | return; |
| 60 | //set final draw range in 2d space |
| 61 | dest.set_range(end); |
| 62 | src0.set_range(end); |
| 63 | src1.set_range(end); |
| 64 | src2.set_range(end); |
| 65 | src3.set_range(end); |
| 66 | |
| 67 | |
| 68 | int begin_y = 0, end_y = end.size_y(); |
| 69 | //determining iteration range in y-axis |
| 70 | dest.mod_y(begin_y, end_y); |
| 71 | src0.mod_y(begin_y, end_y); |
| 72 | src1.mod_y(begin_y, end_y); |
| 73 | src2.mod_y(begin_y, end_y); |
| 74 | src3.mod_y(begin_y, end_y); |
| 75 | if(begin_y>=end_y) |
| 76 | return; |
| 77 | //set final iteration range |
| 78 | dest.set_y(begin_y, end_y); |
| 79 | src0.set_y(begin_y, end_y); |
| 80 | src1.set_y(begin_y, end_y); |
| 81 | src2.set_y(begin_y, end_y); |
| 82 | src3.set_y(begin_y, end_y); |
| 83 | |
| 84 | //iteration on y-axis |
| 85 | for(int y = end_y-begin_y; y>0; --y, dest.inc_y(), src0.inc_y(), src1.inc_y(), src2.inc_y(), src3.inc_y()) |
| 86 | { |
| 87 | int begin_x = 0, end_x = end.size_x(); |
| 88 | //determining iteration range in x-axis |
| 89 | dest.mod_x(begin_x, end_x); |
| 90 | src0.mod_x(begin_x, end_x); |
| 91 | src1.mod_x(begin_x, end_x); |
| 92 | src2.mod_x(begin_x, end_x); |
| 93 | src3.mod_x(begin_x, end_x); |
| 94 | if(begin_x>=end_x) |
| 95 | continue; |
| 96 | //set final iteration range |
nothing calls this directly
no test coverage detected