블로그 이미지
자신의 단점을 메꾸는 것을 단(鍛)이라 하고 자신의 강점을 갈고 닦는 것을 련(鍊)이라 하여, 두가지를 합친 것을 단련이라고 부른다. 붕대마음

카테고리

전체목록 (667)
참고사이트 (8)
Goal (4)
Travel (10)
My Life (105)
Game (35)
Game Review (7)
Game Plan (0)
Books (5)
English (1)
Optimizing (12)
Study (218)
유용한 것들_etc (44)
유용한 것들_func (20)
Unity (48)
Unreal (87)
작업장 (54)
RenderMonkey (6)
정리요망 (1)
따라잡기 시리즈 (0)
링크용 (0)
Total345,595
Today85
Yesterday123

'SetValue'에 해당되는 글 1건

  1. 2009.08.08 shader SetValue

shader SetValue

Study/Graphics / 2009. 8. 8. 17:10


ID3DXBaseEffect::SetValue

Set the value of an arbitrary parameter or annotation, including simple types, structs, arrays, strings, shaders and textures.

HRESULT SetValue(
  D3DXHANDLE hParameter,
  LPCVOID pData,
  UINT Bytes
);
그래그래.. 분명 msdn에는 setvalue함수에 어레이가 가능하다고 적혀있단 말이야.
그래서 난 큐브를 찍기 위해 아래와 같이 정점을 만들었지.
D3DXVECTOR3 vertices[] =
 {
  D3DXVECTOR3( -1,  1,  1),  /// v0
  D3DXVECTOR3(  1,  1,  1),  /// v1
  D3DXVECTOR3(  1,  1, -1),  /// v2
  D3DXVECTOR3( -1,  1, -1),  /// v3
  D3DXVECTOR3( -1, -1,  1),  /// v4
  D3DXVECTOR3(  1, -1,  1),  /// v5
  D3DXVECTOR3(  1, -1, -1),  /// v6
  D3DXVECTOR3( -1, -1, -1),  /// v7
 };
그리고 이 아이를 shader에게 이렇게 넘겨 주었어
pEffect->SetValue("vecPos", vertices, sizeof(D3DXVECTOR3)*8);
 
fx파일에는 이 변수가 전역으로 float3 vecPos[202]; 이렇게 선언되어 있었지.
그런데 십할~!!! 안되는거야.
 
그래서 결국 SetVectorArray를 써보았지.
그런데 SetVectorArray는 병신같이 vector4짜리만 받잖아?
결국 난 나의 아름다운 코드를 아래와 같이 고쳐서 테스트를 해봤어.
D3DXVECTOR4 vertices4[] =
 {
  D3DXVECTOR4( -1,  1,  1,1),  /// v0
  D3DXVECTOR4(  1,  1,  1,1),  /// v1
  D3DXVECTOR4(  1,  1, -1,1),  /// v2
  D3DXVECTOR4( -1,  1, -1,1),  /// v3
  D3DXVECTOR4( -1, -1,  1,1),  /// v4
  D3DXVECTOR4(  1, -1,  1,1),  /// v5
  D3DXVECTOR4(  1, -1, -1,1),  /// v6
  D3DXVECTOR4( -1, -1, -1,1),  /// v7
 };
그리고 이아이를 shader에게 알려주었지.
pEffect->SetVectorArray("vertices4", vertices4, 8);
그랬더니....십할..조낸 잘돼...ㅜㅜ..
 
그럼머야...머가 문제야....
무조건 vector4야 된다는 거야??
그래서 난 다시 어떻게든 msdn을 믿고 SetValue에게 Array를 실험해 보고 싶었지.
pEffect->SetValue("vecPos", vertices4, sizeof(D3DXVECTOR4)*8);
짜잔~ 결과는 십할 또안돼~~!!!
그럼 결국 SetValue는 Array는 지원 안하는 거야??
msdn이 내게 구라친거니???
 
그러다가 다시 세시간에 걸쳐 Pix와 PerfHUD를 통해 다시 캐삽질을 해서 알아낸 결과.....
SetValue로 어레이를 쓰고 싶다면 fx의 해당 변수에 사이즈를 맞추어라~!!!.
fx파일에서 float3 vecPos[202]; 라고 설정했으니까.
pEffect->SetValue("vecPos", vertices, sizeof(D3DXVECTOR3)*202); 이렇게 하던지
pEffect->SetValue("vecPos", vertices, D3DX_DEFAULT);            이렇게 하라는 거지..
조낸....젠장..ㅜㅜ...
해결이돼서 기쁘긴 한데....아까운 내시간은 어디로 가버린 거니??....

'Study > Graphics' 카테고리의 다른 글

not use lock, unlock version font system  (0) 2009.08.24
shader에서의 dword  (0) 2009.08.15
float4에 마지막 w의 값...1이냐 0이냐....  (0) 2009.08.11
shader SetValue  (0) 2009.08.08
Directx9 셰이더 프로그래밍 예제 수정방법.  (4) 2009.07.13
HDR Cube Map Sample  (0) 2009.06.25
Posted by 붕대마음

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함