Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 7 of 7

Thread: Texture Coordinates not in floating point

  1. #1
    Guest

    Texture Coordinates not in floating point

    I want to texture a polygon with glTexCoords2s. I can texture polygons correctly if I use glTexCoords2f. Since 4 bytes for a simple texel coordinate is a bit memory consuming, I thought I would use glTexCoords2s. I thought this would mean I could use the full range of 0..$7fff to mean 0.0 to 1.0. Unfortunately, 0 means 0 and 1 means 1.0 When I supply anything except these two, I get either a texture tiling or texture clamped, depending on how I set the parameters. I tried setting up a texture matrix of
    1/65536 0 0 0
    0 1/65536 0 0
    0 0 1 0
    0 0 0 1
    to generate coords between 0 and 1, but that did nothing.

    I'm sure this is a relatively easy thing, but I am at a loss. My OpenGL documentation does nothing but use floating point texel coordinates.

    Which brings me to ask, what exactly is the texture matrix used for?

  2. #2
    Intern Contributor
    Join Date
    Feb 2000
    Location
    Italy
    Posts
    77

    Re: Texture Coordinates not in floating point

    Just to be clever, remember that usually compilers align data structures on 32-bit boundaries, or maybe more. Surely they do not default to pack shorts in a structure.
    If you really wanna use shorts, take into account that:
    - you must pack data structures
    - the alignment issues will make for worse performance with memory access and caching
    - OpenGL drivers will always internally convert that to floating point

    So really, there are more CONs then PROs.

    ---
    As for texture matrices, I read a very effective article: they can be used for texture projection, or for lightmaps application.

    [This message has been edited by paolom (edited 02-17-2000).]
    --
    Paolo M.

  3. #3
    Guest

    Re: Texture Coordinates not in floating point

    The drivers convert to floating point anyways? This I didn't know, but then again I guess I shouldn't be surprised. So if I use shorts and then convert it to float myself, I'm not really losing anything, am I?

  4. #4
    Intern Contributor
    Join Date
    Feb 2000
    Location
    San Diego Ca, USA
    Posts
    50

    Re: Texture Coordinates not in floating point

    using the texture matrix provides some cool
    effects.. with the texture matrix you can
    get textures to move across the surface of
    a polygon

  5. #5
    Intern Contributor
    Join Date
    Feb 2000
    Location
    Italy
    Posts
    77

    Re: Texture Coordinates not in floating point

    Goof: you (and your app) are just losing... time
    --
    Paolo M.

  6. #6
    Advanced Member Frequent Contributor
    Join Date
    Feb 2000
    Location
    London
    Posts
    503

    Re: Texture Coordinates not in floating point

    paolom - you're almost certainly right about short-to-float conversion being slower, but it's just possible that the shorts will be faster (e.g. if you're hopping around the texcoord array, and the whole thing will fit in cache as shorts but not as floats). As usual, you don't know until you do some profiling.

    About struct alignment - compilers generally align each member on the SMALLER of the member's size and the default struct packing (usually 32 bits).

    An example layout and probable packing:
    (assume 2-byte short, 4-byte int and float)

    struct s
    {
    short a; // offset 0
    short b; // offset 2
    byte c; // offset 4
    float d; // offset 8
    byte e; // offset 12
    byte f; // offset 13
    };

    Note that the order in which you declare members can make a difference to the struct size.

  7. #7
    Intern Contributor
    Join Date
    Feb 2000
    Location
    Italy
    Posts
    77

    Re: Texture Coordinates not in floating point

    Uh! Sorry guys... I really was wrong about struct members alignment.
    Thanks MikeC
    --
    Paolo M.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •