How can I transform a primitive using only GL and matrix multiplication (no GameObject)?

Hello, I’ve been creating simple primitives in Unity using GL (without Gizmos since it needs to be more versatile). The initial drawing of the classes I have implemented (like “line” and “circle”) are drawing fine. Here’s an example:

class LineAnnotation : Annotation
    {
        Vector3[] vertices { get; set; }
        Color LineColor = new Color(0,0,0,1);
        
        public LineAnnotation(Vector3 start, Vector3 end)
        {
		    vertices = new Vector3[2] {
			    start,
				end
			};
			if(material == null) { 
        		CreateMaterial();
    		} 
        }

        public override void Draw()
        {
			GL.PushMatrix();
			if (material != null) {
				material.SetPass(0);
			}
			GL.Begin(GL.LINES);
			GL.Color(new Color(0,0,0));
			GL.Vertex(vertices[0]);
			GL.Vertex(vertices[1]);
			GL.End();
			GL.PopMatrix();
			
        }
	
		

    }

However, I also have “Transform” classes which need to translate, rotate, or scale a given primitive. The problem is that the transforms are not happening. The primitives get drawn in their initial positions, even when they’re inside of a Transform object that is storing the vector translation. See my code below:

This is the draw method for my translation class, and below that is the one for scaling:

    public override void Draw() // The translation one.
    {
        GL.PushMatrix(); // Save Matrix
        GL.modelview.SetTRS(Translation,Quaternion.identity, Vector3.one); // Change Translation, but leave the other parts of the matrix alone.
        DrawChildren();  // Draws the primitives it was passed
        GL.PopMatrix();  // Restore Matrix
}
public override void Draw() //This is the scaling one. 
    {
        GL.PushMatrix(); // Save Matrix
        GL.modelview.SetTRS(Vector3.zero,Quaternion.identity, new Vector3(Scale, Scale, Scale)); // Change Scale part of modelview, but leave the other parts of the matrix alone.
        DrawChildren();  // Draws the primitives it was passed
        GL.PopMatrix();  // Restore Matrix
    }

Does anyone have any ideas about why this is happening? I feel like there’s a pretty easy fix to it that I’m missing, but it can’t be that hard to transform the modelview matrix so that I can transform whatever child primitive is being drawn, and then pop back out so I can get on with drawing other primitives. Any thoughts or advice is welcome.

var matrix = Matrix4x4.TRS(…);

GL.PushMatrix();
GL.MultMatrix(matrix);

//Draw

GL.PopMatrix();

This worked for me.