분류 전체보기

· Linux
g++ 컴파일러 g++ 컴파일러란 c++언어를 위한 컴파일러이며 GNU C++ Compiler의 약자이다. GNU 가 들어가있는걸 보면 알 수 있듯이, g++는 gcc 컴파일러를 만든 GNU에서 시작됐다고 볼 수 있다. gcc는 이와는 별개로 Objective-C, Python 같은 언어를 지원하기 위한 컴파일러로 발전해왔다. g++ 컴파일러 설치 먼저 g++ 컴파일러가 설치됐는지 부터 확인해야 한다. g++ --version 리눅스에서 친절하게 sudo(Administrator 수준에서 명령어를 실행) apt install g++ 명령어를 입력하라고 알려준다. 처음에 명령어를 입력할 때는 리눅스 설치과정에서 입력한 패스워드를 입력해야한다. 그리고 설치를 진행해보았다. sudo apt install g+..
오늘은 좀 어려운 주제에 대해 논하고자 한다. C++에서 멀티스레드를 구현할 때 C++ 11에서 추가된 std::thread를 사용할 수 있다. thread의 생성자에 void 함수와 함수의 인자를 넣어 멀티스레드 환경에서 프로그램을 동작시킬 수 있다. 하지만 스레드 간에는 명령 순서가 보장되지 않아 예상과는 다른 결과가 나올 수 있다. #include #include #include void increment(int &count) { for (int i = 0; i < 100'000; i++) { count++; } } int main() { int count = 0; std::vector v; for (int i = 0; i < 10; i++) { v.push_back(std::thread(incre..
· Tips
clang-format은 C/C++/ObjectiveC 등 C 계열 언어들에 대해 코드 포맷팅을 지원하는 Configuration이다. 처음에 .clang-format을 생성하고 나면 무수히 많은 기본 옵션들을 보고 당황할 수 있다. 하지만 자주 사용되는 옵션부터 살펴보고 이후에 생기는 불편함에 대해서만 직접 찾아보는 식으로 하면 옵션을 수정하는 시간을 단축할 수 있다. 우선 기본 스타일은 clang의 제작자이기도 한 LLVM을 따른다. AccessModifierOffset: -4 접근 지정자(public, private, protected 등)의 indent를 표준 indent(IndentWidth) 대비 어느 위치에 둘 것인지를 묻는다. 보통 indent를 두지 않는 경우가 많기 때문에 IndentW..
OpenGL 공식 사이트를 통해 Depth Buffer와 Stencil Buffer에 대해 알아보자. Ray tracing의 경우 연산량이 많지만 눈으로 부터 광선이 역추적하여 픽셀에 렌더링되기 때문에 멀리있는 오브젝트가 그려지지 않는다. (참고로 Ray tracing에서도 Depth Buffer가 사용될 수 있다.) 하지만 Rasterization에서 Depth Buffer가 없다면 어떻게 될까? 위 그림처럼 뒤에 있어서 일부분이 가려져야할 텍스처가 앞으로 나온 것처럼 보인다. 래스터로 투영된 객체는 앞 뒤 구분이 없기 때문에 나중에 렌더링된 픽셀이 표시되는 것이다. Depth Buffer 대신 픽셀마다 Z값을 저장하면 저장된 Z값과 현재 Z값을 비교하여 한 픽셀의 Depth Buffer에서 현재 Z값..
· Tips
Visual Studio로 클론 코딩을 하다 보면 다운 받은 자료와 내가 새로 만든 프로젝트의 설정 값이 다른 경우가 발생한다. Direct X 11의 경우 제일 많이 발생하는게 Linker 오류와 Vertex Shader, Pixel Shader의 타입과 모델을 지정해주지 않아서 발생하는 HLSL 컴파일 오류이다. 물론 stackoverflow같은 커뮤니티를 통해 해결할 수 있지만 가장 원초적이면서 빠른 방법은 Visual Studio의 설정값을 비교하여 내 프로젝트의 설정값을 채워주는 것이다. Project Property 파일은 .vcxproj 확장자를 가진다. 이 파일을 비교하여 내 프로젝트 프로퍼티 파일을 수정해보자. 1. Diff 설치 Visual Code - Extensions에서 Diff를..
· Git, GitHub
git 원격 repository에 한 번에 큰 용량의 파일들 또는 매우 작은 용량의 다수의 파일들을 push 하는 경우 다음 에러가 발생할 수 있다. $ git push origin main Enumerating objects: 746, done. Counting objects: 100% (746/746), done. Delta compression using up to 12 threads Compressing objects: 100% (634/634), done. error: RPC failed; HTTP 500 curl 22 The requested URL returned error: 500 send-pack: unexpected disconnect while reading sideband packe..
범위 기반 for문 (Range based for loop) 범위 기반 for문은 C++11부터 지원하는 표준 C++ 컨테이너의 기능을 포함하는 컨테이너들에 한하여 사용이 가능한 새로운 형태의 for문이다. #include #include #include int main() { std::array arr{ 1, 2, 3 }; std::vector vec{ 4, 5, 6 }; std::cout
오늘 소개할 내용은 RTTI로 Run Time Type Information 즉, 런타임에 객체의 타입을 확인하는 C++의 매커니즘이다. C#에 Type 타입이 있다면 C++에는 std::type_info 타입이 있다. Type과 std::type_info의 차이가 있다면 Type은 컴파일 타임과 런타임 둘 다 확인할 수 있지만 (컴파일 타임에는 클래스의 원형 타입이고 런타임에는 인스턴스의 타입으로 결정된다.) std::type_info는 런타임에만 확인이 가능하다. 또 std::type_info의 기능이 좀 더 적은 편이다. std::type_info는 객체의 원형 타입을 반환한다. 여러 캐스팅을 거친다고 해도 항상 그 객체가 초기에 선언된 타입만을 가리킨다. std::type_info 클래스를 사용하..
hyunbae
'분류 전체보기' 카테고리의 글 목록 (2 Page)