diff --git a/ArchitectureColoredPainting/src/Renderer/Painting/ShortCutTree.cpp b/ArchitectureColoredPainting/src/Renderer/Painting/ShortCutTree.cpp index 7308c33..df50a92 100644 --- a/ArchitectureColoredPainting/src/Renderer/Painting/ShortCutTree.cpp +++ b/ArchitectureColoredPainting/src/Renderer/Painting/ShortCutTree.cpp @@ -112,10 +112,8 @@ void ShortCutTree::generateShortCutSegment(ShortCutNode& nowTreeNode) { } for (auto& iter : pointSet) { nowTreeNode.lineSet.push_back(numLine); - lineIndexs.push_back(iter.first); - lineIndexs.push_back(iter.first); - lineIndexs.push_back(iter.second); - lineIndexs.push_back(iter.second); + lineIndexs.push_back((iter.first << 16) + iter.first); + lineIndexs.push_back((iter.second << 16) + iter.second); numLine++; } } @@ -149,14 +147,28 @@ bool ShortCutTree::handleShortCutNode(ShortCutNode& fa, ShortCutNode& nowTreeNod } void ShortCutTree::simplifyLineVector() { + bool canPut = false; + GLuint index = 0; numLine = allLines.size(); for (auto& nowLine : allLines) { PointVector pointVector = nowLine->toPointVector(); + canPut = false; + index = 0; for (Point& p : pointVector) { int pointIndex = getPointIndex(p); - lineIndexs.push_back(pointIndex); - if (pointVector.size() == 2) - lineIndexs.push_back(pointIndex); + if (pointVector.size() == 2) { + index = (pointIndex << 16) + pointIndex; + lineIndexs.push_back(index); + } + else { + index <<= 16; + index += pointIndex; + if (canPut) { + lineIndexs.push_back(index); + index = 0; + } + canPut = !canPut; + } } } for (auto& nowTreeNode : restOfTreeNodes) {