| 1224 | } |
| 1225 | |
| 1226 | int CGraphics_Threaded::CreateRectQuadContainer(float x, float y, float w, float h, float r, int Corners) |
| 1227 | { |
| 1228 | int ContainerIndex = CreateQuadContainer(false); |
| 1229 | |
| 1230 | if(Corners == 0 || r == 0.0f) |
| 1231 | { |
| 1232 | CQuadItem ItemQ = CQuadItem(x, y, w, h); |
| 1233 | QuadContainerAddQuads(ContainerIndex, &ItemQ, 1); |
| 1234 | QuadContainerUpload(ContainerIndex); |
| 1235 | QuadContainerChangeAutomaticUpload(ContainerIndex, true); |
| 1236 | return ContainerIndex; |
| 1237 | } |
| 1238 | |
| 1239 | const int NumSegments = 8; |
| 1240 | const float SegmentsAngle = pi / 2 / NumSegments; |
| 1241 | IGraphics::CFreeformItem aFreeform[NumSegments * 4]; |
| 1242 | size_t NumItems = 0; |
| 1243 | |
| 1244 | for(int i = 0; i < NumSegments; i += 2) |
| 1245 | { |
| 1246 | float a1 = i * SegmentsAngle; |
| 1247 | float a2 = (i + 1) * SegmentsAngle; |
| 1248 | float a3 = (i + 2) * SegmentsAngle; |
| 1249 | float Ca1 = std::cos(a1); |
| 1250 | float Ca2 = std::cos(a2); |
| 1251 | float Ca3 = std::cos(a3); |
| 1252 | float Sa1 = std::sin(a1); |
| 1253 | float Sa2 = std::sin(a2); |
| 1254 | float Sa3 = std::sin(a3); |
| 1255 | |
| 1256 | if(Corners & CORNER_TL) |
| 1257 | aFreeform[NumItems++] = IGraphics::CFreeformItem( |
| 1258 | x + r, y + r, |
| 1259 | x + (1 - Ca1) * r, y + (1 - Sa1) * r, |
| 1260 | x + (1 - Ca3) * r, y + (1 - Sa3) * r, |
| 1261 | x + (1 - Ca2) * r, y + (1 - Sa2) * r); |
| 1262 | |
| 1263 | if(Corners & CORNER_TR) |
| 1264 | aFreeform[NumItems++] = IGraphics::CFreeformItem( |
| 1265 | x + w - r, y + r, |
| 1266 | x + w - r + Ca1 * r, y + (1 - Sa1) * r, |
| 1267 | x + w - r + Ca3 * r, y + (1 - Sa3) * r, |
| 1268 | x + w - r + Ca2 * r, y + (1 - Sa2) * r); |
| 1269 | |
| 1270 | if(Corners & CORNER_BL) |
| 1271 | aFreeform[NumItems++] = IGraphics::CFreeformItem( |
| 1272 | x + r, y + h - r, |
| 1273 | x + (1 - Ca1) * r, y + h - r + Sa1 * r, |
| 1274 | x + (1 - Ca3) * r, y + h - r + Sa3 * r, |
| 1275 | x + (1 - Ca2) * r, y + h - r + Sa2 * r); |
| 1276 | |
| 1277 | if(Corners & CORNER_BR) |
| 1278 | aFreeform[NumItems++] = IGraphics::CFreeformItem( |
| 1279 | x + w - r, y + h - r, |
| 1280 | x + w - r + Ca1 * r, y + h - r + Sa1 * r, |
| 1281 | x + w - r + Ca3 * r, y + h - r + Sa3 * r, |
| 1282 | x + w - r + Ca2 * r, y + h - r + Sa2 * r); |
| 1283 | } |
no test coverage detected