void GUICanvas::drawPolyLine(const Vector<Vector2I>& vertices, const Color& color) { if(vertices.size() < 2) { LOGWRN("Invalid number of vertices. Ignoring call."); return; } mElements.push_back(CanvasElement()); CanvasElement& element = mElements.back(); element.type = CanvasElementType::Line; element.color = color; element.dataId = (UINT32)mTriangleElementData.size(); element.vertexStart = (UINT32)mVertexData.size(); element.numVertices = (UINT32)vertices.size(); mTriangleElementData.push_back(TriangleElementData()); TriangleElementData& elemData = mTriangleElementData.back(); elemData.matInfo.groupId = 0; elemData.matInfo.tint = color; for (auto& vertex : vertices) { Vector2 point = Vector2((float)vertex.x, (float)vertex.y); point += Vector2(0.5f, 0.5f); // Offset to the middle of the pixel mVertexData.push_back(point); } mForceTriangleBuild = true; _markContentAsDirty(); }
void GUICanvas::drawTriangleList(const Vector<Vector2I>& vertices, const Color& color) { if (vertices.size() < 3 || vertices.size() % 3 != 0) { LOGWRN("Invalid number of vertices. Ignoring call."); return; } mElements.push_back(CanvasElement()); CanvasElement& element = mElements.back(); element.type = CanvasElementType::Triangle; element.color = color; element.dataId = (UINT32)mTriangleElementData.size(); element.vertexStart = (UINT32)mVertexData.size(); element.numVertices = (UINT32)vertices.size(); for (auto& vertex : vertices) mVertexData.push_back(Vector2((float)vertex.x, (float)vertex.y)); mTriangleElementData.push_back(TriangleElementData()); TriangleElementData& elemData = mTriangleElementData.back(); elemData.matInfo.groupId = 0; elemData.matInfo.tint = color; mForceTriangleBuild = true; _markContentAsDirty(); }
void GUICanvas::drawPolyLine(const Vector<Vector2I>& vertices, const Color& color) { if(vertices.size() < 2) { LOGWRN("Invalid number of vertices. Ignoring call."); return; } mElements.push_back(CanvasElement()); CanvasElement& element = mElements.back(); element.type = CanvasElementType::Line; element.color = color; element.dataId = (UINT32)mTriangleElementData.size(); element.vertexStart = (UINT32)mVertexData.size(); element.numVertices = (UINT32)vertices.size(); // TODO - Add actual triangle line data here for (auto& vertex : vertices) mVertexData.push_back(Vector2((float)vertex.x, (float)vertex.y)); mTriangleElementData.push_back(TriangleElementData()); TriangleElementData& elemData = mTriangleElementData.back(); elemData.matInfo.groupId = 0; elemData.matInfo.tint = color; elemData.matInfo.type = SpriteMaterial::ImageAlpha; // TODO - Use line material here mForceTriangleBuild = true; _markContentAsDirty(); }
void GUICanvas::drawTriangleStrip(const Vector<Vector2I>& vertices, const Color& color) { if (vertices.size() < 3) { LOGWRN("Invalid number of vertices. Ignoring call."); return; } mElements.push_back(CanvasElement()); CanvasElement& element = mElements.back(); element.type = CanvasElementType::Triangle; element.color = color; element.dataId = (UINT32)mTriangleElementData.size(); element.vertexStart = (UINT32)mVertexData.size(); element.numVertices = (UINT32)(vertices.size() - 2) * 3; // Convert strip to list for(UINT32 i = 2; i < (UINT32)vertices.size(); i++) { mVertexData.push_back(Vector2((float)vertices[i - 2].x, (float)vertices[i - 2].y)); mVertexData.push_back(Vector2((float)vertices[i - 1].x, (float)vertices[i - 1].y)); mVertexData.push_back(Vector2((float)vertices[i - 0].x, (float)vertices[i - 0].y)); } mTriangleElementData.push_back(TriangleElementData()); TriangleElementData& elemData = mTriangleElementData.back(); elemData.matInfo.groupId = 0; elemData.matInfo.tint = color; elemData.matInfo.type = SpriteMaterial::ImageAlpha; mForceTriangleBuild = true; _markContentAsDirty(); }
void GUICanvas::drawTexture(const HSpriteTexture& texture, const Rect2I& area, TextureScaleMode scaleMode, const Color& color) { mElements.push_back(CanvasElement()); CanvasElement& element = mElements.back(); element.type = CanvasElementType::Image; element.color = color; element.dataId = (UINT32)mImageData.size(); element.scaleMode = scaleMode; element.imageSprite = bs_new<ImageSprite>(); mImageData.push_back({ texture, area }); _markContentAsDirty(); }
void GUICanvas::drawText(const WString& text, const Vector2I& position, const HFont& font, UINT32 size, const Color& color) { mElements.push_back(CanvasElement()); CanvasElement& element = mElements.back(); element.type = CanvasElementType::Text; element.color = color; element.dataId = (UINT32)mTextData.size(); element.size = size; element.textSprite = bs_new<TextSprite>(); mTextData.push_back({ text, font, position }); _markContentAsDirty(); }
void GUICanvas::drawLine(const Vector2I& a, const Vector2I& b, const Color& color) { mElements.push_back(CanvasElement()); CanvasElement& element = mElements.back(); element.type = CanvasElementType::Line; element.color = color; element.dataId = (UINT32)mTriangleElementData.size(); element.vertexStart = (UINT32)mVertexData.size(); element.numVertices = 2; // TODO - Add actual triangle line data here mVertexData.push_back(Vector2((float)a.x, (float)a.y)); mVertexData.push_back(Vector2((float)b.x, (float)b.y)); mTriangleElementData.push_back(TriangleElementData()); TriangleElementData& elemData = mTriangleElementData.back(); elemData.matInfo.groupId = 0; elemData.matInfo.tint = color; elemData.matInfo.type = SpriteMaterial::ImageAlpha; // TODO - Use line material here mForceTriangleBuild = true; _markContentAsDirty(); }