목록분류 전체보기 (71)
Visual Studio
최근에 base64로 인코딩된 문자열로 Texture를 생성해야 할 일이 있었다. _image = new Texture2D(1, 1); string imageString = element.GetAttribute("value"); byte[] imageBytes = System.Convert.FromBase64String(imageString); _image.LoadImage(imageBytes); 그런데 이렇게 텍스쳐를 생성하여 렌더링해보면 아래 사진처럼 테두리에 찌꺼기(?)가 보인다. 마치 이미지의 좌우가 연결되어 있는 것처럼 가장 우측의 픽셀이 좌측에 나타나고, 아랫줄의 픽셀이 맨 위에 나타나는데, WrapMode를 Repeat에서 Clamp로 변경하면 해결할 수 있다. _image.wrapMode ..
WzComparerR2라는게 있길래 xml로 파싱해서 unity로 렌더링함 현재는 xml 안쓰고 WzLib 가져다가 wz 파일 unity에서 직접 언팩해서 사용함. 일반몹이랑 보스랑 포맷 살짝 다른게 좀 짜증났음. Github 링크 GitHub - ReolSt/MaplestoryResearch: 메이플스토리의 wz 데이터 파일을 분석하여 재구현하는 프로젝트입니 메이플스토리의 wz 데이터 파일을 분석하여 재구현하는 프로젝트입니다. Contribute to ReolSt/MaplestoryResearch development by creating an account on GitHub. github.com 참고자료 [메이플스토리] 위컴알로 테스트서버 뜯기 (내용 비교) / 미리 패치 1. 위컴알 다운로드 사용할..
https://wyseburn.tistory.com/entry/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C%EC%97%90%EC%84%9C-%EC%B4%88%EC%A4%91%EC%A2%85%EC%84%B1-%EB%B6%84%EB%A6%AC
회사에서 Video I/O 병목을 해결하기 위해 V4L2 인터페이스를 사용해서 멀티 쓰레드로 Frame Grabbing을 할 일이 있었는데, 힌트가 되었던 정보들도 죄다 영어였기 때문에 읽는데 오래 걸렸고, 관련 정보가 너무나 적어 어려움을 겪었던 기억이 난다. 사실 멀티 쓰레드로 카메라 버퍼 액세스가 가능하다는 것도 구글링해서는 알수 없었고, 제조사에서 제공하는 다른 제품군의 프레임워크가 멀티 쓰레드로 동작한다는 사실로부터 알아냈다. 그래서 내가 해결한 방법을 공유해 한 사람이라도 도움이 되었으면 좋겠다는 생각이 들었다. 간단히 핵심만 얘기하면, V4L2는 여러 개의 내부 버퍼를 가져 마치 렌더링 엔진에서의 다중 버퍼링처럼 동작할 수 있는데, ioctl로 카메라의 버퍼에서 메모리에 있는 버퍼로 긁어오는..
void *memset(void *dest, int c, size_t count); memset은 dest 포인터에서 count 만큼의 바이트를 c 값으로 초기화하는, c에서 유용하고 또 상당히 많이 사용하는 함수이다. 그런데 memset에는 c에 미숙한 사람이 헷갈리기 쉬운 두가지 함정이 있다. 1. memset의 두번째 파라미터는 int 타입으로 받지만 unsigned char로 형변환되어 사용된다. 초기화에 사용되는 값인 c는 int 타입으로 받는데, 이 값은 사실 unsigned char로 형변환되어 사용된다. 실제로 255 이상의 값을 넣으면 오버플로우되어 0부터 다시 시작한다. 2. memset은 주어지는 포인터의 타입과는 상관없이 1byte씩 초기화 한다. 사실 1번과 일맥상통한 이야기인데,..
1459번: 걷기 세준이는 학교에서 집으로 가려고 한다. 도시의 크기는 무한대이고, 도시의 세로 도로는 모든 정수 x좌표마다 있고, 가로 도로는 모든 정수 y좌표마다 있다. 세준이는 현재 (0, 0)에 있다. 그리고 ( www.acmicpc.net 걷기 문제 세준이는 학교에서 집으로 가려고 한다. 도시의 크기는 무한대이고, 도시의 세로 도로는 모든 정수 x좌표마다 있고, 가로 도로는 모든 정수 y좌표마다 있다. 세준이는 현재 (0, 0)에 있다. 그리고 (X, Y)에 위치한 집으로 가려고 한다. 세준이가 걸을 수 있는 방법은 두가지 인데, 하나는 도로를 따라서 가로나 세로로 한 블록 움직여서 이번 사거리에서 저 사거리로 움직이는 방법이고, 블록을 대각선으로 가로지르는 방법이 있다. 세준이가 집으로 가는데..
나름 게임 개발 시작하기 전에는 주력이 Linux였는데... 하나도 안올린게 아깝게 느껴진다.
2057번: 팩토리얼 분해 음 아닌 정수 N이 주어졌을 때, 이 수를 서로 다른 정수 M(M ≥ 1)개의 팩토리얼의 합으로 나타낼 수 있는지 알아내는 프로그램을 작성하시오. 예를 들어 2=0!+1!로 나타낼 수 있지만, 5는 이와 같은 www.acmicpc.net 입력 N (0 ≤ N ≤ 1,000,000,000,000,000,000)을 M (M ≥ 1) 개의 서로 다른 팩토리얼의 합으로 나타낼 수 있으면 "YES", 나타낼 수 없으면 "NO"를 출력하는 문제이다. 백트래킹으로 간단하게 해결할 수 있다. factorial(19) = 121,645,100,408,832,000 UpperLimit(N)..
Virtual Function 키워드 static binding(early binding) dynamic binding(late binding) v-table(virtual function table) override 키워드 주요 내용 1. virtual이면서 static 함수일 수 없다. 2. virtual이면서 다른 클래스의 friend일 수 있다. 3. 런타임 다형성을 위해 가상 함수는 기초 클래스의 포인터나 레퍼런스로 접근할 수 있다. 4. 상속된 클래스의 가상 함수 프로토타입 선언은 기초 클래스와 같아야 한다. 5. 가상 함수는 기초 클래스와 override한 상속된 클래스에서 항상 정의되어 있다. 상속된 클래스에서 꼭 override 하지 않아도 되지만 이 경우 함수 호출시 기초 클래스의 함수..
DirectStorage는 DirectX12부터 추가된, CPU를 거치지 않고 GPU로 리소스를 로드할 수 있도록 하는 API이다. ID3D12Resource 인터페이스로 표현되는 모든 자원에 대해 적용 가능하다. 기존에는 병목 때문에 NVME SSD가 SATA SSD에 비해 게임에서 큰 성능 향상이 없었는데, 이를 이용하면 NVME SSD의 빠른 속도를 게임에서도 체감할 수 있게 된다. 기존의 리소스 로드 방식 DirectStorage를 이용한 리소스 로드 방식 기존에는 CPU에서 텍스쳐 등의 압축을 해제하는 방식이었지만 DirectStorage를 사용하면 CPU를 거치지 않고 GPU에서 decompression을 할 수 있다. 언리얼 엔진 5에서도 DirectStorage를 지원하면 좋을 것 같은데...