| 267 | } |
| 268 | |
| 269 | inline ImTextureID LoadTexture_RGBA8(unsigned char* image_data, int image_width, int image_height) { |
| 270 | |
| 271 | // Create texture |
| 272 | D3D11_TEXTURE2D_DESC desc; |
| 273 | ZeroMemory(&desc, sizeof(desc)); |
| 274 | desc.Width = image_width; |
| 275 | desc.Height = image_height; |
| 276 | desc.MipLevels = 1; |
| 277 | desc.ArraySize = 1; |
| 278 | desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; |
| 279 | desc.SampleDesc.Count = 1; |
| 280 | desc.Usage = D3D11_USAGE_DEFAULT; |
| 281 | desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; |
| 282 | desc.CPUAccessFlags = 0; |
| 283 | |
| 284 | ID3D11Texture2D* pTexture = NULL; |
| 285 | D3D11_SUBRESOURCE_DATA subResource; |
| 286 | subResource.pSysMem = image_data; |
| 287 | subResource.SysMemPitch = desc.Width * 4; |
| 288 | subResource.SysMemSlicePitch = 0; |
| 289 | g_pd3dDevice->CreateTexture2D(&desc, &subResource, &pTexture); |
| 290 | |
| 291 | if (!pTexture) |
| 292 | return 0; |
| 293 | |
| 294 | // Create texture view |
| 295 | D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; |
| 296 | ZeroMemory(&srvDesc, sizeof(srvDesc)); |
| 297 | srvDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; |
| 298 | srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; |
| 299 | srvDesc.Texture2D.MipLevels = desc.MipLevels; |
| 300 | srvDesc.Texture2D.MostDetailedMip = 0; |
| 301 | ID3D11ShaderResourceView* res = 0; |
| 302 | g_pd3dDevice->CreateShaderResourceView(pTexture, &srvDesc, &res); |
| 303 | pTexture->Release(); |
| 304 | |
| 305 | return (ImTextureID)(void*)res; |
| 306 | } |
| 307 | |
| 308 | inline void CleanupTexture(ImTextureID t) { |
| 309 | ((ID3D11ShaderResourceView*)(void*)t)->Release(); |
no outgoing calls
no test coverage detected