티스토리 뷰

Game/DirectX 11

Bool HLSL

newpolaris 2017. 5. 5. 21:34
cbuffer cbPerFrame
{
    float gTexelWidth;
    float gTexelHeight;
    bool gHorizontalBlur;
};

bool 은 32 bit 이다. 놀랍게도.

https://gamedev.stackexchange.com/questions/22600/why-cant-i-get-a-bool-packed-and-aligned-into-a-d3d-constant-buffer

답글에 32 bit int 랑 같다고 적혀있어서 먼 약먹었나 했는데;

Reflection API로 조사해온 결과 진짜 4 byte 이다

결국 int 를 bit flag로 조사하거나,

http://theinstructionlimit.com/encoding-boolean-flags-into-a-float-in-hlsl

float 의 bit를 조사할 수 있는데 float는 23 bit까지가 가수부니까 주의

원글에서는 int를 flaot으로 cast 해서 넘기고, 받은 부분에서 int로 복원 후 fmod 로 int 를 fmod로 조사한다

int flags = data[2][3];

bool fullbright = fmod(flags, 2) == 1; bool clampTexture = fmod(flags, 4) >= 2; bool xTextureRepeat = fmod(flags, 8) >= 4; bool yTextureRepeat = fmod(flags, 16) >= 8;

'Game > DirectX 11' 카테고리의 다른 글

SSAO(3)  (0) 2017.05.09
SSAO(2)  (0) 2017.05.07
SSAO (1)  (1) 2017.05.05
Renderer (2) - Constant Buffer  (0) 2017.04.23
Renderer (1) - Hierography3  (0) 2017.04.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크