Loading...

EC++ 3. const의 사용

const를 사용하여 싱글톤 객체를 생성할때 #include "../Core/Render/MgDevice.h" MgDevice* const g_pDevice = MgDevice::GetInstance(); 이와같이 만들어 주었다. 이로인해 define을 대신하여 const를 사용해 줌으로써 얻는 몇가지 이점이 있었다. 우선 귀차니즘이 강한 나로서 가장 큰 이점은 사용의 편리함이었다. 매크로는 단지 매크로일 뿐이기 때문에 변수로 취급되지 않아 자동완성 기능을 제공하지 않아 항상 멤버를 보기 위해 해당파일을 찾아봐야 하지만 const는 변수로 만들면 자동완성을 제공해 준다. 위의 의미는 상수포인터, 비상수 데이터라는 의미이다. 내가 원한것은 객체의 주소는 pix하게 하고 내부 데이터는 고칠수 있도록 하는 것..

2009. 8. 24. 22:29

not use lock, unlock version font system

회사에 들어와서 처음으로 만든 기능이 폰트 시스템이다. TTF파일을 사용하기 때문에 예쁜 폰트를 사용 할 수 있다. 기본적으로 그림자 효과와 외곽선 효과를 지원한다. 2d 폰트야 머 어차피 카메라에 영향을 받지 않으니까 상관이 없다. 3d 폰트는 처음에는 위와 같이 3d 느낌을 주기 위해 회전등을 지원했지만. 게임상에서 어차피 z만 필요하다고 해서 빌보드로 때웠다. 사실 빌보드도 아니고 위치값만 갱신하고 나머지 행렬은 무시한 것 뿐......ㅡㅡ;... 수정요망. 1. 기존 2d는 float4 전역변수에 위치.xy와 텍스쳐.uv 를 넣어서 전달했기 때문에 최대한 많은 갯수를 넘길 수 있어 절약이 가능 했지만 3d 폰트는 위치값이 xyz를 필요로 한다. ㄴ 결론은 다 넘기던지 색상처럼 꾹꾹눌러담아서 블록단..

shader에서의 dword

shader에는 dword형이 존재하지 않는다. 하지만 우리가 입력스트림으로 칼라값을 설정해서 넘길때 보통 dword를 많이 사용한다. struct VS_INPUT { float4 Pos : POSITION; float2 Tex : TEXCOORD0; }; 그리고 argb로 해서 값을 넘긴다. 즉, 빨간색이라면 d3dcolor_argb(255, 255, 0, 0) 이런식으로 설정해 넘긴다. 이렇게 해도 shader 내부에서는 입력스트림일 경우 dword를 float4로 치환하여 사용하기 때문에 문제가 없다. 문제는 입력스트림이 아닌 전역상수로 넘기고자 할 때이다. 전역상수에 float4 vColor;이라고 설정하고 이곳에 SetValue로 값을 넘길때 dword를 넘기면 에러가 난다. 이 경우에는 직접 ..

float4에 마지막 w의 값...1이냐 0이냐....

오늘도 역시나 개삽질을했다. position값을 버텍스버퍼를 생성해서 셰이더에 넘겨줄때를 생각해 보자. position값은 물론 원래라면 x,y,z,w를 고려한 d3dxvector4가 디폴트 지만 보통은 그냥 귀찮아서 d3dxvector3으로 설정을 해서 넘긴다. 그러면 우리의 위대한 셰이더 님은 입력으로 들어오는 vector가 3짜리이고 셰이더 내의 입력 구조체의 vector가 4짜리라면 마지막 값은 자동으로 1로 채워준다. 그런데 너무나 당연하지만 전역변수는 0으로 값이 채워진다. 이 사실을 간과한 것이 커다란 삽질의 시초였다. 버텍스버퍼로 락, 언락을 걸어서 넣는 방식이 아니라 셰이더 파일 내에 전역변수 어레이를 두어서 이곳에서 찾아서 쓰게 하는 구조로 만들고 있었다. 그런데 이아이가 항상 화면의 ..

2009. 8. 8. 17:10

shader SetValue

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 D3DXVEC..

pragma 정리

--from http://system-inside.com 이 팁은 담비님(천리안 FREKBS)님이 98년 12월 14일에 천리안 프로그래머포럼에 올리신 것입니다. 담비님으로부터는 전제하여 올리는 데 대해 허락을 받았습니다. 좋은 정보를 공유하도록 허락해주신 담비님께 감사드립니다. ----------------------------------------------------------------------- 안녕하세요! 담비입니다. 본 문서는 제가 가지고 있는 책과 제공된 도움말을 기초로 하여 작성되어졌습니다. 제가 영어 실력이 부족한 탓으로 내용의 이해가 약간(?)은 힘들거나, 문맥상의 오류가 있을 수 있습니다. 혹 이런 내용을 발견하시거나, 잘못된 내용을 발견하시거나, 추가되어져야 할 내용을 발견하신다..

About Interlocked

About Interlocked .8 간단한 동기 액세스를 행하기 위한 API 복수의 스레드가 공유하는 변수에 대해서 동기 액세스를 간단하게 실시하기 위한 함수가 제공되고 있습니다. 변수의 값을 갱신할 때에 한 번에 하나의 스레드만 변경하는 것을 보증합니다. 3.8.1 InterlockedIncrement 지정된 변수의 값을 증가 시킵니다(increment)(하나늘립니다). LONG InterlockedIncrement( LPLONG lpAddend // 인크리먼트(increment) 해야 할 변수 ); lpAddend 인크리먼트(increment) 되는 변수의 포인터를 지정합니다. 반환 값 인크리먼트(increment) 후의 값이 반환됩니다. 3.8.2 InterlockedDecrement 지정된 변수..

메모리 관리

메모리 관리 구현 선택, 구현의 모순, 동적 할당 문서 옵션 이 페이지 출력 이 페이지를 이메일로 보내기 제안 및 의견 피드백 난이도 : 초급 Jonathan Bartlett, 기술 디렉터, New Media Worx 2004 년 11 월 16 일 리눅스 프로그래머들이 사용할 수 있는 메모리 관리 기술을 살펴본다. C 언어 중심으로 설명 하겠지만 다른 언어들에도 적용할 수 있다. 메모리 관리가 어떻게 수행되는지, 메모리를 수동으로 관리하는 방법, 카운팅(counting) 또는 풀링(pooling)을 반-수동으로 관리하는 방법, 가비지 컬렉션을 사용하여 메모리를 자동으로 관리하는 방법을 설명한다. 메모리가 관리되어야 하는 이유 메모리 관리는 컴퓨터 프로그래밍의 가장 근본적인 분야 중 하나이다. 스크립팅 ..