Try this version, use the same texture as you posted before, it renders 3 quads, uses some vector math to avoid messing with rotations.

Code:
Procedure DrawLine(const PStart: TVector2f; const PEnd: TVector2f; Width: Single);
var Vector   : TVector2f;
var Normal   : TVector2f;
var NXW: Single;
var NYW: Single;
var VXW: Single;
var VYW: Single;
begin
  Vector.X:= PEnd.X - PStart.X;
  Vector.Y:= PEnd.Y - PStart.Y;
  
  Vector:= Normalize(Vector);

  // Calculate the normal to the vector
  Normal.X:= -Vector.Y;
  Normal.Y:=  Vector.X;

  // Precompute the factors
  NXW:= Normal.X * Width;
  NYW:= Normal.Y * Width;

  VXW:= Vector.X * Width;
  VYW:= Vector.Y * Width;

  glEnable(GL_TEXTURE_2D);

  glBegin(GL_QUADS);
    // First quad
    glTexCoord2f(0.0, 0.5); glVertex2f(PStart.X - NXW + VYW, PStart.Y - NYW + VYW);
    glTexCoord2f(1.0, 0.5); glVertex2f(PStart.X + NXW + VYW, PStart.Y + NYW + VYW);
    glTexCoord2f(1.0, 0.5); glVertex2f(PEnd.X   + NXW - VYW, PEnd.Y   + NYW - VYW);
    glTexCoord2f(0.0, 0.5); glVertex2f(PEnd.X   - NXW - VYW, PEnd.Y   - NYW - VYW);

    // Middle quad
    glTexCoord2f(0.0, 0.0); glVertex2f(PStart.X - NXW      , PStart.Y - NYW);
    glTexCoord2f(1.0, 0.0); glVertex2f(PStart.X + NXW      , PStart.Y + NYW);
    glTexCoord2f(1.0, 0.5); glVertex2f(PStart.X + NXW + VXW, PStart.Y + NYW + VYW);
    glTexCoord2f(0.0, 0.5); glVertex2f(PStart.X - NXW + VXW, PStart.Y - NYW + VYW);

    // End quad
    glTexCoord2f(0.0, 0.0); glVertex2f(PEnd.X - NXW      , PEnd.Y - NYW);
    glTexCoord2f(1.0, 0.0); glVertex2f(PEnd.X + NXW      , PEnd.Y + NYW);
    glTexCoord2f(1.0, 0.5); glVertex2f(PEnd.X + NXW - VXW, PEnd.Y + NYW - VYW);
    glTexCoord2f(0.0, 0.5); glVertex2f(PEnd.X - NXW - VXW, PEnd.Y - NYW - VYW);
  glEnd();
end;