9#include "gtest/gtest.h"
14TEST(DisplayListVertices, MakeWithZeroAndNegativeVerticesAndIndices) {
17 EXPECT_NE(vertices1,
nullptr);
18 EXPECT_EQ(vertices1->vertex_count(), 0);
19 EXPECT_EQ(vertices1->vertex_data(),
nullptr);
20 EXPECT_EQ(vertices1->texture_coordinate_data(),
nullptr);
21 EXPECT_EQ(vertices1->colors(),
nullptr);
22 EXPECT_EQ(vertices1->index_count(), 0);
23 EXPECT_EQ(vertices1->indices(),
nullptr);
27 EXPECT_NE(vertices2,
nullptr);
28 EXPECT_EQ(vertices2->vertex_count(), 0);
29 EXPECT_EQ(vertices2->vertex_data(),
nullptr);
30 EXPECT_EQ(vertices2->texture_coordinate_data(),
nullptr);
31 EXPECT_EQ(vertices2->colors(),
nullptr);
32 EXPECT_EQ(vertices2->index_count(), 0);
33 EXPECT_EQ(vertices2->indices(),
nullptr);
38TEST(DisplayListVertices, MakeWithTexAndColorAndIndices) {
54 uint16_t indices[6] = {
62 ASSERT_NE(vertices,
nullptr);
63 ASSERT_NE(vertices->vertex_data(),
nullptr);
64 ASSERT_NE(vertices->texture_coordinate_data(),
nullptr);
65 ASSERT_NE(vertices->colors(),
nullptr);
66 ASSERT_NE(vertices->indices(),
nullptr);
70 ASSERT_EQ(vertices->vertex_count(), 3);
71 for (
int i = 0;
i < 3;
i++) {
72 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
73 ASSERT_EQ(vertices->texture_coordinate_data()[
i], texture_coords[
i]);
74 ASSERT_EQ(vertices->colors()[
i], colors[
i]);
76 ASSERT_EQ(vertices->index_count(), 6);
77 for (
int i = 0;
i < 6;
i++) {
78 ASSERT_EQ(vertices->indices()[
i], indices[
i]);
82TEST(DisplayListVertices, MakeWithTexAndColor) {
102 ASSERT_NE(vertices,
nullptr);
103 ASSERT_NE(vertices->vertex_data(),
nullptr);
104 ASSERT_NE(vertices->texture_coordinate_data(),
nullptr);
105 ASSERT_NE(vertices->colors(),
nullptr);
106 ASSERT_EQ(vertices->indices(),
nullptr);
110 ASSERT_EQ(vertices->vertex_count(), 3);
111 for (
int i = 0;
i < 3;
i++) {
112 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
113 ASSERT_EQ(vertices->texture_coordinate_data()[
i], texture_coords[
i]);
114 ASSERT_EQ(vertices->colors()[
i], colors[
i]);
116 ASSERT_EQ(vertices->index_count(), 0);
119TEST(DisplayListVertices, MakeWithTexAndIndices) {
130 uint16_t indices[6] = {
138 ASSERT_NE(vertices,
nullptr);
139 ASSERT_NE(vertices->vertex_data(),
nullptr);
140 ASSERT_NE(vertices->texture_coordinate_data(),
nullptr);
141 ASSERT_EQ(vertices->colors(),
nullptr);
142 ASSERT_NE(vertices->indices(),
nullptr);
146 ASSERT_EQ(vertices->vertex_count(), 3);
147 for (
int i = 0;
i < 3;
i++) {
148 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
149 ASSERT_EQ(vertices->texture_coordinate_data()[
i], texture_coords[
i]);
151 ASSERT_EQ(vertices->index_count(), 6);
152 for (
int i = 0;
i < 6;
i++) {
153 ASSERT_EQ(vertices->indices()[
i], indices[
i]);
157TEST(DisplayListVertices, MakeWithColorAndIndices) {
168 uint16_t indices[6] = {
176 ASSERT_NE(vertices,
nullptr);
177 ASSERT_NE(vertices->vertex_data(),
nullptr);
178 ASSERT_EQ(vertices->texture_coordinate_data(),
nullptr);
179 ASSERT_NE(vertices->colors(),
nullptr);
180 ASSERT_NE(vertices->indices(),
nullptr);
184 ASSERT_EQ(vertices->vertex_count(), 3);
185 for (
int i = 0;
i < 3;
i++) {
186 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
187 ASSERT_EQ(vertices->colors()[
i], colors[
i]);
189 ASSERT_EQ(vertices->index_count(), 6);
190 for (
int i = 0;
i < 6;
i++) {
191 ASSERT_EQ(vertices->indices()[
i], indices[
i]);
195TEST(DisplayListVertices, MakeWithTex) {
210 ASSERT_NE(vertices,
nullptr);
211 ASSERT_NE(vertices->vertex_data(),
nullptr);
212 ASSERT_NE(vertices->texture_coordinate_data(),
nullptr);
213 ASSERT_EQ(vertices->colors(),
nullptr);
214 ASSERT_EQ(vertices->indices(),
nullptr);
218 ASSERT_EQ(vertices->vertex_count(), 3);
219 for (
int i = 0;
i < 3;
i++) {
220 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
221 ASSERT_EQ(vertices->texture_coordinate_data()[
i], texture_coords[
i]);
223 ASSERT_EQ(vertices->index_count(), 0);
226TEST(DisplayListVertices, MakeWithColor) {
241 ASSERT_NE(vertices,
nullptr);
242 ASSERT_NE(vertices->vertex_data(),
nullptr);
243 ASSERT_EQ(vertices->texture_coordinate_data(),
nullptr);
244 ASSERT_NE(vertices->colors(),
nullptr);
245 ASSERT_EQ(vertices->indices(),
nullptr);
249 ASSERT_EQ(vertices->vertex_count(), 3);
250 for (
int i = 0;
i < 3;
i++) {
251 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
252 ASSERT_EQ(vertices->colors()[
i], colors[
i]);
254 ASSERT_EQ(vertices->index_count(), 0);
257TEST(DisplayListVertices, MakeWithIndices) {
263 uint16_t indices[6] = {
271 ASSERT_NE(vertices,
nullptr);
272 ASSERT_NE(vertices->vertex_data(),
nullptr);
273 ASSERT_EQ(vertices->texture_coordinate_data(),
nullptr);
274 ASSERT_EQ(vertices->colors(),
nullptr);
275 ASSERT_NE(vertices->indices(),
nullptr);
279 ASSERT_EQ(vertices->vertex_count(), 3);
280 for (
int i = 0;
i < 3;
i++) {
281 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
283 ASSERT_EQ(vertices->index_count(), 6);
284 for (
int i = 0;
i < 6;
i++) {
285 ASSERT_EQ(vertices->indices()[
i], indices[
i]);
289TEST(DisplayListVertices, MakeWithNoOptionalData) {
299 ASSERT_NE(vertices,
nullptr);
300 ASSERT_NE(vertices->vertex_data(),
nullptr);
301 ASSERT_EQ(vertices->texture_coordinate_data(),
nullptr);
302 ASSERT_EQ(vertices->colors(),
nullptr);
303 ASSERT_EQ(vertices->indices(),
nullptr);
307 ASSERT_EQ(vertices->vertex_count(), 3);
308 for (
int i = 0;
i < 3;
i++) {
309 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
311 ASSERT_EQ(vertices->index_count(), 0);
314TEST(DisplayListVertices, MakeWithIndicesButZeroIndexCount) {
320 uint16_t indices[6] = {
328 ASSERT_NE(vertices,
nullptr);
329 ASSERT_NE(vertices->vertex_data(),
nullptr);
330 ASSERT_EQ(vertices->texture_coordinate_data(),
nullptr);
331 ASSERT_EQ(vertices->colors(),
nullptr);
332 ASSERT_EQ(vertices->indices(),
nullptr);
336 ASSERT_EQ(vertices->vertex_count(), 3);
337 for (
int i = 0;
i < 3;
i++) {
338 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
340 ASSERT_EQ(vertices->index_count(), 0);
343TEST(DisplayListVertices, MakeWithIndicesButNegativeIndexCount) {
349 uint16_t indices[6] = {
357 ASSERT_NE(vertices,
nullptr);
358 ASSERT_NE(vertices->vertex_data(),
nullptr);
359 ASSERT_EQ(vertices->texture_coordinate_data(),
nullptr);
360 ASSERT_EQ(vertices->colors(),
nullptr);
361 ASSERT_EQ(vertices->indices(),
nullptr);
365 ASSERT_EQ(vertices->vertex_count(), 3);
366 for (
int i = 0;
i < 3;
i++) {
367 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
369 ASSERT_EQ(vertices->index_count(), 0);
374TEST(DisplayListVertices, BuilderFlags) {
409 .has_texture_coordinates);
414TEST(DisplayListVertices, BuildWithZeroAndNegativeVerticesAndIndices) {
417 std::shared_ptr<DlVertices> vertices1 = builder1.
build();
418 EXPECT_NE(vertices1,
nullptr);
419 EXPECT_EQ(vertices1->vertex_count(), 0);
420 EXPECT_EQ(vertices1->vertex_data(),
nullptr);
421 EXPECT_EQ(vertices1->texture_coordinate_data(),
nullptr);
422 EXPECT_EQ(vertices1->colors(),
nullptr);
423 EXPECT_EQ(vertices1->index_count(), 0);
424 EXPECT_EQ(vertices1->indices(),
nullptr);
428 std::shared_ptr<DlVertices> vertices2 = builder2.
build();
429 EXPECT_NE(vertices2,
nullptr);
430 EXPECT_EQ(vertices2->vertex_count(), 0);
431 EXPECT_EQ(vertices2->vertex_data(),
nullptr);
432 EXPECT_EQ(vertices2->texture_coordinate_data(),
nullptr);
433 EXPECT_EQ(vertices2->colors(),
nullptr);
434 EXPECT_EQ(vertices2->index_count(), 0);
435 EXPECT_EQ(vertices2->indices(),
nullptr);
440TEST(DisplayListVertices, BuildWithTexAndColorAndIndices) {
456 uint16_t indices[6] = {
467 std::shared_ptr<DlVertices> vertices = builder.
build();
469 ASSERT_NE(vertices,
nullptr);
470 ASSERT_NE(vertices->vertex_data(),
nullptr);
471 ASSERT_NE(vertices->texture_coordinate_data(),
nullptr);
472 ASSERT_NE(vertices->colors(),
nullptr);
473 ASSERT_NE(vertices->indices(),
nullptr);
477 ASSERT_EQ(vertices->vertex_count(), 3);
478 for (
int i = 0;
i < 3;
i++) {
479 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
480 ASSERT_EQ(vertices->texture_coordinate_data()[
i], texture_coords[
i]);
481 ASSERT_EQ(vertices->colors()[
i], colors[
i]);
483 ASSERT_EQ(vertices->index_count(), 6);
484 for (
int i = 0;
i < 6;
i++) {
485 ASSERT_EQ(vertices->indices()[
i], indices[
i]);
494 std::shared_ptr<DlVertices> vertices2 = builder2.
build();
504TEST(DisplayListVertices, BuildWithTexAndColor) {
526 std::shared_ptr<DlVertices> vertices = builder.
build();
528 ASSERT_NE(vertices,
nullptr);
529 ASSERT_NE(vertices->vertex_data(),
nullptr);
530 ASSERT_NE(vertices->texture_coordinate_data(),
nullptr);
531 ASSERT_NE(vertices->colors(),
nullptr);
532 ASSERT_EQ(vertices->indices(),
nullptr);
536 ASSERT_EQ(vertices->vertex_count(), 3);
537 for (
int i = 0;
i < 3;
i++) {
538 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
539 ASSERT_EQ(vertices->texture_coordinate_data()[
i], texture_coords[
i]);
540 ASSERT_EQ(vertices->colors()[
i], colors[
i]);
542 ASSERT_EQ(vertices->index_count(), 0);
545TEST(DisplayListVertices, BuildWithTexAndIndices) {
556 uint16_t indices[6] = {
566 std::shared_ptr<DlVertices> vertices = builder.
build();
568 ASSERT_NE(vertices,
nullptr);
569 ASSERT_NE(vertices->vertex_data(),
nullptr);
570 ASSERT_NE(vertices->texture_coordinate_data(),
nullptr);
571 ASSERT_EQ(vertices->colors(),
nullptr);
572 ASSERT_NE(vertices->indices(),
nullptr);
576 ASSERT_EQ(vertices->vertex_count(), 3);
577 for (
int i = 0;
i < 3;
i++) {
578 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
579 ASSERT_EQ(vertices->texture_coordinate_data()[
i], texture_coords[
i]);
581 ASSERT_EQ(vertices->index_count(), 6);
582 for (
int i = 0;
i < 6;
i++) {
583 ASSERT_EQ(vertices->indices()[
i], indices[
i]);
587TEST(DisplayListVertices, BuildWithColorAndIndices) {
593 uint32_t colors[3] = {
598 uint16_t indices[6] = {
608 std::shared_ptr<DlVertices> vertices = builder.
build();
610 ASSERT_NE(vertices,
nullptr);
611 ASSERT_NE(vertices->vertex_data(),
nullptr);
612 ASSERT_EQ(vertices->texture_coordinate_data(),
nullptr);
613 ASSERT_NE(vertices->colors(),
nullptr);
614 ASSERT_NE(vertices->indices(),
nullptr);
618 ASSERT_EQ(vertices->vertex_count(), 3);
619 for (
int i = 0;
i < 3;
i++) {
620 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
621 ASSERT_EQ(vertices->colors()[
i].argb(), colors[
i]);
623 ASSERT_EQ(vertices->index_count(), 6);
624 for (
int i = 0;
i < 6;
i++) {
625 ASSERT_EQ(vertices->indices()[
i], indices[
i]);
629TEST(DisplayListVertices, BuildWithTexUsingPoints) {
645 std::shared_ptr<DlVertices> vertices = builder.
build();
647 ASSERT_NE(vertices,
nullptr);
648 ASSERT_NE(vertices->vertex_data(),
nullptr);
649 ASSERT_NE(vertices->texture_coordinate_data(),
nullptr);
650 ASSERT_EQ(vertices->colors(),
nullptr);
651 ASSERT_EQ(vertices->indices(),
nullptr);
655 ASSERT_EQ(vertices->vertex_count(), 3);
656 for (
int i = 0;
i < 3;
i++) {
657 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
658 ASSERT_EQ(vertices->texture_coordinate_data()[
i], texture_coords[
i]);
660 ASSERT_EQ(vertices->index_count(), 0);
663TEST(DisplayListVertices, BuildWithTexUsingFloats) {
669 float texture_coords[6] = {
679 std::shared_ptr<DlVertices> vertices = builder.
build();
681 ASSERT_NE(vertices,
nullptr);
682 ASSERT_NE(vertices->vertex_data(),
nullptr);
683 ASSERT_NE(vertices->texture_coordinate_data(),
nullptr);
684 ASSERT_EQ(vertices->colors(),
nullptr);
685 ASSERT_EQ(vertices->indices(),
nullptr);
689 ASSERT_EQ(vertices->vertex_count(), 3);
690 for (
int i = 0;
i < 3;
i++) {
691 ASSERT_EQ(vertices->vertex_data()[
i].x, coords[
i * 2 + 0]);
692 ASSERT_EQ(vertices->vertex_data()[
i].y, coords[
i * 2 + 1]);
693 ASSERT_EQ(vertices->texture_coordinate_data()[
i].x,
694 texture_coords[
i * 2 + 0]);
695 ASSERT_EQ(vertices->texture_coordinate_data()[
i].y,
696 texture_coords[
i * 2 + 1]);
698 ASSERT_EQ(vertices->index_count(), 0);
701TEST(DisplayListVertices, BuildUsingFloatsSameAsPoints) {
707 DlPoint texture_coord_points[3] = {
713 float coord_floats[6] = {
718 float texture_coord_floats[6] = {
728 std::shared_ptr<DlVertices> vertices_points = builder_points.
build();
734 std::shared_ptr<DlVertices> vertices_floats = builder_floats.
build();
736 TestEquals(*vertices_points, *vertices_floats);
739TEST(DisplayListVertices, BuildWithColor) {
745 uint32_t colors[3] = {
755 std::shared_ptr<DlVertices> vertices = builder.
build();
757 ASSERT_NE(vertices,
nullptr);
758 ASSERT_NE(vertices->vertex_data(),
nullptr);
759 ASSERT_EQ(vertices->texture_coordinate_data(),
nullptr);
760 ASSERT_NE(vertices->colors(),
nullptr);
761 ASSERT_EQ(vertices->indices(),
nullptr);
765 ASSERT_EQ(vertices->vertex_count(), 3);
766 for (
int i = 0;
i < 3;
i++) {
767 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
768 ASSERT_EQ(vertices->colors()[
i].argb(), colors[
i]);
770 ASSERT_EQ(vertices->index_count(), 0);
773TEST(DisplayListVertices, BuildWithIndices) {
779 uint16_t indices[6] = {
787 std::shared_ptr<DlVertices> vertices = builder.
build();
789 ASSERT_NE(vertices,
nullptr);
790 ASSERT_NE(vertices->vertex_data(),
nullptr);
791 ASSERT_EQ(vertices->texture_coordinate_data(),
nullptr);
792 ASSERT_EQ(vertices->colors(),
nullptr);
793 ASSERT_NE(vertices->indices(),
nullptr);
797 ASSERT_EQ(vertices->vertex_count(), 3);
798 for (
int i = 0;
i < 3;
i++) {
799 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
801 ASSERT_EQ(vertices->index_count(), 6);
802 for (
int i = 0;
i < 6;
i++) {
803 ASSERT_EQ(vertices->indices()[
i], indices[
i]);
807TEST(DisplayListVertices, BuildWithNoOptionalData) {
816 std::shared_ptr<DlVertices> vertices = builder.
build();
818 ASSERT_NE(vertices,
nullptr);
819 ASSERT_NE(vertices->vertex_data(),
nullptr);
820 ASSERT_EQ(vertices->texture_coordinate_data(),
nullptr);
821 ASSERT_EQ(vertices->colors(),
nullptr);
822 ASSERT_EQ(vertices->indices(),
nullptr);
826 ASSERT_EQ(vertices->vertex_count(), 3);
827 for (
int i = 0;
i < 3;
i++) {
828 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
830 ASSERT_EQ(vertices->index_count(), 0);
833TEST(DisplayListVertices, BuildWithNegativeIndexCount) {
842 std::shared_ptr<DlVertices> vertices = builder.
build();
844 ASSERT_NE(vertices,
nullptr);
845 ASSERT_NE(vertices->vertex_data(),
nullptr);
846 ASSERT_EQ(vertices->texture_coordinate_data(),
nullptr);
847 ASSERT_EQ(vertices->colors(),
nullptr);
848 ASSERT_EQ(vertices->indices(),
nullptr);
852 ASSERT_EQ(vertices->vertex_count(), 3);
853 for (
int i = 0;
i < 3;
i++) {
854 ASSERT_EQ(vertices->vertex_data()[
i], coords[
i]);
856 ASSERT_EQ(vertices->index_count(), 0);
875 uint16_t indices[6] = {
906 DlPoint wrong_texture_coords[4] = {
924 uint16_t indices[9] = {
929 uint16_t wrong_indices[9] = {
939 std::shared_ptr<DlVertices> vertices2 =
941 texture_coords, colors, 9, indices);
942 TestNotEquals(*vertices1, *vertices2,
"vertex mode differs");
945 std::shared_ptr<DlVertices> vertices2 =
947 texture_coords, colors, 9, indices);
948 TestNotEquals(*vertices1, *vertices2,
"vertex count differs");
951 std::shared_ptr<DlVertices> vertices2 =
953 texture_coords, colors, 9, indices);
954 TestNotEquals(*vertices1, *vertices2,
"vertex coordinates differ");
957 std::shared_ptr<DlVertices> vertices2 =
959 wrong_texture_coords, colors, 9, indices);
960 TestNotEquals(*vertices1, *vertices2,
"texture coordinates differ");
963 std::shared_ptr<DlVertices> vertices2 =
965 texture_coords, wrong_colors, 9, indices);
969 std::shared_ptr<DlVertices> vertices2 =
971 texture_coords, colors, 6, indices);
972 TestNotEquals(*vertices1, *vertices2,
"index count differs");
975 std::shared_ptr<DlVertices> vertices2 =
977 texture_coords, colors, 9, wrong_indices);
A utility class to build up a |DlVertices| object one set of data at a time.
void store_vertices(const DlPoint vertices[])
Copies the indicated list of points as vertices.
void store_indices(const uint16_t indices[])
Copies the indicated list of 16-bit indices as vertex indices.
static constexpr Flags kNone
bool is_valid() const
Returns true iff the underlying object was successfully allocated.
void store_texture_coordinates(const DlPoint points[])
Copies the indicated list of points as texture coordinates.
std::shared_ptr< DlVertices > build()
Finalizes and the constructed DlVertices object.
static constexpr Flags kHasColors
void store_colors(const DlColor colors[])
Copies the indicated list of colors as vertex colors.
static constexpr Flags kHasTextureCoordinates
static std::shared_ptr< DlVertices > Make(DlVertexMode mode, int vertex_count, const DlPoint vertices[], const DlPoint texture_coordinates[], const DlColor colors[], int index_count=0, const uint16_t indices[]=nullptr, const DlRect *bounds=nullptr)
Constructs a DlVector with compact inline storage for all of its required and optional lists of data.
static void TestEquals(const T &source1, const U &source2)
static void TestNotEquals(T &source1, U &source2, const std::string &label)
TEST(NativeAssetsManagerTest, NoAvailableAssets)
@ kTriangles
The vertices are taken 3 at a time to form a triangle.
static constexpr DlColor kMagenta()
static constexpr DlColor kBlue()
static constexpr DlColor kRed()
static constexpr DlColor kGreen()
static constexpr DlColor kCyan()
static constexpr TRect MakeLTRB(Type left, Type top, Type right, Type bottom)
flags to indicate/promise which of the optional texture coordinates or colors will be supplied during...
unsigned has_texture_coordinates