Mercurial > hg > orthanc-stone
comparison Framework/Scene2D/Internals/CairoFloatTextureRenderer.cpp @ 860:238693c3bc51 am-dev
merge default -> am-dev
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Mon, 24 Jun 2019 14:35:00 +0200 |
parents | cfb4d39065a4 b8dfd966b5f4 |
children | 6e79e8c9021c |
comparison
equal
deleted
inserted
replaced
856:a6e17a5a39e7 | 860:238693c3bc51 |
---|---|
19 **/ | 19 **/ |
20 | 20 |
21 | 21 |
22 #include "CairoFloatTextureRenderer.h" | 22 #include "CairoFloatTextureRenderer.h" |
23 | 23 |
24 #include "CairoColorTextureRenderer.h" | |
24 #include "../FloatTextureSceneLayer.h" | 25 #include "../FloatTextureSceneLayer.h" |
25 | 26 |
26 namespace OrthancStone | 27 namespace OrthancStone |
27 { | 28 { |
28 namespace Internals | 29 namespace Internals |
69 v = 255; | 70 v = 255; |
70 } | 71 } |
71 | 72 |
72 uint8_t vv = static_cast<uint8_t>(v); | 73 uint8_t vv = static_cast<uint8_t>(v); |
73 | 74 |
75 if (l.IsInverted()) | |
76 { | |
77 vv = 255 - vv; | |
78 } | |
79 | |
74 q[0] = vv; | 80 q[0] = vv; |
75 q[1] = vv; | 81 q[1] = vv; |
76 q[2] = vv; | 82 q[2] = vv; |
77 | 83 |
78 p++; | 84 p++; |
82 } | 88 } |
83 | 89 |
84 | 90 |
85 void CairoFloatTextureRenderer::Render(const AffineTransform2D& transform) | 91 void CairoFloatTextureRenderer::Render(const AffineTransform2D& transform) |
86 { | 92 { |
87 cairo_t* cr = target_.GetCairoContext(); | 93 CairoColorTextureRenderer::RenderColorTexture(target_, transform, texture_, |
88 | 94 textureTransform_, isLinearInterpolation_); |
89 AffineTransform2D t = | |
90 AffineTransform2D::Combine(transform, textureTransform_); | |
91 Matrix h = t.GetHomogeneousMatrix(); | |
92 | |
93 cairo_save(cr); | |
94 | |
95 cairo_matrix_t m; | |
96 cairo_matrix_init(&m, h(0, 0), h(1, 0), h(0, 1), h(1, 1), h(0, 2), h(1, 2)); | |
97 cairo_transform(cr, &m); | |
98 | |
99 cairo_set_operator(cr, CAIRO_OPERATOR_OVER); | |
100 cairo_set_source_surface(cr, texture_.GetObject(), 0, 0); | |
101 | |
102 if (isLinearInterpolation_) | |
103 { | |
104 cairo_pattern_set_filter(cairo_get_source(cr), CAIRO_FILTER_BILINEAR); | |
105 } | |
106 else | |
107 { | |
108 cairo_pattern_set_filter(cairo_get_source(cr), CAIRO_FILTER_NEAREST); | |
109 } | |
110 | |
111 cairo_paint(cr); | |
112 | |
113 cairo_restore(cr); | |
114 } | 95 } |
115 } | 96 } |
116 } | 97 } |