図0408a
両脇を暗くマスキング処理をしています。Bボタンでマスクが外れます。
void MaskSprite::OnDraw() {
auto Dev = App::GetApp()->GetDeviceResources();
auto pID3D11DeviceContext = Dev->GetD3DDeviceContext();
auto RenderStatePtr = Dev->GetRenderState();
pID3D11DeviceContext->OMSetBlendState(RenderStatePtr->GetAlphaBlendEx(), nullptr, 0xffffffff);
pID3D11DeviceContext->OMSetDepthStencilState(RenderStatePtr->GetDepthNone(), 0);
pID3D11DeviceContext->RSSetState(RenderStatePtr->GetCullNone());
ID3D11SamplerState* pSampler = nullptr;
pSampler = RenderStatePtr->GetLinearClamp();
pID3D11DeviceContext->PSSetSamplers(0, 1, &pSampler);
//シェーダの設定
//頂点シェーダ
pID3D11DeviceContext->VSSetShader(VSPCTSprite::GetPtr()->GetShader(), nullptr, 0);
//インプットレイアウトの設定
pID3D11DeviceContext->IASetInputLayout(VSPCTSprite::GetPtr()->GetInputLayout());
//ピクセルシェーダ
pID3D11DeviceContext->PSSetShader(PSPCTSprite::GetPtr()->GetShader(), nullptr, 0);
//個別処理
SpriteConstants sb;
//コンスタントバッファの作成
//行列の取得
auto PtrTrans = GetComponent<Transform>();
//行列の定義
bsm::Mat4x4 World;
World = PtrTrans->Get2DWorldMatrix();
//エミッシブ
sb.Emissive = Col4(0,0,0,1);
//デフィーズはすべて通す
sb.Diffuse = Col4(1, 1, 1, 1);
//行列の設定
sb.World = World;
//テクスチャ
auto shTex = App::GetApp()->GetResource<TextureResource>(m_TextureKey);
pID3D11DeviceContext->PSSetShaderResources(0, 1, shTex->GetShaderResourceView().GetAddressOf());
//コンスタントバッファの更新
pID3D11DeviceContext->UpdateSubresource(CBSprite::GetPtr()->GetBuffer(), 0, nullptr, &sb, 0, 0);
//コンスタントバッファの設定
ID3D11Buffer* pConstantBuffer = CBSprite::GetPtr()->GetBuffer();
//頂点シェーダに渡す
pID3D11DeviceContext->VSSetConstantBuffers(0, 1, &pConstantBuffer);
//ピクセルシェーダに渡す
pID3D11DeviceContext->PSSetConstantBuffers(0, 1, &pConstantBuffer);
//ストライドとオフセット
UINT stride = m_SpriteMesh->GetNumStride();
UINT offset = 0;
//描画方法のセット
pID3D11DeviceContext->IASetPrimitiveTopology(m_SpriteMesh->GetPrimitiveTopology());
//頂点バッファのセット
pID3D11DeviceContext->IASetVertexBuffers(0, 1, m_SpriteMesh->GetVertexBuffer().GetAddressOf(), &stride, &offset);
//インデックスバッファのセット
pID3D11DeviceContext->IASetIndexBuffer(m_SpriteMesh->GetIndexBuffer().Get(), DXGI_FORMAT_R16_UINT, 0);
//描画
pID3D11DeviceContext->DrawIndexed(m_SpriteMesh->GetNumIndicis(), 0, 0);
//後始末
Dev->InitializeStates();
}
SetDrawLayer(2);