Dx9BackEnd::Dx9BackEnd(Context *context, IDirect3DDevice9 *d3ddevice) : mDevice(d3ddevice) { mDevice->AddRef(); for (int i = 0; i < MAX_VERTEX_ATTRIBS; ++i) { mAppliedAttribEnabled[i] = true; mStreamFrequency[i] = STREAM_FREQUENCY_UNINSTANCED; } mStreamFrequency[MAX_VERTEX_ATTRIBS] = STREAM_FREQUENCY_UNINSTANCED; D3DCAPS9 caps = context->getDeviceCaps(); IDirect3D9 *d3dObject; mDevice->GetDirect3D(&d3dObject); D3DADAPTER_IDENTIFIER9 ident; d3dObject->GetAdapterIdentifier(caps.AdapterOrdinal, 0, &ident); d3dObject->Release(); // Instancing is mandatory for all HW with SM3 vertex shaders, but avoid hardware where it does not work. mUseInstancingForStrideZero = (caps.VertexShaderVersion >= D3DVS_VERSION(3, 0) && ident.VendorId != 0x8086); mSupportIntIndices = (caps.MaxVertexIndex >= (1 << 16)); checkVertexCaps(caps.DeclTypes); }
VertexDataManager::VertexDataManager(Context *context, IDirect3DDevice9 *device) : mContext(context), mDevice(device) { for (int i = 0; i < MAX_VERTEX_ATTRIBS; i++) { mDirtyCurrentValue[i] = true; mCurrentValueBuffer[i] = NULL; mCurrentValueOffsets[i] = 0; } const D3DCAPS9 &caps = context->getDeviceCaps(); checkVertexCaps(caps.DeclTypes); mStreamingBuffer = new StreamingVertexBuffer(mDevice, INITIAL_STREAM_BUFFER_SIZE); if (!mStreamingBuffer) { ERR("Failed to allocate the streaming vertex buffer."); } }