목록전체 글 (70)
Visual Studio
FFrameNumberFFrameRateFFrameTime 혹시 사용할 일이 있을 수도 있으니 기억해두자.
소량의 데이터를 빠르게 전달할 때 사용한다. 변환 행렬 등을 쉐이더로 넘길 때도 사용할 수 있다.모든 쉐이더 단계에 데이터를 전송할 수 있다.Command Buffer 자체에 저장되기 때문에 Command Buffer를 다시 만들지 않는 한 변경할 수 없다.vkCmdPushConstants() 함수를 사용하여 데이터를 Command Buffer에 입력한다.쉐이더에서는 다음과 같이 사용한다.layout( push_constant ) uniform constants{ vec4 data; mat4 render_matrix;} PushConstants;
Fragment Shader (Direct X에서는 Pixel Shader) 이후 Depth test를 수행하여 Depth test에 실패한 Fragment를 폐기하는 과정을 거치는데, 이를 Fragment Shader 이전으로 앞당겨 그려지지 않을 Fragment에 대한 불필요한 Fragment Shader 연산을 하지 않도록 할 수 있다. 장점- 불필요한 Fragment Shader 연산을 줄일 수 있다.- 따라서 GPU 부하가 감소한다. 단점- Fragment Shader가 깊이값을 변경하는 경우에는 의도대로 렌더링되지 않을 수 있다.- 반투명 오브젝트가 Depth test에 실패하여 렌더링되지 않을 수 있다.- 사용하는 Fragment shader의 연산이 가벼운 경우 Early depth tes..

Primary Command Buffer- Queue에 직접 제출할 수 있다.- 여러개의 Secondary Command Buffer를 호출할 수 있다.- Seconary Command Buffer와 달리 Render Pass 내부에서 호출되어야 한다는 제약이 없다.Secondary Command Buffer- Queue에 직접 제출할 수 없다.- Render Pass 내부에서만 호출될 수 있다.- Primary Command Buffer에서 Secondary Command Buffer를 호출하여 간접적으로 Queue에 제출할 수 있다.- 다른 Primary Command Buffer를 호출할 수 없다.- 여러 Primary Command Buffer에서 재사용이 가능하다.- Primary Command..
아이디어- 폰트 관련 데이터 객체들(FCodepointFontCacheData, FFontData, FFreeTypeFaceGlyphData)을 가져올 때 유효한지 검사하는 로직이 오버헤드가 큼. - 정확히는 아래 두 함수 내부의 검사 로직이 오버헤드가 크다. - FSlateFontRenderer::GetFontDataForCodepoint() - FCompositeFontCache::GetFontFaceForCodepoint()- 유효함이 이미 검증된 폰트 데이터는 한번 더 캐싱함. (편의를 위해 2차 캐시라고 부르겠음)- 이후 같은 글자에 대해서 폰트 데이터가 필요할 경우 2차 캐시가 있다면 검사 과정을 스킵하고 가져옴. 구현영향을 미치는 범위를 줄이기 위해 Ascii code 범위의..
어떤 연산을 여러번 적용하더라도 결과가 달라지지 않으면 그 연산은 멱등성을 갖는다고 할 수 있다.컴퓨터 공학에서도 자주 사용하는 개념인데, HTTP RFC 문서에서도 이 개념을 사용하고 있다.이 문서에서는 "안전한 메서드"와 "멱등성을 갖는 메서드"를 구분하여 설명하고 있다.GET, HEAD 메서드가 안전하고, GET, HEAD, PUT, DELETE 메서드가 멱등성을 갖는다.모든 안전한 메서드는 멱등성을 가지지만, 모든 멱등성을 가진 메서드가 안전한 것은 아니다. 참고자료https://velog.io/@dion/HTTP-%EB%A9%94%EC%86%8C%EB%93%9C%EC%9D%98-%EB%A9%B1%EB%93%B1%EC%84%B1-%EA%B7%B8%EA%B2%8C-%EB%AD%94%EB%8D%B0h..

Unreal Engine 소스코드를 수정하여 에픽 게임즈의 저장소에 기여해 본 경험을 기록하기 위해 이 포스트를 작성하였다. PR 링크: https://github.com/EpicGames/UnrealEngine/pull/10894 작년 11월에 Editable Text에서 발생하는 버그를 수정해 Unreal Engine 저장소에 PR을 올린 적이 있다. 요약하자면 Editable Text에서 탭의 너비를 계산할 때 선행되는 탭 문자들을 고려하지 않아 너비가 제대로 계산되지 않는 문제를 해결한 것이었다. PR을 올리고 나서 한동안 소식이 없어 묻힌 줄만 알았으나, 한참 지나서 확인해보니 에픽 쪽 작업자가 변수명 등을 조금 수정해서 주석과 함께 메인 브랜치에 적용한 것을 확인할 수 있었다.남겨진 코멘트를 ..
FVector2D WindowSize(800.0f, 600.0); /* 원하는 값 대입 */if (FSlateApplication::IsInitialized()) /* 사실 검사 안해도 됨 */{ WindowSize *= FSlateApplication::Get().GetApplicationScale();} /* 윈도우 생성 코드 */... .MinWidth(WindowSize.X) .MinHeight(WindowSize.Y) .MaxWidth(WindowSize.X) .MaxHeight(WindowSize.Y)...

소스 코드는 프로그래밍 언어로 기술된, 컴파일러, 인터프리터 등에 의해 해석될 수 있는 텍스트 파일을 말한다. 이중에서 어떤 소프트웨어를 빌드 혹은 실행시키기 위해 사용되는 소스 코드를 코드베이스라고 칭한다. 코드베이스에는 일반적으로 사람이 작성한 소스 코드가 포함된다. 라이브러리, 프로그램 등에 의해 기계적으로 생성된 소스 코드는 코드베이스라고 하지 않는다. git 과 같은 버전 관리 시스템의 저장소에 저장되는지를 기준점으로 삼기도 한다.이해를 돕기 위해 간단한 집합 다이어그램을 그려 보았다.
TMap의 키값으로 UObject 객체를 사용할 경우 Raw Pointer나 TObjectPtr 대신 TObjectKey를 사용할 수 있다.근데 공식 문서 어디에도 TMap의 키값으로 TObjectKey를 권장한다는 내용이 없는 걸 보니 무조건 써야 하는 것은 아닌 듯 하다. TObjectKey에는 FObjectKey 타입의 ObjectKey 멤버가 있는데, FObjectKey::ObjectIndex를 먼저 비교하고 동일할 시 FObjectKey::ObjectSerialNumber를 비교한다.어차피 64비트에서는 모든 연산이 64비트로 이뤄지므로 오히려 포인터보다 비교 연산자의 성능이 떨어질 것으로 예상된다.Type Hash를 구하는 과정에서도 포인터 타입은 UE::Private::MurmurFinali..