void Thin3DContext::CreatePresets() { // Build prebuilt objects T3DBlendStateDesc off = { false }; T3DBlendStateDesc additive = { true, T3DBlendEquation::ADD, T3DBlendFactor::ONE, T3DBlendFactor::ONE, T3DBlendEquation::ADD, T3DBlendFactor::ONE, T3DBlendFactor::ZERO }; T3DBlendStateDesc standard_alpha = { true, T3DBlendEquation::ADD, T3DBlendFactor::SRC_ALPHA, T3DBlendFactor::ONE_MINUS_SRC_ALPHA, T3DBlendEquation::ADD, T3DBlendFactor::ONE, T3DBlendFactor::ZERO }; T3DBlendStateDesc premul_alpha = { true, T3DBlendEquation::ADD, T3DBlendFactor::ONE, T3DBlendFactor::ONE_MINUS_SRC_ALPHA, T3DBlendEquation::ADD, T3DBlendFactor::ONE, T3DBlendFactor::ZERO }; bsPresets_[BS_OFF] = CreateBlendState(off); bsPresets_[BS_ADDITIVE] = CreateBlendState(additive); bsPresets_[BS_STANDARD_ALPHA] = CreateBlendState(standard_alpha); bsPresets_[BS_PREMUL_ALPHA] = CreateBlendState(premul_alpha); T3DSamplerStateDesc nearest = { CLAMP, CLAMP, NEAREST, NEAREST, NEAREST }; T3DSamplerStateDesc linear = { CLAMP, CLAMP, LINEAR, LINEAR, NEAREST }; sampsPresets_[SAMPS_NEAREST] = CreateSamplerState(nearest); sampsPresets_[SAMPS_LINEAR] = CreateSamplerState(linear); vsPresets_[VS_TEXTURE_COLOR_2D] = CreateVertexShader(glsl_vsTexCol, hlslVsTexCol, vulkan_vsTexCol); vsPresets_[VS_COLOR_2D] = CreateVertexShader(glsl_vsCol, hlslVsCol, vulkan_vsCol); fsPresets_[FS_TEXTURE_COLOR_2D] = CreateFragmentShader(glsl_fsTexCol, hlslFsTexCol, vulkan_fsTexCol); fsPresets_[FS_COLOR_2D] = CreateFragmentShader(glsl_fsCol, hlslFsCol, vulkan_fsCol); ssPresets_[SS_TEXTURE_COLOR_2D] = CreateShaderSet(vsPresets_[VS_TEXTURE_COLOR_2D], fsPresets_[FS_TEXTURE_COLOR_2D]); ssPresets_[SS_COLOR_2D] = CreateShaderSet(vsPresets_[VS_COLOR_2D], fsPresets_[FS_COLOR_2D]); }
ID3D11BlendState* RenderState::GetAlphaBlendEx()const{ if (!pImpl->m_AlphaBlendExPtr){ auto Dev = App::GetApp()->GetDeviceResources(); auto pDx11Device = Dev->GetD3DDevice(); D3D11_BLEND_DESC desc; ZeroMemory(&desc, sizeof(desc)); desc.RenderTarget[0].BlendEnable = true; desc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; desc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; // desc.RenderTarget[0].DestBlend = D3D11_BLEND_DEST_ALPHA; desc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; desc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; desc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO; desc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; desc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; HRESULT hr = pDx11Device->CreateBlendState(&desc, &pImpl->m_AlphaBlendExPtr); if (FAILED(hr)){ // 初期化失敗 throw BaseException( L"ブレンドステート作成に失敗しました。", L"if(FAILED(pDx11Device->CreateBlendState()))", L"BasicState::GetAlphaBlendEx()" ); } } return pImpl->m_AlphaBlendExPtr.Get(); }
//-------------------------------------------------------------------------------------- // void RenderState::Impl::CreateBlendState( // D3D11_BLEND srcBlend, //ソースブレンド // D3D11_BLEND destBlend, //デストブレンド // ID3D11BlendState** pResult //受け取るインターフェイス // ); // 用途: ブレンドステートを作成するヘルパー関数 // 戻り値: なし //-------------------------------------------------------------------------------------- void RenderState::Impl::CreateBlendState(D3D11_BLEND srcBlend, D3D11_BLEND destBlend, ID3D11BlendState** pResult){ try{ auto Dev = App::GetApp()->GetDeviceResources(); auto pDx11Device = Dev->GetD3DDevice(); D3D11_BLEND_DESC desc; ZeroMemory(&desc, sizeof(desc)); desc.RenderTarget[0].BlendEnable = (srcBlend != D3D11_BLEND_ONE) || (destBlend != D3D11_BLEND_ZERO); desc.RenderTarget[0].SrcBlend = desc.RenderTarget[0].SrcBlendAlpha = srcBlend; desc.RenderTarget[0].DestBlend = desc.RenderTarget[0].DestBlendAlpha = destBlend; desc.RenderTarget[0].BlendOp = desc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; desc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; HRESULT hr = pDx11Device->CreateBlendState(&desc, pResult); if (FAILED(hr)){ // 初期化失敗 throw BaseException( L"ブレンドステート作成に失敗しました。", L"if(FAILED(pDx11Device->CreateBlendState()))", L"RenderState::Impl::CreateBlendState()" ); } } catch (...){ throw; } }
GLRenderResourceManager::GLRenderResourceManager() { RasterizeDesc rasterDesc; DefaultRasterizeState = CreateRasterizeState(&rasterDesc); BlendDesc blendDesc; DefaultBlentState = CreateBlendState(&blendDesc, 1); DepthStencilDesc dsDesc; DefaultDepthStencilState = CreateDepthStencilState(&dsDesc, 0); SamplerDesc samplerDesc; DefaultSamplerState = CreateSamplerState(&samplerDesc); unsigned int pixelData[16]; memset(pixelData, 0xFF, 16 * sizeof(unsigned int)); BufferInitData data; data.Data = pixelData; data.RowPitch = 4 * 4; data.SlicePitch = 0; RenderTexture2D* tex = CreateTexture2D("DefaultTex", NULL, PF_R8G8B8A8_UNORM, 4, 4, false, false, SV_ShaderResource, 1, &data, 0); DefaultWhiteTexture2D = CreateSurfaceView(SV_ShaderResource, tex, PF_R8G8B8A8_UNORM); RegisterPropertyManager(ShaderPropertyManager::sManagerCamera); RegisterPropertyManager(ShaderPropertyManager::sManagerObject); RegisterPropertyManager(ShaderPropertyManager::sManagerMaterial); RegisterPropertyManager(ShaderPropertyManager::sManagerDirectionLight); RegisterPropertyManager(ShaderPropertyManager::sManagerPointLight); RegisterPropertyManager(ShaderPropertyManager::sManagerSpotLight); RegisterPropertyManager(ShaderPropertyManager::sManagerScene); RegisterPropertyManager(ShaderPropertyManager::sManagerShadowMapGen); RegisterPropertyManager(ShaderPropertyManager::sManagerGlobal); }