일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- two pointer
- 그래프
- 다익스트라
- MYSQL
- Brute Force
- Trie
- DP
- binary search
- Dijkstra
- 스토어드 프로시저
- 이진탐색
- union find
- SQL
- Stored Procedure
- String
- Hash
- Two Points
- Today
- Total
목록분류 전체보기 (425)
codingfarm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 12..
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816..
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816..

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 // color.hlsl struct VertexIn { float3 PosL : POSITION; float4 Color : COLOR; }; struct VertexOut { float4 PosH : SV_POSITION; float4 Color : COLOR; }; VertexOut VS(VertexIn vin) { VertexOut vout = (VertexOut)0; // Transform to homogeneous clip space. vout.PosH = float4(vin.PosL, 1.0f); // Just pass vertex col..
버퍼 : shader 프로그램에서 참조하는 자료를 담는 GPU 자원(ID3D12Resource)의 예 버퍼의 종류 : 텍스처, 기타 버퍼 자원등 0. 상수 버퍼(Constant Buffer) 정의 : shader가 참조하기 상수 data를 담기 위한 저장 공간 특징 잦은 수정이 필요 default heap이 아닌 upload heap에 만드는것이 이상적 크기가 하드웨어 최소 할당 크기(256 byte)의 배수여야한다. 1. 상수 버퍼 생성 Create Committed Resource 함수로 생성, ID3D12Resource 인스턴스에 할당 2. Data Upload map 함수로 매핑한후 data copy를 해주고, unmap을 진행해준다 3. 상수 버퍼 서술자 D3D12_DESCRIPTOR_HEAP_..
0. 개요 단순히 정점버퍼에 대해 뿐만 아니라, GPU에서 이를 활용하기 위한 여러가지 작업에 대해서도 알아보겠다. vertex buffer : GPU가 접근가능한 버퍼에 저장된 정점정보 정점 버퍼 및 뷰의 생성 앞서 배웠던 리소스의 생성과정과 동일하되. 추가적으로 해야할 작업들이 더있다. 1. 커스텀 정점형식 정의 Vertex 구조체를 정의한다. 입력 배치 서술을 작성한다 2. 버퍼 생성 D3D12_RESOURCE_DESC 구조체를 정의하여 생성될 자원에 대해 서술한다 D3D12_HEAP_PROPERTIES 구조체를 정의하여 자원이 저장될 heap에 대해 서술한다 D3D12_CLEAR_VALUE 구조체를 정의하여 리소스를 초기화할 값을 결정한다 ID3D12Device::CreateCommittedRes..

모니터의 픽셀들이 무한히 작지는 않기 때문에, 모니터 화면에 임의의 선을 완벽하게 나타내는것은 불가능하다. 선을 픽셀들의 배열로 근사할 때 생기는, 계단현상이라고도 하는 앨리어싱(aliasing)의 예가 아래그림에 나타난다. 출처 : https://m.blog.naver.com/PostView.nhn?blogId=rkalstn2&logNo=30187944993&proxyReferer=https:%2F%2Fwww.google.com%2F 위와같은 픽셀을 제거하기 위한 앨리어싱 제거(antialiasing) 기법들이 존재하며, 이를 통해 아래와 같은 개선된 효과를 얻을 수 있다. 출처 : https://m.blog.naver.com/PostView.nhn?blogId=rkalstn2&logNo=3018794..

0. 개요 하나의 프레임 버퍼를 가지고 게임 화면을 표현하면 화면 깜빡임(Screen Flickering) 및 화면 찢어짐(Screen Tearing) 현상이 나타난다. 화면 깜빡임 : 버퍼를 지우고 그릴경우 발생 화면 찢어짐: 이미 그려진 화면 위에 덮어 쓸 경우 발생 화면 찢어짐 효과 0-1. 더블 버퍼링(Double Buffering) 화면 깜빡임 및 찢어짐 현상을 피하고자 사용되는 방법 후면 버퍼(Back Buffer)와 전면 버퍼(Front Buffer) 2개의 프레임 버퍼의 교환을 통해 프레임 전환을 구현하는 기술 전면 버퍼 : 화면을 표현 후면 버퍼 : 다음 화면이 될 장면을 미리 저장 후면버퍼는 텍스처 이므로 그 원소를 텍셀(texel)이라 부르지만 여기서는 그냥 픽셀(pixel)이라 부름..
정의 : 어떤 프로그램이나 시스템을 이루는 컴포넌트들이 상호 통신할 수 있도록 하는 메커니즘 COM을 이용하면 DirectX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 할 수 있다. COM을 통해 개발자는 GPU에 종속적이지 않게 프로그래밍 가능 Comptr Com객체를 담기 위한 일종의 스마트 포인터 ComPtr의 여러 메서드 중 이후 포스팅에서 사용하는 것은 다음 세가지이다. 1. Get : 바탕 COM 인터페이스를 가리키는 포인터를 돌려준다. 해당 COM 인터페이스 포인터 형식의 인수를 받는 함수를 호출할 때 쓰인다. 즉, read용으로 쓰인다 ComPtr mRootSignature; ... // SetGraphicsRootSignature는 ID3D12RootSignature* 형식의 인수..

자원과 서술자에 대해서 알고싶다면 크게 4가지 요소에 대해서 집중하여 살펴보면된다. 자원의 생성 서술자의 생성 데이터 업로드 바인딩 0. 자원 Rendering을 위해 GPU가 write/read 하는 대상 physical memory나 heap에 읽고 쓰기 위한 CPU와 GPU의 일반적인 ability를 encapsulated 한 것 종류 각종 buffer들, texture ... ID3D12Resource로 대표됨 DXGI_FORMAT 형식을 지님 별도의 heap 공간에 저장됨 상태를 지님 버퍼(buffer) GPU가 접근 가능한 GPU 자원(ID3D12Resource) 공간 응용 프로그램에서 정점 같은 자료 원소들의 배열을 GPU에 제공해야 할 때에는 항상 버퍼를 사용함 텍스처보다도 단순한 자원(다..

0. CPU/GPU 동기화 한 시스템에서 두 개의 처리 장치가 병렬로 실행되다 보니 여러 가지 동기화 문제가 발생한다. 대표적인 동기화 문제는 이전에 제시했듯이 CPU 측에서 ExecuteCommandList 메서드로 command list의 내용을 제출했을때, GPU가 command queue 내에서 아직 처리하지 않은 명령의 내용을 그대로 덮어쓰는 현상이 발생 할수도 있다. 이를 해결하기 위한 해결책중 하나는 Fence를 이용하는 것이다. Fence docs.microsoft.com/ko-kr/windows/win32/direct3d12/fence-based-resource-management GPU가 command queue의 명령들 중 특정 지점까지의 모든 명령을 다 방출(flust) 혹은 처리할..
df

https://developer-kua.tistory.com/21?category=422534 1. 다음 정점 구조체를 위한 D3D12_INPUT_ELEENT_DESC 배열을 작성하라 struct Vertex{ XMFLOAT3 Pos; XMFLOAT3 Tangent; XMFLOAT3 Normal; XMFLOAT2 Tex0; XMFLOAT2 Tex1; XMCOLOR Coor; }; proof) std::vector mInputLayout = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, { "TANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0,..
ㅇ

1. 행위 UML 다이어그램을 만들때에는 행위(behavior)부터 시작하는것이 좋다. 즉, 간단한 시퀀스 다이어그램을 통해 프로그램의 흐름이 어떤식으로 이루어지는지 부터 도식화하자. 도식화의 순서는 주로 sequence diagram(프로그램 흐름 순서) class diagram(클래스간의 관계) 위 순서를 통해 그린 후, 개선이 이루어진다. 예 휴대전화를 제어하는 소프트웨어가 있다. 숫자버튼이 눌릴때마다 어떤 번호가 눌려젔는지를 다이얼에 전달하면(1*), 다이얼에서는 화면에 눌려진 번호의 정보를 띄우면서(1.1), 해당 버튼에 맞는 음을 출력할것이다(1.2). 그리고 전송버튼을 누르면(2) 무선 통신 모듈(radio)에 연결 요청을 보내며(2.1), 연결 여부에 대한 결과를 화면으로 출력할것이다.(A..
이번절의 내용은 Direct3D에서 공식적으로 제공해주는 기능이 아니다. 기하 구조 보조 구조체 정의 : 하나의 기하 그룹을 정의하는 vertex buffer와 index buffer를 한데 엮는 보조 구조체 vertex 및 index data를 system memory에 유지해서 CPU가 그 자료를 언제라도 읽을 수 있게 한다. 선택(picking)이나 충돌 검출을 위해서는 CPU가 기하구조 자료에 접근 해야 한다. 버퍼 형식이나 보폭(stride) 같은 정점 버퍼와 색인 버퍼의 주요 속성들을 담아둔다. 버퍼에 대한 view를 도려주는 메서드를 제공 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32..

지금까지 input layout description 구조체를 만드는 방법과 vertex shader 및 pixel shader를 만드는 방법 그리고 rasterrizer state 그룹을 구성하는 방법 등 여러가지 렌더링 준비 과정을 살펴보았다. 이제 이런 객체들을 실제로 쓰기 위해 rendering pipeline에 binding 하는 방법을 알아보자. 파이프라인 상태 객체(pipeline state object, PSO) rendering pipeline의 상태를 제어하는 대부분의 객체를 지정하는데 사용함 ID3D12PipelineState로 대표됨 PSO의 생성 과정 pipeline state를 서술하는 D3D12_GRAPHICS_PIPELINE_STATE_DESC 구조체의 인스턴스를 채운다. I..
래스터화 단계 프로그래밍 불가, 구성만 가능 rendering pipeline의 많은 부분이 프로그래밍이 가능하지만, 일부는 구성(설정)만 가능하며, 래스터화 단계그 가 중 하나다. 래스터화기 상태(rasterizer state)를 통해서 구성 D3D12_RASTERIZER_DESC 구조체로 상태를 대표 1 2 3 4 5 6 7 8 9 10 11 12 13 typedef struct D3D12_RASTERIZER_DESC { D3D12_FILL_MODE FillMode; D3D12_CULL_MODE CullMode; BOOL FrontCounterClockwise; INT DepthBias; FLOAT DepthBiasClamp; FLOAT SlopeScaledDepthBias; BOOL DepthCli..

Direct3D에서 shader program이 컴파일되는 단계는 다음과 같다. 이식성 있는 byte code로 컴파일 그래픽 드라이버가 byte code를 시스템의 GPU에 맞게 최적의 네이티브 명령들로 컴파일 Shader를 컴파일 하는 타이밍은 2가지로 나뉜다. 런타임 컴파일 오프라인 컴파일 1. 런타임 컴파일 런타임시 D3DCompileFromFile 함수를 통해 shader를 컴파일 할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 HRESULT D3DCompileFromFile( LPCWSTR pFileName, const D3D_SHADER_MACRO *pDefines, ID3DInclude *pInclude, LPCSTR pEntrypoint, LPCSTR pTarget, UINT F..

장치 초기화 : GPU에게 명령을 넘기기 위한 사전 작업 오늘은 방대한 양의 API가 나올건데 한번에 다 익히려 하지 말것 우선 이전시간까지 비어있던 Engine 프로젝트에 Engine 폴더에 아래와같은 클래스 파일들을 추가해준다. 각 기능들을 파일 단위로 분리하는것이 플젝의 관리에 용이하다 이제 EnginePch에 출력 윈도우 창의 핸들과 너비, 높이 및 전체창 여부를 저장하는 값들을 추가해준다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 // EnginePch.h // 이전 내용들... //----------------------- enum { SWAP_CHAIN_BUFFER_COUNT = 2 }; str..