11 #include "3esconnectionmonitor.h" 12 #include "3esserver.h" 13 #include "3esserverutil.h" 15 #include "3escolour.h" 16 #include "3escoordinateframe.h" 17 #include "3esfeature.h" 18 #include "3esmessages.h" 19 #include "3esmeshmessages.h" 20 #include "shapes/3esshapes.h" 38 #define TES_STMT(statement) statement 44 #define TES_IF(condition) if (condition) 50 #define TES_PTR_ID(ptr) static_cast<uint32_t>(reinterpret_cast<uint64_t>(ptr)) 57 #define TES_RGB(r, g, b) tes::Colour(r, g, b) 58 #define TES_RGBA(r, g, b, a) tes::Colour(r, g, b, a) 69 #define TES_COLOUR(name) tes::Colour::Colours[tes::Colour::name] 74 #define TES_COLOUR_I(index) tes::Colour::Colours[index] 80 #define TES_COLOUR_A(name, a) tes::Colour(tes::Colour::Colours[tes::Colour::name], a) 93 #define TES_CATEGORY(server, _name, _categoryId, _parentId, _active) \ 96 tes::CategoryNameMessage msg; \ 97 msg.categoryId = _categoryId; \ 98 msg.parentId = _parentId; \ 99 msg.defaultActive = (_active) ? 1 : 0; \ 100 const size_t nameLen = (_name) ? strlen(_name) : 0u; \ 101 msg.nameLength = (uint16_t)((nameLen <= 0xffffu) ? nameLen : 0xffffu); \ 103 tes::sendMessage(*(server), tes::MtCategory, tes::CategoryNameMessage::MessageId, msg); \ 110 #define TES_SERVER_DECL(server) tes::Server *server = nullptr; 117 #define TES_SETTINGS(settings, ...) tes::ServerSettings settings = tes::ServerSettings(__VA_ARGS__); 118 #define TES_SERVER_INFO(info, infoCoordinateFrame) \ 126 tes::ServerInfoMessage info; \ 127 tes::initDefaultServerInfo(&info); \ 128 info.coordinateFrame = infoCoordinateFrame; 135 #define TES_SERVER_INFO_TIME(info, timeUnit, defaultFrameTime) \ 136 info.timeUnit = timeUnit; \ 137 info.defaultFrameTime = defaultFrameTime; 145 #define TES_SERVER_CREATE(server, settings, info) server = tes::Server::create(settings, info); 153 #define TES_SERVER_START(server, mode) if (server) { (server)->connectionMonitor()->start(mode); } 169 #define TES_SERVER_UPDATE(server, ...) \ 172 (server)->updateTransfers(0); \ 173 (server)->updateFrame(__VA_ARGS__); \ 174 tes::ConnectionMonitor *_conMon = (server)->connectionMonitor(); \ 175 if (_conMon->mode() == tes::ConnectionMonitor::Synchronous) \ 177 _conMon->monitorConnections(); \ 179 _conMon->commitConnections(); \ 187 #define TES_SERVER_START_WAIT(server, timems) \ 188 if ((server) && (server)->connectionMonitor()->waitForConnection(timems) > 0) \ 190 (server)->connectionMonitor()->commitConnections(); \ 195 #define TES_SET_CONNECTION_CALLBACK(server, ...) \ 196 if (server) { (server)->connectionMonitor()->setConnectionCallback(__VA_ARGS__); } 204 #define TES_SERVER_STOP(server) \ 208 (server)->dispose(); \ 209 (server) = nullptr; \ 215 #define TES_ACTIVE(server) ((server) != nullptr && (server)->active()) 216 #define TES_SET_ACTIVE(server, _active) if (server) { (server)->setActive(_active) } 225 #define TES_FEATURE(feature) tes::checkFeature(feature) 226 #define TES_FEATURE_FLAG(feature) tes::featureFlag(feature) 230 #define TES_FEATURES(featureFlags) tes::checkFeatures(featureFlags) 239 #define TES_IF_FEATURES(featureFlags, expression) \ 240 if (tes::checkFeatures(featureFlags)) \ 253 #define TES_REFERENCE_RESOURCE(server, resource) if (server) { (server)->referenceResource(resource); } 259 #define TES_RELEASE_RESOURCE(server, resource) if (server) { (server)->releaseResource(resource); } 265 #define TES_MESH_PLACEHOLDER(id) tes::MeshPlaceholder(id) 272 #define TES_ARROW(server, colour, ...) if (server) { (server)->create(tes::Arrow(__VA_ARGS__).setColour(colour)); } 273 #define TES_ARROW_T(server, colour, ...) if (server) { (server)->create(tes::Arrow(__VA_ARGS__).setColour(colour).setTransparent(true)); } 279 #define TES_ARROW_W(server, colour, ...) if (server) { (server)->create(tes::Arrow(__VA_ARGS__).setColour(colour).setWireframe(true)); } 291 #define TES_BOX(server, colour, ...) if (server) { (server)->create(tes::Box(__VA_ARGS__).setColour(colour)); } 292 #define TES_BOX_T(server, colour, ...) if (server) { (server)->create(tes::Box(__VA_ARGS__).setColour(colour).setTransparent(true)); } 298 #define TES_BOX_W(server, colour, ...) if (server) { (server)->create(tes::Box(__VA_ARGS__).setColour(colour).setWireframe(true)); } 310 #define TES_CAPSULE(server, colour, ...) if (server) { (server)->create(tes::Capsule(__VA_ARGS__).setColour(colour)); } 311 #define TES_CAPSULE_T(server, colour, ...) if (server) { (server)->create(tes::Capsule(__VA_ARGS__).setColour(colour).setTransparent(true)); } 317 #define TES_CAPSULE_W(server, colour, ...) if (server) { (server)->create(tes::Capsule(__VA_ARGS__).setColour(colour).setWireframe(true)); } 329 #define TES_CONE(server, colour, ...) if (server) { (server)->create(tes::Cone(__VA_ARGS__).setColour(colour)); } 330 #define TES_CONE_T(server, colour, ...) if (server) { (server)->create(tes::Cone(__VA_ARGS__).setColour(colour).setTransparent(true)); } 336 #define TES_CONE_W(server, colour, ...) if (server) { (server)->create(tes::Cone(__VA_ARGS__).setColour(colour).setWireframe(true)); } 348 #define TES_CYLINDER(server, colour, ...) if (server) { (server)->create(tes::Cylinder(__VA_ARGS__).setColour(colour)); } 349 #define TES_CYLINDER_T(server, colour, ...) if (server) { (server)->create(tes::Cylinder(__VA_ARGS__).setColour(colour).setTransparent(true)); } 355 #define TES_CYLINDER_W(server, colour, ...) if (server) { (server)->create(tes::Cylinder(__VA_ARGS__).setColour(colour).setWireframe(true)); } 367 #define TES_LINES(server, colour, ...) if (server) { (server)->create(tes::MeshShape(tes::DtLines, ##__VA_ARGS__).setColour(colour)); } 374 #define TES_LINES_E(server, colour, ...) if (server) { (server)->create(tes::MeshShape(tes::DtLines, ##__VA_ARGS__).expandVertices().setColour(colour)); } 382 #define TES_LINE(server, colour, v0, v1, ...) \ 385 const tes::Vector3f _line[2] = { tes::Vector3f(v0), tes::Vector3f(v1) }; \ 386 tes::MeshShape shape(tes::DtLines, _line[0].v, 2, sizeof(_line[0]), ##__VA_ARGS__); shape.setColour(colour); \ 387 (server)->create(shape); \ 394 #define TES_MESHSET(server, ...) if (server) { (server)->create(tes::MeshSet(__VA_ARGS__)); } 401 #define TES_PLANE(server, colour, ...) if (server) { (server)->create(tes::Plane(__VA_ARGS__).setColour(colour)); } 402 #define TES_PLANE_T(server, colour, ...) if (server) { (server)->create(tes::Plane(__VA_ARGS__).setColour(colour).setTransparent(true)); } 408 #define TES_PLANE_W(server, colour, ...) if (server) { (server)->create(tes::Plane(__VA_ARGS__).setColour(colour).setWireframe(true)); } 420 #define TES_POINTCLOUDSHAPE(server, colour, ...) if (server) { (server)->create(tes::PointCloudShape(__VA_ARGS__).setColour(colour)); } 427 #define TES_POINTS(server, colour, ...) if (server) { (server)->create(tes::MeshShape(tes::DtPoints, ##__VA_ARGS__).setColour(colour)); } 434 #define TES_POINTS_E(server, colour, ...) if (server) { (server)->create(tes::MeshShape(tes::DtPoints, ##__VA_ARGS__).expandVertices().setColour(colour)); } 442 #define TES_VOXELS(server, colour, resolution, ...) if (server) { (server)->create(tes::MeshShape(tes::DtVoxels, ##__VA_ARGS__).setUniformNormal(tes::Vector3f(0.5f * resolution)).setColour(colour)); } 449 #define TES_SPHERE(server, colour, ...) if (server) { (server)->create(tes::Sphere(__VA_ARGS__).setColour(colour)); } 450 #define TES_SPHERE_T(server, colour, ...) if (server) { (server)->create(tes::Sphere(__VA_ARGS__).setColour(colour).setTransparent(true)); } 456 #define TES_SPHERE_W(server, colour, ...) if (server) { (server)->create(tes::Sphere(__VA_ARGS__).setColour(colour).setWireframe(true)); } 468 #define TES_STAR(server, colour, ...) if (server) { (server)->create(tes::Star(__VA_ARGS__).setColour(colour)); } 469 #define TES_STAR_T(server, colour, ...) if (server) { (server)->create(tes::Star(__VA_ARGS__).setColour(colour).setTransparent(true)); } 475 #define TES_STAR_W(server, colour, ...) if (server) { (server)->create(tes::Star(__VA_ARGS__).setColour(colour).setWireframe(true)); } 487 #define TES_TEXT2D_SCREEN(server, colour, ...) if (server) { (server)->create(tes::Text2D(__VA_ARGS__).setColour(colour)); } 488 #define TES_TEXT2D_WORLD(server, colour, ...) if (server) { (server)->create(tes::Text2D(__VA_ARGS__).setInWorldSpace(true).setColour(colour)); } 500 #define TES_TEXT3D(server, colour, ...) if (server) { (server)->create(tes::Text3D(__VA_ARGS__).setColour(colour)); } 507 #define TES_TEXT3D_FACING(server, colour, ...) if (server) { (server)->create(tes::Text3D(__VA_ARGS__).setScreenFacing(true).setColour(colour); } 514 #define TES_TRIANGLES(server, colour, ...) \ 515 if (server) { tes::MeshShape shape(tes::DtTriangles, ##__VA_ARGS__); shape.setColour(colour); (server)->create(shape); } 522 #define TES_TRIANGLES_E(server, colour, ...) \ 523 if (server) { tes::MeshShape shape(tes::DtTriangles, ##__VA_ARGS__); shape.expandVertices().setColour(colour); (server)->create(shape); } 530 #define TES_TRIANGLES_N(server, colour, ...) \ 531 if (server) { tes::MeshShape shape(tes::DtTriangles, ##__VA_ARGS__); shape.setCalculateNormals(true).setColour(colour); (server)->create(shape); } 538 #define TES_TRIANGLES_NE(server, colour, ...) \ 539 if (server) { tes::MeshShape shape(tes::DtTriangles, ##__VA_ARGS__); shape.expandVertices().setCalculateNormals(true).setColour(colour); (server)->create(shape); } 546 #define TES_TRIANGLES_W(server, colour, ...) \ 547 if (server) { tes::MeshShape shape(tes::DtTriangles, ##__VA_ARGS__); shape.setWireframe(true); shape.setColour(colour); (server)->create(shape); } 554 #define TES_TRIANGLES_WE(server, colour, ...) \ 555 if (server) { tes::MeshShape shape(tes::DtTriangles, ##__VA_ARGS__); shape.expandVertices().setWireframe(true); shape.setColour(colour); (server)->create(shape); } 562 #define TES_TRIANGLES_T(server, colour, ...) \ 563 if (server) { tes::MeshShape shape(tes::DtTriangles, ##__VA_ARGS__); shape.setTransparent(true); shape.setColour(colour); (server)->create(shape); } 570 #define TES_TRIANGLES_TE(server, colour, ...) \ 571 if (server) { tes::MeshShape shape(tes::DtTriangles, ##__VA_ARGS__); shape.expandVertices().setTransparent(true); shape.setColour(colour); (server)->create(shape); } 584 #define TES_TRIANGLE(server, colour, v0, v1, v2, ...) \ 587 const tes::Vector3f _tri[3] = { tes::Vector3f(v0), tes::Vector3f(v1), tes::Vector3f(v2) }; \ 588 tes::MeshShape shape(tes::DtTriangles, _tri[0].v, 3, sizeof(tes::Vector3f), ##__VA_ARGS__); \ 589 shape.setColour(colour).setTwoSided(true); \ 590 (server)->create(shape); \ 601 #define TES_TRIANGLE_W(server, colour, v0, v1, v2, ...) \ 604 const tes::Vector3f _tri[3] = { tes::Vector3f(v0), tes::Vector3f(v1), tes::Vector3f(v2) }; \ 605 tes::MeshShape shape(tes::DtTriangles, _tri[0].v, 3, sizeof(_tri[0]), ##__VA_ARGS__); shape.setColour(colour); \ 606 shape.setWireframe(true); \ 607 (server)->create(shape); \ 609 #define TES_TRIANGLE_T(server, colour, v0, v1, v2, ...) \ 619 const tes::Vector3f _tri[3] = { tes::Vector3f(v0), tes::Vector3f(v1), tes::Vector3f(v2) }; \ 620 tes::MeshShape shape(tes::DtTriangles, _tri[0].v, 3, sizeof(_tri[0]), ##__VA_ARGS__); \ 621 shape.setColour(colour); \ 622 shape.setTransparent(true).setTwoSided(true); \ 623 (server)->create(shape); \ 640 #define TES_TRIANGLE_I(server, colour, verts, i0, i1, i2, ...) \ 643 const tes::Vector3f _tri[3] = { tes::Vector3f((verts) + (i0 * 3)), tes::Vector3f((verts) + (i1 * 3)), tes::Vector3f((verts) + (i2 * 3)) }; \ 644 tes::MeshShape shape(tes::DtTriangles, _tri[0].v, 3, sizeof(_tri[0]), ##__VA_ARGS__); \ 645 shape.setColour(colour); \ 646 (server)->create(shape); \ 663 #define TES_TRIANGLE_IW(server, colour, verts, i0, i1, i2, ...) \ 666 const tes::Vector3f _tri[3] = { tes::Vector3f((verts) + (i0 * 3)), tes::Vector3f((verts) + (i1 * 3)), tes::Vector3f((verts) + (i2 * 3)) }; \ 667 tes::MeshShape shape(tes::DtTriangles, _tri[0].v, 3, sizeof(_tri[0]), ##__VA_ARGS__); \ 668 shape.setColour(colour); \ 669 shape.setWireframe(true); \ 670 (server)->create(shape); \ 687 #define TES_TRIANGLE_IT(server, colour, verts, i0, i1, i2, ...) \ 690 const tes::Vector3f _tri[3] = { tes::Vector3f((verts) + (i0 * 3)), tes::Vector3f((verts) + (i1 * 3)), tes::Vector3f((verts) + (i2 * 3)) }; \ 691 tes::MeshShape shape(tes::DtTriangles, _tri[0].v, 3, sizeof(_tri[0]), ##__VA_ARGS__); \ 692 shape.setColour(colour); \ 693 shape.setTransparent(true).setTwoSided(true); \ 694 (server)->create(shape); \ 701 #define TES_ARROW_END(server, id) if (server) { (server)->destroy(tes::Arrow(static_cast<uint32_t>(id))); } 702 #define TES_BOX_END(server, id) if (server) { (server)->destroy(tes::Box(static_cast<uint32_t>(id))); } 707 #define TES_CAPSULE_END(server, id) if (server) { (server)->destroy(tes::Capsule(static_cast<uint32_t>(id))); } 712 #define TES_CONE_END(server, id) if (server) { (server)->destroy(tes::Cone(static_cast<uint32_t>(id))); } 717 #define TES_CYLINDER_END(server, id) if (server) { (server)->destroy(tes::Cylinder(static_cast<uint32_t>(id))); } 722 #define TES_LINES_END(server, id) if (server) { (server)->destroy(tes::MeshShape(tes::DtLines, nullptr, 0, 0, static_cast<uint32_t>(id))); } 727 #define TES_MESHSET_END(server, id, resource) if (server) { (server)->destroy(tes::MeshSet(static_cast<uint32_t>(resource, id))); } 734 #define TES_PLANE_END(server, id) if (server) { (server)->destroy(tes::Plane(static_cast<uint32_t>(id))); } 739 #define TES_POINTCLOUDSHAPE_END(server, cloud, id) if (server) { (server)->destroy(tes::PointCloudShape(cloud, static_cast<uint32_t>(id))); } 745 #define TES_POINTS_END(server, id) if (server) { (server)->destroy(tes::MeshShape(tes::DtPoints, nullptr, 0, 0, static_cast<uint32_t>(id))); } 750 #define TES_VOXELS_END(server, id) if (server) { (server)->destroy(tes::MeshShape(tes::DtVoxels, nullptr, 0, 0, static_cast<uint32_t>(id))); } 755 #define TES_SPHERE_END(server, id) if (server) { (server)->destroy(tes::Sphere(static_cast<uint32_t>(id))); } 760 #define TES_STAR_END(server, id) if (server) { (server)->destroy(tes::Star(static_cast<uint32_t>(id))); } 765 #define TES_TEXT2D_END(server, id) if (server) { (server)->destroy(tes::Text2D("", static_cast<uint32_t>(id))); } 770 #define TES_TEXT3D_END(server, id) if (server) { (server)->destroy(tes::Text3D("", static_cast<uint32_t>(id))); } 775 #define TES_TRIANGLES_END(server, id) if (server) { (server)->destroy(tes::MeshShape(tes::DtTriangles, nullptr, 0, 0, static_cast<uint32_t>(id))); } 780 #define TES_TRIANGLE_END(server, id) if (server) { (server)->destroy(tes::MeshShape(tes::DtTriangles, nullptr, 0, 0, static_cast<uint32_t>(id))); } 796 #define TES_POS_UPDATE(server, ShapeType, objectID, pos) \ 797 if (server) { (server)->update(tes::ShapeType(objectID, 0).setPosition(pos).setFlags(tes::OFUpdateMode | tes::OFPosition)); } 805 #define TES_ROT_UPDATE(server, ShapeType, objectID, quaternion) \ 806 if (server) { (server)->update(tes::ShapeType(objectID, 0).setRotation(quaternion).setFlags(tes::OFUpdateMode | tes::OFRotation)); } 814 #define TES_SCALE_UPDATE(server, ShapeType, objectID, scale) \ 815 if (server) { (server)->update(tes::ShapeType(objectID, 0).setScale(scale).setFlags(tes::OFUpdateMode | tes::OFScale)); } 823 #define TES_COLOUR_UPDATE(server, ShapeType, objectID, colour) \ 824 if (server) { (server)->update(tes::ShapeType(objectID, 0).setColour(colour).setFlags(tes::OFUpdateMode | tes::OFColour)); } 832 #define TES_COLOR_UPDATE(server, ShapeType, objectID, colour) \ 833 if (server) { (server)->update(tes::ShapeType(objectID, 0).setColour(colour).setFlags(tes::OFUpdateMode | tes::OFColour)); } 842 #define TES_POSROT_UPDATE(server, ShapeType, objectID, pos, quaternion) \ 843 if (server) { (server)->update(tes::ShapeType(objectID, 0).setPosition(pos).setRotation(quaternion).setFlags(tes::OFUpdateMode | tes::OFPosition | tes::OFRotation)); } 852 #define TES_POSSCALE_UPDATE(server, ShapeType, objectID, pos, scale) \ 853 if (server) { (server)->update(tes::ShapeType(objectID, 0).setPosition(pos).setScale(scale).setFlags(tes::OFUpdateMode | tes::OFPosition | tes::OFRotation)); } 862 #define TES_ROTSCALE_UPDATE(server, ShapeType, objectID, quaternion, scale) \ 863 if (server) { (server)->update(tes::ShapeType(objectID, 0).setRotation(quaternion).setScale(scale).setFlags(tes::OFUpdateMode | tes::OFRotation | tes::OFScale )); } 873 #define TES_PRS_UPDATE(server, ShapeType, objectID, pos, quaternion, scale) \ 874 if (server) { (server)->update(tes::ShapeType(objectID, 0).setPosition(pos).setRotation(quaternion).setScale(scale).setFlags(tes::OFUpdateMode | tes::OFPosition | tes::OFRotation | tes::OFScale )); } 884 #define TES_PRC_UPDATE(server, ShapeType, objectID, pos, quaternion, colour) \ 885 if (server) { (server)->update(tes::ShapeType(objectID, 0).setPosition(pos).setRotation(quaternion).setColour(colour).setFlags(tes::OFUpdateMode | tes::OFPosition | tes::OFRotation | tes::OFColour )); } 895 #define TES_PSC_UPDATE(server, ShapeType, objectID, pos, scale, colour) \ 896 if (server) { (server)->update(tes::ShapeType(objectID, 0).setPosition(pos).setScale(scale).setColour(colour).setFlags(tes::OFUpdateMode | tes::OFPosition | tes::OFScale | tes::OFColour )); } 906 #define TES_RSC_UPDATE(server, ShapeType, objectID, quaternion, scale, colour) \ 907 if (server) { (server)->update(tes::ShapeType(objectID, 0).setRotation(quaternion).setScale(scale).setColour(colour).setFlags(tes::OFUpdateMode | tes::OFRotation | tes::OFScale | tes::OFColour )); } 918 #define TES_PRSC_UPDATE(server, ShapeType, objectID, pos, quaternion, scale, colour) \ 919 if (server) { (server)->update(tes::ShapeType(objectID, 0).setPosition(pos).setRotation(quaternion).setScale(scale).setColour(colour) )); } 923 #define TES_STMT(...) 924 #define TES_IF(...) if (false) 925 #define TES_PTR_ID(...) 927 #define TES_RGBA(...) 928 #define TES_COLOUR(...) 929 #define TES_COLOUR_I(...) 930 #define TES_COLOUR_A(...) 932 #define TES_CATEGORY(...) 933 #define TES_SERVER_DECL(...) 934 #define TES_SETTINGS(...) 935 #define TES_SERVER_INFO(...) 936 #define TES_SERVER_INFO_TIME(...) 937 #define TES_SERVER_CREATE(...) 938 #define TES_SERVER_START(...) 939 #define TES_SERVER_START_WAIT(...) 940 #define TES_SET_CONNECTION_CALLBACK(...) 941 #define TES_SERVER_UPDATE(...) 942 #define TES_SERVER_STOP(...) 943 #define TES_ACTIVE(...) false 944 #define TES_SET_ACTIVE(...) 946 #define TES_FEATURE(...) false 947 #define TES_FEATURE_FLAG(...) 0 948 #define TES_FEATURES(...) 949 #define TES_IF_FEATURES(...) 951 #define TES_REFERENCE_RESOURCE(...) 952 #define TES_RELEASE_RESOURCE(...) 953 #define TES_MESH_PLACEHOLDER(...) 955 #define TES_ARROW(...) 956 #define TES_ARROW_T(...) 957 #define TES_ARROW_W(...) 959 #define TES_BOX_T(...) 960 #define TES_BOX_W(...) 961 #define TES_CAPSULE(...) 962 #define TES_CAPSULE_T(...) 963 #define TES_CAPSULE_W(...) 964 #define TES_CONE(...) 965 #define TES_CONE_T(...) 966 #define TES_CONE_W(...) 967 #define TES_CYLINDER(...) 968 #define TES_CYLINDER_T(...) 969 #define TES_CYLINDER_W(...) 970 #define TES_LINES(...) 971 #define TES_LINES_E(...) 972 #define TES_LINE(...) 973 #define TES_MESHSET(...) 974 #define TES_PLANE(...) 975 #define TES_PLANE_T(...) 976 #define TES_PLANE_W(...) 977 #define TES_POINTCLOUDSHAPE(...) 978 #define TES_POINTS(...) 979 #define TES_POINTS_E(...) 980 #define TES_VOXELS(...) 981 #define TES_SPHERE(...) 982 #define TES_SPHERE_T(...) 983 #define TES_SPHERE_W(...) 984 #define TES_STAR(...) 985 #define TES_STAR_T(...) 986 #define TES_STAR_W(...) 987 #define TES_TEXT2D_SCREEN(...) 988 #define TES_TEXT2D_WORLD(...) 989 #define TES_TEXT3D(...) 990 #define TES_TEXT3D_FACING(...) 991 #define TES_TRIANGLES(...) 992 #define TES_TRIANGLES_E(...) 993 #define TES_TRIANGLES_N(...) 994 #define TES_TRIANGLES_NE(...) 995 #define TES_TRIANGLES_W(...) 996 #define TES_TRIANGLES_WE(...) 997 #define TES_TRIANGLES_T(...) 998 #define TES_TRIANGLES_TE(...) 999 #define TES_TRIANGLE(...) 1000 #define TES_TRIANGLE_W(...) 1001 #define TES_TRIANGLE_I(...) 1002 #define TES_TRIANGLE_T(...) 1003 #define TES_TRIANGLE_IT(...) 1004 #define TES_TRIANGLE_IW(...) 1006 #define TES_ARROW_END(...) 1007 #define TES_BOX_END(...) 1008 #define TES_CAPSULE_END(...) 1009 #define TES_CONE_END(...) 1010 #define TES_CYLINDER_END(...) 1011 #define TES_LINES_END(...) 1012 #define TES_MESHSET_END(...) 1013 #define TES_PLANE_END(...) 1014 #define TES_POINTCLOUDSHAPE_END(...) 1015 #define TES_POINTS_END(...) 1016 #define TES_VOXELS_END(...) 1017 #define TES_SPHERE_END(...) 1018 #define TES_STAR_END(...) 1019 #define TES_TEXT2D_END(...) 1020 #define TES_TEXT3D_END(...) 1021 #define TES_TRIANGLES_END(...) 1022 #define TES_TRIANGLE_END(...) 1024 #define TES_POS_UPDATE(...) 1025 #define TES_ROT_UPDATE(...) 1026 #define TES_SCALE_UPDATE(...) 1027 #define TES_COLOUR_UPDATE(...) 1028 #define TES_COLOR_UPDATE(...) 1029 #define TES_POSROT_UPDATE(...) 1030 #define TES_POSSCALE_UPDATE(...) 1031 #define TES_ROTSCALE_UPDATE(...) 1032 #define TES_PRS_UPDATE(...) 1033 #define TES_PRC_UPDATE(...) 1034 #define TES_PSC_UPDATE(...) 1035 #define TES_RSC_UPDATE(...) 1036 #define TES_PRSC_UPDATE(...) 1038 #endif // TES_ENABLE