[DirectX11] 7. Texture(1)

유기태·2023년 12월 11일
0

DirectX강의 필기

목록 보기
8/14

1. SamplerState

samplerstate의 역할은 해당 텍스쳐에 대한 확대와 축소에 관해 픽셀을 어떻게 보간할지를 정하는 역할을 한다.
즉, 텍스쳐에 적용할 필터링에 필요한 객체이다.

예를 들면, 50x50의 이미지가 있다면, 해당 이미지를 100x100 또는 25x25 의 이미지로 확대 축소 할때, 확대를 한다면 픽셀이 빌것이고, 축소를 한다면 픽셀을 줄여야할 것이다. 이를 어떠한 형식으로 보간할지를 정하는것이다.

void GraphicShader::CreateSamplerState()
{
	D3D11_SAMPLER_DESC tDesc = {};
	tDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT;
	tDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
	tDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
	tDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
	tDesc.MipLODBias = 0.0f;
	tDesc.MaxAnisotropy = 1;
	tDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS;
	tDesc.BorderColor[0] = 0;
	tDesc.BorderColor[1] = 0;
	tDesc.BorderColor[2] = 0;
	tDesc.BorderColor[3] = 0;
	tDesc.MinLOD = 0;
	tDesc.MaxLOD = D3D11_FLOAT32_MAX;

	DEVICE->CreateSamplerState(&tDesc, m_SamplerState.GetAddressOf());
}
CONTEXT->PSSetSamplers(0, 1, m_SamplerState.GetAddressOf());

2. ShaderResourceView

void GraphicShader::CreateResourceView(wstring& _texturePath)
{
	wstring _path = PATH + _texturePath;
	ScratchImage _Image;
	LoadFromWICFile(_path.c_str(), WIC_FLAGS_NONE, NULL, _Image);
	ComPtr<ID3D11Texture2D> _texture;
	CreateTexture(DEVICE, _Image.GetImages(), _Image.GetImageCount(), _Image.GetMetadata(), (ID3D11Resource**)_texture.GetAddressOf());

	// 쉐이더 리소스 뷰 생성.
	D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
	::ZeroMemory(&srvDesc, sizeof(srvDesc));

	srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
	srvDesc.Texture2D.MostDetailedMip = 0;
	srvDesc.Texture2D.MipLevels = 1;

	D3D11_TEXTURE2D_DESC textureDesc;
	_texture->GetDesc(&textureDesc);

	srvDesc.Format = textureDesc.Format;

	ID3D11ShaderResourceView* shaderResourceView;
	DEVICE->CreateShaderResourceView(
		_texture.Get(),
		&srvDesc,
		m_ResourceView.GetAddressOf()
	);
}
CONTEXT->PSSetShaderResources(0, 1, m_ResourceView.GetAddressOf());

전에는 DEVICE->CreateTextureFromFile()이라는 method를 사용했는데, windows8 이후에는 D3DXmethod를 더 이상 지원하지 않음
그래서 DirectTex library(정적 라이브러리)안에 LoadFromXXXFile() method and CreateShaderResourceView 또는 DirecXTK(동적 라이브러리)안에 CreateXXXTextureFromFile를 사용한다.

3. BlendState

void GraphicShader::CreateBlendState()
{
	D3D11_BLEND_DESC tDesc = {};
	tDesc.RenderTarget[0].BlendEnable = true;
	tDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
	tDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO;
	tDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ZERO;
	tDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
	tDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;

	tDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
	tDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA;

	DEVICE->CreateBlendState(&tDesc, m_BlendState.GetAddressOf());
}

CONTEXT->OMSetBlendState(m_BlendState.Get(), NULL, 0x3FF);
profile
게임프로그래머 지망!

0개의 댓글