1 #include "precompiled.h"
2 //
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
8 // 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
12 #include "libGLESv2/renderer/Image.h"
13
14 namespace rx
15 {
16
Image()17 Image::Image()
18 {
19 mWidth = 0;
20 mHeight = 0;
21 mInternalFormat = GL_NONE;
22 mActualFormat = GL_NONE;
23 }
24
loadAlphaDataToBGRA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)25 void Image::loadAlphaDataToBGRA(GLsizei width, GLsizei height,
26 int inputPitch, const void *input, size_t outputPitch, void *output)
27 {
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
loadAlphaDataToNative(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)45 void 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
loadAlphaFloatDataToRGBA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)59 void Image::loadAlphaFloatDataToRGBA(GLsizei width, GLsizei height,
60 int inputPitch, const void *input, size_t outputPitch, void *output)
61 {
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
loadAlphaHalfFloatDataToRGBA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)79 void Image::loadAlphaHalfFloatDataToRGBA(GLsizei width, GLsizei height,
80 int inputPitch, const void *input, size_t outputPitch, void *output)
81 {
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
loadLuminanceDataToNativeOrBGRA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output,bool native)99 void Image::loadLuminanceDataToNativeOrBGRA(GLsizei width, GLsizei height,
100 int inputPitch, const void *input, size_t outputPitch, void *output, bool native)
101 {
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
loadLuminanceFloatDataToRGBA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)127 void Image::loadLuminanceFloatDataToRGBA(GLsizei width, GLsizei height,
128 int inputPitch, const void *input, size_t outputPitch, void *output)
129 {
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
loadLuminanceFloatDataToRGB(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)147 void 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
loadLuminanceHalfFloatDataToRGBA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)166 void Image::loadLuminanceHalfFloatDataToRGBA(GLsizei width, GLsizei height,
167 int inputPitch, const void *input, size_t outputPitch, void *output)
168 {
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
loadLuminanceAlphaDataToNativeOrBGRA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output,bool native)186 void Image::loadLuminanceAlphaDataToNativeOrBGRA(GLsizei width, GLsizei height,
187 int inputPitch, const void *input, size_t outputPitch, void *output, bool native)
188 {
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
loadLuminanceAlphaFloatDataToRGBA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)214 void Image::loadLuminanceAlphaFloatDataToRGBA(GLsizei width, GLsizei height,
215 int inputPitch, const void *input, size_t outputPitch, void *output)
216 {
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
loadLuminanceAlphaHalfFloatDataToRGBA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)234 void Image::loadLuminanceAlphaHalfFloatDataToRGBA(GLsizei width, GLsizei height,
235 int inputPitch, const void *input, size_t outputPitch, void *output)
236 {
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
loadRGBUByteDataToBGRX(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)254 void Image::loadRGBUByteDataToBGRX(GLsizei width, GLsizei height,
255 int inputPitch, const void *input, size_t outputPitch, void *output)
256 {
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
loadRGBUByteDataToRGBA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)274 void 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
loadRGB565DataToBGRA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)294 void Image::loadRGB565DataToBGRA(GLsizei width, GLsizei height,
295 int inputPitch, const void *input, size_t outputPitch, void *output)
296 {
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
loadRGB565DataToRGBA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)315 void 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
loadRGBFloatDataToRGBA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)336 void Image::loadRGBFloatDataToRGBA(GLsizei width, GLsizei height,
337 int inputPitch, const void *input, size_t outputPitch, void *output)
338 {
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
loadRGBFloatDataToNative(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)356 void 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
loadRGBHalfFloatDataToRGBA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)370 void Image::loadRGBHalfFloatDataToRGBA(GLsizei width, GLsizei height,
371 int inputPitch, const void *input, size_t outputPitch, void *output)
372 {
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
loadRGBAUByteDataToBGRA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)390 void Image::loadRGBAUByteDataToBGRA(GLsizei width, GLsizei height,
391 int inputPitch, const void *input, size_t outputPitch, void *output)
392 {
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
loadRGBAUByteDataToNative(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)408 void 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
loadRGBA4444DataToBGRA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)422 void Image::loadRGBA4444DataToBGRA(GLsizei width, GLsizei height,
423 int inputPitch, const void *input, size_t outputPitch, void *output)
424 {
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
loadRGBA4444DataToRGBA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)443 void 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
loadRGBA5551DataToBGRA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)464 void Image::loadRGBA5551DataToBGRA(GLsizei width, GLsizei height,
465 int inputPitch, const void *input, size_t outputPitch, void *output)
466 {
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
loadRGBA5551DataToRGBA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)485 void 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
loadRGBAFloatDataToRGBA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)506 void Image::loadRGBAFloatDataToRGBA(GLsizei width, GLsizei height,
507 int inputPitch, const void *input, size_t outputPitch, void *output)
508 {
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
loadRGBAHalfFloatDataToRGBA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)520 void Image::loadRGBAHalfFloatDataToRGBA(GLsizei width, GLsizei height,
521 int inputPitch, const void *input, size_t outputPitch, void *output)
522 {
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
loadBGRADataToBGRA(GLsizei width,GLsizei height,int inputPitch,const void * input,size_t outputPitch,void * output)534 void Image::loadBGRADataToBGRA(GLsizei width, GLsizei height,
535 int inputPitch, const void *input, size_t outputPitch, void *output)
536 {
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
548 }
549