실행파일의 크기가 작아지고 메모리에 단위 파일의 크기가 작아질수록 (더 작은 메모리 단위에서 함수를 찾으므로)실행속도는 빨라진다
필요할때마다 Memory에 올림
언어에 독립적으로 사용 가능
다수 DLL사용 시 Md, Mt를 일치시켜야 함
__declspec(dllimport) RetrunType FunctionName(param...) // 선언
__declspec(dllexport) RetrunType FunctionName(param...) // 정의
__declspec()이 선언된 객체는 DLL밖에서 사용 가능. 선언되지 않았다면 사용 불가능
DLL을 1개의 거대한 객체로 생각한다면 일종의 Interface로 보면 될 듯
DLL 빌드를 통해 생성된 DLL, Lib, header 파일을 모두 사용
header에 선언된 function name을 name mangling 상관 없이 사용 가능(클래스 사용 가능)
DLL의 함수 선언이 변경된다면 DLL이외에도 header와 Lib 파일 모두 교체해야 하지만 내부 구조만 바뀌었다면 DLL만 교체해도 사용 가능
일반적인 Lib나 include와 동일한 방식으로 사용 가능
명시적으로 DLL의 어떤 함수를 사용하겠다 선언하는 방식
header, Lib 파일 없이 DLL만 있어도 사용 가능
단, name mangling 때문에 함수 이름이 복잡해질 수 있고, class는 사용이 불가능하거나 편법을 사용해야 함
LoadLibrary(); // memory에 올리기
GetProcAddress(); // 원하는 DLL의 함수가 올라간 memory 주소 반환
FreeLibrary(); // DLL 해제. Library Counter방식으로 작동
DLL class 사용법
Cpp는 overloading을 지원하는 함수로 compile시 function symbol을 그대로 사용할 수 없음
그렇기 때문에 compile time에 일정한 규약에 따라 function symbol을 변환하는 과정을 수행
문제는 DLL을 사용 시 Name mangling된 함수는 그 이름이 복잡하여 사용이 어려움
cpp compiler에게 C compiler를 사용하라는 명령어
#ifdef __cplusplus
extern "C"
{
// function define
}
#endif
discard
BlendState.AlphaToCoverageEnable
z-buffer 순서에 무관하게 출력 가능
Blending은 배경 pixel과 source pixel을 섞는 과정이므로 z buffer의 순서에 따라 출력해야 함
UI-Effect를 출력할 시 Alpha Test, Alpha Blend, Z Buffer Test, Z Buffer Save 총 4개의 조건을 수행할지를 고려해야 함
그 외에 Pixel Shader에서 Alpha Blending Algorithm을 사용하는 Color Blending이나 Stencil Buffer를 사용하는 방식도 존재
Color Blending의 경우 출력 색상이 변경되는 Alpha Blending과는 다르게 원본 색상을 보전할 수 있음
Stencil Buffer의 경우 실루엣, 거울 등의 출력에 유용