Skip to content

SetOverlayTexture doesn't work with a ID3D11Texture2D #1883

Open
@itsMaebee

Description

@itsMaebee

I am attempting to create a overlay using a DirectX ID3D11Texture2D and no matter what I do I am continuously getting a 24 Error: Invalid Texture. There is no documentation on the exact format I need or anything to assist so I thought to make a issue in here. I am first creating a render target and putting it onto a Texture2D. Which holds my window pixel information.

Below is the code I use to create my texture.

bool CreateDeviceD3D(HWND hWnd)
{
// Setup swap chain
DXGI_SWAP_CHAIN_DESC sd;
ZeroMemory(&sd, sizeof(sd));
sd.BufferCount = 2;
sd.BufferDesc.Width = WIDTH;
sd.BufferDesc.Height = HEIGHT;
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
sd.BufferDesc.RefreshRate.Numerator = 60;
sd.BufferDesc.RefreshRate.Denominator = 1;
sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.OutputWindow = hWnd;
sd.SampleDesc.Count = 1;
sd.SampleDesc.Quality = 0;
sd.Windowed = TRUE;
sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;

UINT createDeviceFlags = 0;
//createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
D3D_FEATURE_LEVEL featureLevel;
const D3D_FEATURE_LEVEL featureLevelArray[2] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_0, };
HRESULT res = D3D11CreateDeviceAndSwapChain(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, createDeviceFlags, featureLevelArray, 2, D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &featureLevel, &g_pd3dDeviceContext);
if (res == DXGI_ERROR_UNSUPPORTED) // Try high-performance WARP software driver if hardware is not available.
	res = D3D11CreateDeviceAndSwapChain(nullptr, D3D_DRIVER_TYPE_WARP, nullptr, createDeviceFlags, featureLevelArray, 2, D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &featureLevel, &g_pd3dDeviceContext);
if (res != S_OK)
	return false;

CreateRenderTarget();
}

void CreateRenderTarget()
{
	
	g_pSwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer));
	g_pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &g_mainRenderTargetView);
	pBackBuffer->Release();
}




			
			
vrTex.handle = (void*)static_cast<ID3D11Texture2D*>(pBackBuffer);
			
vr::HmdVector2_t mouseScale = { (float)WIDTH, (float)HEIGHT };
VRTextureBounds_t bounds;
bounds.uMin = 0;
bounds.vMin = 0;
bounds.uMax = 1;
bounds.vMax = 1;
VROverlay()->SetOverlayTextureBounds(dashboardOverlayHandle, &bounds);
erroro2 = vr::VROverlay()->SetOverlayTexture(dashboardOverlayHandle, &vrTex);
if (erroro2 != vr::VROverlayError_None) {
	logger.log("Failed to Set Overlay Texture: %s\n", erroro2);
	return false;
}
			


If I use DirectX to get the pixels and set it using SetOverlayRaw it works fine but that isn't a suitable fix. Is there anything I could be missing? I am using ImGui for the overlay. I'm on Windows 10 with a NVIDIA graphics card and a AMD Ryzen 7 Card.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions