rays 0.1.46 → 0.1.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.doc/ext/rays/bitmap.cpp +499 -0
- data/.doc/ext/rays/camera.cpp +2 -2
- data/.doc/ext/rays/defs.cpp +35 -11
- data/.doc/ext/rays/font.cpp +50 -2
- data/.doc/ext/rays/native.cpp +2 -4
- data/.doc/ext/rays/painter.cpp +111 -6
- data/.doc/ext/rays/polygon.cpp +152 -41
- data/.doc/ext/rays/polyline.cpp +89 -10
- data/.doc/ext/rays/rays.cpp +91 -11
- data/.doc/ext/rays/{noise.cpp → util.cpp} +2 -2
- data/.github/workflows/test.yml +0 -1
- data/ChangeLog.md +38 -0
- data/Rakefile +4 -4
- data/VERSION +1 -1
- data/ext/rays/bitmap.cpp +501 -0
- data/ext/rays/camera.cpp +2 -2
- data/ext/rays/defs.cpp +35 -11
- data/ext/rays/defs.h +56 -3
- data/ext/rays/font.cpp +56 -4
- data/ext/rays/native.cpp +2 -4
- data/ext/rays/painter.cpp +125 -11
- data/ext/rays/polygon.cpp +161 -41
- data/ext/rays/polyline.cpp +95 -9
- data/ext/rays/rays.cpp +91 -11
- data/ext/rays/{noise.cpp → util.cpp} +2 -2
- data/include/rays/defs.h +24 -0
- data/include/rays/font.h +17 -3
- data/include/rays/matrix.h +2 -0
- data/include/rays/painter.h +29 -1
- data/include/rays/polygon.h +57 -33
- data/include/rays/polyline.h +20 -1
- data/include/rays/ruby/polygon.h +0 -11
- data/include/rays/ruby/rays.h +4 -0
- data/include/rays/{noise.h → util.h} +2 -2
- data/lib/rays/color.rb +1 -1
- data/lib/rays/font.rb +1 -1
- data/lib/rays/image.rb +1 -1
- data/lib/rays/painter.rb +13 -2
- data/lib/rays/point.rb +1 -1
- data/lib/rays/polygon.rb +54 -16
- data/lib/rays/polyline.rb +54 -8
- data/lib/rays.rb +0 -1
- data/rays.gemspec +2 -2
- data/src/color_space.cpp +2 -2
- data/src/font.cpp +24 -2
- data/src/font.h +8 -1
- data/src/ios/font.mm +88 -27
- data/src/matrix.cpp +8 -0
- data/src/osx/font.mm +90 -28
- data/src/osx/helper.h +2 -2
- data/src/osx/helper.mm +2 -2
- data/src/painter.cpp +227 -90
- data/src/painter.h +11 -3
- data/src/polygon.cpp +588 -205
- data/src/polyline.cpp +154 -28
- data/src/polyline.h +3 -5
- data/src/shader.cpp +36 -4
- data/src/shader.h +1 -1
- data/src/texture.cpp +2 -2
- data/src/{noise.cpp → util.cpp} +1 -1
- data/src/win32/font.cpp +1 -1
- data/test/test_bitmap.rb +16 -2
- data/test/test_color.rb +4 -0
- data/test/test_font.rb +20 -2
- data/test/test_image.rb +18 -18
- data/test/test_point.rb +1 -1
- data/test/test_polygon.rb +52 -45
- data/test/test_polyline.rb +191 -72
- metadata +11 -17
- data/.doc/ext/rays/polygon_line.cpp +0 -97
- data/ext/rays/polygon_line.cpp +0 -100
- data/lib/rays/polygon_line.rb +0 -33
- data/test/test_polygon_line.rb +0 -164
data/src/painter.cpp
CHANGED
@@ -49,6 +49,8 @@ namespace Rays
|
|
49
49
|
|
50
50
|
coord stroke_width;
|
51
51
|
|
52
|
+
float stroke_outset;
|
53
|
+
|
52
54
|
CapType stroke_cap;
|
53
55
|
|
54
56
|
JoinType stroke_join;
|
@@ -63,6 +65,12 @@ namespace Rays
|
|
63
65
|
|
64
66
|
Font font;
|
65
67
|
|
68
|
+
Image texture;
|
69
|
+
|
70
|
+
TexCoordMode texcoord_mode;
|
71
|
+
|
72
|
+
TexCoordWrap texcoord_wrap;
|
73
|
+
|
66
74
|
Shader shader;
|
67
75
|
|
68
76
|
void init ()
|
@@ -71,13 +79,17 @@ namespace Rays
|
|
71
79
|
colors[FILL] .reset(1, 1);
|
72
80
|
colors[STROKE] .reset(1, 0);
|
73
81
|
stroke_width = 0;
|
82
|
+
stroke_outset = 0;
|
74
83
|
stroke_cap = CAP_DEFAULT;
|
75
84
|
stroke_join = JOIN_DEFAULT;
|
76
85
|
miter_limit = JOIN_DEFAULT_MITER_LIMIT;
|
77
86
|
nsegment = 0;
|
78
87
|
blend_mode = BLEND_NORMAL;
|
79
88
|
clip .reset(-1);
|
80
|
-
font =
|
89
|
+
font = get_default_font();
|
90
|
+
texture = Image();
|
91
|
+
texcoord_mode = TEXCOORD_IMAGE;
|
92
|
+
texcoord_wrap = TEXCOORD_CLAMP;
|
81
93
|
shader = Shader();
|
82
94
|
}
|
83
95
|
|
@@ -94,7 +106,7 @@ namespace Rays
|
|
94
106
|
|
95
107
|
const Texture& texture;
|
96
108
|
|
97
|
-
Point
|
109
|
+
Point min, max;
|
98
110
|
|
99
111
|
TextureInfo (
|
100
112
|
const Texture& texture,
|
@@ -102,16 +114,16 @@ namespace Rays
|
|
102
114
|
coord x_max, coord y_max)
|
103
115
|
: texture(texture)
|
104
116
|
{
|
105
|
-
|
106
|
-
|
117
|
+
min.reset(x_min, y_min);
|
118
|
+
max.reset(x_max, y_max);
|
107
119
|
}
|
108
120
|
|
109
121
|
operator bool () const
|
110
122
|
{
|
111
123
|
return
|
112
124
|
texture &&
|
113
|
-
|
114
|
-
|
125
|
+
min.x < max.x &&
|
126
|
+
min.y < max.y;
|
115
127
|
}
|
116
128
|
|
117
129
|
bool operator ! () const
|
@@ -307,13 +319,14 @@ namespace Rays
|
|
307
319
|
return true;
|
308
320
|
}
|
309
321
|
|
310
|
-
void
|
311
|
-
GLenum mode, const Color
|
322
|
+
void draw (
|
323
|
+
GLenum mode, const Color* color,
|
312
324
|
const Coord3* points, size_t npoints,
|
313
325
|
const uint* indices = NULL, size_t nindices = 0,
|
326
|
+
const Color* colors = NULL,
|
314
327
|
const Coord3* texcoords = NULL,
|
315
|
-
const
|
316
|
-
const
|
328
|
+
const TextureInfo* texinfo = NULL,
|
329
|
+
const Shader* shader = NULL)
|
317
330
|
{
|
318
331
|
if (!points || npoints <= 0)
|
319
332
|
argument_error(__FILE__, __LINE__);
|
@@ -321,15 +334,18 @@ namespace Rays
|
|
321
334
|
if (!painting)
|
322
335
|
invalid_state_error(__FILE__, __LINE__, "'painting' should be true.");
|
323
336
|
|
324
|
-
|
325
|
-
|
337
|
+
std::unique_ptr<TextureInfo> ptexinfo;
|
338
|
+
texinfo = setup_texinfo(texinfo, ptexinfo);
|
339
|
+
shader = setup_shader(shader, texinfo);
|
340
|
+
|
341
|
+
const ShaderProgram* program = Shader_get_program(*shader);
|
326
342
|
if (!program || !*program) return;
|
327
343
|
|
328
344
|
ShaderProgram_activate(*program);
|
329
345
|
|
330
|
-
const auto& names = Shader_get_builtin_variable_names(shader);
|
346
|
+
const auto& names = Shader_get_builtin_variable_names(*shader);
|
331
347
|
apply_builtin_uniforms(*program, names, texinfo);
|
332
|
-
apply_attributes(*program, names, points, npoints, texcoords, color);
|
348
|
+
apply_attributes(*program, names, points, npoints, texcoords, color, colors);
|
333
349
|
draw_indices(mode, indices, nindices, npoints);
|
334
350
|
cleanup();
|
335
351
|
|
@@ -342,6 +358,27 @@ namespace Rays
|
|
342
358
|
|
343
359
|
std::vector<GLuint> buffers;
|
344
360
|
|
361
|
+
const TextureInfo* setup_texinfo (const TextureInfo* texinfo, auto& ptr)
|
362
|
+
{
|
363
|
+
if (texinfo) return texinfo;
|
364
|
+
|
365
|
+
const Texture* tex =
|
366
|
+
state.texture ? &Image_get_texture(state.texture) : NULL;
|
367
|
+
if (!tex) return NULL;
|
368
|
+
|
369
|
+
ptr.reset(new TextureInfo(*tex, 0, 0, tex->width(), tex->height()));
|
370
|
+
return ptr.get();
|
371
|
+
}
|
372
|
+
|
373
|
+
const Shader* setup_shader (const Shader* shader, bool for_texture)
|
374
|
+
{
|
375
|
+
if (state.shader) return &state.shader;
|
376
|
+
if (shader) return shader;
|
377
|
+
return for_texture
|
378
|
+
? &Shader_get_default_shader_for_texture(state.texcoord_wrap)
|
379
|
+
: &Shader_get_default_shader_for_shape();
|
380
|
+
}
|
381
|
+
|
345
382
|
void apply_builtin_uniforms (
|
346
383
|
const ShaderProgram& program, const ShaderBuiltinVariableNames& names,
|
347
384
|
const TextureInfo* texinfo)
|
@@ -351,9 +388,10 @@ namespace Rays
|
|
351
388
|
Matrix texcoord_matrix(1);
|
352
389
|
if (texture && *texture)
|
353
390
|
{
|
391
|
+
bool normal = state.texcoord_mode == TEXCOORD_NORMAL;
|
354
392
|
texcoord_matrix.scale(
|
355
|
-
1.0 / texture->reserved_width(),
|
356
|
-
1.0 / texture->reserved_height());
|
393
|
+
(normal ? texture->width() : 1.0) / texture->reserved_width(),
|
394
|
+
(normal ? texture->height() : 1.0) / texture->reserved_height());
|
357
395
|
}
|
358
396
|
|
359
397
|
for (const auto& name : names.uniform_position_matrix_names)
|
@@ -371,24 +409,27 @@ namespace Rays
|
|
371
409
|
|
372
410
|
if (!texinfo || !texture || !*texture) return;
|
373
411
|
|
412
|
+
coord tw = texture->reserved_width();
|
413
|
+
coord th = texture->reserved_height();
|
414
|
+
Point min(texinfo->min.x / tw, texinfo->min.y / th);
|
415
|
+
Point max(texinfo->max.x / tw, texinfo->max.y / th);
|
416
|
+
Point offset( 1 / tw, 1 / th);
|
417
|
+
|
374
418
|
for (const auto& name : names.uniform_texcoord_min_names)
|
375
419
|
{
|
376
420
|
apply_uniform(program, name, [&](GLint loc) {
|
377
|
-
Point min = texcoord_matrix * texinfo->texcoord_min;
|
378
421
|
glUniform3fv(loc, 1, min.array);
|
379
422
|
});
|
380
423
|
}
|
381
424
|
for (const auto& name : names.uniform_texcoord_max_names)
|
382
425
|
{
|
383
426
|
apply_uniform(program, name, [&](GLint loc) {
|
384
|
-
Point max = texcoord_matrix * texinfo->texcoord_max;
|
385
427
|
glUniform3fv(loc, 1, max.array);
|
386
428
|
});
|
387
429
|
}
|
388
430
|
for (const auto& name : names.uniform_texcoord_offset_names)
|
389
431
|
{
|
390
432
|
apply_uniform(program, name, [&](GLint loc) {
|
391
|
-
Point offset(1.0 / texture->width(), 1.0 / texture->height());
|
392
433
|
glUniform3fv(loc, 1, offset.array);
|
393
434
|
});
|
394
435
|
}
|
@@ -409,9 +450,10 @@ namespace Rays
|
|
409
450
|
void apply_attributes (
|
410
451
|
const ShaderProgram& program, const ShaderBuiltinVariableNames& names,
|
411
452
|
const Coord3* points, size_t npoints, const Coord3* texcoords,
|
412
|
-
const Color
|
453
|
+
const Color* color, const Color* colors)
|
413
454
|
{
|
414
|
-
assert(
|
455
|
+
assert(npoints > 0);
|
456
|
+
assert(!!color != !!colors);
|
415
457
|
|
416
458
|
apply_attribute(
|
417
459
|
program, names.attribute_position_names,
|
@@ -421,21 +463,30 @@ namespace Rays
|
|
421
463
|
program, names.attribute_texcoord_names,
|
422
464
|
texcoords ? texcoords : points, npoints);
|
423
465
|
|
424
|
-
|
425
|
-
// to fix that GL 2.1 with glVertexAttrib4fv() draws nothing
|
426
|
-
// with specific glsl 'attribute' name.
|
427
|
-
std::vector<Color> colors(npoints, color);
|
428
|
-
apply_attribute(
|
429
|
-
program, names.attribute_color_names,
|
430
|
-
(const Coord4*) &colors[0], npoints);
|
431
|
-
#else
|
432
|
-
for (const auto& name : names.attribute_color_names)
|
466
|
+
if (colors)
|
433
467
|
{
|
434
|
-
apply_attribute(
|
435
|
-
|
436
|
-
|
468
|
+
apply_attribute(
|
469
|
+
program, names.attribute_color_names,
|
470
|
+
colors, npoints);
|
437
471
|
}
|
472
|
+
else if (color)
|
473
|
+
{
|
474
|
+
#if defined(GL_VERSION_2_1) && !defined(GL_VERSION_3_0)
|
475
|
+
// to fix that GL 2.1 with glVertexAttrib4fv() draws nothing
|
476
|
+
// with specific glsl 'attribute' name.
|
477
|
+
std::vector<Color> colors_(npoints, *color);
|
478
|
+
apply_attribute(
|
479
|
+
program, names.attribute_color_names,
|
480
|
+
(const Coord4*) &colors_[0], npoints);
|
481
|
+
#else
|
482
|
+
for (const auto& name : names.attribute_color_names)
|
483
|
+
{
|
484
|
+
apply_attribute(program, name, [&](GLint loc) {
|
485
|
+
glVertexAttrib4fv(loc, color->array);
|
486
|
+
});
|
487
|
+
}
|
438
488
|
#endif
|
489
|
+
}
|
439
490
|
}
|
440
491
|
|
441
492
|
template <typename CoordN>
|
@@ -554,52 +605,27 @@ namespace Rays
|
|
554
605
|
};// Painter::Data
|
555
606
|
|
556
607
|
|
557
|
-
|
558
|
-
|
559
|
-
Painter* painter,
|
560
|
-
const
|
561
|
-
|
562
|
-
|
563
|
-
const Coord3* points, size_t npoints,
|
564
|
-
const uint* indices = NULL, size_t nindices = 0,
|
565
|
-
const Coord3* texcoords = NULL,
|
566
|
-
const Shader& default_shader = Shader_get_default_shader_for_shape(),
|
567
|
-
const TextureInfo* texinfo = NULL)
|
608
|
+
void
|
609
|
+
Painter_draw (
|
610
|
+
Painter* painter, GLenum mode, const Color& color,
|
611
|
+
const Coord3* points, size_t npoints,
|
612
|
+
const uint* indices, size_t nindices,
|
613
|
+
const Coord3* texcoords)
|
568
614
|
{
|
569
|
-
|
570
|
-
|
571
|
-
bool offset = offset_x != 0 || offset_y != 0;
|
572
|
-
if (offset)
|
573
|
-
{
|
574
|
-
painter->push_matrix();
|
575
|
-
painter->translate(offset_x, offset_y);
|
576
|
-
}
|
577
|
-
|
578
|
-
Color color;
|
579
|
-
for (int type = COLOR_TYPE_BEGIN; type < COLOR_TYPE_END; ++type)
|
580
|
-
{
|
581
|
-
if ((nofill && type == FILL) || (nostroke && type == STROKE))
|
582
|
-
continue;
|
583
|
-
|
584
|
-
if (!painter->self->get_color(&color, (ColorType) type))
|
585
|
-
continue;
|
586
|
-
|
587
|
-
painter->self->draw_polygon(
|
588
|
-
modes[type], color, points, npoints, indices, nindices, texcoords,
|
589
|
-
default_shader, texinfo);
|
590
|
-
}
|
591
|
-
|
592
|
-
if (offset)
|
593
|
-
painter->pop_matrix();
|
615
|
+
painter->self->draw(
|
616
|
+
mode, &color, points, npoints, indices, nindices, NULL, texcoords);
|
594
617
|
}
|
595
618
|
|
596
619
|
void
|
597
|
-
|
598
|
-
Painter* painter, GLenum mode,
|
620
|
+
Painter_draw (
|
621
|
+
Painter* painter, GLenum mode,
|
599
622
|
const Coord3* points, size_t npoints,
|
600
|
-
const uint* indices, size_t nindices
|
623
|
+
const uint* indices, size_t nindices,
|
624
|
+
const Color* colors,
|
625
|
+
const Coord3* texcoords)
|
601
626
|
{
|
602
|
-
painter->self->
|
627
|
+
painter->self->draw(
|
628
|
+
mode, NULL, points, npoints, indices, nindices, colors, texcoords);
|
603
629
|
}
|
604
630
|
|
605
631
|
|
@@ -789,33 +815,82 @@ namespace Rays
|
|
789
815
|
if (Polygon_triangulate(&triangles, polygon))
|
790
816
|
{
|
791
817
|
for (size_t i = 0; i < triangles.size(); i += 3)
|
792
|
-
|
793
|
-
painter->self->draw_polygon(
|
794
|
-
GL_LINE_LOOP, invert_color, &triangles[i], 3);
|
795
|
-
}
|
818
|
+
painter->self->draw(GL_LINE_LOOP, &invert_color, &triangles[i], 3);
|
796
819
|
}
|
797
820
|
#endif
|
798
821
|
}
|
799
822
|
|
800
|
-
void
|
801
|
-
|
823
|
+
static void
|
824
|
+
draw_polygon (
|
825
|
+
Painter* painter, const Polygon& polygon,
|
826
|
+
coord x, coord y, coord width = 0, coord height = 0, bool resize = false)
|
802
827
|
{
|
828
|
+
Painter::Data* self = painter->self.get();
|
829
|
+
|
803
830
|
if (!self->painting)
|
804
831
|
invalid_state_error(__FILE__, __LINE__, "painting flag should be true.");
|
805
832
|
|
806
833
|
if (!self->state.has_color())
|
807
834
|
return;
|
808
835
|
|
836
|
+
bool translate = x != 0 || y != 0;
|
837
|
+
Matrix matrix(nullptr);
|
838
|
+
bool backup = false;
|
839
|
+
|
840
|
+
if (translate || resize)
|
841
|
+
{
|
842
|
+
matrix = self->position_matrix;
|
843
|
+
backup = true;
|
844
|
+
|
845
|
+
if (translate)
|
846
|
+
self->position_matrix.translate(x, y);
|
847
|
+
|
848
|
+
if (resize)
|
849
|
+
{
|
850
|
+
const Bounds& b = polygon.bounds();
|
851
|
+
self->position_matrix.scale(width / b.width, height / b.height);
|
852
|
+
}
|
853
|
+
}
|
854
|
+
|
809
855
|
Color color;
|
810
856
|
|
811
857
|
if (self->get_color(&color, FILL))
|
812
858
|
{
|
813
|
-
Polygon_fill(polygon,
|
814
|
-
debug_draw_triangulation(
|
859
|
+
Polygon_fill(polygon, painter, color);
|
860
|
+
debug_draw_triangulation(painter, polygon, color);
|
815
861
|
}
|
816
862
|
|
817
863
|
if (self->get_color(&color, STROKE))
|
818
|
-
Polygon_stroke(polygon,
|
864
|
+
Polygon_stroke(polygon, painter, color);
|
865
|
+
|
866
|
+
if (backup)
|
867
|
+
self->position_matrix = matrix;
|
868
|
+
}
|
869
|
+
|
870
|
+
void
|
871
|
+
Painter::polygon (const Polygon& polygon, const coord x, coord y)
|
872
|
+
{
|
873
|
+
draw_polygon(this, polygon, x, y);
|
874
|
+
}
|
875
|
+
|
876
|
+
void
|
877
|
+
Painter::polygon (const Polygon& polygon, const Point& position)
|
878
|
+
{
|
879
|
+
draw_polygon(this, polygon, position.x, position.y);
|
880
|
+
}
|
881
|
+
|
882
|
+
void
|
883
|
+
Painter::polygon (
|
884
|
+
const Polygon& polygon, coord x, coord y, coord width, coord height)
|
885
|
+
{
|
886
|
+
draw_polygon(this, polygon, x, y, width, height, true);
|
887
|
+
}
|
888
|
+
|
889
|
+
void
|
890
|
+
Painter::polygon (const Polygon& polygon, const Bounds& bounds)
|
891
|
+
{
|
892
|
+
draw_polygon(
|
893
|
+
this, polygon, bounds.x, bounds.y, bounds.width, bounds.height, true);
|
819
894
|
}
|
820
895
|
|
821
896
|
void
|
@@ -960,7 +1035,8 @@ namespace Rays
|
|
960
1035
|
Painter* painter, const Image& image,
|
961
1036
|
coord src_x, coord src_y, coord src_w, coord src_h,
|
962
1037
|
coord dst_x, coord dst_y, coord dst_w, coord dst_h,
|
963
|
-
bool
|
1038
|
+
bool nofill = false, bool nostroke = false,
|
1039
|
+
const Shader* shader = NULL)
|
964
1040
|
{
|
965
1041
|
static const GLenum MODES[] = {GL_TRIANGLE_FAN, GL_LINE_LOOP};
|
966
1042
|
|
@@ -996,12 +1072,19 @@ namespace Rays
|
|
996
1072
|
|
997
1073
|
TextureInfo texinfo(texture, src_x, src_y, src_x + src_w, src_y + src_h);
|
998
1074
|
|
999
|
-
|
1000
|
-
|
1075
|
+
Color color;
|
1076
|
+
for (int type = COLOR_TYPE_BEGIN; type < COLOR_TYPE_END; ++type)
|
1077
|
+
{
|
1078
|
+
if ((nofill && type == FILL) || (nostroke && type == STROKE))
|
1079
|
+
continue;
|
1001
1080
|
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1081
|
+
if (!painter->self->get_color(&color, (ColorType) type))
|
1082
|
+
continue;
|
1083
|
+
|
1084
|
+
painter->self->draw(
|
1085
|
+
MODES[type], &color, points, 4, NULL, 0, NULL, texcoords,
|
1086
|
+
&texinfo, shader);
|
1087
|
+
}
|
1005
1088
|
}
|
1006
1089
|
|
1007
1090
|
void
|
@@ -1174,7 +1257,7 @@ namespace Rays
|
|
1174
1257
|
painter, self->text_image,
|
1175
1258
|
0, 0, str_w, str_h,
|
1176
1259
|
x, y, str_w, str_h,
|
1177
|
-
true, &Shader_get_shader_for_text());
|
1260
|
+
false, true, &Shader_get_shader_for_text());
|
1178
1261
|
|
1179
1262
|
debug_draw_text(painter, font, x, y, str_w / density, str_h / density);
|
1180
1263
|
}
|
@@ -1310,6 +1393,18 @@ namespace Rays
|
|
1310
1393
|
return self->state.stroke_width;
|
1311
1394
|
}
|
1312
1395
|
|
1396
|
+
void
|
1397
|
+
Painter::set_stroke_outset (float outset)
|
1398
|
+
{
|
1399
|
+
self->state.stroke_outset = outset;
|
1400
|
+
}
|
1401
|
+
|
1402
|
+
float
|
1403
|
+
Painter::stroke_outset () const
|
1404
|
+
{
|
1405
|
+
return self->state.stroke_outset;
|
1406
|
+
}
|
1407
|
+
|
1313
1408
|
void
|
1314
1409
|
Painter::set_stroke_cap (CapType cap)
|
1315
1410
|
{
|
@@ -1455,7 +1550,7 @@ namespace Rays
|
|
1455
1550
|
{
|
1456
1551
|
return
|
1457
1552
|
font.size() == size &&
|
1458
|
-
font.name() == (name ? name :
|
1553
|
+
font.name() == (name ? name : get_default_font().name().c_str());
|
1459
1554
|
}
|
1460
1555
|
|
1461
1556
|
void
|
@@ -1478,6 +1573,48 @@ namespace Rays
|
|
1478
1573
|
return self->state.font;
|
1479
1574
|
}
|
1480
1575
|
|
1576
|
+
void
|
1577
|
+
Painter::set_texture (const Image& image)
|
1578
|
+
{
|
1579
|
+
self->state.texture = image;
|
1580
|
+
}
|
1581
|
+
|
1582
|
+
void
|
1583
|
+
Painter::no_texture ()
|
1584
|
+
{
|
1585
|
+
self->state.texture = Image();
|
1586
|
+
}
|
1587
|
+
|
1588
|
+
const Image&
|
1589
|
+
Painter::texture () const
|
1590
|
+
{
|
1591
|
+
return self->state.texture;
|
1592
|
+
}
|
1593
|
+
|
1594
|
+
void
|
1595
|
+
Painter::set_texcoord_mode (TexCoordMode mode)
|
1596
|
+
{
|
1597
|
+
self->state.texcoord_mode = mode;
|
1598
|
+
}
|
1599
|
+
|
1600
|
+
TexCoordMode
|
1601
|
+
Painter::texcoord_mode () const
|
1602
|
+
{
|
1603
|
+
return self->state.texcoord_mode;
|
1604
|
+
}
|
1605
|
+
|
1606
|
+
void
|
1607
|
+
Painter::set_texcoord_wrap (TexCoordWrap wrap)
|
1608
|
+
{
|
1609
|
+
self->state.texcoord_wrap = wrap;
|
1610
|
+
}
|
1611
|
+
|
1612
|
+
TexCoordWrap
|
1613
|
+
Painter::texcoord_wrap () const
|
1614
|
+
{
|
1615
|
+
return self->state.texcoord_wrap;
|
1616
|
+
}
|
1617
|
+
|
1481
1618
|
void
|
1482
1619
|
Painter::set_shader (const Shader& shader)
|
1483
1620
|
{
|
data/src/painter.h
CHANGED
@@ -12,10 +12,18 @@ namespace Rays
|
|
12
12
|
{
|
13
13
|
|
14
14
|
|
15
|
-
void
|
15
|
+
void Painter_draw (
|
16
16
|
Painter* painter, GLenum mode, const Color& color,
|
17
|
-
const Coord3* points,
|
18
|
-
const uint* indices
|
17
|
+
const Coord3* points, size_t npoints,
|
18
|
+
const uint* indices = NULL, size_t nindices = 0,
|
19
|
+
const Coord3* texcoords = NULL);
|
20
|
+
|
21
|
+
void Painter_draw (
|
22
|
+
Painter* painter, GLenum mode,
|
23
|
+
const Coord3* points, size_t npoints,
|
24
|
+
const uint* indices = NULL, size_t nindices = 0,
|
25
|
+
const Color* colors = NULL,
|
26
|
+
const Coord3* texcoords = NULL);
|
19
27
|
|
20
28
|
|
21
29
|
}// Rays
|