blob: 57239ef74ffd71ec67882cbbae653ff09e7918a8 [file] [log] [blame]
shannon.woods@transgaming.combdf2d802013-02-28 23:16:20 +00001#include "precompiled.h"
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +00002//
3// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style license that can be
5// found in the LICENSE file.
6//
7
daniel@transgaming.com4ba24062012-12-20 20:54:24 +00008// Image.h: Implements the rx::Image class, an abstract base class for the
9// renderer-specific classes which will define the interface to the underlying
10// surfaces or resources.
11
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000012#include "libGLESv2/renderer/Image.h"
13
daniel@transgaming.com31b13e12012-11-28 19:34:30 +000014namespace rx
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000015{
daniel@transgaming.com0ad830b2012-10-31 19:52:12 +000016
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000017Image::Image()
18{
19 mWidth = 0;
20 mHeight = 0;
21 mInternalFormat = GL_NONE;
daniel@transgaming.com20d36662012-10-31 19:51:43 +000022 mActualFormat = GL_NONE;
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000023}
24
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +000025void Image::loadAlphaDataToBGRA(GLsizei width, GLsizei height,
26 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000027{
28 const unsigned char *source = NULL;
29 unsigned char *dest = NULL;
30
31 for (int y = 0; y < height; y++)
32 {
33 source = static_cast<const unsigned char*>(input) + y * inputPitch;
34 dest = static_cast<unsigned char*>(output) + y * outputPitch;
35 for (int x = 0; x < width; x++)
36 {
37 dest[4 * x + 0] = 0;
38 dest[4 * x + 1] = 0;
39 dest[4 * x + 2] = 0;
40 dest[4 * x + 3] = source[x];
41 }
42 }
43}
44
daniel@transgaming.com26041c92013-01-11 04:08:58 +000045void Image::loadAlphaDataToNative(GLsizei width, GLsizei height,
46 int inputPitch, const void *input, size_t outputPitch, void *output)
47{
48 const unsigned char *source = NULL;
49 unsigned char *dest = NULL;
50
51 for (int y = 0; y < height; y++)
52 {
53 source = static_cast<const unsigned char*>(input) + y * inputPitch;
54 dest = static_cast<unsigned char*>(output) + y * outputPitch;
55 memcpy(dest, source, width);
56 }
57}
58
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +000059void Image::loadAlphaFloatDataToRGBA(GLsizei width, GLsizei height,
60 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000061{
62 const float *source = NULL;
63 float *dest = NULL;
64
65 for (int y = 0; y < height; y++)
66 {
67 source = reinterpret_cast<const float*>(static_cast<const unsigned char*>(input) + y * inputPitch);
68 dest = reinterpret_cast<float*>(static_cast<unsigned char*>(output) + y * outputPitch);
69 for (int x = 0; x < width; x++)
70 {
71 dest[4 * x + 0] = 0;
72 dest[4 * x + 1] = 0;
73 dest[4 * x + 2] = 0;
74 dest[4 * x + 3] = source[x];
75 }
76 }
77}
78
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +000079void Image::loadAlphaHalfFloatDataToRGBA(GLsizei width, GLsizei height,
80 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +000081{
82 const unsigned short *source = NULL;
83 unsigned short *dest = NULL;
84
85 for (int y = 0; y < height; y++)
86 {
87 source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
88 dest = reinterpret_cast<unsigned short*>(static_cast<unsigned char*>(output) + y * outputPitch);
89 for (int x = 0; x < width; x++)
90 {
91 dest[4 * x + 0] = 0;
92 dest[4 * x + 1] = 0;
93 dest[4 * x + 2] = 0;
94 dest[4 * x + 3] = source[x];
95 }
96 }
97}
98
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +000099void Image::loadLuminanceDataToNativeOrBGRA(GLsizei width, GLsizei height,
100 int inputPitch, const void *input, size_t outputPitch, void *output, bool native)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000101{
102 const unsigned char *source = NULL;
103 unsigned char *dest = NULL;
104
105 for (int y = 0; y < height; y++)
106 {
107 source = static_cast<const unsigned char*>(input) + y * inputPitch;
108 dest = static_cast<unsigned char*>(output) + y * outputPitch;
109
110 if (!native) // BGRA8 destination format
111 {
112 for (int x = 0; x < width; x++)
113 {
114 dest[4 * x + 0] = source[x];
115 dest[4 * x + 1] = source[x];
116 dest[4 * x + 2] = source[x];
117 dest[4 * x + 3] = 0xFF;
118 }
119 }
120 else // L8 destination format
121 {
122 memcpy(dest, source, width);
123 }
124 }
125}
126
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000127void Image::loadLuminanceFloatDataToRGBA(GLsizei width, GLsizei height,
128 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000129{
130 const float *source = NULL;
131 float *dest = NULL;
132
133 for (int y = 0; y < height; y++)
134 {
135 source = reinterpret_cast<const float*>(static_cast<const unsigned char*>(input) + y * inputPitch);
136 dest = reinterpret_cast<float*>(static_cast<unsigned char*>(output) + y * outputPitch);
137 for (int x = 0; x < width; x++)
138 {
139 dest[4 * x + 0] = source[x];
140 dest[4 * x + 1] = source[x];
141 dest[4 * x + 2] = source[x];
142 dest[4 * x + 3] = 1.0f;
143 }
144 }
145}
146
daniel@transgaming.com26041c92013-01-11 04:08:58 +0000147void Image::loadLuminanceFloatDataToRGB(GLsizei width, GLsizei height,
148 int inputPitch, const void *input, size_t outputPitch, void *output)
149{
150 const float *source = NULL;
151 float *dest = NULL;
152
153 for (int y = 0; y < height; y++)
154 {
155 source = reinterpret_cast<const float*>(static_cast<const unsigned char*>(input) + y * inputPitch);
156 dest = reinterpret_cast<float*>(static_cast<unsigned char*>(output) + y * outputPitch);
157 for (int x = 0; x < width; x++)
158 {
159 dest[3 * x + 0] = source[x];
160 dest[3 * x + 1] = source[x];
161 dest[3 * x + 2] = source[x];
162 }
163 }
164}
165
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000166void Image::loadLuminanceHalfFloatDataToRGBA(GLsizei width, GLsizei height,
167 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000168{
169 const unsigned short *source = NULL;
170 unsigned short *dest = NULL;
171
172 for (int y = 0; y < height; y++)
173 {
174 source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
175 dest = reinterpret_cast<unsigned short*>(static_cast<unsigned char*>(output) + y * outputPitch);
176 for (int x = 0; x < width; x++)
177 {
178 dest[4 * x + 0] = source[x];
179 dest[4 * x + 1] = source[x];
180 dest[4 * x + 2] = source[x];
181 dest[4 * x + 3] = 0x3C00; // SEEEEEMMMMMMMMMM, S = 0, E = 15, M = 0: 16bit flpt representation of 1
182 }
183 }
184}
185
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000186void Image::loadLuminanceAlphaDataToNativeOrBGRA(GLsizei width, GLsizei height,
187 int inputPitch, const void *input, size_t outputPitch, void *output, bool native)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000188{
189 const unsigned char *source = NULL;
190 unsigned char *dest = NULL;
191
192 for (int y = 0; y < height; y++)
193 {
194 source = static_cast<const unsigned char*>(input) + y * inputPitch;
195 dest = static_cast<unsigned char*>(output) + y * outputPitch;
196
197 if (!native) // BGRA8 destination format
198 {
199 for (int x = 0; x < width; x++)
200 {
201 dest[4 * x + 0] = source[2*x+0];
202 dest[4 * x + 1] = source[2*x+0];
203 dest[4 * x + 2] = source[2*x+0];
204 dest[4 * x + 3] = source[2*x+1];
205 }
206 }
207 else
208 {
209 memcpy(dest, source, width * 2);
210 }
211 }
212}
213
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000214void Image::loadLuminanceAlphaFloatDataToRGBA(GLsizei width, GLsizei height,
215 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000216{
217 const float *source = NULL;
218 float *dest = NULL;
219
220 for (int y = 0; y < height; y++)
221 {
222 source = reinterpret_cast<const float*>(static_cast<const unsigned char*>(input) + y * inputPitch);
223 dest = reinterpret_cast<float*>(static_cast<unsigned char*>(output) + y * outputPitch);
224 for (int x = 0; x < width; x++)
225 {
226 dest[4 * x + 0] = source[2*x+0];
227 dest[4 * x + 1] = source[2*x+0];
228 dest[4 * x + 2] = source[2*x+0];
229 dest[4 * x + 3] = source[2*x+1];
230 }
231 }
232}
233
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000234void Image::loadLuminanceAlphaHalfFloatDataToRGBA(GLsizei width, GLsizei height,
235 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000236{
237 const unsigned short *source = NULL;
238 unsigned short *dest = NULL;
239
240 for (int y = 0; y < height; y++)
241 {
242 source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
243 dest = reinterpret_cast<unsigned short*>(static_cast<unsigned char*>(output) + y * outputPitch);
244 for (int x = 0; x < width; x++)
245 {
246 dest[4 * x + 0] = source[2*x+0];
247 dest[4 * x + 1] = source[2*x+0];
248 dest[4 * x + 2] = source[2*x+0];
249 dest[4 * x + 3] = source[2*x+1];
250 }
251 }
252}
253
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000254void Image::loadRGBUByteDataToBGRX(GLsizei width, GLsizei height,
255 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000256{
257 const unsigned char *source = NULL;
258 unsigned char *dest = NULL;
259
260 for (int y = 0; y < height; y++)
261 {
262 source = static_cast<const unsigned char*>(input) + y * inputPitch;
263 dest = static_cast<unsigned char*>(output) + y * outputPitch;
264 for (int x = 0; x < width; x++)
265 {
266 dest[4 * x + 0] = source[x * 3 + 2];
267 dest[4 * x + 1] = source[x * 3 + 1];
268 dest[4 * x + 2] = source[x * 3 + 0];
269 dest[4 * x + 3] = 0xFF;
270 }
271 }
272}
273
daniel@transgaming.com005979d2012-12-20 21:11:29 +0000274void Image::loadRGBUByteDataToRGBA(GLsizei width, GLsizei height,
275 int inputPitch, const void *input, size_t outputPitch, void *output)
276{
277 const unsigned char *source = NULL;
278 unsigned char *dest = NULL;
279
280 for (int y = 0; y < height; y++)
281 {
282 source = static_cast<const unsigned char*>(input) + y * inputPitch;
283 dest = static_cast<unsigned char*>(output) + y * outputPitch;
284 for (int x = 0; x < width; x++)
285 {
286 dest[4 * x + 0] = source[x * 3 + 0];
287 dest[4 * x + 1] = source[x * 3 + 1];
288 dest[4 * x + 2] = source[x * 3 + 2];
289 dest[4 * x + 3] = 0xFF;
290 }
291 }
292}
293
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000294void Image::loadRGB565DataToBGRA(GLsizei width, GLsizei height,
295 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000296{
297 const unsigned short *source = NULL;
298 unsigned char *dest = NULL;
299
300 for (int y = 0; y < height; y++)
301 {
302 source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
303 dest = static_cast<unsigned char*>(output) + y * outputPitch;
304 for (int x = 0; x < width; x++)
305 {
306 unsigned short rgba = source[x];
307 dest[4 * x + 0] = ((rgba & 0x001F) << 3) | ((rgba & 0x001F) >> 2);
308 dest[4 * x + 1] = ((rgba & 0x07E0) >> 3) | ((rgba & 0x07E0) >> 9);
309 dest[4 * x + 2] = ((rgba & 0xF800) >> 8) | ((rgba & 0xF800) >> 13);
310 dest[4 * x + 3] = 0xFF;
311 }
312 }
313}
314
daniel@transgaming.com005979d2012-12-20 21:11:29 +0000315void Image::loadRGB565DataToRGBA(GLsizei width, GLsizei height,
316 int inputPitch, const void *input, size_t outputPitch, void *output)
317{
318 const unsigned short *source = NULL;
319 unsigned char *dest = NULL;
320
321 for (int y = 0; y < height; y++)
322 {
323 source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
324 dest = static_cast<unsigned char*>(output) + y * outputPitch;
325 for (int x = 0; x < width; x++)
326 {
327 unsigned short rgba = source[x];
328 dest[4 * x + 0] = ((rgba & 0xF800) >> 8) | ((rgba & 0xF800) >> 13);
329 dest[4 * x + 1] = ((rgba & 0x07E0) >> 3) | ((rgba & 0x07E0) >> 9);
330 dest[4 * x + 2] = ((rgba & 0x001F) << 3) | ((rgba & 0x001F) >> 2);
331 dest[4 * x + 3] = 0xFF;
332 }
333 }
334}
335
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000336void Image::loadRGBFloatDataToRGBA(GLsizei width, GLsizei height,
337 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000338{
339 const float *source = NULL;
340 float *dest = NULL;
341
342 for (int y = 0; y < height; y++)
343 {
344 source = reinterpret_cast<const float*>(static_cast<const unsigned char*>(input) + y * inputPitch);
345 dest = reinterpret_cast<float*>(static_cast<unsigned char*>(output) + y * outputPitch);
346 for (int x = 0; x < width; x++)
347 {
348 dest[4 * x + 0] = source[x * 3 + 0];
349 dest[4 * x + 1] = source[x * 3 + 1];
350 dest[4 * x + 2] = source[x * 3 + 2];
351 dest[4 * x + 3] = 1.0f;
352 }
353 }
354}
355
daniel@transgaming.com005979d2012-12-20 21:11:29 +0000356void Image::loadRGBFloatDataToNative(GLsizei width, GLsizei height,
357 int inputPitch, const void *input, size_t outputPitch, void *output)
358{
359 const float *source = NULL;
360 float *dest = NULL;
361
362 for (int y = 0; y < height; y++)
363 {
364 source = reinterpret_cast<const float*>(static_cast<const unsigned char*>(input) + y * inputPitch);
365 dest = reinterpret_cast<float*>(static_cast<unsigned char*>(output) + y * outputPitch);
366 memcpy(dest, source, width * 12);
367 }
368}
369
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000370void Image::loadRGBHalfFloatDataToRGBA(GLsizei width, GLsizei height,
371 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000372{
373 const unsigned short *source = NULL;
374 unsigned short *dest = NULL;
375
376 for (int y = 0; y < height; y++)
377 {
378 source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
379 dest = reinterpret_cast<unsigned short*>(static_cast<unsigned char*>(output) + y * outputPitch);
380 for (int x = 0; x < width; x++)
381 {
382 dest[4 * x + 0] = source[x * 3 + 0];
383 dest[4 * x + 1] = source[x * 3 + 1];
384 dest[4 * x + 2] = source[x * 3 + 2];
385 dest[4 * x + 3] = 0x3C00; // SEEEEEMMMMMMMMMM, S = 0, E = 15, M = 0: 16bit flpt representation of 1
386 }
387 }
388}
389
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000390void Image::loadRGBAUByteDataToBGRA(GLsizei width, GLsizei height,
391 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000392{
393 const unsigned int *source = NULL;
394 unsigned int *dest = NULL;
395 for (int y = 0; y < height; y++)
396 {
397 source = reinterpret_cast<const unsigned int*>(static_cast<const unsigned char*>(input) + y * inputPitch);
398 dest = reinterpret_cast<unsigned int*>(static_cast<unsigned char*>(output) + y * outputPitch);
399
400 for (int x = 0; x < width; x++)
401 {
402 unsigned int rgba = source[x];
403 dest[x] = (_rotl(rgba, 16) & 0x00ff00ff) | (rgba & 0xff00ff00);
404 }
405 }
406}
407
daniel@transgaming.com005979d2012-12-20 21:11:29 +0000408void Image::loadRGBAUByteDataToNative(GLsizei width, GLsizei height,
409 int inputPitch, const void *input, size_t outputPitch, void *output)
410{
411 const unsigned int *source = NULL;
412 unsigned int *dest = NULL;
413 for (int y = 0; y < height; y++)
414 {
415 source = reinterpret_cast<const unsigned int*>(static_cast<const unsigned char*>(input) + y * inputPitch);
416 dest = reinterpret_cast<unsigned int*>(static_cast<unsigned char*>(output) + y * outputPitch);
417
418 memcpy(dest, source, width * 4);
419 }
420}
421
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000422void Image::loadRGBA4444DataToBGRA(GLsizei width, GLsizei height,
423 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000424{
425 const unsigned short *source = NULL;
426 unsigned char *dest = NULL;
427
428 for (int y = 0; y < height; y++)
429 {
430 source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
431 dest = static_cast<unsigned char*>(output) + y * outputPitch;
432 for (int x = 0; x < width; x++)
433 {
434 unsigned short rgba = source[x];
435 dest[4 * x + 0] = ((rgba & 0x00F0) << 0) | ((rgba & 0x00F0) >> 4);
436 dest[4 * x + 1] = ((rgba & 0x0F00) >> 4) | ((rgba & 0x0F00) >> 8);
437 dest[4 * x + 2] = ((rgba & 0xF000) >> 8) | ((rgba & 0xF000) >> 12);
438 dest[4 * x + 3] = ((rgba & 0x000F) << 4) | ((rgba & 0x000F) >> 0);
439 }
440 }
441}
442
daniel@transgaming.com005979d2012-12-20 21:11:29 +0000443void Image::loadRGBA4444DataToRGBA(GLsizei width, GLsizei height,
444 int inputPitch, const void *input, size_t outputPitch, void *output)
445{
446 const unsigned short *source = NULL;
447 unsigned char *dest = NULL;
448
449 for (int y = 0; y < height; y++)
450 {
451 source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
452 dest = static_cast<unsigned char*>(output) + y * outputPitch;
453 for (int x = 0; x < width; x++)
454 {
455 unsigned short rgba = source[x];
456 dest[4 * x + 0] = ((rgba & 0xF000) >> 8) | ((rgba & 0xF000) >> 12);
457 dest[4 * x + 1] = ((rgba & 0x0F00) >> 4) | ((rgba & 0x0F00) >> 8);
458 dest[4 * x + 2] = ((rgba & 0x00F0) << 0) | ((rgba & 0x00F0) >> 4);
459 dest[4 * x + 3] = ((rgba & 0x000F) << 4) | ((rgba & 0x000F) >> 0);
460 }
461 }
462}
463
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000464void Image::loadRGBA5551DataToBGRA(GLsizei width, GLsizei height,
465 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000466{
467 const unsigned short *source = NULL;
468 unsigned char *dest = NULL;
469
470 for (int y = 0; y < height; y++)
471 {
472 source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
473 dest = static_cast<unsigned char*>(output) + y * outputPitch;
474 for (int x = 0; x < width; x++)
475 {
476 unsigned short rgba = source[x];
477 dest[4 * x + 0] = ((rgba & 0x003E) << 2) | ((rgba & 0x003E) >> 3);
478 dest[4 * x + 1] = ((rgba & 0x07C0) >> 3) | ((rgba & 0x07C0) >> 8);
479 dest[4 * x + 2] = ((rgba & 0xF800) >> 8) | ((rgba & 0xF800) >> 13);
480 dest[4 * x + 3] = (rgba & 0x0001) ? 0xFF : 0;
481 }
482 }
483}
484
daniel@transgaming.com005979d2012-12-20 21:11:29 +0000485void Image::loadRGBA5551DataToRGBA(GLsizei width, GLsizei height,
486 int inputPitch, const void *input, size_t outputPitch, void *output)
487{
488 const unsigned short *source = NULL;
489 unsigned char *dest = NULL;
490
491 for (int y = 0; y < height; y++)
492 {
493 source = reinterpret_cast<const unsigned short*>(static_cast<const unsigned char*>(input) + y * inputPitch);
494 dest = static_cast<unsigned char*>(output) + y * outputPitch;
495 for (int x = 0; x < width; x++)
496 {
497 unsigned short rgba = source[x];
498 dest[4 * x + 0] = ((rgba & 0xF800) >> 8) | ((rgba & 0xF800) >> 13);
499 dest[4 * x + 1] = ((rgba & 0x07C0) >> 3) | ((rgba & 0x07C0) >> 8);
500 dest[4 * x + 2] = ((rgba & 0x003E) << 2) | ((rgba & 0x003E) >> 3);
501 dest[4 * x + 3] = (rgba & 0x0001) ? 0xFF : 0;
502 }
503 }
504}
505
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000506void Image::loadRGBAFloatDataToRGBA(GLsizei width, GLsizei height,
507 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000508{
509 const float *source = NULL;
510 float *dest = NULL;
511
512 for (int y = 0; y < height; y++)
513 {
514 source = reinterpret_cast<const float*>(static_cast<const unsigned char*>(input) + y * inputPitch);
515 dest = reinterpret_cast<float*>(static_cast<unsigned char*>(output) + y * outputPitch);
516 memcpy(dest, source, width * 16);
517 }
518}
519
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000520void Image::loadRGBAHalfFloatDataToRGBA(GLsizei width, GLsizei height,
521 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000522{
523 const unsigned char *source = NULL;
524 unsigned char *dest = NULL;
525
526 for (int y = 0; y < height; y++)
527 {
528 source = static_cast<const unsigned char*>(input) + y * inputPitch;
529 dest = static_cast<unsigned char*>(output) + y * outputPitch;
530 memcpy(dest, source, width * 8);
531 }
532}
533
daniel@transgaming.com8ca7d372012-12-20 21:11:22 +0000534void Image::loadBGRADataToBGRA(GLsizei width, GLsizei height,
535 int inputPitch, const void *input, size_t outputPitch, void *output)
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000536{
537 const unsigned char *source = NULL;
538 unsigned char *dest = NULL;
539
540 for (int y = 0; y < height; y++)
541 {
542 source = static_cast<const unsigned char*>(input) + y * inputPitch;
543 dest = static_cast<unsigned char*>(output) + y * outputPitch;
544 memcpy(dest, source, width*4);
545 }
546}
547
daniel@transgaming.comb9d7e6f2012-10-31 19:08:32 +0000548}