목록Programing (133)
공부중
저번 글에서는 크게 바뀐점은 없었고 컬러값을 직접 지정해준것에 비해서 Texture의 값을 가지고 색상을 출력해 주기 때문에 이에 따른 값을 전달해주기 위한 Vertex의 color을 uv로 변경 및 텍스쳐 데이터를 저장하기위한 멤버 변수 선언 등등을 보았다. 이제 Init할때 어떤점이 다른지 살펴보자. 저번 글에서 적었다 싶이 pSample->OnInit( );의 내부를 살펴볼 예정이다. void D3D12HelloTexture::OnInit() { LoadPipeline(); LoadAssets(); } 저번 프로젝트와 다르지 않게 LoadPipeline과 LoadAssets를 콜해주고 끝난다. 먼저 LoadPipeline을 살펴보자. // Load the rendering pipeline depen..
이번 프로젝트는 위와같이 삼각형에 텍스쳐(Texture)를 입히는 프로젝트이다. 역시 이전 프로젝트와 겹치는 부분은 되도록 빠르게 넘어갈 예정이다. 이번에도 해당 프로젝트의 시작인 Main부분 부터 살펴보도록 하자.. #include "stdafx.h" #include "D3D12HelloTexture.h" _Use_decl_annotations_ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) { D3D12HelloTexture sample(1280, 720, L"D3D12 Hello Texture"); return Win32Application::Run(&sample, hInstance, nCmdShow); } 특별히 다..
std::shared_ptr은 레퍼런스 카운팅 방식의 스마트 포인터로. 특정 주소를 가리키는 포인터변수가 얼마나 있느냐에 따라서 자동으로 삭제할지 결정해서 자동으로 메모리 해제하는 방식이다.(count가 0일때 메모리 할당 해제) 이 레퍼런스 카운팅 방식의 스마트 포인터 방식은 특정 조건(?)에 따라서 메모리 누수(memory leak)이 발생 할 수가 있는데. 그것에 관련된 글을 써보려고 한다 일단 테스트 하는 코드는 아래와 같다. #include #include struct MyStruct { std::shared_ptr foo; }; int main() { //_CrtSetBreakAlloc(153); auto obj1 = std::make_shared(); auto obj2 = std::make_..
코드는 아래와 같다. #include #include //shared_ptr , make_shared class MyClass { public: MyClass(int val_int = 0, double val_double = 0.0) : value_int(val_int), value_double(val_double) {}; ~MyClass() {}; private: int value_int; double value_double; }; int main() { /* 가능하다면 메모리 리소스를 처음으로 만들 때 make_shared 함수를 사용하여 shared_ptr을 만들것. make_shared는 예외 안전하고 동일한 호출을 사용하여 제어 블록 및 리소스에대한 메모리를 할당하고 생성 오버헤드가 줄어듭니다...
그러고보니 깜빡하고 셰이더 코드를 안적어 놓은것 같다. struct PSInput { float4 position : SV_POSITION; float4 color : COLOR; }; PSInput VSMain(float4 position : POSITION, float4 color : COLOR) { PSInput result; result.position = position; result.color = color; return result; } float4 PSMain(PSInput input) : SV_TARGET { return input.color; } shaders.hlsl 파일의 모든 내용이고 해당 파일 안에 VertexShader와 PixelShader가 같이 있다. 이전글 D3D12He..
// Main message handler for the sample. LRESULT CALLBACK Win32Application::WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { DXSample* pSample = reinterpret_cast(GetWindowLongPtr(hWnd, GWLP_USERDATA)); switch (message) { case WM_CREATE: { // Save the DXSample* passed in to CreateWindow. LPCREATESTRUCT pCreateStruct = reinterpret_cast(lParam); SetWindowLongPtr(hWnd, GWLP_USERDAT..
코드는 아래와 같다. #include #include //unique_ptr int main() { int foo = 100; //unique_ptr std::unique_ptr unique_ptr_value1{ new int }; //std::unique_ptr unique_ptr_value2{ &foo };//Runtime Error // 동적으로 할당하지 않은 주소를 넣으면 해제시 문제 발생 *unique_ptr_value1 = 1000; std::cout