Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: core/cross/bitmap_dds.cc

Issue 159168: This fixes a number of things that are warnings in the Mac compiler.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « core/cross/bitmap.cc ('k') | core/cross/bitmap_png.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2009, Google Inc. 2 * Copyright 2009, Google Inc.
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 // [0-1] color0. 59 // [0-1] color0.
60 // [2-3] color1. 60 // [2-3] color1.
61 // [4-7] color bitmap, 2 bits per pixel. 61 // [4-7] color bitmap, 2 bits per pixel.
62 // So each of the 4-7 bytes represents one line, flipping a block is just 62 // So each of the 4-7 bytes represents one line, flipping a block is just
63 // flipping those bytes. 63 // flipping those bytes.
64 unsigned char tmp = block[4]; 64 unsigned char tmp = block[4];
65 block[4] = block[7]; 65 block[4] = block[7];
66 block[7] = tmp; 66 block[7] = tmp;
67 tmp = block[5]; 67 tmp = block[5];
68 block[5] = block[6]; 68 block[5] = block[6];
69 block[6] = block[5]; 69 block[6] = block[5];
ruudvangaal 2009/09/01 12:09:49 should be: block[6]=tmp
70 } 70 }
71 71
72 // Flips the first 2 lines of a DXT1 block in the y direction. 72 // Flips the first 2 lines of a DXT1 block in the y direction.
73 static void FlipDXT1BlockHalf(unsigned char *block) { 73 static void FlipDXT1BlockHalf(unsigned char *block) {
74 // See layout above. 74 // See layout above.
75 unsigned char tmp = block[4]; 75 unsigned char tmp = block[4];
76 block[4] = block[5]; 76 block[4] = block[5];
77 block[5] = tmp; 77 block[5] = tmp;
78 } 78 }
79 79
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 unsigned int line_0_1 = block[2] + 256 * (block[3] + 256 * block[4]); 140 unsigned int line_0_1 = block[2] + 256 * (block[3] + 256 * block[4]);
141 unsigned int line_2_3 = block[5] + 256 * (block[6] + 256 * block[7]); 141 unsigned int line_2_3 = block[5] + 256 * (block[6] + 256 * block[7]);
142 // swap lines 0 and 1 in line_0_1. 142 // swap lines 0 and 1 in line_0_1.
143 unsigned int line_1_0 = ((line_0_1 & 0x000fff) << 12) | 143 unsigned int line_1_0 = ((line_0_1 & 0x000fff) << 12) |
144 ((line_0_1 & 0xfff000) >> 12); 144 ((line_0_1 & 0xfff000) >> 12);
145 // swap lines 2 and 3 in line_2_3. 145 // swap lines 2 and 3 in line_2_3.
146 unsigned int line_3_2 = ((line_2_3 & 0x000fff) << 12) | 146 unsigned int line_3_2 = ((line_2_3 & 0x000fff) << 12) |
147 ((line_2_3 & 0xfff000) >> 12); 147 ((line_2_3 & 0xfff000) >> 12);
148 block[2] = line_3_2 & 0xff; 148 block[2] = line_3_2 & 0xff;
149 block[3] = (line_3_2 & 0xff00) >> 8; 149 block[3] = (line_3_2 & 0xff00) >> 8;
150 block[4] = (line_3_2 & 0xff0000) >> 8; 150 block[4] = (line_3_2 & 0xff0000) >> 8;
ruudvangaal 2009/09/01 13:28:10 Strips all bits to 0; use >>16 instead.
151 block[5] = line_1_0 & 0xff; 151 block[5] = line_1_0 & 0xff;
152 block[6] = (line_1_0 & 0xff00) >> 8; 152 block[6] = (line_1_0 & 0xff00) >> 8;
153 block[7] = (line_1_0 & 0xff0000) >> 8; 153 block[7] = (line_1_0 & 0xff0000) >> 8;
ruudvangaal 2009/09/01 13:28:10 Strips all bits to 0; use >>16 instead.
154 154
155 // And flip the DXT1 block using the above function. 155 // And flip the DXT1 block using the above function.
156 FlipDXT1BlockFull(block + 8); 156 FlipDXT1BlockFull(block + 8);
157 } 157 }
158 158
159 // Flips the first 2 lines of a DXT5 block in the y direction. 159 // Flips the first 2 lines of a DXT5 block in the y direction.
160 static void FlipDXT5BlockHalf(unsigned char *block) { 160 static void FlipDXT5BlockHalf(unsigned char *block) {
161 // See layout above. 161 // See layout above.
162 unsigned int line_0_1 = block[2] + 256 * (block[3] + 256 * block[4]); 162 unsigned int line_0_1 = block[2] + 256 * (block[3] + 256 * block[4]);
163 unsigned int line_1_0 = ((line_0_1 & 0x000fff) << 12) | 163 unsigned int line_1_0 = ((line_0_1 & 0x000fff) << 12) |
164 ((line_0_1 & 0xfff000) >> 12); 164 ((line_0_1 & 0xfff000) >> 12);
165 block[2] = line_1_0 & 0xff; 165 block[2] = line_1_0 & 0xff;
166 block[3] = (line_1_0 & 0xff00) >> 8; 166 block[3] = (line_1_0 & 0xff00) >> 8;
167 block[4] = (line_1_0 & 0xff0000) >> 8; 167 block[4] = (line_1_0 & 0xff0000) >> 8;
168 FlipDXT1BlockHalf(block + 8); 168 FlipDXT1BlockHalf(block + 8);
169 } 169 }
170 170
171 // Flips a DXTC image, by flipping and swapping DXTC blocks as appropriate. 171 // Flips a DXTC image, by flipping and swapping DXTC blocks as appropriate.
172 static void FlipDXTCImage(unsigned int width, 172 static void FlipDXTCImage(unsigned int width,
173 unsigned int height, 173 unsigned int height,
174 unsigned int levels, 174 unsigned int levels,
175 Texture::Format format, 175 Texture::Format format,
176 unsigned char *data) { 176 unsigned char *data) {
177 DCHECK(Bitmap::CheckImageDimensions(width, height)); 177 DCHECK(Bitmap::CheckImageDimensions(width, height));
178 // Height must be a power-of-two. 178 // Height must be a power-of-two.
179 DCHECK_EQ(height & (height - 1), 0); 179 DCHECK_EQ(height & (height - 1), 0u);
180 FlipBlockFunction full_block_function = NULL; 180 FlipBlockFunction full_block_function = NULL;
181 FlipBlockFunction half_block_function = NULL; 181 FlipBlockFunction half_block_function = NULL;
182 unsigned int block_bytes = 0; 182 unsigned int block_bytes = 0;
183 switch (format) { 183 switch (format) {
184 case Texture::DXT1: 184 case Texture::DXT1:
185 full_block_function = FlipDXT1BlockFull; 185 full_block_function = FlipDXT1BlockFull;
186 half_block_function = FlipDXT1BlockHalf; 186 half_block_function = FlipDXT1BlockHalf;
187 block_bytes = 8; 187 block_bytes = 8;
188 break; 188 break;
189 case Texture::DXT3: 189 case Texture::DXT3:
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 } 334 }
335 if (dds_width != dds_height) { 335 if (dds_width != dds_height) {
336 DLOG(ERROR) << "DDS file \"" << filename 336 DLOG(ERROR) << "DDS file \"" << filename
337 << "\" is a cube map but doesn't have square dimensions."; 337 << "\" is a cube map but doesn't have square dimensions.";
338 return false; 338 return false;
339 } 339 }
340 } 340 }
341 341
342 // The size of the buffer needed to hold four-component per pixel 342 // The size of the buffer needed to hold four-component per pixel
343 // image data, including MIPMaps 343 // image data, including MIPMaps
344 int components_per_pixel = 0; 344 unsigned int components_per_pixel = 0;
345 bool add_filler_alpha = false; 345 bool add_filler_alpha = false;
346 bool rgb_to_bgr = false; 346 bool rgb_to_bgr = false;
347 347
348 Texture::Format format = Texture::UNKNOWN_FORMAT; 348 Texture::Format format = Texture::UNKNOWN_FORMAT;
349 bool is_dxtc = false; 349 bool is_dxtc = false;
350 350
351 DDPIXELFORMAT &pixel_format = dd_surface_descriptor.ddpfPixelFormat; 351 DDPIXELFORMAT &pixel_format = dd_surface_descriptor.ddpfPixelFormat;
352 352
353 if (pixel_format.dwFlags & DDPF_FOURCC) { 353 if (pixel_format.dwFlags & DDPF_FOURCC) {
354 switch (pixel_format.dwFourCC) { 354 switch (pixel_format.dwFourCC) {
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 } 471 }
472 472
473 // Do pixel conversions on non-DXT images. 473 // Do pixel conversions on non-DXT images.
474 if (!is_dxtc) { 474 if (!is_dxtc) {
475 DCHECK(components_per_pixel == 3 || components_per_pixel == 4); 475 DCHECK(components_per_pixel == 3 || components_per_pixel == 4);
476 unsigned int pixel_count = disk_face_size / components_per_pixel; 476 unsigned int pixel_count = disk_face_size / components_per_pixel;
477 for (unsigned int face = 0; face < num_faces; ++face) { 477 for (unsigned int face = 0; face < num_faces; ++face) {
478 unsigned char *data = image_data.get() + face_size * face; 478 unsigned char *data = image_data.get() + face_size * face;
479 // convert to four components per pixel if necessary 479 // convert to four components per pixel if necessary
480 if (add_filler_alpha) { 480 if (add_filler_alpha) {
481 DCHECK_EQ(components_per_pixel, 3); 481 DCHECK_EQ(components_per_pixel, 3u);
482 XYZToXYZA(data, pixel_count); 482 XYZToXYZA(data, pixel_count);
483 } else { 483 } else {
484 DCHECK_EQ(components_per_pixel, 4); 484 DCHECK_EQ(components_per_pixel, 4u);
485 } 485 }
486 if (rgb_to_bgr) 486 if (rgb_to_bgr)
487 RGBAToBGRA(data, pixel_count); 487 RGBAToBGRA(data, pixel_count);
488 } 488 }
489 } 489 }
490 490
491 if (!is_cubemap) { 491 if (!is_cubemap) {
492 // NOTE: we flip the images to respect max/maya's UV orientation. 492 // NOTE: we flip the images to respect max/maya's UV orientation.
493 if (is_dxtc) { 493 if (is_dxtc) {
494 FlipDXTCImage(dds_width, dds_height, mip_count, format, image_data.get()); 494 FlipDXTCImage(dds_width, dds_height, mip_count, format, image_data.get());
(...skipping 24 matching lines...) Expand all
519 image_data_.swap(image_data); 519 image_data_.swap(image_data);
520 format_ = format; 520 format_ = format;
521 width_ = dds_width; 521 width_ = dds_width;
522 height_ = dds_height; 522 height_ = dds_height;
523 num_mipmaps_ = final_mip_count; 523 num_mipmaps_ = final_mip_count;
524 is_cubemap_ = is_cubemap; 524 is_cubemap_ = is_cubemap;
525 return true; 525 return true;
526 } 526 }
527 527
528 } // namespace o3d 528 } // namespace o3d
OLDNEW
« no previous file with comments | « core/cross/bitmap.cc ('k') | core/cross/bitmap_png.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698