Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4358 Serge 1
/**************************************************************************
2
 *
3
 * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
4
 * All Rights Reserved.
5
 * Copyright 2008 VMware, Inc.  All rights reserved.
6
 * Copyright 2009 Marek Olšák 
7
 *
8
 * Permission is hereby granted, free of charge, to any person obtaining a
9
 * copy of this software and associated documentation files (the
10
 * "Software"), to deal in the Software without restriction, including
11
 * without limitation the rights to use, copy, modify, merge, publish,
12
 * distribute, sub license, and/or sell copies of the Software, and to
13
 * permit persons to whom the Software is furnished to do so, subject to
14
 * the following conditions:
15
 *
16
 * The above copyright notice and this permission notice (including the
17
 * next paragraph) shall be included in all copies or substantial portions
18
 * of the Software.
19
 *
20
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
23
 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
24
 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
 *
28
 **************************************************************************/
29
 
30
/**
31
 * @file
32
 * Texture mapping utility functions.
33
 *
34
 * @author Brian Paul
35
 *         Marek Olšák
36
 */
37
 
38
#include "pipe/p_defines.h"
39
 
40
#include "util/u_debug.h"
41
#include "util/u_texture.h"
42
 
43
void util_map_texcoords2d_onto_cubemap(unsigned face,
44
                                       const float *in_st, unsigned in_stride,
45
                                       float *out_str, unsigned out_stride)
46
{
47
   int i;
48
   float rx, ry, rz;
49
 
50
   /* loop over quad verts */
51
   for (i = 0; i < 4; i++) {
52
      /* Compute sc = +/-scale and tc = +/-scale.
53
       * Not +/-1 to avoid cube face selection ambiguity near the edges,
54
       * though that can still sometimes happen with this scale factor...
55
       */
56
      const float scale = 0.9999f;
57
      const float sc = (2 * in_st[0] - 1) * scale;
58
      const float tc = (2 * in_st[1] - 1) * scale;
59
 
60
      switch (face) {
61
         case PIPE_TEX_FACE_POS_X:
62
            rx = 1;
63
            ry = -tc;
64
            rz = -sc;
65
            break;
66
         case PIPE_TEX_FACE_NEG_X:
67
            rx = -1;
68
            ry = -tc;
69
            rz = sc;
70
            break;
71
         case PIPE_TEX_FACE_POS_Y:
72
            rx = sc;
73
            ry = 1;
74
            rz = tc;
75
            break;
76
         case PIPE_TEX_FACE_NEG_Y:
77
            rx = sc;
78
            ry = -1;
79
            rz = -tc;
80
            break;
81
         case PIPE_TEX_FACE_POS_Z:
82
            rx = sc;
83
            ry = -tc;
84
            rz = 1;
85
            break;
86
         case PIPE_TEX_FACE_NEG_Z:
87
            rx = -sc;
88
            ry = -tc;
89
            rz = -1;
90
            break;
91
         default:
92
            rx = ry = rz = 0;
93
            assert(0);
94
      }
95
 
96
      out_str[0] = rx; /*s*/
97
      out_str[1] = ry; /*t*/
98
      out_str[2] = rz; /*r*/
99
 
100
      in_st += in_stride;
101
      out_str += out_stride;
102
   }
103
}