void D3D11Renderer::DrawImmediate( SGRX_ImmDrawData& idd ) { LOG_FUNCTION; SGRX_ScopedMtxLock LOCK( &m_mutex ); SetVertexShader( idd.vertexShader ); SetPixelShader( idd.pixelShader ); SetRenderState( idd.renderState ); m_vertbuf_batchverts.Upload( m_dev, m_ctx, idd.vertices, idd.vertexDecl->m_info.size * idd.vertexCount ); if( idd.shdata && idd.shvcount ) m_cbuf_ps_batchverts.Upload( m_dev, m_ctx, idd.shdata, sizeof(*idd.shdata) * idd.shvcount ); m_ctx->VSSetConstantBuffers( 0, 1, &m_cbuf_vs_batchverts ); m_ctx->PSSetConstantBuffers( 0, 1, m_cbuf_ps_batchverts.PPBuf() ); ID3D11ShaderResourceView* srvs[ SGRX_MAX_TEXTURES ]; ID3D11SamplerState* smps[ SGRX_MAX_TEXTURES ]; for( int i = 0; i < SGRX_MAX_TEXTURES; ++i ) { SGRX_ITexture* tex = idd.textures[ i ]; srvs[ i ] = tex ? ((D3D11Texture*)tex)->m_rsrcView : NULL; smps[ i ] = tex ? ((D3D11Texture*)tex)->m_sampState : m_sampState; } m_ctx->PSSetShaderResources( 0, SGRX_MAX_TEXTURES, srvs ); m_ctx->PSSetSamplers( 0, SGRX_MAX_TEXTURES, smps ); m_ctx->IASetPrimitiveTopology( conv_prim_type( idd.primType ) ); m_ctx->IASetInputLayout( ((D3D11VertexInputMapping*) idd.vertexInputMapping)->m_inputLayout ); ID3D11Buffer* vbufs[2] = { m_vertbuf_batchverts, m_vertbuf_defaults }; static const UINT strides[2] = { idd.vertexDecl->m_info.size, sizeof(BackupVertexData) }; // [2015-12-21 14:46] wat static const UINT offsets[2] = { 0, 0 }; m_ctx->IASetVertexBuffers( 0, 2, vbufs, strides, offsets ); m_ctx->Draw( idd.vertexCount, 0 ); }