Tech/Silverlight2009. 10. 28. 01:25
요즘 HLSL을 가지고 Pixel Shader를 만들고 있다. 따라서 여기서 얘기하는 경험은 HLSL로 된 *.fx 파일을 컴파일 할 때 적용되는 얘기이다. 셰이더 어셈블리 명령을 직접 써서 만드는 일은 전혀 해보지 않아서 얼마나 관련성이 있을지 모르겠다.

Silverlight 3와 WPF(.NET 3.5 SP1)에서는 Shader Model 2의 Pixel Shader(ps_2_0)를 지원한다.

Pixel Shader 2.0에서는 64개의 산술 instruction만을 사용할 수 있다. 문제는 64개를 넘어서 컴파일이 안 될 때만 인스트럭션 개수를 알려준다는 것. 기본적인 사용법만 배운 상태에서 한참 만들다가 "님, 인스트럭션 개수 초과했어염. 65개임."하는 에러 메시지를 받았을 때 어찌나 황당하던지.

인스트럭션 개수를 알 수 있는 방법을 찾아 헤매다가 발견한 것이 셰이더 어셈블리 파일을 만들어 내는 옵션이다. *.fx 파일을 fxc.exe로 컴파일할 때 /Fc 옵션을 사용하면 어셈블리 파일을 출력해준다. 여기에는 컴파일 결과물의 인스트럭션 개수가 표시되기 때문에 작업할 때 아주 유용하다. 만세! 인스트럭션 개수를 알 수 있는 다른 방법은 아직 찾지 못했다.

인스트럭션 개수를 알 수 있는 방법이 생기니 인스트럭션 개수 줄이는 삽질도 이제 좀 할 맛이 난다. 경험상 현재까지 작업중에 인스트럭션 줄이는데 제일 도움이 되는 것은 똑같은 산술 연산을 벡터 연산 하나로 합치는 거였다.

가령 이런 코드보다
float c1 = Const1 - color.r;
float c2 = Const2 - color.g;
float c3 = Const3 - color.b;
이런 코드의 인스트럭션 개수가 적었다.
float4 c4 = {Const1, Const2, Const3, 0.0f};
float4 c = c4 - color;

 

'Tech > Silverlight' 카테고리의 다른 글

Commands in Silverlight with SLExtensions - 2  (0) 2010.01.01
Commands in Silverlight with SLExtensions - 1  (0) 2009.12.26
[Element Binding]  (0) 2009.10.12
[Blend 3 Element Binding]  (0) 2009.10.12
Posted by wafe
Tech/Silverlight2009. 10. 12. 17:54

Blend 3에서 너무 쉽게 썼던 Element Binding~ 소스 코드 상에선 어떻게 쓰일까요?

이번엔 소스코드 상에서의 Element Binding을 짤막하고 간단하게 구현한 예를 들어보겠습니다.

일단 원하는 동작 내용은 ListBox에서 선택된 Item이 가지고 있는 이미지 정보에 따라 배경 이미지가 변하는 것입니다. Element Binding을 하기 위헤서 필요한 정보는 세 가지 입니다.

1. Element Binding할 FrameworkElement 개체
2. 그리고 그 개체에 관하여 Binding 할 속성 = Dependancy Property
3. Binding Mode

1
2
3
4
5
Binding bImg = new Binding("SelectedItem.Children[1].Source");
bImg.ElementName = "imgList";
bImg.Mode = BindingMode.TwoWay;
bColor.UpdateSourceTrigger = UpdateSourceTrigger.Explicit;
background.SetBinding(Image.SourceProperty, bImg);

우선 Binding 객체를 새
Binding할 속성의 주소를 주어 새로이 생성하고, ElementName에 imgList라는 이름의 ListBox의 이름을 부여함으로써 Binding할 개체라는 것을 알려줍니다.
Binding Mode는 TwoWay로 설정하고 UpdateTiming은 Expicit로 설정했습니다.
그 후에, SetBinding()를 이용하여 해당 객체의 속성과 연결 시켜줍니다. 원하는 것은 background 이미지의 sourcr속성과 연결시키는 것이기 때문에 Image.SourceProperty와 bImg를 바인딩 시켰습니다.

이걸로 뚝딱 Element Binding을 소스코드 상에서 구현하는 방법을 해치웠습니다!

' ㅅ')/ 참 쉽죠잉~.


'Tech > Silverlight' 카테고리의 다른 글

Commands in Silverlight with SLExtensions - 1  (0) 2009.12.26
Silverlight Pixel Shader 개발 팁  (0) 2009.10.28
[Blend 3 Element Binding]  (0) 2009.10.12
[SketchFlow를 만들자 2]  (0) 2009.10.09
Posted by 알 수 없는 사용자