Texture Load

컴퓨터에 저장된 Texture 불러오기

 


Texture Load 코드

 

Texture.h

더보기
#pragma once
#include "Systems/IExecute.h"
class TextureLoadDemo : public IExecute
{
public:
virtual void Initialize() override;
virtual void Ready() override {}
virtual void Destroy() override;
virtual void Update() override;
virtual void PreRender() override {}
virtual void Render() override;
virtual void PostRender() override {}
virtual void ResizeScreen() override {}
private:
void LoadTexture(wstring file);
private:
Shader* shader;
VertexTexture vertices[6];
ID3D11Buffer* vertexBuffer;
UINT indices[6] = { 0, 1, 2, 2, 1, 3 };
ID3D11Buffer* indexBuffer;
Matrix world;
//ID3D11ShaderResourceView* srv;
Texture* texture = NULL;
};

 

 

Texture.cpp

더보기
#include "stdafx.h"
#include "TextureLoadDemo.h"
void TextureLoadDemo::Initialize()
{
Context::Get()->GetCamera()->Position(0, 0, -5.0f);
shader = new Shader(L"16_Texture.fx");
vertices[0].Position = Vector3(-0.5f, -0.5f, 0.0f);
vertices[1].Position = Vector3(-0.5f, +0.5f, 0.0f);
vertices[2].Position = Vector3(+0.5f, -0.5f, 0.0f);
vertices[3].Position = Vector3(+0.5f, +0.5f, 0.0f);
vertices[0].Uv = Vector2(0, 1);
vertices[1].Uv = Vector2(0, 0);
vertices[2].Uv = Vector2(1, 1);
vertices[3].Uv = Vector2(1, 0);
//Create Vertex Buffer
{
D3D11_BUFFER_DESC desc;
ZeroMemory(&desc, sizeof(D3D11_BUFFER_DESC));
desc.ByteWidth = sizeof(VertexTexture) * 4;
desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
D3D11_SUBRESOURCE_DATA subResource = { 0 };
subResource.pSysMem = vertices;
Check(D3D::GetDevice()->CreateBuffer(&desc, &subResource, &vertexBuffer));
}
//Create Index Buffer
{
D3D11_BUFFER_DESC desc;
ZeroMemory(&desc, sizeof(D3D11_BUFFER_DESC));
desc.ByteWidth = sizeof(UINT) * 6;
desc.BindFlags = D3D11_BIND_INDEX_BUFFER;
D3D11_SUBRESOURCE_DATA subResource = { 0 };
subResource.pSysMem = indices;
Check(D3D::GetDevice()->CreateBuffer(&desc, &subResource, &indexBuffer));
}
D3DXMatrixIdentity(&world);
}
void TextureLoadDemo::Destroy()
{
SafeDelete(shader);
SafeRelease(vertexBuffer);
SafeRelease(indexBuffer);
//SafeRelease(srv);
SafeDelete(texture);
}
void TextureLoadDemo::Update()
{
if (ImGui::Button("Open") == true)
{
function<void(wstring)> f = bind(&TextureLoadDemo::LoadTexture, this, placeholders::_1);
D3DDesc desc = D3D::GetDesc();
Path::OpenFileDialog(L"", Path::ImageFilter, L"../../_Texture/", f, desc.Handle);
}
}
void TextureLoadDemo::Render()
{
shader->AsMatrix("World")->SetMatrix(world);
shader->AsMatrix("View")->SetMatrix(Context::Get()->View());
shader->AsMatrix("Projection")->SetMatrix(Context::Get()->Projection());
if(texture != NULL)
shader->AsSRV("Map")->SetResource(texture->SRV());
UINT stride = sizeof(VertexTexture);
UINT offset = 0;
D3D::GetDC()->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);
D3D::GetDC()->IASetIndexBuffer(indexBuffer, DXGI_FORMAT_R32_UINT, 0);
D3D::GetDC()->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
shader->DrawIndexed(0, 0, 6);
}
void TextureLoadDemo::LoadTexture(wstring file)
{
//D3DDesc desc = D3D::GetDesc();
//MessageBox(desc.Handle, file.c_str(), L"", MB_OK);
SafeDelete(texture);
texture = new Texture(file);
}

 

void TextureLoadDemo::Update()
{
if (ImGui::Button("Open") == true)
{
function<void(wstring)> f = bind(&TextureLoadDemo::LoadTexture, this, placeholders::_1);

D3DDesc desc = D3D::GetDesc();
Path::OpenFileDialog(L"", Path::ImageFilter, L"../../_Texture/", f, desc.Handle);
}
}

 

if(texture != NULL)
shader->AsSRV("Map")->SetResource(texture->SRV());

 

 

참고사항

D3D.h

struct D3DDesc
{
wstring AppName;
HINSTANCE Instance;
HWND Handle;
float Width;
float Height;
bool bVsync;
bool bFullScreen;
D3DXCOLOR Background;
};

 

 

Main.cpp

- 특이사항 없음. 생략

 


 

 

실행화면

 

 

'⭐ DirectX > DirectX11 3D' 카테고리의 다른 글

[DirectX11] 019 Heightmap  (0) 2023.01.16
[DirectX11] 018 Texture Sampler  (0) 2023.01.16
[DirectX11] 016 Texture  (0) 2023.01.14
[DirectX11] 015 Cube  (0) 2023.01.13
[DirectX11] 013~014 Camera  (1) 2023.01.11