Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Zitat von »"zodX"«
Ich habe bereits ALLES KOMPLETT durchgelesen. Haste nix kapiert, hmmm?? :lol:
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
D3DX10_IMAGE_LOAD_INFO src_loaddesc; ID3D10ResourcePtr src_Resource; ID3D10Texture2DPtr src_Texture; D3D10_TEXTURE2D_DESC src_desc; D3D10_MAPPED_TEXTURE2D src_mappedTex; UCHAR* src_Texels; D3D10_TEXTURE2D_DESC dest_initDesc; ID3D10ResourcePtr dest_Resource; ID3D10Texture2DPtr dest_Bitmap_DX10; // Als DX10 fertig D3D10_MAPPED_TEXTURE2D dest_mappedTex; UCHAR* dest_Texels; D3D10_SHADER_RESOURCE_VIEW_DESC dest_rvDesc; ID3D10ShaderResourceView *dest_RView = NULL; IDXGISurfacePtr dest_xgiSurface; D2D1_BITMAP_PROPERTIES dest_props; ID2D1BitmapPtr dest_Bitmap_D2D; // Als D2D fertig // Die Gewunschene Textur angeben ZeroMemory( &src_loaddesc, sizeof(D3DX10_IMAGE_LOAD_INFO) ); src_loaddesc.MipLevels = 1; src_loaddesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; src_loaddesc.Usage = D3D10_USAGE_STAGING; src_loaddesc.CpuAccessFlags = D3D10_CPU_ACCESS_READ; if ( x!=0 ) src_loaddesc.Width = x; if ( y!=0 ) src_loaddesc.Height = y; D3DX10CreateTextureFromFile( m_spDevice, L"Filename", &src_loaddesc, NULL, &src_Resource, NULL ); src_Resource->QueryInterface(__uuidof(ID3D10Texture2DPtr), (LPVOID*)&src_Texture); src_Texture->GetDesc( &src_desc ); // Eine zweite leere Textur erzeugen ZeroMemory( &dest_initDesc, sizeof(D3D10_TEXTURE2D_DESC) ); dest_initDesc.Width = src_desc.Width; dest_initDesc.Height = src_desc.Height; dest_initDesc.MipLevels = dest_initDesc.ArraySize = 1; dest_initDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; dest_initDesc.SampleDesc.Count = 1; dest_initDesc.Usage = D3D10_USAGE_DYNAMIC; dest_initDesc.BindFlags = D3D10_BIND_SHADER_RESOURCE; dest_initDesc.CPUAccessFlags= D3D10_CPU_ACCESS_WRITE; m_spDevice->CreateTexture2D( &dest_initDesc, NULL, &dest_Bitmap_DX10 ); dest_Bitmap_DX10->QueryInterface(__uuidof(ID3D10ResourcePtr), (LPVOID*)&dest_Resource); // Gemaskten Alpha dort hineinkopieren src_Texture ->Map( D3D10CalcSubresource(0, 0, 1), D3D10_MAP_READ, 0, &src_mappedTex ); dest_Bitmap_DX10->Map( D3D10CalcSubresource(0, 0, 1), D3D10_MAP_WRITE_DISCARD, 0, &dest_mappedTex ); src_Texels = (UCHAR*) src_mappedTex.pData; dest_Texels = (UCHAR*)dest_mappedTex.pData; for( UINT row = 0; row < src_desc.Height; row++ ) { UINT rowStart = row * src_mappedTex.RowPitch; for( UINT col = 0; col < src_desc.Width; col++ ) { UINT colStart = col * 4; BYTE r = src_Texels[rowStart + colStart + 0]; BYTE g = src_Texels[rowStart + colStart + 1]; BYTE b = src_Texels[rowStart + colStart + 2]; BYTE a = src_Texels[rowStart + colStart + 3]; // Wenn ein total SchwarzerPixel if ( r==0 && g==0 && b==0 ) a=0; // dann volle Transparenz ( Transparent=0 Opaque=255 ) dest_Texels[rowStart + colStart + 0] = r; dest_Texels[rowStart + colStart + 1] = g; dest_Texels[rowStart + colStart + 2] = b; dest_Texels[rowStart + colStart + 3] = a; } } src_Texture ->Unmap( D3D10CalcSubresource(0, 0, 1) ); dest_Bitmap_DX10->Unmap( D3D10CalcSubresource(0, 0, 1) ); // Und noch den ResourceView für die Verwendung von Sprites oder Shadern erzeugen ZeroMemory( &dest_rvDesc, sizeof(D3D10_SHADER_RESOURCE_VIEW_DESC) ); dest_rvDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; dest_rvDesc.ViewDimension = D3D10_SRV_DIMENSION_TEXTURE2D; dest_rvDesc.Texture2D.MostDetailedMip = 0; dest_rvDesc.Texture2D.MipLevels = 1; m_spDevice->CreateShaderResourceView( dest_Resource, &dest_rvDesc, &dest_RView ); // Damit steht jetzt die Textur in DX10 und D2D gleichermaßen zur Verfügung... dest_Bitmap_DX10->QueryInterface(__uuidof(IDXGISurfacePtr), (LPVOID*)&dest_xgiSurface); dest_props = D2D1::BitmapProperties( D2D1::PixelFormat( DXGI_FORMAT_UNKNOWN ,D2D1_ALPHA_MODE_PREMULTIPLIED), 96, 96 ); //Only with Format_Unknown! RTarget->CreateSharedBitmap(__uuidof(IDXGISurfacePtr), dest_xgiSurface, &dest_props, &dest_Bitmap_D2D ); |
Alter Hase
Werbeanzeige