| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- MYSQL
- 이진탐색
- 다익스트라
- 스토어드 프로시저
- Trie
- two pointer
- Stored Procedure
- Hash
- union find
- 그래프
- Dijkstra
- SQL
- Brute Force
- String
- binary search
- Two Points
- DP
- Today
- Total
목록분류 전체보기 (425)
codingfarm
버퍼 : shader 프로그램에서 참조하는 자료를 담는 GPU 자원(ID3D12Resource)의 예 버퍼의 종류 : 텍스처, 기타 버퍼 자원등 0. 상수버퍼 정의 장면의 물체마다 달라지는 상수 데이터를 담기 위한 저장공간 vertex buffer나 index buffer와 달리 constant buffer는 CPU가 프레임당 한번 갱신하는것이 일반적이다. 가령 카메라가 매 프레임 이동한다면, 프레임마다 상수 버퍼를 새 시야 행렬로 갱신해야 한다. 크기가 반드시 최소 하드웨어 할당 크기(256 바이트)의 배수 여야 한다. 가령 이전에 배운 vertex shader에서 아래와 같은 코드를 본적 있을것이다. 1 2 3 cbuffer cbPerObject : register(b0) { float4x4 gWor..
픽셀 셰이더 vertex shader(또는 기하 셰이더)가 출력한 정점 특성들은 래스터화 단계에서 삼각형의 픽셀들을 따라 보간되며, 보간된 결과는 pixel shader에 입력된다. 아래 코드는 기하 셰이더가 없는 경우에서 vertex 자료가 pixel shader에 도달하는 경로를 나타낸다. 정점 셰이더와 마찬가지로 픽셸 셰이더도 본질적으로 하나의 함수이나, 정점 셰이더와 달리 하나의 픽셀 단편(pixel fragment)마다 실행된다. 역할 : 주어진 입력으로부터 pixel fragment의 색상을 계산한다 후면버퍼의 한 픽셀에는 최종적으로 그 픽셀이 될 수 있는 '후보'로서의 pixel fragment들이 여러개 존재할 수 있다. 대부분의 pixel들은 pipeline의 pixel shader이후 ..
HLSL(high level shading language) 정의 : 셰이더를 작성하기 위한 고수준 셰이딩 언어 텍스트 파일로 작성, 확장자 .hlsl로 저장 HLSL에서 함수는 항상 인라인화 됨 다음은 간단한 정점 셰이더의 구현이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cbuffer cbPerObject : register(b0) { float4x4 gWorldViewProj; }; void VS(float3 iPosL : POSITION, float4 iColor : COLOR, out float4 oPosH : SV_POSITION, out float4 oColor : COLOR) { // 동차 절단 공간으로 변환 oPosH = mul(float4(iPosL, 1.0f)..
앞서 버퍼는 GPU가 접근 가능한 GPU 자원(ID3D12Resource) 공간으로 저장했다. 이 버퍼를 통해 GPU는 vertex 정보 접근할 수 있으며, GPU가 색인(index)들의 배열에 접근할 수 있으려면 색인들의 버퍼 GPU자원(ID3D12Resource)에 넣어 두어야 한다. index를 담는 버퍼를 index buffer라 부른다. Index Buffer 앞서 우리는 vertex buffer를 이용하여 화면에 삼각형 mesh를 출력하는 방법을 배웠다. 하지만 이전 코드를 보면 동일한 vertex가 여러번 선언되는것을 볼 수 있으며, 이는 프로그램의 효율을 떨어뜨린다. 그러므로 필요한 vertex의 목록을 만든뒤, 필요할때마다 해당 vertex의 index를 이용해 간접 참조하는 방식으로 효..
버퍼 GPU가 접근 가능한 GPU 자원(ID3D12Resource) 공간 응용 프로그램에서 정점 같은 자료 원소들의 배열을 GPU에 제공해야 할 때에는 항상 버퍼를 사용함 텍스처보다도 단순한 자원(다차원이 아님) mipmap이나 filter, 다중 표본화 기능이 없음 1. 정점 버퍼(vertex buffer) GPU가 정점들의 배열에 접근가능하도록 정점들을 저장하는 버퍼 정점 버퍼 생성 앞서 배웠던 리소스의 생성과정과 동일함 D3D12_RESOURCE_DESC를 채운다 ID3D12Device::CreateCommittedResource 메서드를 호출해 ID3D12Resource 객체를 생성함 Diret3D 12는 편의용 생성자들가 메서드들을 추가한 C++ 래퍼 클래스 CD3DX12_RESOURCE_DES..
5장에서 배운 렌더링 파이프라인의 개념적, 수학적 개념을 6장에서는 실제 코드를 통해 렌더링 파이프라인을 구성하고, 정점 셰이더와 픽셀 셰이더를 정의하고, 기하구조를 렌더링 파이프라인에 제출해서 3차원 물체를 그리는 데 필요한 Direct3D API 의 여러 인터페이스와 메서드를 중점적으로 살펴본다. 목표 기하 자료의 정의와 저장, 그리기(drawing)를 위한 Direct3D의 여러 인터페이스와 메서드를 파악함 기본적인 정점, 픽셸 셰이더를 작성하는 방법을 배운다. 파이프라인 상태 객체들을 이용해서 렌더링 파이프라인을 구성하는 방법을 파악함 상수 버퍼 자료를 생성해서 파이프라인에 묶는 방법을 배우고, 루트 서명에 익숙해진다. 6.1 정점과 입력 배치 Direct3D의 정점에 공간적 위치 이외의 추가적인..
https://blockdmask.tistory.com/322 http://www.cplusplus.com/reference/fstream/ofstream/ http://www.cplusplus.com/reference/fstream/ifstream/ ifstream::seekg https://modoocode.com/279
https://www.3dgep.com/learning-directx-12-1/
https://gall.dcinside.com/mgallery/board/view/?id=teamfightmanager&no=2567
문제를 풀려고 자바를 썼는데 ProblemFactory를 얻었다. -철지난 JAVA 유머- 여기서는 두 개의 GOF 패턴, factory method와 abstract factory를 동시에 알아본다. 두 패턴은 서로 긴밀한 연관이 있다. 3.1 시나리오 2차원 직교좌표계의 좌표점 정보를 저장하려 할 경우, 아래와 같은 구현이 쉽게 떠올르것이다. 1 2 3 4 5 class Point{ public: float x, y; Point(const float x, const float y) : x{x}, y{y} {} }; Colored by Color Scripter cs 그렇다면 극 좌표계로 좌푯값을 저장해야 할 경우 어떻게 하면 될까? 아래처럼 극 좌표계용 생성자를 추가하면 어떨까?. 1 2 3 4 Po..
일반적으로 (A+B)*(C+D) 와 같은 연산 표기법을 중위표기법 이라 한다. 이런 표기법은 사람은 읽기 쉽지만 컴퓨터는 해석이 난감하다는 단점을 가지고 있다. 컴퓨터가 해석하기에 최적인 표기법으로 후위표기법이 있다. 중위표기법을 후위표기법으로 바꾸는 알고리즘은 아래와 같다. 1. 피연산자가 나오면 출력한다. 2. 연산자가 나올경우... 스택 최상단 연산자의 우선순위가 현재 연산자의 우선순위보다 낮아질때까지 혹은 스택이 빌때 까지 pop 하면서 출력, 이후에 현재 연산자를 push 3.여는괄호일 경우 스택에 push 4. 닫는괄호일 경우 스택내에 첫번째 여는 괄호가 나올때 까지 stack을 pop 하면서 출력(괄호는 출력X) 위 알고리즘을 적용한 코드는 아래와 같다. 1 2 3 4 5 6 7 8 9 10..
1. 기본적인 파일 처리 함수들 Windows의 파일 입$\cdot$출력 함수는 ANI에서 정의하는것보다 방대한 내용을 담고 있다. 이 포스팅에서 모든 내용을 담는것은 불가능하다. 보다 자세한 내용은 MSDN을 참조할것 CreateFile 1 2 3 4 5 6 7 8 9 HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile ); Colored by Color Scripter cs 인자 기능 LPCTS..
학습 목표 IPC 기법에 대해 이해한다. 커널 오브젝트의 두가지 상태(signaled & Non-Signaled)와 핸들 테이블에 대해 이해한다. 1. 프로세스간 통신(IPC; Inter Process Communication) 프로세스는 각각 독립된 메모리 공간을 소유하므로 IPC가 어렵다. 프로세스는 자신에게 할당된 메모리 공간 이외에는 접근이 불가능하다. 그러므로 IPC를 위한 별도의 통신수단이 필요하다 2. 메일슬롯 방식의 IPC 메일 슬롯(Mail Slot)의 원리 대표적인 IPC 기법중 하나 프로세스 간에 데이터를 주고 받기 위해 접선 장소를 마련한다. 단방향 통신만 가능 mailslot의 생성과 연결은 CreateMailSlot과 CreateFile 함수를 통해 이루어지며 데이터 수신 및 송..
https://thrillfighter.tistory.com/531
windows는 winsock이라는 독자적인 소켓 프로그래밍 환경을 제공한다. 이 winsock에 대해 알아보겠다. winsock을 이용한 소켓 프로그래밍 winsock Windows Socket API의 줄임말 Windows 에서의 TCP/IP 기반의 소켓 프로그래밍을 지원하기 위한 소켓 함수들의 모음 BSD 소켓 기반 프로그래밍 방법, 함수, 구조체의 사용법 등이 linux와 크게 차이 없다. winsock.dll 파일을 로드해야 사용 가능 WSAStartup 함수를 호출하여 로드 WSAStartup : 소켓 프로그래밍에 필요한 dll을 로드 docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsastartup WSAStartup의 사용..
이제 리눅스 환경에서의 소켓 클라이언트 프로그램을 작성해본다 클라이언트가 보낸 문자열을 서버에서 받아, 고스란히 되돌려주는 에코 프로그램을 작성해보자 포트번호는 3500으로 할것이다. 컴퓨터가 두대라면 효율적인 실습 가능하겠지만, 사정상 한대의 컴퓨터만 준비 가능하다면 루프백 주소인 '127.0.0.1'로 테스트 해본다. 여기서는 2개의 가상 OS를 이용하여 각각 client와 server의 역할을 수행하도록 한다. 좌측이 client로 쓸 OS, 우측이 server로 쓸 OS로 각각의 IP가 192.168.175.131 192.168.175.132 인것을 확인했다. 클라이언트 프로그램 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 ..
더이상 사용하지 않는 소켓은 close 함수로 종료시킨다. 그러지 않으면 소켓은 시스템 자원을 계속 점유하게된다. 1 2 #include int close(int sockfd); cs 매개인자로 종료할 소켓의 식별 번호를 넘긴다
클라이언트가 Connect 함수로 서버에 연결을 요청하면 이 요청은 서버의 수신 대기열에 들어간다. 서버에서 accept 함수로 연결을 가져오면 서버와 클라이언트가 연결되어 통신할 수 있는 상태가 된다. 데이터 통신은 읽기 함수와 쓰기 함수가 쓰인다. 다만, 단순한 읽기/쓰기 일지라도 크게 2가지 함수로 나뉜다. 저수준 입출력 함수 : OS에서 제공하는 기본적인 함수 소켓 입출력 함수 : 소켓에서 제공하는 함수 이 포스트에서는 OS에서 제공하는 저수준 입출력 함수에 대해서 알아볼것이다. 소켓에서 제공하는 입출력 함수는 12장에서 다룰것이다. 리눅스에서의 데이터 입출력 윈도우즈에서의 입출력은 여기를 참고할것 리눅스에서는 소켓을 포함한 모든것을 파일로 다룬다. 파일에 읽고 쓰기 위해 read와 write 라..
www.tcpschool.com/c/c_refer_endian forum.falinux.com/zbxe/index.php?document_srl=431494&mid=C_LIB 바이트 정렬(Byte Order) 컴퓨터에서 연속된 데이터를 byte단위로 순서대로 저장하는것 byte가 저장되는 순서에 따라 little endianess와 big endianess로 나뉨 빅 앤디언(Big Endianess) 낮은 주소에 데이터의 높은 바이트(MSB, Most Significant Bit)부터 저장하는 방식 평소 숫자를 사용하는 선형 방식과 같은 방식입니다. 메모리에 저장된 순서 그대로 읽을 수 있으며, 이해하기가 쉽다 SPARC을 포함한 대부분의 RISC CPU 계열에서는 이 방식으로 데이터를 저장 TCP/IP..
학습 목표 connect 함수의 사용법을 숙지한다 클라이언트는 connect 함수를 이용해서 연결 요청을 한다. 연결 소켓을 반환하는 accept 함수와는 달리, connect 함수는 연결 성공 여부만 반환한다 server : 듣기 소켓과 연결 소켓이 분리 client : 구분 없음, socket 함수로 생성된 소켓 하나로 연결 및 통신을 모두 관리한다. connect 함수의 원형 1 int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen); cs 매개변수 sockfd : socket 함수로 생성된 소켓 지정 번호 serv_addr : 연결할 서버의 ip 주소와 포트 등의 정보를 담아온다 addrlen : server_add..