comparison Framework/Scene2D/Internals/CairoFloatTextureRenderer.cpp @ 768:55411e7da2f7

LookupTableTextureSceneLayer
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 23 May 2019 20:04:33 +0200
parents 9e51fb773bbd
children e6850c866469
comparison
equal deleted inserted replaced
767:dce5b067d040 768:55411e7da2f7
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
82 } 83 }
83 84
84 85
85 void CairoFloatTextureRenderer::Render(const AffineTransform2D& transform) 86 void CairoFloatTextureRenderer::Render(const AffineTransform2D& transform)
86 { 87 {
87 cairo_t* cr = target_.GetCairoContext(); 88 CairoColorTextureRenderer::RenderColorTexture(target_, transform, texture_,
88 89 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 } 90 }
115 } 91 }
116 } 92 }