PDA

View Full Version : Trying to understand how opengl draws/renders



hopjopper
02-06-2016, 06:34 AM
So basically i am trying to understand what is happening when OpenGL draws

according to the theory i have read , the fragments that are generated by rasterization are then used to colour in etc with fragment shader

if i created a screen that is of size lets say 256 * 256 pixels and draw an image that is also 256*256 size in pixels, it makes sense that i get a 1:1 picture because each pixel has it set place

however then if i drawn a image of some size that is drawn over a rectangle which might be smaller than the window size lets say i raw the same 256*256 image to a space that is 50*50 pixels, how does the drawing process work?

as far as i have understood the fragment is not possible to be smaller then one pixel , and even if it is , it will only colour the pixel within which it falls on the screen

so what exactly is happening here?

bisthebis
02-08-2016, 02:52 AM
Since drawing coordinates are in [-1,1] range, you can't create a 256*256 image.
I may be wrong, but I think rasterize gives as many fragments as there are pixels ont the viewport.

GClements
02-08-2016, 04:06 AM
if i created a screen that is of size lets say 256 * 256 pixels and draw an image that is also 256*256 size in pixels

OpenGL doesn't draw "images". It draws, points, lines or triangles (quads and polygons are essentially just multiple triangles). Each of these has its own rasterisation algorithm, which is described in detail in the specification (https://www.opengl.org/registry/doc/glspec45.core.pdf).

If the vertices have texture coordinates, these are interpolated for each fragment generated by rasterisation. If fixed-function texturing is enabled, each fragment's interpolated texture coordinates are used to sample the texture. The details depend upon the texture's minification and magnification filters (glTexParameter() with GL_TEXTURE_MIN_FILTER or GL_TEXTURE_MAG_FILTER) and repeat mode (glTexParameter() with GL_TEXTURE_WRAP_S etc). The process is described in detail in the specification.

mhagain
02-08-2016, 05:50 AM
It's also completely incorrect to say that OpenGL "draws" at all, because it doesn't. Your graphics card draws; OpenGL just provides a means for your program to tell it what to draw.

Section 1.2.2 of the spec (I'm using 4.4 here) makes this explicit:

To the implementor, OpenGL is a set of commands that control the operation of the GPU.