When you render to a texture the origin is the origin.
That is, the origin in window space is mapped to the origin in texture space, and the positive X and Y directions are aligned with the positive S and T directions.
There is a single set of (texture coordinates, window coordinates), or if you want to take a step back, a single set of (texture coordinates, normalized device coordinates) to map the texture space origin to the window space origin.
From: Florian Bösch [mailto:firstname.lastname@example.org]
Sent: 07 December 2012 15:59
To: Georg Kolling
Cc: Mark Callow; Jeff Gilbert; Gregg Tavares (社用); public webgl
Subject: Re: [Public WebGL] y-orientation for texImage2D from HTML elements
On Fri, Dec 7, 2012 at 4:31 PM, Georg Kolling <Georg.Kolling@imgtec.com> wrote:
In my opinion the fault here lies with the GL specification which incorrectly applies a physical orientation to an abstract coordinate space.
In reality TexImage2D accepts pixel data in “origin-first, S-major (S-increasing, T-increasing)” order. The first pixel passed, at the memory address given, is taken to be at (or near) the texture space origin. Each row of pixels form a line along the positive S axis, and subsequent rows are located at increasing T.
Physical orientation has no meaning in an abstract coordinate space such as texture space. Positive T direction is neither “up” nor “down” (or left-right, front-back, north-south, you get the idea).
If you take the description above, i.e. “origin-first” it immediately becomes clear that if you want to preserve the origin location, HTML elements with their origin in the top-left corner should be passed to TexImage2D top-left corner first.
When you render to a texture the origin is bottm/left not top/left. If you're serious about origin preservation such as not to end up with cases where there is no right UV set anymore or you render things upside down variably, you upload with origin bottom/left not top/left. Alternatively you fix glViewport, glScissors, FBOs, to have origin top/left such that you'll not have to render things upside down and can apply one set of UV coords regardless.