inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[게임 프로그래머 도약반] DirectX11 입문

CreateInputLayout 도중 Offset 관련하여

409

김도형

작성한 질문수 16

0

강의를 듣고 있는 도중 질문이 하나 생겼습니다 강의 16:05 부분입니다.

강사님께서 CreateInputLayout을 하기 위해 이전 작업으로 D3D11_INPUT_ELEMENT_DESC라는 구조체를 만드셨고 내부의 요소로 UINT AlignedByteOffset; 이러한 변수가 있었습니다.

강의에서 강사님께서 이 부분은 변수가 시작되는 지점을 적는 변수라고 알려주시고 Color가 시작되는 지점이 12Byte라고 하셨는데 이 D3D11_INPUT_ELEMENT_DESC라는 구조체로 설명하려하는 것이 이 전에 선언해두었던

struct Vertex

{

Vec3 position;

Color color;

};

라는 구조체였다면 구조체의 메모리 패딩에 따라 제일 큰 변수의 메모리 크기씩 영역이 쪼개져서 16Byte씩 끊어지니깐 position은 0 ~ 12구간 그리고 12 ~ 16 구간은 메모리 패딩으로 인해 비어져 있고 16 ~ 32까지가 color가 있는 구간으로 알고있었습니다 그래서 제가 잘못 생각하고 있는건가해서 12대신 16을 넣어봤는데 정상적인 색이 안나오지 않더라고요.

제가 개념을 잘못 알고있는건가 아니면 제대로 알고 있는데 이 부분만 특수한 케이스로 12라고 입력이 된건가를 잘 모르겠어서 개념을 확실히 잡고 가야된다고 생각해서 질문 드립니다 혹시 어디가 잘못된 건지 알려주실 수 있으신가요?

c++ directx

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

D3D11_INPUT_ELEMENT_DESC 구조체의 AlignedByteOffset 멤버 변수는 입력 요소가 시작되는 지점의 바이트 오프셋을 나타내는 변수입니다. 이 값은 구조체의 메모리 패딩이 적용된 이후의 바이트 위치를 나타냅니다.

예를 들어, struct Vertex{ Vec3 position; Color color; }; 구조체의 경우 position 멤버 변수가 0 ~ 12 바이트를 차지하고, 12 ~ 16 바이트는 메모리 패딩으로 비워져 있습니다. 그리고 color 멤버 변수가 16 ~ 32 바이트를 차지하게 됩니다.

강사님께서 강의 중에 “Color가 시작되는 지점은 12 바이트이다”라고 설명하셨을 때, 이는 position 멤버 변수 다음 바이트 위치인 12 바이트를 의미합니다. 구체적인 코드나 강의 내용이 없어서 더 정확한 해석이 어렵지만, 일반적인 경우에는 position 멤버 변수의 크기가 12 바이트이고, color 멤버 변수가 바로 그 뒤에 위치하게 됩니다.

따라서, CreateInputLayout을 호출할 때 AlignedByteOffset 멤버 변수에는 12 대신 16을 넣으시면 정상적인 동작을 기대할 수 있을 것입니다. 값이 정상적인 색상이 나오지 않을 때에는 다른 부분에서의 오류가 있을 수 있으니, CreateInputLayout 호출 시 다른 인자들도 재확인하는 것이 좋습니다.

더 자세한 내용이 필요하신 경우에는 구체적인 코드나 강의 내용을 공유해주시면 더 정확한 답변을 드릴 수 있을 것입니다. 감사합니다.

0

김도형

image
여기서 offset 칸에 12를 넣었더니 잘 작동되고 16을 넣으니 제대로 작동이 안되더라고요 그래서 혹시나 구조체 크기를 재봤더니 28Byte더라고요 Vec3 + Color이면 12 + 4(패딩) + 16 = 32인데 왜 28이지 하면서 검색해봤더니 컴파일러가 64비트 기준으로 운영되서 구조체 내부에 64비트가 넘는 자료형이 있으면 컴파일러가 더 이상의 패딩을 포기한다고 하네요 그래가지고 원래 패딩이 되면 16Byte 위치에 와야되는 변수가 12Byte 위치에 와서 offset이 12라고 했을때가 정상 작동했나 싶기도 한데 이건 어떻게 생각하세요?

assimp-vc143-mtd.dll가 없어서 코드 실행을 진행할 수 없습니다 라는 에러가 뜹니다.

0

87

2

Model.cpp에서 ReadMaterial()의 SpecularTexture 부분 질문입니다.

0

57

0

노멀매핑 자료

0

77

1

셰이더 인텔리센스 문제

0

81

1

4강 삼각형띄우기 오류관련 질문있습니다

0

71

1

64.애니메이션 강의의, AssimpTool 에서 FBX 애니매이션 데이터를 옮길 때의 강의 오류가 있는 것 같습니다.

1

65

1

SkyDemo에서 카메라 입력이 작동하지 않는 문제

0

84

2

섹션6. DirectX 11 3D 입문 강의부터 렌더링이 안됩니다

0

133

2

텍스처와 UV 강의 관련해서 문의드려요

0

165

2

frame간 보간에 대해서 질문이있습니다.

1

132

1

자료 pptx가 아닌 pdf

0

109

1

어디에 좀더 집중해야하나 고민입니다

0

203

1

CameraPosition 질문있습니다

1

114

1

안녕하세요 roatation 행렬 질문있습니다.

1

156

2

'C\ .... ......lib'은 올바른 win32에플리케이션이 아닙니다.

0

525

4

버텍스버퍼 실습 도중 버그

0

176

1

물방울 책 실습은 어디까지 하는건가요??

0

408

2

리소스매니저의 get함수에서 에러가 나요

0

133

2

자식 GameObject SetPosition 시 움직이지 않음

0

102

1

강의 끝나고 3D 포폴

0

320

2

공부 방법에 대해서 문의 드려요

0

155

1

19분 5초에 함수 구현부 한꺼번에 만드는법

1

154

1

좌표계 변환 행렬이랑 srt 변환 행렬

0

206

2

SRT 행렬중에 ppt 질문 있습니다.

0

169

1