Thank you guys so much.
There were two issues.
1- I was dividing my vertex by two to get the center point and center the quad in the middle of the screen. So if I had a 10x10 pixel sprite, I would divide x,y components by 2 two get the center point which is 5,5 to center it in the middle of the screen. So my vertices would be as follow
*note, the postive y-axis is up for me. not down.
Top left vertex of the quad = -5, 5
Top right vertex of the quad = 5, 5
Bottom right vertex of the quad = 5, -5
Bottom left vertex of the quad = -5, -5
so that is perfect. However, if my sprite had an odd number like 11x10 pixels, 11/2 = 5.5. Cast that to an int you will get 5. So my vertex would still be as above even though my sprite is 11x10 which means I'm missing a pixel.
So I fixed that. The issue was almost solved.
The next thing is that if I had an odd resolution like 1920x1081, the same thing would happen. The issue was I would take my resolution and again divide it by two. so my ortho matrix would be
int left = -(Engine::GetWindow().GetClientSize().x / 2);
int right = Engine::GetWindow().GetClientSize().x / 2;
int top = Engine::GetWindow().GetClientSize().y / 2;
int bottom = -(Engine::GetWindow().GetClientSize().y / 2);
Camera* camera = (Camera*)CameraGameObject->AddComponent(new Camera(Matrix4::Orthographic(left, right, top, bottom, -1.0f, 1.0f)));
again, after fixing that to account for the odd resolutions, my issue is now completely fixed. I have also checked my texture coordinates and that was mapped perfectly between 0 and 1.
So, thank you guys, that was very helpful !
Cheers !!!