MCPcopy Create free account
hub / github.com/OpenXcom/OpenXcom / ShaderDraw

Function ShaderDraw

src/Engine/ShaderDraw.h:39–110  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

37 */
38template<typename ColorFunc, typename DestType, typename Src0Type, typename Src1Type, typename Src2Type, typename Src3Type>
39static 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

Callers

nothing calls this directly

Calls 12

NothingClass · 0.85
size_xMethod · 0.80
size_yMethod · 0.80
mod_rangeMethod · 0.45
set_rangeMethod · 0.45
mod_yMethod · 0.45
set_yMethod · 0.45
inc_yMethod · 0.45
mod_xMethod · 0.45
set_xMethod · 0.45
inc_xMethod · 0.45
get_refMethod · 0.45

Tested by

no test coverage detected