26
26
**************************************************************************/
29
#define ATTR1FV( A, V ) ATTR( A, 1, (V)[0], 0, 0, 1 )
30
#define ATTR2FV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )
31
#define ATTR3FV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 )
32
#define ATTR4FV( A, V ) ATTR( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
29
#define ATTR1FV( A, V ) ATTR( A, 1, GL_FLOAT, (V)[0], 0, 0, 1 )
30
#define ATTR2FV( A, V ) ATTR( A, 2, GL_FLOAT, (V)[0], (V)[1], 0, 1 )
31
#define ATTR3FV( A, V ) ATTR( A, 3, GL_FLOAT, (V)[0], (V)[1], (V)[2], 1 )
32
#define ATTR4FV( A, V ) ATTR( A, 4, GL_FLOAT, (V)[0], (V)[1], (V)[2], (V)[3] )
34
#define ATTR1F( A, X ) ATTR( A, 1, X, 0, 0, 1 )
35
#define ATTR2F( A, X, Y ) ATTR( A, 2, X, Y, 0, 1 )
36
#define ATTR3F( A, X, Y, Z ) ATTR( A, 3, X, Y, Z, 1 )
37
#define ATTR4F( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W )
34
#define ATTR1F( A, X ) ATTR( A, 1, GL_FLOAT, X, 0, 0, 1 )
35
#define ATTR2F( A, X, Y ) ATTR( A, 2, GL_FLOAT, X, Y, 0, 1 )
36
#define ATTR3F( A, X, Y, Z ) ATTR( A, 3, GL_FLOAT, X, Y, Z, 1 )
37
#define ATTR4F( A, X, Y, Z, W ) ATTR( A, 4, GL_FLOAT, X, Y, Z, W )
40
#define ATTR2IV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )
41
#define ATTR3IV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 )
42
#define ATTR4IV( A, V ) ATTR( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
44
#define ATTR1I( A, X ) ATTR( A, 1, X, 0, 0, 1 )
45
#define ATTR2I( A, X, Y ) ATTR( A, 2, X, Y, 0, 1 )
46
#define ATTR3I( A, X, Y, Z ) ATTR( A, 3, X, Y, Z, 1 )
47
#define ATTR4I( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W )
40
#define ATTRI( A, N, X, Y, Z, W) ATTR( A, N, GL_INT, \
41
INT_AS_FLT(X), INT_AS_FLT(Y), \
42
INT_AS_FLT(Z), INT_AS_FLT(W) )
44
#define ATTR2IV( A, V ) ATTRI( A, 2, (V)[0], (V)[1], 0, 1 )
45
#define ATTR3IV( A, V ) ATTRI( A, 3, (V)[0], (V)[1], (V)[2], 1 )
46
#define ATTR4IV( A, V ) ATTRI( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
48
#define ATTR1I( A, X ) ATTRI( A, 1, X, 0, 0, 1 )
49
#define ATTR2I( A, X, Y ) ATTRI( A, 2, X, Y, 0, 1 )
50
#define ATTR3I( A, X, Y, Z ) ATTRI( A, 3, X, Y, Z, 1 )
51
#define ATTR4I( A, X, Y, Z, W ) ATTRI( A, 4, X, Y, Z, W )
51
#define ATTR2UIV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )
52
#define ATTR3UIV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 )
53
#define ATTR4UIV( A, V ) ATTR( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
55
#define ATTR1UI( A, X ) ATTR( A, 1, X, 0, 0, 1 )
56
#define ATTR2UI( A, X, Y ) ATTR( A, 2, X, Y, 0, 1 )
57
#define ATTR3UI( A, X, Y, Z ) ATTR( A, 3, X, Y, Z, 1 )
58
#define ATTR4UI( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W )
60
#define MAT_ATTR( A, N, V ) ATTR( A, N, (V)[0], (V)[1], (V)[2], (V)[3] )
55
#define ATTRUI( A, N, X, Y, Z, W) ATTR( A, N, GL_UNSIGNED_INT, \
56
UINT_AS_FLT(X), UINT_AS_FLT(Y), \
57
UINT_AS_FLT(Z), UINT_AS_FLT(W) )
59
#define ATTR2UIV( A, V ) ATTRUI( A, 2, (V)[0], (V)[1], 0, 1 )
60
#define ATTR3UIV( A, V ) ATTRUI( A, 3, (V)[0], (V)[1], (V)[2], 1 )
61
#define ATTR4UIV( A, V ) ATTRUI( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
63
#define ATTR1UI( A, X ) ATTRUI( A, 1, X, 0, 0, 1 )
64
#define ATTR2UI( A, X, Y ) ATTRUI( A, 2, X, Y, 0, 1 )
65
#define ATTR3UI( A, X, Y, Z ) ATTRUI( A, 3, X, Y, Z, 1 )
66
#define ATTR4UI( A, X, Y, Z, W ) ATTRUI( A, 4, X, Y, Z, W )
68
#define MAT_ATTR( A, N, V ) ATTR( A, N, GL_FLOAT, (V)[0], (V)[1], (V)[2], (V)[3] )
62
70
static inline float conv_ui10_to_norm_float(unsigned ui10)
69
77
return (float)(ui2) / 3.0;
72
#define ATTRUI10_1( A, UI ) ATTR( A, 1, (UI) & 0x3ff, 0, 0, 1 )
73
#define ATTRUI10_2( A, UI ) ATTR( A, 2, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, 0, 1 )
74
#define ATTRUI10_3( A, UI ) ATTR( A, 3, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, 1 )
75
#define ATTRUI10_4( A, UI ) ATTR( A, 4, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, ((UI) >> 30) & 0x3 )
80
#define ATTRUI10_1( A, UI ) ATTR( A, 1, GL_FLOAT, (UI) & 0x3ff, 0, 0, 1 )
81
#define ATTRUI10_2( A, UI ) ATTR( A, 2, GL_FLOAT, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, 0, 1 )
82
#define ATTRUI10_3( A, UI ) ATTR( A, 3, GL_FLOAT, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, 1 )
83
#define ATTRUI10_4( A, UI ) ATTR( A, 4, GL_FLOAT, (UI) & 0x3ff, ((UI) >> 10) & 0x3ff, ((UI) >> 20) & 0x3ff, ((UI) >> 30) & 0x3 )
77
#define ATTRUI10N_1( A, UI ) ATTR( A, 1, conv_ui10_to_norm_float((UI) & 0x3ff), 0, 0, 1 )
78
#define ATTRUI10N_2( A, UI ) ATTR( A, 2, \
85
#define ATTRUI10N_1( A, UI ) ATTR( A, 1, GL_FLOAT, conv_ui10_to_norm_float((UI) & 0x3ff), 0, 0, 1 )
86
#define ATTRUI10N_2( A, UI ) ATTR( A, 2, GL_FLOAT, \
79
87
conv_ui10_to_norm_float((UI) & 0x3ff), \
80
88
conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), 0, 1 )
81
#define ATTRUI10N_3( A, UI ) ATTR( A, 3, \
89
#define ATTRUI10N_3( A, UI ) ATTR( A, 3, GL_FLOAT, \
82
90
conv_ui10_to_norm_float((UI) & 0x3ff), \
83
91
conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), \
84
92
conv_ui10_to_norm_float(((UI) >> 20) & 0x3ff), 1 )
85
#define ATTRUI10N_4( A, UI ) ATTR( A, 4, \
93
#define ATTRUI10N_4( A, UI ) ATTR( A, 4, GL_FLOAT, \
86
94
conv_ui10_to_norm_float((UI) & 0x3ff), \
87
95
conv_ui10_to_norm_float(((UI) >> 10) & 0x3ff), \
88
96
conv_ui10_to_norm_float(((UI) >> 20) & 0x3ff), \
119
127
return (float)val.x;
122
#define ATTRI10_1( A, I10 ) ATTR( A, 1, conv_i10_to_i((I10) & 0x3ff), 0, 0, 1 )
123
#define ATTRI10_2( A, I10 ) ATTR( A, 2, \
130
#define ATTRI10_1( A, I10 ) ATTR( A, 1, GL_FLOAT, conv_i10_to_i((I10) & 0x3ff), 0, 0, 1 )
131
#define ATTRI10_2( A, I10 ) ATTR( A, 2, GL_FLOAT, \
124
132
conv_i10_to_i((I10) & 0x3ff), \
125
133
conv_i10_to_i(((I10) >> 10) & 0x3ff), 0, 1 )
126
#define ATTRI10_3( A, I10 ) ATTR( A, 3, \
134
#define ATTRI10_3( A, I10 ) ATTR( A, 3, GL_FLOAT, \
127
135
conv_i10_to_i((I10) & 0x3ff), \
128
136
conv_i10_to_i(((I10) >> 10) & 0x3ff), \
129
137
conv_i10_to_i(((I10) >> 20) & 0x3ff), 1 )
130
#define ATTRI10_4( A, I10 ) ATTR( A, 4, \
138
#define ATTRI10_4( A, I10 ) ATTR( A, 4, GL_FLOAT, \
131
139
conv_i10_to_i((I10) & 0x3ff), \
132
140
conv_i10_to_i(((I10) >> 10) & 0x3ff), \
133
141
conv_i10_to_i(((I10) >> 20) & 0x3ff), \
134
142
conv_i2_to_i(((I10) >> 30) & 0x3))
137
#define ATTRI10N_1( A, I10 ) ATTR( A, 1, conv_i10_to_norm_float((I10) & 0x3ff), 0, 0, 1 )
138
#define ATTRI10N_2( A, I10 ) ATTR( A, 2, \
145
#define ATTRI10N_1( A, I10 ) ATTR( A, 1, GL_FLOAT, conv_i10_to_norm_float((I10) & 0x3ff), 0, 0, 1 )
146
#define ATTRI10N_2( A, I10 ) ATTR( A, 2, GL_FLOAT, \
139
147
conv_i10_to_norm_float((I10) & 0x3ff), \
140
148
conv_i10_to_norm_float(((I10) >> 10) & 0x3ff), 0, 1 )
141
#define ATTRI10N_3( A, I10 ) ATTR( A, 3, \
149
#define ATTRI10N_3( A, I10 ) ATTR( A, 3, GL_FLOAT, \
142
150
conv_i10_to_norm_float((I10) & 0x3ff), \
143
151
conv_i10_to_norm_float(((I10) >> 10) & 0x3ff), \
144
152
conv_i10_to_norm_float(((I10) >> 20) & 0x3ff), 1 )
145
#define ATTRI10N_4( A, I10 ) ATTR( A, 4, \
153
#define ATTRI10N_4( A, I10 ) ATTR( A, 4, GL_FLOAT, \
146
154
conv_i10_to_norm_float((I10) & 0x3ff), \
147
155
conv_i10_to_norm_float(((I10) >> 10) & 0x3ff), \
148
156
conv_i10_to_norm_float(((I10) >> 20) & 0x3ff), \