cogl: Make CoglSubTexture only work for quad rendering
authorNeil Roberts <neil@linux.intel.com>
Mon, 18 Jan 2010 09:22:04 +0000 (09:22 +0000)
committerNeil Roberts <neil@linux.intel.com>
Mon, 18 Jan 2010 09:22:04 +0000 (09:22 +0000)
commit36f18e5ac57e068c3987d5b705f68fcc6f18d472
treeb79b36e9f71a010a52ebb52e0be1636de271aeef
parentb844653c649277eed63b6a85d29b84aab8abe641
cogl: Make CoglSubTexture only work for quad rendering

The sub texture backend doesn't work well as a completely general
texture backend because for example when rendering with cogl_polygon
it needs to be able to tranform arbitrary texture coordinates without
reference to the other coordintes. This can't be done when the texture
coordinates are a multiple of one because sometimes the coordinate
should represent the left or top edge and sometimes it should
represent the bottom or top edge. For example if the s coordinates are
0 and 1 then 1 represents the right edge but if they are 1 and 2 then
1 represents the left edge.

Instead the sub-textures are now documented not to support coordinates
outside the range [0,1]. The coordinates for the sub-region are now
represented as integers as this helps avoid rounding issues. The
region can no longer be a super-region of the texture as this
simplifies the code quite a lot.

There are two new texture virtual functions:

transform_quad_coords_to_gl - This transforms two pairs of coordinates
     representing a quad. It will return FALSE if the coordinates can
     not be transformed. The sub texture backend uses this to detect
     coordinates that require repeating which causes cogl-primitives
     to use manual repeating.

ensure_non_quad_rendering - This is used in cogl_polygon and
     cogl_vertex_buffer to inform the texture backend that
     transform_quad_to_gl is going to be used. The atlas backend
     migrates the texture out of the atlas when it hits this.
12 files changed:
clutter/cogl/cogl/cogl-atlas-texture.c
clutter/cogl/cogl/cogl-primitives.c
clutter/cogl/cogl/cogl-sub-texture-private.h
clutter/cogl/cogl/cogl-sub-texture.c
clutter/cogl/cogl/cogl-texture-2d-sliced.c
clutter/cogl/cogl/cogl-texture-2d.c
clutter/cogl/cogl/cogl-texture-private.h
clutter/cogl/cogl/cogl-texture.c
clutter/cogl/cogl/cogl-texture.h
clutter/cogl/cogl/cogl-vertex-buffer.c
tests/conform/test-cogl-sub-texture.c
tests/conform/test-conform-main.c