| 2251 | } |
| 2252 | |
| 2253 | void ImDrawListSplitter::SetCurrentChannel(ImDrawList* draw_list, int idx) |
| 2254 | { |
| 2255 | IM_ASSERT(idx >= 0 && idx < _Count); |
| 2256 | if (_Current == idx) |
| 2257 | return; |
| 2258 | |
| 2259 | // Overwrite ImVector (12/16 bytes), four times. This is merely a silly optimization instead of doing .swap() |
| 2260 | memcpy(&_Channels.Data[_Current]._CmdBuffer, &draw_list->CmdBuffer, sizeof(draw_list->CmdBuffer)); |
| 2261 | memcpy(&_Channels.Data[_Current]._IdxBuffer, &draw_list->IdxBuffer, sizeof(draw_list->IdxBuffer)); |
| 2262 | _Current = idx; |
| 2263 | memcpy(&draw_list->CmdBuffer, &_Channels.Data[idx]._CmdBuffer, sizeof(draw_list->CmdBuffer)); |
| 2264 | memcpy(&draw_list->IdxBuffer, &_Channels.Data[idx]._IdxBuffer, sizeof(draw_list->IdxBuffer)); |
| 2265 | draw_list->_IdxWritePtr = draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size; |
| 2266 | |
| 2267 | // If current command is used with different settings we need to add a new command |
| 2268 | ImDrawCmd* curr_cmd = (draw_list->CmdBuffer.Size == 0) ? NULL : &draw_list->CmdBuffer.Data[draw_list->CmdBuffer.Size - 1]; |
| 2269 | if (curr_cmd == NULL) |
| 2270 | draw_list->AddDrawCmd(); |
| 2271 | else if (curr_cmd->ElemCount == 0) |
| 2272 | ImDrawCmd_HeaderCopy(curr_cmd, &draw_list->_CmdHeader); // Copy ClipRect, TexRef, VtxOffset |
| 2273 | else if (ImDrawCmd_HeaderCompare(curr_cmd, &draw_list->_CmdHeader) != 0) |
| 2274 | draw_list->AddDrawCmd(); |
| 2275 | } |
| 2276 | |
| 2277 | //----------------------------------------------------------------------------- |
| 2278 | // [SECTION] ImDrawData |
no test coverage detected