HRESULT D3DWMesh::DrawToRenderTargetInternals(ID3DWEffect *effect, ID3DWRenderTargetInternals *rtInternals) { HRESULT hr; if(_vbMapped || _ibMapped) { V_HR_BREAK("Mesh is mapped. Unable to draw."); return HRESULT_FROM_WIN32(ERROR_INVALID_OPERATION); } if(!effect || !rtInternals) return E_POINTER; ComPtr<ID3DWEffectInternals> effectInternals; hr = effect->QueryInterface(IID_PPV_ARGS(&effectInternals)); if(FAILED(hr)) { V_HR_BREAK("Invalid effect object passed to ID3DWMesh::Draw"); return E_INVALIDARG; } _dc->IASetPrimitiveTopology(_topology); UINT stride = _vertexSize, offset = 0; _dc->IASetVertexBuffers(0, 1, _vb.AddressOf(), &stride, &offset); _dc->IASetIndexBuffer(_ib, DXGI_FORMAT_R32_UINT, 0); hr = effectInternals->LockTargets(rtInternals); if(FAILED(hr)) { V_HR_BREAK("Unable draw to object because it is already bound as shader resource"); return hr; } hr = rtInternals->SetAsTarget(); if(FAILED(hr)) { effectInternals->UnlockTargets(); return hr; } hr = effectInternals->Apply(); if(FAILED(hr)) { effectInternals->UnlockTargets(); return hr; } _dc->DrawIndexed(_nIndices, 0, 0); effectInternals->UnlockTargets(); return S_OK; }