| Index: core/win/d3d9/texture_d3d9.cc
|
| ===================================================================
|
| --- core/win/d3d9/texture_d3d9.cc (revision 20557)
|
| +++ core/win/d3d9/texture_d3d9.cc (working copy)
|
| @@ -231,6 +231,7 @@
|
| enable_render_surfaces),
|
| d3d_texture_(tex) {
|
| DCHECK(tex);
|
| + backing_bitmap_ = Bitmap::Ref(new Bitmap(service_locator));
|
| }
|
|
|
| // Attempts to create a IDirect3DTexture9 with the given specs. If the creation
|
| @@ -263,8 +264,8 @@
|
| resize_to_pot,
|
| enable_render_surfaces);
|
|
|
| - texture->backing_bitmap_.SetFrom(bitmap);
|
| - if (texture->backing_bitmap_.image_data()) {
|
| + texture->backing_bitmap_->SetFrom(bitmap);
|
| + if (texture->backing_bitmap_->image_data()) {
|
| for (unsigned int i = 0; i < bitmap->num_mipmaps(); ++i) {
|
| if (!texture->UpdateBackedMipLevel(i)) {
|
| DLOG(ERROR) << "Failed to upload bitmap to texture.";
|
| @@ -275,12 +276,12 @@
|
| mip_height = std::max(1U, mip_height >> 1);
|
| }
|
| if (!resize_to_pot)
|
| - texture->backing_bitmap_.FreeData();
|
| + texture->backing_bitmap_->FreeData();
|
| } else {
|
| if (resize_to_pot) {
|
| - texture->backing_bitmap_.AllocateData();
|
| - memset(texture->backing_bitmap_.image_data(), 0,
|
| - texture->backing_bitmap_.GetTotalSize());
|
| + texture->backing_bitmap_->AllocateData();
|
| + memset(texture->backing_bitmap_->image_data(), 0,
|
| + texture->backing_bitmap_->GetTotalSize());
|
| }
|
| }
|
|
|
| @@ -294,11 +295,11 @@
|
|
|
| bool Texture2DD3D9::UpdateBackedMipLevel(unsigned int level) {
|
| DCHECK_LT(level, static_cast<unsigned int>(levels()));
|
| - DCHECK(backing_bitmap_.image_data());
|
| - DCHECK_EQ(backing_bitmap_.width(), width());
|
| - DCHECK_EQ(backing_bitmap_.height(), height());
|
| - DCHECK_EQ(backing_bitmap_.format(), format());
|
| - DCHECK_EQ(backing_bitmap_.num_mipmaps(), levels());
|
| + DCHECK(backing_bitmap_->image_data());
|
| + DCHECK_EQ(backing_bitmap_->width(), width());
|
| + DCHECK_EQ(backing_bitmap_->height(), height());
|
| + DCHECK_EQ(backing_bitmap_->format(), format());
|
| + DCHECK_EQ(backing_bitmap_->num_mipmaps(), levels());
|
|
|
| unsigned int mip_width = std::max(1, width() >> level);
|
| unsigned int mip_height = std::max(1, height() >> level);
|
| @@ -322,7 +323,7 @@
|
| // TODO: check that the returned pitch is what we expect.
|
|
|
| const unsigned char *mip_data =
|
| - backing_bitmap_.GetMipData(level, TextureCUBE::FACE_POSITIVE_X);
|
| + backing_bitmap_->GetMipData(level, TextureCUBE::FACE_POSITIVE_X);
|
| if (resize_to_pot_) {
|
| Bitmap::Scale(mip_width, mip_height, format(), mip_data,
|
| rect_width, rect_height,
|
| @@ -393,8 +394,8 @@
|
| return false;
|
| }
|
| if (resize_to_pot_) {
|
| - DCHECK(backing_bitmap_.image_data());
|
| - *texture_data = backing_bitmap_.GetMipData(level,
|
| + DCHECK(backing_bitmap_->image_data());
|
| + *texture_data = backing_bitmap_->GetMipData(level,
|
| TextureCUBE::FACE_POSITIVE_X);
|
| locked_levels_ |= 1 << level;
|
| return true;
|
| @@ -459,7 +460,7 @@
|
| bool resize_to_pot;
|
| unsigned int mip_width, mip_height;
|
| return HR(CreateTexture2DD3D9(renderer_d3d9,
|
| - &backing_bitmap_,
|
| + backing_bitmap_,
|
| render_surfaces_enabled(),
|
| &resize_to_pot,
|
| &mip_width,
|
| @@ -487,6 +488,7 @@
|
| resize_to_pot,
|
| enable_render_surfaces),
|
| d3d_cube_texture_(tex) {
|
| + backing_bitmap_ = Bitmap::Ref(new Bitmap(service_locator));
|
| }
|
|
|
| // Attempts to create a D3D9 CubeTexture with the given specs. If creation
|
| @@ -519,8 +521,8 @@
|
| resize_to_pot,
|
| enable_render_surfaces);
|
|
|
| - texture->backing_bitmap_.SetFrom(bitmap);
|
| - if (texture->backing_bitmap_.image_data()) {
|
| + texture->backing_bitmap_->SetFrom(bitmap);
|
| + if (texture->backing_bitmap_->image_data()) {
|
| for (int face = 0; face < 6; ++face) {
|
| unsigned int mip_edge = edge;
|
| for (unsigned int i = 0; i < bitmap->num_mipmaps(); ++i) {
|
| @@ -533,12 +535,12 @@
|
| }
|
| }
|
| if (!resize_to_pot)
|
| - texture->backing_bitmap_.FreeData();
|
| + texture->backing_bitmap_->FreeData();
|
| } else {
|
| if (resize_to_pot) {
|
| - texture->backing_bitmap_.AllocateData();
|
| - memset(texture->backing_bitmap_.image_data(), 0,
|
| - texture->backing_bitmap_.GetTotalSize());
|
| + texture->backing_bitmap_->AllocateData();
|
| + memset(texture->backing_bitmap_->image_data(), 0,
|
| + texture->backing_bitmap_->GetTotalSize());
|
| }
|
| }
|
|
|
| @@ -563,12 +565,12 @@
|
| bool TextureCUBED3D9::UpdateBackedMipLevel(unsigned int level,
|
| TextureCUBE::CubeFace face) {
|
| DCHECK_LT(level, static_cast<unsigned int>(levels()));
|
| - DCHECK(backing_bitmap_.image_data());
|
| - DCHECK(backing_bitmap_.is_cubemap());
|
| - DCHECK_EQ(backing_bitmap_.width(), edge_length());
|
| - DCHECK_EQ(backing_bitmap_.height(), edge_length());
|
| - DCHECK_EQ(backing_bitmap_.format(), format());
|
| - DCHECK_EQ(backing_bitmap_.num_mipmaps(), levels());
|
| + DCHECK(backing_bitmap_->image_data());
|
| + DCHECK(backing_bitmap_->is_cubemap());
|
| + DCHECK_EQ(backing_bitmap_->width(), edge_length());
|
| + DCHECK_EQ(backing_bitmap_->height(), edge_length());
|
| + DCHECK_EQ(backing_bitmap_->format(), format());
|
| + DCHECK_EQ(backing_bitmap_->num_mipmaps(), levels());
|
|
|
| unsigned int mip_edge = std::max(1, edge_length() >> level);
|
| unsigned int rect_edge = mip_edge;
|
| @@ -590,7 +592,7 @@
|
| DCHECK(out_rect.pBits);
|
| // TODO: check that the returned pitch is what we expect.
|
|
|
| - const unsigned char *mip_data = backing_bitmap_.GetMipData(level, face);
|
| + const unsigned char *mip_data = backing_bitmap_->GetMipData(level, face);
|
| if (resize_to_pot_) {
|
| Bitmap::Scale(mip_edge, mip_edge, format(), mip_data,
|
| rect_edge, rect_edge,
|
| @@ -664,8 +666,8 @@
|
| return false;
|
| }
|
| if (resize_to_pot_) {
|
| - DCHECK(backing_bitmap_.image_data());
|
| - *texture_data = backing_bitmap_.GetMipData(level, face);
|
| + DCHECK(backing_bitmap_->image_data());
|
| + *texture_data = backing_bitmap_->GetMipData(level, face);
|
| locked_levels_[face] |= 1 << level;
|
| return true;
|
| } else {
|
| @@ -731,7 +733,7 @@
|
| bool resize_to_pot;
|
| unsigned int mip_edge;
|
| return HR(CreateTextureCUBED3D9(renderer_d3d9,
|
| - &backing_bitmap_,
|
| + backing_bitmap_,
|
| render_surfaces_enabled(),
|
| &resize_to_pot,
|
| &mip_edge,
|
|
|