UI용 Image는 다수의 Image Set으로 가지고 있는것이 좋음
ex. Button - Mouse Hover - Click - Disable 등
Button의 경우 Click후에 Action이 발생하기를 기대하며, 이를 위해 Key_Free를 통해 판정하는 것이 좋음
Button, List, Dialog는 Composite패턴을 이용하여 구현하는 것이 좋음
대화상자, List Control, Button, Combo Box, Spin Control, Slide Control 등
D3D11_BLEND_DESC bd;
ZeroMemory(&bd, sizeof(bd));
// Blending 가능여부 설정
// RenderTarget은 최대 8개까지 사용 가능
bd.RenderTarget[0].BlendEnable = TRUE;
// RGB값의 Blending 조건
// Src는 Source 파일
// Dest는 BackBuffer
// Op는 연산 방법
// 블렌딩 공식 : RGB = Source * Source.alpha + Dest * (1 - Source.alpha)
bd.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
bd.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA;
bd.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
// A 성분을 혼합하는 명령
// finalAlpha = SrcAlpha*1.0f+DestAlpha*0.0f;
bd.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE;
bd.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO;
bd.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
// Blending된 RenderTarget에서 출력하고자 하는 RGBA값 Masking
bd.RenderTarget[0].RenderTargetWriteMask =
D3D11_COLOR_WRITE_ENABLE_ALL;
// ID3D11BlendState g_pAlphaBlend
// 설정된 BlendState를 나타내는 변수
pd3dDevice->CreateBlendState(&bd, &g_pAlphaBlend);
// Blend하기 위해서는 각 Source의 Pixel이 결정되야하므로, Pixel Shader가 마무리된 OutputMerger Stage에서 수행
// Output-Merger Stage는 프로그래밍은 불가능하지만 수행 절차를 요청할수는 있음
//DeviceContext::OMSetBlendState()
가지고있는 Texture에서 원하는 Alpha값이 없더라도 Pixel Shader나 VertexBuffer의 설정을 통해 Device에 적절한 Alpha값을 전달할 수 있다면 Texture의 Alpha값과 별개로 원하는 Blending수행 가능
m_VertexList[0].p = { m_vNDCPos.x, m_vNDCPos.y, 0.0f };
m_VertexList[0].t = { m_rtUV.x1, m_rtUV.y1 };
m_VertexList[0].c = { 1,1,1,cosf(g_fGameTimer) * 0.5f+0.5f };
m_VertexList[1].p = { m_vNDCPos.x + m_vDrawSize.x, m_vNDCPos.y, 0.0f };
m_VertexList[1].t = { m_rtUV.x1 + m_rtUV.w, m_rtUV.y1 };
m_VertexList[1].c = { 1,1,1,cosf(g_fGameTimer) * 0.5f + 0.5f };
m_VertexList[2].p = { m_vNDCPos.x, m_vNDCPos.y - m_vDrawSize.y, 0.0f };
m_VertexList[2].t = { m_rtUV.x1, m_rtUV.y1 + m_rtUV.h };
m_VertexList[2].c = { 1,1,1,cosf(g_fGameTimer) * 0.5f + 0.5f };
m_VertexList[3].p = { m_vNDCPos.x + m_vDrawSize.x, m_vNDCPos.y - m_vDrawSize.y, 0.0f };
m_VertexList[3].t = { m_rtUV.x1 + m_rtUV.w , m_rtUV.y1 + m_rtUV.h };
m_VertexList[3].c = { 1,1,1,cosf(g_fGameTimer) * 0.5f + 0.5f };
m_pImmediateContext->UpdateSubresource(
m_pVertexBuffer, NULL, NULL, &m_VertexList.at(0), 0, 0);
//====================================================================================
float4 PS(VS_OUT input) : SV_Target
{
float4 vColor = g_txTex.Sample(g_SampleWrap , input.t);
vColor.a = 0.5f;
return vColor*input.c;
}
Pixel Shader에 넘어가는 Texture를 다수의 Texture를 넘겨주면서 Multi Texture Blending 역시 가능
https://m.blog.naver.com/power2845/50143021565
리턴 값에 따라 Key의 입력 상태에 대한 정보를 알 수 있다고 하는데, 공식 문서의 Remark에 따르면 다른 Window에서 입력 값에 대한 정보를 가져갈 수 있으므로 이 부분에 의존하지 말라고 지적한다.