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 입 니 다. 이것 은 두 번 째 버퍼 를 대표 합 니 다.다른 건 다 똑 같 아.
저작권 성명: 본 블 로그 의 오리지널 글, 블 로그, 동의 없 이 전재 할 수 없습니다.

좋은 웹페이지 즐겨찾기