DirectX 11 학습 노트 9 - 동적 정점 버퍼 와 정적 정점 버퍼
2489 단어 학습 노트
버퍼 는. fx 파일 의 영향 (. ps. vs) 데이터 구조 로 정의 되 었 습 니 다.fx 와 cpp 데이터 통신 파일 입 니 다.
예:
cbuffer 는 키워드 입 니 다. struct 와 유사 하 다
여기에 두 개의 버퍼 가 정의 되 어 있다.
프로그램 이 실 행 될 때
효과 파일. fx 는 세계 매트릭스 관찰 매트릭스 투영 매트릭스 등 을 획득 해 야 합 니 다.따라서 이 버퍼 에 값 을 부여 해 야 합 니 다.한편, fx 파일 에 직접 쓸 수 있 습 니 다.
그러나.
효과 파일 을 컴 파일 한 후에 동적 으로 바 꿀 수 없고 유연성 이 없다.
다음은 두 가지 버퍼 입 니 다.
1: 정적 상수 버퍼
정적 이란 렌 더러 가 초기 화 될 때 버퍼 에 값 을 부여 하 는 것 입 니 다.다 시 는 변 하지 않 을 거 야.
4. 567913. 위 에 정적 버퍼 를 만 드 는 열 입 니 다.
사용 속성
cpu 가 실행 과정 에서 데 이 터 를 읽 고 쓸 수 없다 는 뜻 입 니 다.
bd. COUAccessFlags = 0 도 0 으로 설정 해 야 합 니 다.
버퍼 구 조 를 정의 하면 초기 화 됩 니 다.
//--------------------------------------------------------------------------------------
// Constant Buffer Variables
//--------------------------------------------------------------------------------------
cbuffer ConstantBuffer
{
matrix World;
matrix View;
matrix Projection;
};
cbuffer LightBuffer
{
float3 cameraPosition;
float padding;
};
초기 화 되 어 있 습 니 다. 아주 easy.
2: 동적 정점 버퍼
정적 버퍼 와 다 릅 니 다.
동적 버퍼 는 모든 프레임 에 렌 더 링 데 이 터 를 동적 으로 바 꿔 야 합 니 다.
예 를 들 어 물결 은 매 초 마다 그의 정점 구조 가 변 하고 있 기 때문에 동적 버퍼 동적 할당 을 사용 해 야 합 니 다. 할당 을 초기 화 하 는 것 이 아니 라 동적 버퍼 동적 할당 을 사용 해 야 합 니 다.
// Create the constant buffer
D3D11_BUFFER_DESC bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = D3D11_USAGE_DEFAULT;
bd.ByteWidth = sizeof(ConstantBuffer);
bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
bd.CPUAccessFlags = 0;
hr = device->CreateBuffer( &bd, NULL, &m_matrixBuffer );
if( FAILED( hr ) )
return hr;
정 의 는 기본적으로 같다.Usage 에서 만 D3D 11 로 설정 합 니 다.USAGE_DYNAMIC 그리고 CPUAccessFlags 도 D3D 11 로 설정 해 주세요.CPU_ACCESS_WRITE
그리고 데 이 터 를 업데이트 할 때 는 달라 요.
업데이트 가 완료 되 지 않 았 을 때 장치 가 렌 더 링 되 어 오류 데이터 가 일치 하지 않 는 것 을 방지 하려 면 맵 으로 잠 가 야 합 니 다.
D3D11_USAGE_DEFAULT
여기에 두 개의 예 를 들 어 같은 시간 에 두 개의 버퍼 를 렌 더 링 했다.
주의해 야 할 것 은 두 개의 버퍼 를 렌 더 링 할 때 첫 번 째 것 을 먼저 쓰 고 두 번 째 것 을 쓰 는 것 이 아니다.
약간의 차이 가 있다.
바로 device Context - > VSSetConstant Buffers () 에 가입 할 첫 번 째 인자 1 입 니 다. 이것 은 두 번 째 버퍼 를 대표 합 니 다.다른 건 다 똑 같 아.
저작권 성명: 본 블 로그 의 오리지널 글, 블 로그, 동의 없 이 전재 할 수 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
STL 학습노트(6) 함수 객체모방 함수는 모두pass-by-value이다 함수 대상은 값에 따라 전달되고 값에 따라 되돌아오기 때문에 함수 대상은 가능한 한 작아야 한다(대상 복사 비용이 크다) 함수 f와 대상 x, x 대상에서 f를 호출하면:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.