태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

달력

07

« 2017/07 »

  •  
  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
  •  
2011.10.18 09:21

MVVM에서 IoC의 중요성 분류없음2011.10.18 09:21

MVVM 패턴을 사용할 때 초기화하는 패턴만 대략 10가지 정도의 패턴이 있습니다. 그중에 Expression Blend와 VisualStudio의 디자인 타임에 잘 보이게 하려면 리소스에 ViewModel Locator를 넣는게 가장 좋습니다.

당연히 중복을 피하고 싶고 컨트롤마다 로케이터가 생성될 필요는 없으니 Window나 UserControl 모두에 Locator 리소스를 넣기보다는 App의 리소스(글로벌 리소스)에 넣는 방법이 먼저 시도되는 것이 바람직합니다.

그런데 여기서 디자인타임 지원에 문제가 생깁니다. Blend에서 윈도우나 사용자컨트롤에 포함되어 있는 사용자컨트롤을 생성할 때, 글로벌 리소스에는 접근할 수가 없는거죠. 검색을 좀 해보면 이것을 Blend의 버그로 보는 경향이 많습니다. 몇가지 해결책도 제시하고 있는데 완벽하지는 않습니다.

결국 컨트롤마다 XAML의 리소스 사전에 로케이터를 정의하는 방식으로 선회할 수 밖에 없었습니다. 이때 우리를 구해준 것이 IoC 컨테이너였습니다. MVVM Light를 사용하는 프로젝트라서 사실은 이미 SimpleIoc라는 내장 IoC 컨테이너가 사용되고 있는 상황이었지요.

IoC 컨테이너 자체가 이미 싱글턴이고, 이 싱글턴 인스턴스가 하는 일은 사용자가 등록해둔 타입별 인스턴스를 관리하는 일입니다. 즉 프로그램의 어느 부분에서나 쓰고 싶은 타입만 지정하면 그 타입의 동일한 인스턴스를 얻을 수 있다는 거죠.

그래서 ViewModel Locator를 모든 컨트롤에서 매번 생성하는게 아무 문제 없는 거였습니다.

MVVM 패턴을 쓸 때 걱정했던 부분이 패턴 자체의 학습 곡선이었습니다. 그리고 부가적으로 따라올 것처럼 보이는 다른 패턴들에 대한 학습이었습니다. 확실히 학습에 시간을 좀 더 쓰게 되는 것 같기는 합니다. 하지만 다행히 MVVM Light 프레임워크가 적절한 수준에서 문제 범위가 너무 커지는 걸 막아주었다는 생각이 듭니다.

iPhone 에서 작성된 글입니다.


신고
Posted by wafe

댓글을 달아 주세요

2010.12.06 01:25

Silverlight 5 계획 발표! 그리고 WPF 분류없음2010.12.06 01:25

며칠 전 Silverlight Firestarter 2nd December 2010 이라는 행사의 키노트에서 Silverlight 5 계획이 발표되었습니다.

 

상세한 내용은 공도님의 "실버라이트의 미래, 미리보는 Silverlight 5"라는 포스트에 잘 요약되어 있어서 저는 제 감상만을 좀 더해볼까 합니다.

 

발표에서는 가장 마지막에 나왔지만 역시 출시일이 가장 궁금하니 먼저 보면, 내년 봄에 베타가 나오고 연말 쯤 정식 출시될 것이라고 합니다. 거의 6,7 개월 주기로 릴리스를 하는 셈이네요.

Photo 12월 05, 11 18 04 오후

 

이런 슬라이드를 보여주며 Silverlight 5에 대한 이야기를 시작하는 Scott Gu 아저씨입니다.

Photo 12월 05, 11 47 02 오후

네, HTML5, Silverlight, WPF 삼인방입니다. 요즘 밖에서는 전략이 불분명하고 중복 투자라고 욕먹는 삼인방이지만 그래도 구스리 아저씨는 "최종 사용자에게 최상의 경험을 제공하기 위해 개발자들이 선택할 수 있는 선택지를 아주 다양하게 제공하고 있다"고 말씀하십니다. (구스리 아저씨, 왕년에 ASP.NET 직접 만들 때의 포스를 발휘해서 뭔가 멋지구리한 거 한 건 해주셨으면 좋겠습니다.)  

 

뒤에 계속 이어지는 기능 설명과 그 기능을 이용해서 개발하는 MS 기술 전도사의 데모나 써드 파티 개발사들의 데모로 봤을 때 실버라이트가 집중하고 있는 분야는 3D, Media, Desktop Application 으로 볼 수 있을 것 같습니다.

 

Photo 12월 06, 12 11 40 오전

미디어 지원이야 실버라이트 초기 버전부터 플래시에 비해서도 상대적으로 강점으로 꼽을 수 있었기 때문에 특별히 이상할 것이 없다고 생각되는데, 5 버전에 Trickplay라는 이름으로 재생 속도 조절을 지원한다는 건 정말 올레!를 외칠 수 밖에 없네요. 플래시 기반의 콘텐츠를 제공하던 때부터 실버라이트로 제공하는 지금까지 "속도 조절 되나요?" 라는 고객의 질문 빈도는 정말 귀가 따가울 정도로 높았거든요. (여차하면 하나 만들어보자는 얘기도 꽤 했었죠. 착수는 못했지만... ^^;) 빨리 재생될 때 음성이 새소리처럼 변조되거나 하는 일이 생기지 않도록 하는 처리도 내장된다고 하니 기대가됩니다.

 

3D 지원에 대해서는 인체 시뮬레이션 소프트웨어로 시연을 했는데, 상당히 부드러운 동작을 보여줬습니다. 실버라이트로 3D UI를 구성하는게 현실이 되겠구나 싶은 생각이 들기는 했지만, 구현 난이도가 어떠할지는 실제 작성 방법을 보기 전에는 알 수 없으니 좀 기다려봐야 되겠습니다.

 

다른 한 편으로 놀라웠던 점은 실버라이트에서 P/Invoke 가 가능해진다는 점이었습니다. 보안 문제 때문에 이것저것 막힌게 많았는데 버전 4에서 COM Interop을 열어주나 했더니 이제 아예 P/Invoke로 WIN32를 열어버리는군요. (물론 Trusted App에 한해서지만 말이죠)

 

그리하여,

Photo 12월 06, 12 31 23 오전

혈당측정기에서 USB로 데이터를 읽어오는 것도 가능하고, Excel을 실행시켜서 데이터를 표시하는 것도 가능합니다!

Photo 12월 06, 12 31 32 오전

 

Out of Browser App에서 여러 개의 윈도우를 띄울 수 있는 기능도 추가되고, 프린트 기능도 추가되니 업무용 프로그램들(LOB)을 Silverlight로 만드는 데에는 전혀 무리가 없을 것 같습니다. WPF 역시 초창기에 기술 전도사들이 자주 보여주던 사례가 3D 쇼핑몰 사례나 미려한 UI를 가진 업무용 어플리케이션이었는데 Silverlight도 그 길을 그대로 따라가는 것 같습니다.

 

일단 실버라이트 5에 추가되는 기능들은 정말 맘에 듭니다. 빨리 나왔으면 좋겠어요! 새 기능들에 대한 감상은 여기까지 하고 좀 다른 생각들을 해 보았습니다.

 

 

지난 PDC에서 HTML5 올인 전략을 발표했다가 급히 실버라이트는 계속 개발될거라고 해명하는 사건이 있었지만, 일종의 해프닝이라고 봐야할 것 같습니다. HTML5가 웹 어플리케이션 개발에 본격적으로 도입되려면 앞으로도 몇 년 정도의 시간이 걸릴 것이고, 실버라이트가 분명히 필요한 영역이 있을테니까요. (모바일 웹앱은 별도로 다룬다는 가정하에서 입니다)

 

실버라이트 5 계획을 보고 나니, 오히려 걱정할 것은 WPF 아닌가하는 생각이 듭니다. Windows Vista 개발 당시에는 전부 WPF로 갈아엎을 것 같은 기세로 주목 받았지만 정작 지금까지 MS에서 제작한 WPF 기반 어플리케이션은 손에 꼽을 정도라고 알고 있습니다. (Zune과 VisualStudio 2010 정도?) Windows Live Essentials 정도는 WPF 기반으로 만들어줘야 아, 좀 밀어주는구나 하는 기분이라도 들텐데 말이죠. 물론 지금 당장은 닷넷 기반 데스크톱 어플리케이션은 WPF로 만드는 것이 맞겠지만 곧 선호도가 뒤집지 않을까 싶습니다.

 

그래도 이런게 포함된다면 적어도 데스크톱 전용 어플리케이션은 WPF로 해야지! 하고 (적어도 저만은) 생각하겠다 싶은 게 두 가지 있긴 합니다. 제 경험상 현재 WPF에서 가장 불만인 점은 Silverlight와 XAML 호환이 되지 않는다는 것과, Silverlight XAP와의 연계에 상대적 이점이 전혀 없다는 점입니다. (이미 WPF보다는 Silverlight 기준으로 생각을 하게 되네요)

 

XAML 호환이 되어서 실버라이트 컨트롤을 WPF에서 그대로 갖다 쓸 수 있거나 동일한 방식으로 커스터마이징 할 수 있어야 효율적인 것은 당연할 것입니다.

 

두 번째가 중요한데, Silverlight 5가 IE9과 함께 쓰일 때에는 windowless 모드일 때에도 하드웨어 가속이 될 거라고 발표가 이번에 되었습니다. 비슷하게 WPF에서는 마치 일반 WPF UserControl 처럼 Silverlight XAP를 쓸 수 있다면 아마 지금하고 있는 삽질이 절반은 줄어들 것이라고 생각합니다.

신고
Posted by wafe

댓글을 달아 주세요

  1. gongdo 2010.12.06 10:08 신고  댓글주소  수정/삭제  댓글쓰기

    어떤 분이 실버라이트5에 대하여 본격 WPF 하극상이란 표현을 하시더군요. 너무나도 와닿는 표현이에요.
    말 그대로 청출어람청어람을 보여주고 있지만 마냥 좋아하긴 어려운 상황이랄까요. :)

    WPF 4.0 조차도 실버라이트가 도입한 개념을 모두 수용하지 않는다는게 가장 큰 실망이었어요. 말씀하신대로 xap을 컨트롤로 호스팅하는 등의 대안도 없고 말이죠.

    • wafe 2010.12.06 23:08 신고  댓글주소  수정/삭제

      하극상이라니 정말 핵심을 집는 표현이네요. 한 뿌리에서 나왔는데 좀 서로 돕고살면 좋으련만 ^^;

      그나저나 여러가지 좋은 정말 기대되는 새 기능들을 발표해놓고 거의 1년이나 기다리라니 참 야박해요 MS ㅜ.ㅜ

2009.10.28 11:54

Scott Gu가 전하는 WPF 4 소식 분류없음2009.10.28 11:54

Scott Gu 아저씨가 계속해오고 있는 Visual Studio 2010과 닷넷 4.0 시리즈 중에 WPF 4에 대한 포스트가 올라와서 요약해보고자 한다.

Controls
Controls for Building Rich Clients
  • WPF 4에는 훌륭한 UI의 LOB(line-of-business) 응용프로그램을 쉽고 빠르게 만들 수 있는 새로운 컨트롤들이 많이 추가되었다.
  • DataGrid, DatePicker, Calendar 등이 새로 추가되었다.
  • Silverlight와 WPF 사이의 코드 재사용성을 높이기 위해서, 새로 추가된 컨트롤들은 99%의 API 호환성을 보장한다.
Bag O'Tricks is back
  • WPF Bag O' Tricks 라고 불리는 여덟 개의 컨트롤 모음을 릴리스할 것이다.
  • AnimatingTilePanel, ColorPicker, InfoTextBox, ListPager, NumericUpDown, Reveal, TransitionsPresenter, TreeMappanel
Windows 7 & Office Ribbon Control
  • WPF 4가 릴리스 된 후 곧 이어 새로운 WPF Ribbon 컨트롤을 다운로드 할 수 있게 될 것이다.
  • Windows 7과 Office 스킨을 입힐 수 있다.
  • 제한된 기능을 가진 CTP 버전은 여기서 다운로드 가능하다.
GRAPHICS
Cached Composition
  • 임의의 컨트롤들을 비디오 메모리에 비트맵으로 캐시할 수 있는 기능으로 극적인 성능 개선이 가능할 것이다.
  • 캐시된 비트맵은 GPU가 바로 렌더링하게 된다.
  • 변경된 부분만 효율적으로 그릴 수 있다. 따라서 깜빡이는 커서가 있다 하더라도 커서 부분만 새롭게 그리고 그외의 부분은 캐시된 비트맵을 사용할 것이다.
  • 이런 지능적인 캐시와 같이 사용할 수 있는 새로운 Brush가 제공된다.
Pixel Shader 3 Support
  • WPF 3.5 SP1에서 지원하는 PS 2.0에 더해서 Pixel Shader 3.0을 사용하는 이펙트를 사용할 수 있다.
LayoutRounding
  • Silverlight 2에서 도입된 UseLayoutRounding 프로퍼티가 추가된다.
  • WPF의 레이아웃 엔진은 sub-pixel 경계에 있는 엘리먼트들이 물리적으로 여러 픽셀에 걸쳐 안티-알리아스 되도록 한다.
  • UseLayoutRounding 프로퍼티는 레이아웃 엔진이 엘리먼트들을 픽셀 경계에 맞추도록 강제하여 더 깨끗하고 깔끔한 UI를 제공한다.
Animation Easing Function
  • 기본 제공되는 easing function으로는 circular, exponential, elastic, bouncy animation progress가 있다.
  • custom easing function을 작성하 수 있다.
  • 쓰기 쉬운 easing function 덕분에 디자이너들은 쉽게 fluid, organic animation을 만들 수 있게 된다.
CleartypeHint
  • 이전에는 Layerd Window의 텍스트, VisualBrush 내부의 텍스트, DrawingBrush, BitmapCacheBrush 등에서는 grayscale 텍스트 렌더링이 사용되었다.
  • 새로운 CleartypeHint attached property는 이전에는 Cleartype이 비활성화되던 상황에서도 Cleartype을 사용한 텍스트 렌더링을 할 수 있게 해준다.
TEXT STACK
New Text Rendering Stack
  • WPF text rendering stack이 완전히 교체되었다.
  • 그로 인해 텍스트 렌더링 결과의 선명도, 설정가능성, 다국어 지원이 엄청나게 향상되었다.
  • 새로운 텍스트 스택은 display-optimized 캐릭터 레이아웃을 제공하여 Win32/GDI 텍스트의 선명함에 비길만한 품질을 보인다.
  • aliased, grayscale, ClearType 렌더링 모드를 명시적으로 선택할 수 있게 된다.
  • embedded bitmap 폰트를 지원한다. 수많은 동아시아 폰트들은 이제 Win32 사용자들에게 익숙한 선명한 품질로 렌더링 가능하다.
BindableRun
  • Run.Text는 dependency property가 아닌 일반 CLR 프로퍼티였다.
  • 따라서 dependency property의 훌륭한 기능들, 특히 바운딩 기능을 사용할 수 없었다.
  • 이제 Run.Text가 dependency property로 변경되었다. 자세한 내용은 이곳에서 볼 수 있다.
Custom Dictionaries
  • 기존의 맞춤법 검사기에서는 OS 기본 제공되는 사전 밖에 쓸 수 없어서 특수한 용어를 많이 쓰는 사용자들은 수많은 맞춤법 오류로 뒤덮힌 화면을 보아야 했다.
  • 이제 사전에 새 단어를 추가할 수 있는 API가 도입되었다. 자세한 내용은 이곳에서 볼 수 있다.
Selection and Caret Brush
  • 이제 SelectionBrushCaretBrush 프로퍼티를 사용해서 아주 간단히 멋진 룩앤필을 제공할 수 있다.
WINDOWS 7 LIGHT UP
Windows 7 Multi-touch Support
  • 다음과 같은 멀티 터치 지원 기능이 추가되었다.
  • UIElement에 Multi-touch Manipulation, Inertia (Pan, Zoom, Rotate)  이벤트가 추가됨.
  • UIElement, UIElement3D, ContentElement에 Raw 멀티 터치 이벤트들(Up, Move, Down)이 추가됨.
  • 다수의 활성화된 컨트롤을 지원하는 다중 캡처.
  • 멀티 터치 panning을 지원하기 위한 ScrollViewer 개선.
  • Touch 디바이스 확장성.
  • Surface SDK 호환성.
Windows 7 Shell Integration
  • Windows 7의 Jump List 기능 포함.
  • Windows 7의 작업표시줄 기능 포함.
    • 프로그레스 바, 오버레이 아이콘, commanding을 지원하는 썸네일 버튼, Description Text DWM Thumbnail Clipping
  • TaskbarItemInfo 클래스가 추가되어 Windows 7 작업표시줄의 모든 새로운 기능을 제공한다.
WPF FUNDAMENTALS
New XAML/BAML Parser Engine
  • 새로운 System.Xaml.dll 상에 XamlReader.Load(), BAML 로딩, 컨트롤과 데이터 템플릿 기능 등을 새로 구현하였다. 많은 버그와 기능 개선이 있었다.
  • 이제 XamlReader.Load()를 쓰게 되면 제너릭 타입 지원과 같은 XAML2009의 신 기능을 사용할 수 있게 된다.
  • System.Xaml.dll에서 제공되는 새로운 저수준 API를 사용하면 XAML을 분석하거나 조작하는 도구를 더 작성하기 쉽게 될 것이다.
Data Binding Support for DLR
  • .NET 4의 DynamicObject 라는 새로운 추상 클래스를 통해 개발자들은 IDynamicMetaObjectProvider 인터페이스를 쉽게 구현할 수 있게 된다.
  • C#의 'dynamic' 키워드를 사용한 새로운 DLR 지원을 통해, 우리는 DynamicObject와 IDynamicMetaObjectProvider를 사용하는 것이 런타임에 정의되는 프로퍼티와 멤버를 노출시키는 표준적인 방법이 되기를 기대한다.
  • IDynamicMetaObjectProvider를 통한 WPF 4 데이터 바인딩 지원 덕분에, 동적 프로퍼티를 바인딩할 때에도 자연스러운 프로퍼티 접군 문법을 사용할 수 있게 된다.
Visual State Manager (VSM)
  • WPF-Silverlight에 공통적으로 적용되는 새로운 기능으로 VisualStateManager가 있다.
  • VSM은 매우 유연해서 각각의 상태 사이의 전환 효과를 자동으로 생성한다. 따라서 컨트롤 제작자는 코드 작성 시간을 줄이고 컨트롤 템플릿에 정의될 모양에 더 집중할 수 있게 된다.
  • 이 기능은 Expression Blend를 통해서도 완벽히 지원된다.
HTML-XBAP Script Interop
  • XBAP가 HTML frame이나 iframe에 로드되었을 때, XBAP와 호스트 HTML 페이지의 스크립트 사이의 직접적인 접근이 가능하다.
  • XBAP에서 HTML DOM에 접근 가능하다. HTML 페이지에 포함된 ActiveX 컨트롤, 스크립트 함수, 전역 변수에 접근할 수 있게 된다.
  • 이 기능은 partial-trust XBAP에서 사용 가능하고, 공식 지원되는 IE와 Firefox 버전에서 모두 사용 가능하다.
UIAutomation Virtualization
  • 지난 릴리스에서 WPF에 가상화된 컨트롤 개념이 도입되었으나, automation 클라이언트들이 가상화된 컨트롤과 상호 작용하는 데에 표준화된 방법이 제공되지 않았다.
  • 그러한 시나리오를 지원하기 위해 ItemsContainerPattern과 VirtualizedItemPattern 이라는 두 가지 컨트롤 패턴이 추가되었다.
SynchronizedInput Pattern
  • 이 패턴은 WPF 4에 추가된 또다른 새 UIAutomation 컨트롤 패턴이다.
  • 이 패턴은 입력 이벤트가 WPF 프레임워크에 의해 제대로 라우팅 되었는지 automation 클라이언트가 추적할 수 있게 해준다.
  • 입력이 어떻게 처리되었는지 알려주는 InputReachedTargetEvent, InputReachedOtherElementEvent, InputDiscardedEvent 라는 세 개의 이벤트가 제공된다.
CLIENT DEPLOYMENT
.NET Framework 4 Client Profile
  • 배포 시 사용자 경험을 더욱 개선하기 위해서 .NET Framework 4 Client Profile이 제공된다. 현재 클라이언트 프로필의 재배포 패키지 용량은 30MB이다.
  • WinForm과 WPF 등 클라이언트 응용프로그램에 공통적인 기능을 모두 포함하고 있다.
  • VS 2010 Beta 2의 클라이언트용 프로젝트 템플릿들의 기본 빌드 타겟은 클라이언트 프로필로 지정되어 있다.
  • .NET 3.5 클라이언트 프로필과 달리 Vista, XP, Server 2003, Server 2007, Win 7을 지원하고, 이 OS들의 x86, x64 플랫폼을 모두 지원한다.
Enhancements in NET4 Client Profile vs. NET 3.5 SP1 Client Profile
   .NET 4 Client Profile(NEW) .NET 3.5 SP1 Client Profile
 지원 OS .NET Framework이 지원하는 모든 플랫폼과 OS(IA64, Server Core role in Server 2008)  .NET Framework이 설치되지 않은 Win XP 32-bit
(이외의 환경에서는 자동으로 Full 버전을 설치함.)
 재배포 패키지 웹 다운로드 방식 외에 재배포 패키지도 제공 웹 다운로드 방식만 제공
 프로그램 추가 제거 항목 Full 패키지는 Client Profile과 "Extended" 파트로 구성된다. 따라서 프로그램 추가 제거에 두 개의 항목이 보인다.

"Extended" 항목을 언인스톨하면 클라이언트 프로필과 동일해진다.
하나의 항목만 표시됨
 Visual Studio VS 2010에서는 클라이언트 프로필 지원이 개선되었음

클라이언트 프로젝트 템플릿은 기본적으로 클라이언트 프로필을 빌드 타겟으로 사용함
VS 2008 SP1의 프로젝트 속성에서는 클라이언트 프로필을 지원하지 않음
 포함 기능 .NET 3.5 SP1 에서 지원하던 기능에 추가적으로 Managed Extensibility Framework(MEF)나 C# 4 dynamic 키워드 같은 새 기능이 추가되었음 .NET 3.5 SP1 Full의 일부분
  • .NET 4.0은 이전 닷넷 프레임워크 버전과 병행적으로(side-by-side) 설치된다.
  • 즉, .NET 4.0 설치 시에, 이미 설치되어 있는 이전 버전의 닷넷 프레임워크가 업그레이드 될 필요가 없다.
  • 따라서 .NET 4.0 Client Profile은 이전의 .NET 3.5 SP1 Client Profile 보다 훨씬 빠르게 설치된다.
Full Trust XBAP Deployment
  • WPF 4부터는 인트라넷이나 신뢰할 수 있는 영역의 XBAP도 ClickOnce 권한 상승 프롬프트를 표시할 수 있다.
  • minimum code access 수준보다 높은 권한을 요구하는 XBAP가 실행되면 권한 상승 프롬프트가 표시되고, 사용자 'Run'을 선택하면 요구된 권한으로 XBAP가 실행된다.

신고
TAG WPF
Posted by wafe

댓글을 달아 주세요

2009.10.25 23:43

Silverlight Pixel Shader 개발 팁 분류없음2009.10.25 23:43

요즘 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;

 
신고
Posted by wafe

댓글을 달아 주세요