// ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ protected override Vector3[] GetVertices(Space _space) { // TODO: only return the rotated bounding box of the sprite font int visibleVertexCount = text_.Length * 4; exList <Vector3> vertices = exList <Vector3> .GetTempList(); vertices.AddRange(visibleVertexCount); SpriteFontBuilder.BuildText(this, _space, vertices, 0); return(vertices.ToArray()); }
/*// ------------------------------------------------------------------ * // Desc: * // ------------------------------------------------------------------ * * protected override Vector3[] GetVertices (Space _space) { * // TODO: only return the rotated bounding box of the sprite font * int visibleVertexCount = text_.Length * 4; * exList<Vector3> vertices = exList<Vector3>.GetTempList(); * vertices.AddRange(visibleVertexCount); * Matrix4x4 mat = _space == Space.World ? cachedWorldMatrix : Matrix4x4.identity; * BuildText(vertices, 0, ref mat); * return vertices.ToArray(); * }*/ // ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ protected override void UpdateVertexAndIndexCount() { SpriteFontBuilder.GetVertexAndIndexCount(text_, out vertexCount_, out indexCount_); }
// ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ internal override exUpdateFlags UpdateBuffers(exList <Vector3> _vertices, exList <Vector2> _uvs, exList <Color32> _colors32, exList <int> _indices) { return(SpriteFontBuilder.UpdateBuffers(this, Space.Self, 1.0f, _vertices, _uvs, _colors32, _indices, 0, 0)); }
// ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ internal override exUpdateFlags UpdateBuffers(exList <Vector3> _vertices, exList <Vector2> _uvs, exList <Color32> _colors32, exList <int> _indices) { if (font_.isValid == false) { var retval = exUpdateFlags.None; bool updateIndex = (updateFlags & (exUpdateFlags.Index | exUpdateFlags.Text)) != 0 && _indices != null; if (updateIndex) { // ensure index buffer in vertex range int indexBufferEnd = indexBufferIndex + indexCount - 5; for (int i = indexBufferIndex, v = vertexBufferIndex; i < indexBufferEnd; i += 6, v += 4) { _indices.buffer[i] = v; _indices.buffer[i + 1] = v + 1; _indices.buffer[i + 2] = v + 2; _indices.buffer[i + 3] = v + 2; _indices.buffer[i + 4] = v + 3; _indices.buffer[i + 5] = v; } updateFlags &= ~exUpdateFlags.Index; retval |= exUpdateFlags.Index; } bool updateVertex = (updateFlags & exUpdateFlags.Text) != 0; if (updateVertex) { Vector3 anyPoint = _vertices.buffer.Length > 0 ? _vertices.buffer[0] : new Vector3(); for (int i = 0; i < vertexCount_; ++i) { _vertices.buffer[vertexBufferIndex + i] = anyPoint; } updateFlags &= ~exUpdateFlags.Text; retval |= exUpdateFlags.Vertex; } return(retval); } bool transparentDirty = (updateFlags & exUpdateFlags.Transparent) != 0; if (transparentDirty) { updateFlags &= ~exUpdateFlags.Transparent; if (transparent_) { // make vertex invisible Vector3 anyPoint = _vertices.buffer.Length > 0 ? _vertices.buffer[0] : new Vector3(); for (int i = 0; i < vertexCount_; ++i) { _vertices.buffer[vertexBufferIndex + i] = anyPoint; } updateFlags &= ~exUpdateFlags.Vertex; return(updateFlags | exUpdateFlags.Vertex); // 既然不可见,直接让mesh更新各个buffer即可。这里不重设updateFlags,所以变回可见时会正确初始化。 } else { // revert vertex updateFlags |= exUpdateFlags.Vertex; } } else if (transparent_) { return(exUpdateFlags.None); } return(SpriteFontBuilder.UpdateBuffers(this, Space.World, layer_.alpha, _vertices, _uvs, _colors32, _indices, vertexBufferIndex, indexBufferIndex)); }