for (int i = 0; i < 1; i++)
{
}
i = 20;

회사에서 작업하다가 안 사실인데
위랑 비슷한 코드가 debug모드에서는 error가 나고 release 모드에서는 문제 없이 컴파일이 됐다.

당연히 위와 같은 코드가 안될거라고 생각했는데 찾아보니 반대였다.

'표준 동작은 for 루프의 이니셜라이저가 for 루프 후에 범위를 벗어나는 것입니다. /Za, /Ze에서 for 루프의 이니셜라이저는 지역 범위가 끝날 때까지 남아 있습니다.'

-ㅅ-;;;

int main()
{
   int i = 0;   // hidden by var with same name declared in for loop
   for (int i = 0 ; i < 3; i++ ) {}
}

워닝만 내고 잘 컴파일 된다는 -ㅅ-;;

이런 경우에 i는 0 이어야 하는지 3이어야 하는지 모호해서 저렇게 안쓰는게 좋을듯 하다.

참고 :

MSDN : VC++ for 루프 범위의 강제 규칙
MSDN : for loop statement
728x90
RAID 디스크에 XP 설치하려는데 3.5" 플로피가 없어서 깔 수가 없었다.
VISTA에서는 usb 드라이브도 지원한다고 하는데
VISTA에서 개발하고 싶지는 않고
어떻게 할 수 있는 방법이 없나 하고 찾아보니 nlite라는게 있었다.

nlite는 XP 같은 거에 서비스 팩이랑 최신 패치나 드라이버를 묶어서 XP 설치 CD 만드는데 이용한다.
XP Black Edition같은 어둠의 버젼들도 얘로 만든 것 같다.

한글도 지원하고 UI도 직관적이라 쓰기는 쉬운데
세밀한 설정은 내부 내용을 알아야 해서 손대기가 좀 두렵다. ^^

nlite 이용해서 회사 XP에 메인 보드 드라이버 합쳐서 만든 버젼으로
RAID 디스크에 XP 설치 완료...

프리웨어니 3.5" 없는 데 RAID에 설치할 일 생기면 써보시길...

http://www.nliteos.com/ - 제작사 홈페이지
728x90
스크랩하고 메모하는 툴이 필요했는데 전에 회사 사람이 오피스 원노트 2007을 추천해줬다. Trial 버젼 받아서 테스트 해보고 회사에서 쓸려고 바로 구매해버렸다.



오피스 인터페이스 기반에 개인 위키를 돌리는 느낌이 든다.

; 포스트 잇 처럼 메모를 한 페이지에 여기 저기 써둘 수 있다.
; 카테고리에 이름 있는 페이지를 추가하여 정리가 편하다.
; 화면 캡쳐 기능과 같은 편리한 기능이 숨어있다!!

생각 정리하는데 유용한 툴인 것 같다.

오피스 원노트 2007은 개별 패키지, 오피스 2007 홈 앤 스튜던트 에디션, 오피스 2007 엔터프라이즈 밖에 안들어 있다. ( 회사에서 쓸려면 엔터프라이즈? ㄷㄷㄷ )

오피스 원노트 공식 홈페이지( 한국 페이지는 아직 2003 -_- )
http://www.microsoft.com/products/info/product.aspx?view=22&pcid=09969f40-c8f8-4970-bf48-013504fb9a22&crumb=catpage&catid=9d273393-92c9-4807-be9c-515a0d152415
728x90
Version 1

DirectX 8에서 최초로 정의되었으며, NVidia의 지포스 3(NV20)가 최초로 지원했다.

버전 1의 셰이더 명령어들은 선형 계산 정도만 수행 할 수 있고(혹은 낮은 정확도의 비선형 계산), 프로그램의 분기를 전혀 지원하지 못하며, 수행가능한 프로그램의 길이가 매우 짧다. 때문에 하나의 셰이더가 복잡한 스키닝과 다양한 재질효과 등을 동시에 구현할 수 없다.

버전 1의 픽셀 셰이더는 엄밀하게 말하자면 프로그램이라기 보다는 state switching에 가깝다. 보통 8개의 텍스쳐 단계에 대해서 색깔 콤포넌트별로 8bit의 단순한 연산 방식만을 정의할 수 있다. 따라서 연산 정확도는 8bit(256단계) 밖에 안되고 [-1, 1]의 범위를 넘어서는 연산을 할수 없다. 때문에 버전 1에서의 픽셀 셰이더 프로그램들은 복잡한 연산을 흉내내기 위해서 별도의 텍스쳐를 연산 테이블로 사용하기도 한다. 예를 들어 픽셀 단위로 정확한 specular 효과1 를 내기 위해서는 픽셀 셰이더에서 거듭제곱(power)을 계산해야 하는데, 픽셀 셰이더 버전 1에서는 이것이 불가능기 때문에 텍스쳐에 미리 테이블로 저장해서 사용한다. (당연히 정확도는 떨어진다)

또한 버텍스 셰이더에서 픽셀 셰이더로 부가적인 결과값을 전달하는 방법이 대체로 텍스쳐 좌표 레지스터2 를 이용한 방식뿐이기 때문에 픽셀 셰이더가 버텍스 셰이더로부터 전달 받을 수 있는 값이 매우 제한적이다. 특히 XBOX에 장착되어 있는 NV2A GPU는 텍스쳐 좌표 레지스터가 4개뿐이기 때문에 범프 맵을 구현하는 픽셀 셰이더를 작성하면 그 이외에 추가적인 기능을 넣는것이 매우 어렵다.

1. Specular 효과 : 물체의 표면에서 광원과 시점 사이의 반사각에 의해 밝은 하이라이트가 나타나는 현상
2. 레지스터 : 프로세서 내에서 계산값을 임시로 저장하는 장소

Version 2

셰이더 버전 2가 소개되면서 버전 1의 문제가 되었던 부분들이 크게 개선되었다.

가장 큰 변화는 제한적이지만 프로그램 분기가 가능해진 점이다. 버전 1 셰이더에서는 외부 조건에 의해서, 혹은 프로그램 수행 결과에 따라서 다른 처리를 하는 것이 불가능했지만 셰이더 2의 프로그램 분기를 이용하면 하나의 셰이더 프로그램이 상황에 따라서 다양한 처리를 할 수 있다. 하지만 아직은 프로그램 분기 기능이 제약적이기 때문에 복잡한 구조로 돌아가는 셰이더를 작성하는 것에는 무리가 있다.

또한 버전 2의 셰이더에는 삼각함수, 거듭제곱, 로그함수 등을 높은 정확도로 계산할 수 있는 명령어들이 추가되어 더욱 복잡도 높은 계산을 할 수 있게 되었다.

버전 2의 픽셀 셰이더는 버전 1의 그것과 전혀 다른 모습으로서 버전 1의 단점들을 대부분 해결하였다. 버텍스 셰이더의 ALU(Arithmetic Logic Unit)1와 비슷한 연산력을 갖게 되었기 때문에 제대로된 벡터 연산을 할 수 있게 되었고, 텍스쳐 접근 방식도 직관적으로 바뀌었다. 이제는 계산을 시뮬레이션 하기 위해서 텍스쳐를 숫자 테이블로 쓸 이유가 없어진 것이다. 게다가 픽셀이 그려지는 위치의 배경 픽셀이나 인접한 픽셀에 접근할 수 있기 때문에 안티 알리아싱2 과 같은 다양한 용도로도 사용할 수 있다.

픽셀 셰이더 2는 계산의 내부 정확도가 충분히 높아졌기 때문에(128bit 벡터) 픽셀 셰이더의 결과값을 저장하기 위한 부동 소숫점3 텍스쳐 포맷이 등장하였다. 이를 응용하면 GPU 상에서 텍스쳐를 통한 유체 시뮬레이션을 표현할수도 있다. CPU가 이러한 계산을 하는 것은 매우 부하가 많이 걸리는 작업이지만 셰이더 2를 사용하는 GPU에서는 프로그램의 전체 성능에 큰 영향을 주지 않는 범위내에서 실행 가능하다. 예를 들면 캐랙터가 물에서 수영할 때 단순한 패턴으로써 물의 요동을 표현하는 것이 아니라, 픽셀 단위로 시뮬레이션 된 매우 사실적인 물의 움직임도 표현할 수 있다.

또한 픽셀 셰이더가 최종 깊이 버퍼(z/w-buffer) 값을 조작할 수 있기 때문에 깊이 버퍼를 이용한 다양한 트릭을 사용할 수 있다.

1. ALU : 프로세서 내의 여러 부분 중에서도 산술적 계산이 이루어지는 부분을 말함
2. 안티 알리아싱(Anti Aliasing) : 렌더링 된 물체 외곽선의 계단현상을 제거하여 부드럽게 보여주는 기법
3. 부동 소숫점 : 컴퓨터 상에서 실수(real number)를 표현하는 기법중의 하나

Version 3

셰이더 버전 3으로 발전하면서는 버전 1과 2사이의 차이만큼 큰 변화는 없다. 약간의 명령어 추가가 이루어졌고 셰이더 프로그램 분기 능력이 향상되었으며 더 큰 크기의 셰이더 프로그램을 작성할 수 있다.

버텍스 셰이더 버전 3에서 주목할 것은 텍스쳐 데이터를 사용할 수 있다는 것이다. 본래 GPU의 버텍스 처리 단계는 순수하게 3D 버텍스 데이터만을 처리하기 때문에 여기에 텍스쳐가 관여되는 것은 여지껏 GPU의 입장에서는 불가능한 일이었다. 버텍스 처리 단계에서 텍스쳐를 사용 가능하다는 것은 하드웨어적인 displacement map1 이나 다른 셰이더의 렌더링 결과를 3D 메쉬 처리에 사용할 수 있다는 의미를 갖는다.

셰이더 버전 1부터 문제의 소지가 많았던 버텍스 셰이더에서 픽셀 셰이더로의 결과 전달 방법이 셰이더 3로 오면서 약간의 변화가 생겼다. 셰이더 2까지는 버텍스 셰이더에서 픽셀 셰이더로 전달해야 하는 결과값의 종류가 미리 정의되어 있었으나 셰이더 3에서는 프로그래머 마음대로 정의할 수 있기 때문에 버텍스 셰이더로부터 더욱 많은 정보를 픽셀 셰이더로 전달할 수 있다.

아쉽게도 셰이더 3를 지원하는 하드웨어는 아직 출시된것이 없지만, 그 구체적인 스펙으로 추측하건데 셰이더 3를 지원할 GPU의 설계는 꽤 전부터 완성이 되어있었기 때문에 마이크로소프트와의 협력하에 셰이더 3 표준이 만들어진 것으로 보인다.

ATI와 NVidia의 신형 GPU들의 데뷔가 눈앞에 와 있으니 기대해 보도록 하자.

1. Displacement Mapping : 평면적인 물체에 텍스쳐를 이용하여 굴곡을 표현하는 기법

저자 : 김성균 ( 게임 프로그래머 )
728x90
Version Maximum number of instructions
1_x 8 for version 1_1.
12 for version 1_2 and 1_3.
14 for version 1_4.
2_0 64 arithmetic and 32 texture instructions.
2_0 Extended 96 minimum, up to 512 maximum. The exact number is specified by D3DCAPS9.PS20Caps.MaxPixelShaderInstructionSlots.
3_0 512 minimum, up to the number of slots in the D3DCAPS9.MaxPixelShader30InstructionSlots( not more than 32768 )


Version 1_x
New instructions :
- Setup instructions : def, ps
- Arithmetic instructions : add, cmp, cnd, dp3, dp4, lrp, mad, mov, mul, nop, sub
- Macros : exp, frc, log, m3x2, m3x3, m4x3, m4x4
- Texture instructions : tex, texbem, texbeml, texcoord, texcrd, texdepth, texdp3, texdp3tex, texkill, texId, texm3x2depth, texm3x2pad, texm3x2tex, texm3x3, texm3x3pad, texm3x3tex, texm3x3spec, texm3x3vspec, texreg2ar, texreg2gb, texreg2rgb

New registers : constant, temporary, texture, color

New modifiers : instruction modifiers, register modifiers, source register selectors, register write masks

Version 2_0
New instructions :
- Setup instructions : def, ps
- Arithmetic instructions : add, cmp, cnd, dp3, dp4, lrp, mad, mov, mul, nop, sub
- Macros : exp, frc, log, m3x2, m3x3, m3x4, m4x3, m4x4
- Texture instructions :
- Added : texldb, texldp
- Removed : tex, texbem, texbeml, texcoord, texcrd, texdepth, texdp3, texdp3tex, texm3x2depth, texm3x2pad, texm3x2tex, texm3x3, texm3x3pad, texm3x3tex, texm3x3spec, texm3x3vspec, texreg2ar, texreg2gb, texreg2rgb

New registers : constant float, sampler, output color, output depth

New modifiers : negate, partial precision, saturate

Removed co-issuing of instructions

Version 2_0 Extended

- New static flow control instructions ( with a cap set ) : call, callnz, else, end, endif, endloop, endrep, if, label, loop, rep, ret
- Static flow constrol nesting depth
- Number of temporary registers
- Dynamic flow control instructions : break, breakc, ifc
- Gradient instructions : dsx and dsy
- Texture instructions : texldd
- Predication : setp instruction, p# register

New registers : constant integer, constant Boolean, loop counter, predicate

New modifiers( with a cap set ) : arbitrary swizzle

Version 3_0

- Static flow control instruction : call, callnz, else, end, endif, endloop, endrep, if, label, loop, rep, ret
- Static flow control nesting depth
- Number of temporary registers
- Dynamic flow control instructions : break, breakc, ifc
- Predication : setp instruction, p# register

New registers : constant integer, constant Boolean, loop counter, predicate

New modifiers : arbitrary swizzle

출처 : MSDN
728x90
Version Maximum number of instructions
1_1 128
2_0 256
2_0 Extended 256. The number of instructions that run can be much higher because of looping.
3_0 512 minimum, and up to the number of slots in the D3DCAPS9.MaxVertexShader30InstructionSlots.


Version 1_x

New instructions :
- Setup instructions : dcl, def, vs
- Arithmetic instructions : add, dp3, dp4, dst, lit, mad, max, min, mov, mul, nop, rcp, rsq, sge, slt, sub
- Macros : exp, frc, log, m3x2, m3x3, m3x4, m4x3, m4x4

Version 2_0

New instructions :
- Setup instructions : defb, defi
- Arithmetic instructions : mova
- Macros : abs, crs, expp, logp, lrp, nrm, pow, sincos, slt
- Static flow control instructions : call, callnz, else, end, endif, endloop, endrep, if, label, loop, rep, ret

New registers - constant float, constant integer, constant Boolean, loop counter

Version 2_0 Extended

New features( with a cap set ) :
- Dynamic flow control instructions : break, breakc, ifc
- Predication : setp instruction, p# regiter
- Static flow control nesting depth
- Number of temporary registers

Version 3_0

New features :
- Static flow control instructions : break, breakc, ifc
- Predication : setp instruction, p# register
- Number of temporary registers
- Indexing registers
- Vertex textures : texId texture address instruction
- Vertex stream frequency

출처 : MSDN
728x90
1)
char s[] = "Hi Mom";
const char* ptr = s;

ptr이 가리키는 곳의 내용을 바꾸는 것은 불가능 하지만 ptr의 내용을 바꾸는 것은 가능하다.

ptr[1] = 'o'; // ERROR

ptr = "Hi Dad"; // OK

2)
char s[] = "Hi Mom";
char * const ptr = s;

ptr이 가리키는 곳의 내용을 바꾸는 것은 가능하지만 ptr의 내용을 바꾸는 것은 불가능 하다.

ptr[1] = 'o'; // OK

ptr = "Hi Dad"; // ERROR

P.S. const char *와 char const *는 같은 내용으로 인식된다.

참고 자료
Object-Oriented Programming in C++, Richard Johnsonbaugh, Martin Kalin, PRENTICE HALL
728x90


요새 마비노기에 미쳐 있어서 마비노기를 배경에 띄워놓고 다른 일 하다가 알바 시간에는 마비노기를 하고 있다. 마비노기 띄워진 상태에서 바탕화면에 있는 문서를 클릭하기가 힘들어서 정해둔 문서를 윈도우즈 메뉴처럼 쓸 수 있는 방법을 찾게 되었다. 처음에는 도구 모음에 폴더를 추가해봤는데 그 모양이 빠른 실행 처럼 보여서 문서 아이콘이 다 같으니 구분할 수가 없었다. 물런 텍스트까지 표시하면 구분할 수는 있지만 공간이 너무 많이 필요해서 깔끔하지가 않았다. 시작메뉴 설정에서도 찾아봤으나 없는 거 같아서 태스크바 액세사리 까지 찾아봤으나 원하는 형태는 못 찾았었다. 그래서 새로 짤까 생각하면서 이것 저것 옵션을 바꿔봤는데 제목 표시 옵션과 텍스트 표시 옵션을 동시에 쓰고 최소한의 크기로 만들었더니 위와같은 형태가 되었다. 내가 원하던 방식이었다. 웹에서 검색한거는 삽질이었다는...-_-;;;

728x90

+ Recent posts