분류 전체보기(30)
-
드로우 콜(draw call)을 줄여야 하는 이유
드로우 콜을 줄여야 하는 이유는, 각 드로우 콜마다 GPU에 제공되는 데이터가 적을 경우 CPU가 상태(쉐이더 등)를 설정하고 GPU에 데이터를 제출하기 까지 걸리는 시간 보다 GPU가 렌더링하는 시간이 훨씬 빠를 것이기 때문이다. 이 경우, 적은 데이터를 가진 드로우 콜들로 인해 CPU가 빠르게 GPU에 데이터를 제공할 수 없기 때문에 GPU를 충분히 활용할 수 없게되며, GPU가 유휴(idle) 상태에 놓여있는 시간이 많아진다. 그래서 각 드로우 콜에 많은 데이터를 담아 드로우 콜을 줄이고, GPU가 유휴 상태에 놓이지 않도록 하는 것이 중요하다. 참고 (https://stackoverflow.com/questions/4853856/why-are-draw-calls-expensive) First of..
2022.06.10 -
Character Set / Encoding
ASCII ASCII는 숫자, 영어의 알파벳, 몇몇 특수문자에 0-127 각각의 수를 할당한 것이다. 0~127 범위의 수를 사용하기 때문에 7bit로 표현이 가능하며, 따라서 각각의 문자는 메모리에 1byte로 저장할 수 잇다. ANSI ASCII는 언어를 영어밖에 표현하지 못하는 문제가 있다. 하지만, ASCII에는 1bit를 사용하지 않는 것을 알기 때문에 이를 활용하여 Code Page라고 하는 것을 도입했는데, 0-127 범위는 ASCII와 똑같고, 128-255 범위의 수들은 각각의 Code Page에 따라 다른 문자들을 할당한 것이다. ANSI라고 부르면 따로 고정된 Code Page를 칭하는 것은 아니며, 보통 "내 시스템의 Default Locale/Code Page"를 의미한다. 즉, ..
2022.04.24 -
문자열 리터럴을 템플릿 인자로 전달하는 방법
C++에서는 다음 코드와 같이 템플릿 인자로 string literal을 전달하는 것이 허용되지 않는다. template void Print() { std::cout
2022.04.02 -
Literal Class Type as Non-type Template Parameter
C++20 이전에는 템플릿 파라미터로 사용할 수 있는 non-type으로는 다음과 같은 것들이 있었다. lvalue reference type (to object or to function); an integral type; a pointer type (to object or to function); a pointer to member type (to member object or to member function); an enumeration type; std::nullptr_t; C++20 이후부터는 실수형 타입 및 클래스 타입도 템플릿 파라미터로 사용할 수 있게 되었다. a floating-point type; a literal class type with the following propertie..
2022.04.02 -
Template Template Parameter
템플릿 템플릿 파라미터(Template Template Parameter)란, 템플릿 인자로 class template 또는 alias template을 전달할 수 있게하는 langauage feature이다. 템플릿 인자로 class template/alias template을 전달해서 어디에 쓰이는지 알아보기 위해 다음 코드를 보자. template class Stack { private: Container m_Container; public: // You can use forwarding reference for the better performance void Push(T const& value); // Some member functions // ... }; int main() { // the ..
2022.03.25 -
.template / ::template / ->template
struct A { template void Foo(); }; template void Call(T arg) { arg.Foo(); // ERROR! } 위 코드에서 arg.Foo() 함수 콜은 다음과 같은 컴파일 에러가 발생한다. (clang, gcc에서는 컴파일 에러가 발생하며, msvc에서는 정상적으로 컴파일 된다.) error: use 'template' keyword to treat 'Foo' as a dependent template name 이 문제는 템플릿 파라미터에 의존하는 오브젝트의 템플릿 멤버함수를 호출하려고 할 때 발생하는 문제로, 컴파일러가 template도 같은 방식으로 사용할 수 있다. [참고] - C++ Templates: The Complete Guide, 2nd Edition
2022.03.23