Texture::Lock DirectX11_Texture::_tryLockSystem(int x, int y, int w, int h) { Lock lock; Image::Format nativeFormat = april::rendersys->getNativeTextureFormat(this->format); int gpuBpp = Image::getFormatBpp(nativeFormat); D3D11_MAPPED_SUBRESOURCE* mappedSubResource = new D3D11_MAPPED_SUBRESOURCE(); memset(mappedSubResource, 0, sizeof(D3D11_MAPPED_SUBRESOURCE)); // Map() is being used for all, because UpdateSubResource() / UpdateSubResource1() seems to use Map() internally somewhere and the memory pointer can change HRESULT hr = APRIL_D3D_DEVICE_CONTEXT->Map(this->d3dTexture.Get(), 0, D3D11_MAP_WRITE_DISCARD, 0, mappedSubResource); if (!FAILED(hr)) { lock.systemBuffer = mappedSubResource; lock.activateLock(x, y, w, h, x, y, (unsigned char*)mappedSubResource->pData, mappedSubResource->RowPitch / gpuBpp, this->height, nativeFormat); } return lock; }