#include "Texture.h" namespace wrl = Microsoft::WRL; Texture::Texture(Graphics& gfx, Surface& surface) { // create texture resource D3D11_TEXTURE2D_DESC textureDesc = {}; textureDesc.Width = surface.GetWidth(); textureDesc.Height = surface.GetHeight(); textureDesc.MipLevels = 1; textureDesc.ArraySize = 1; textureDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; textureDesc.SampleDesc.Count = 1; textureDesc.SampleDesc.Quality = 0; textureDesc.Usage = D3D11_USAGE_DEFAULT; textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE; textureDesc.CPUAccessFlags = 0; textureDesc.MiscFlags = 0; D3D11_SUBRESOURCE_DATA sd = {}; sd.pSysMem = surface.GetImageData(); sd.SysMemPitch = surface.GetBytesPerRow(); sd.SysMemSlicePitch = surface.GetBytesPerRow() * surface.GetHeight(); wrl::ComPtr pTexture; GetDevice(gfx)->CreateTexture2D( &textureDesc, &sd, &pTexture ); // create the resource view on the texture D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc = {}; srvDesc.Format = textureDesc.Format; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; srvDesc.Texture2D.MostDetailedMip = 0; srvDesc.Texture2D.MipLevels = 1; GetDevice(gfx)->CreateShaderResourceView( pTexture.Get(), &srvDesc, &pTextureView ); } void Texture::Bind(Graphics& gfx, UINT slot, Logger& logger) { for (auto& surface : surfaces) { GetContext(gfx)->PSSetShaderResources(surface->GetCurrSlot(), 1u, pTextureView.GetAddressOf()); } }