| 57 | | // FIXME: prebuild mesh and use it |
| 58 | | // FIXME: using m_ModelWorld here at least |
| 59 | | m_Model->AddToScene(Scene, Color); |
| | 61 | // FIXME: this should be a function of lcMesh, this is a copy of lcPiece::AddToScene. |
| | 62 | int RenderColor = (m_Color == LC_COL_DEFAULT) ? Color : m_Color; |
| | 63 | |
| | 64 | for (int i = 0; i < m_Mesh->m_SectionCount; i++) |
| | 65 | { |
| | 66 | lcRenderSection RenderSection; |
| | 67 | |
| | 68 | RenderSection.Owner = this; |
| | 69 | RenderSection.ModelWorld = m_ModelWorld; |
| | 70 | RenderSection.Mesh = m_Mesh; |
| | 71 | RenderSection.Section = &m_Mesh->m_Sections[i]; |
| | 72 | RenderSection.Color = RenderSection.Section->ColorIndex; |
| | 73 | |
| | 74 | if (RenderSection.Color == LC_COL_DEFAULT) |
| | 75 | RenderSection.Color = RenderColor; |
| | 76 | |
| | 77 | if (RenderSection.Section->PrimitiveType == GL_LINES) |
| | 78 | { |
| | 79 | // FIXME: LC_DET_BRICKEDGES |
| | 80 | // if ((m_nDetail & LC_DET_BRICKEDGES) == 0) |
| | 81 | // continue; |
| | 82 | |
| | 83 | if (IsFocused()) |
| | 84 | RenderSection.Color = LC_COL_FOCUSED; |
| | 85 | else if (IsSelected()) |
| | 86 | RenderSection.Color = LC_COL_SELECTED; |
| | 87 | } |
| | 88 | |
| | 89 | if (RenderSection.Color > 13 && RenderSection.Color < 22) |
| | 90 | { |
| | 91 | Vector3 Pos = Mul31(m_BoundingBox.GetCenter(), m_ModelWorld); // FIXME: Have a bounding box for each section |
| | 92 | Pos = Mul31(Pos, Scene->m_WorldView); |
| | 93 | RenderSection.Distance = Pos[2]; |
| | 94 | |
| | 95 | Scene->m_TranslucentSections.AddSorted(RenderSection, SortRenderSectionsCallback, NULL); |
| | 96 | } |
| | 97 | else |
| | 98 | { |
| | 99 | // Pieces are already sorted by vertex buffer, so no need to sort again here. |
| | 100 | // FIXME: not true anymore, need to sort by vertex buffer here. |
| | 101 | Scene->m_OpaqueSections.Add(RenderSection); |
| | 102 | } |
| | 103 | } |
| 191 | | // Copy vertices. |
| 192 | | void* SrcVertexBuffer = SrcMesh->m_VertexBuffer->MapBuffer(GL_READ_ONLY_ARB); |
| 193 | | MeshEdit.AddVertices((float*)SrcVertexBuffer, SrcMesh->m_VertexCount); |
| | 235 | // Transform and copy vertices. |
| | 236 | float* SrcVertexBuffer = (float*)SrcMesh->m_VertexBuffer->MapBuffer(GL_READ_ONLY_ARB); |
| | 237 | |
| | 238 | for (int i = 0; i < SrcMesh->m_VertexCount; i++) |
| | 239 | { |
| | 240 | float* SrcPtr = SrcVertexBuffer + 3 * i; |
| | 241 | Vector3 Vert(SrcPtr[0], SrcPtr[1], SrcPtr[2]); |
| | 242 | Vert = Mul31(Vert, Piece->m_ModelWorld); |
| | 243 | MeshEdit.AddVertex(Vert); |
| | 244 | } |
| | 245 | |