Game!

전체 글 (93)

  1. 2016.03.16 [DirectX] memory pool에서의 D3DPOOL_DEFAULT와 D3DPOOL_MANAGED

    cf. Memory Pool: DirectX의 자원(ex.serface)들은 여러 가지 종류의 메모리 풀에 저장할 수 있으며, 메모리 풀은 열거형 멤버로 지정된다. 메모리 종류 정리1. 시스템 메모리(system memory) : CPU RAM 메모리2. 비디오 메모리(video memory) : 그래픽카드 RAM 메모리그래픽카드도 하드웨어에 속한다. 그래픽카드의 핵심 칩이 GPU.GPU는 그래픽 연산을 처리하는 목적으로 만들어진 것이기때문에(특히 부동소수형의) 백터/행렬 등 선형연산류의 수치연산에 특화되어 빠르다. 그러나 조건문 등의 제어처리가 많거나, 메모리/하드웨어 엑세스 등의 기능에서는 CPU가 실질적으로 더 뛰어난 성능을 보인다. 3. AGP aperture 메모리 : 물리적으로는 시스템 메모리..

  2. 2016.03.15 [Cocos] 텍스트 출력 CharMap

    cocos로 작업할 때, 텍스트를 출력하는 CharMap 함수는 게임에서 많이 사용된다 왜냐하면 숫자를 이미지로 만들어서 출력해야하기 때문이다. 기본형 Label::createWithCharMap(cocos2d::Texture2D* texture, int itemWidth, int itemHeight, int startCharMap) 매개변수 순서 이미지파일 이름.확장자 / 너비 / 높이 / 아스키코드값 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 bool HelloJudai::init() { if(!LayerColor::initWithColor(Color4B::WHITE)) { return false; } auto label = Lab..

  3. 2016.02.18 [Unity] OnCollisionEnter 함수와 OnCollisionEnter2D 함수 차이

    OnCollisionEnter 함수는 리지드바디/콜리더가 3d인 경우에 사용 만약 2d게임을 만들면서, 리지드바디랑 콜리더(박스)가 2d 로 설정되어있다면 OnCollisionEnter2D를 사용해주어야한다. 추후에 재정리!

  4. 2016.01.14 [런타임에러] 무한루프 일어날 경우

    ~에(main.exe의) 처리되지 않은 예외가 있습니다.Stack overflow(매개변수: ~). 저런 키워드가 뜨는 런타임 에러는 무한루프가 발생할 경우 나타나는 런타임 에러 정확하게는 메모리가 다 차서

  5. 2015.12.04 [API/GDI+] Graphics.DrawRectangle

    Graphics 변수를 사용하여 사각형을 그려보자 ! 함수 원형void DrawRectangle(Pen* pen, int x, int y, int width, int height) 여기서 width와 height는 좌표가 아니라 x, y 에서 시작한 너비와 높이 입니다. 함수원형Pen(const Gdiplus::Color &color, Gdiplus::REAL width = (1.0f))~> Color(Gdiplus::ARGB argb)= Pen 자료형의 생성자컬러 색은 (a)rgb 상수값을 지정해서 사용한다. 저는 디버깅이나 충돌박스 좌표를 확인하기 위한 용도로 사용합니다. 예시) Graphics g;g = new Grapbics(hDC); void Func(){Pen* pen;/* 빨간색 , 선의 크..



cf. Memory Pool

: DirectX의 자원(ex.serface)들은 여러 가지 종류의 메모리 풀에 저장할 수 있으며, 메모리 풀은 열거형 멤버로 지정된다.




메모리 종류 정리

1. 시스템 메모리(system memory) : CPU RAM 메모리

2. 비디오 메모리(video memory) : 그래픽카드 RAM 메모리


3. AGP aperture 메모리 : 물리적으로는 시스템 메모리에 위치.

가상메모리처럼, 비디오 메모리가 부족할 경우, 시스템 메모리에 AGP 영역을 만들어서

비디오 메모리처럼 사용한다.


★cf. 비디오메모리 / AGP메모리에서의 읽기 속도는 매우 느리다.



1. D3DPOOL_DEFAULT


리소스들을 로컬 비디오 메모리와 AGP 메모리에 생성한다.

리소스들은 반드시 IDirect3DDevice9::Reset() 함수 호출 이전에 해제되어야 하고,

Reset() 호출 이후에 다시 초기화되어야한다. (=> 즉 리소스 복구가 필요하다는 것)

만약, 리소스 생성할 때 메모리가 부족할 경우 Managed 리소스가 제거된다.


2. D3DPOOL_MANAGED


DirectX에 의하여 리소스들이 관리된다. (=> 필요에 따라 자동으로 비디오/AGP 메모리로 옮겨진다.)

리소스들의 백업 복사본이 시스템 메모리 내에 보관되는데

애플리케이션이 리소스에 접근하고 수정할 때에는 시스템 메모리에 있는 복사본을 이용한다.

(=> 즉 시스템 메모리에 자동으로 백업되므로 리소스가 손상되어도 복구가 필요없다.)







해당 출처를 통해

작성자가 바로 찾을 수 있도록

정리해놓은 것입니다.

출처:

http://www.viper.pe.kr/wiki2/wiki.php/D3DPOOL%20%BF%AD%B0%C5%C7%FC%20%C1%A6%B4%EB%B7%CE%20%BE%CB%B1%E2

http://cappleblog.co.kr/247

http://l4knight.blog.me/120202155512

'DirectX' 카테고리의 다른 글

[펌] D3DXVec3TransformNormal 과 D3DXVec3TransformCoord 차이  (0) 2018.02.23
[펌] 렌더링 파이프라인  (0) 2018.02.22

 

 

cocos로 작업할 때,

텍스트를 출력하는 CharMap 함수는 게임에서 많이 사용된다

왜냐하면 숫자를 이미지로 만들어서 출력해야하기 때문이다.

 

 

 

기본형

Label::createWithCharMap(cocos2d::Texture2D* texture, int itemWidth, int itemHeight, int startCharMap)

 

매개변수 순서

이미지파일 이름.확장자 / 너비 / 높이 / 아스키코드값

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
bool HelloJudai::init()
{
    if(!LayerColor::initWithColor(Color4B::WHITE))
    {
        return false;
    }
 
    auto label = Label::createWithCharMap("number.png"334548);
 
    int score = 100;
 
    label->setString(StringUtils::format("%d", score));
    label->setPosition(Vec2(200,300));
    label->setTag(1); //레이어 출력순서 결정 this->addChild(label,1);과같음
    this->addChild(label);
 
 
    score += 10;
    //레이어 출력순서 결정
    auto scoreLabel = (Label*)this->getChildByTag(1);
    scoreLabel->setString(StringUtils::format("%d", score));
 
    return true;
}
 
cs

 

 

createWithCharMap("폰트이미지.png", 출력너비, 출력높이, 아스키코드 값);

여기서 너비와 높이는 출력하고자 하는 이미지의 것을 말한다.

 

 

 

사진의 빨간색 박스 부분의 너비와 높이를 입력하면 된다.

 

 

더보기

cf.

이미지가 [$,0123456789] 로 되어있어 아스키코드와 순서가 맞지 않을 경우

0의 아스키코드 값 48의 2개 앞인 46(.)을 선언한다.

그리고 setString에서 ".100"을 입력하면 $100을 표시할 수 있다

 

 

 

출처:http://genieker.tistory.com/11




OnCollisionEnter 함수는 리지드바디/콜리더가 3d인 경우에 사용


만약 2d게임을 만들면서,


리지드바디랑 콜리더(박스)가 2d 로 설정되어있다면


OnCollisionEnter2D를 사용해주어야한다.




추후에 재정리!




~에(main.exe의) 처리되지 않은 예외가 있습니다.

Stack overflow(매개변수: ~).



저런 키워드가 뜨는 런타임 에러는 무한루프가 발생할 경우 나타나는 런타임 에러


정확하게는 메모리가 다 차서







Graphics 변수를 사용하여 사각형을 그려보자 !




함수 원형

void DrawRectangle(

Pen* pen, int x, int y, int width, 

   int height

)


여기서 width와 height는 좌표가 아니라 x, y 에서 시작한 너비와 높이 입니다.


함수원형

Pen(const Gdiplus::Color &color, Gdiplus::REAL width = (1.0f))

~> Color(Gdiplus::ARGB argb)

= Pen 자료형의 생성자

컬러 색은 (a)rgb 상수값을 지정해서 사용한다.


저는 디버깅이나 충돌박스 좌표를 확인하기 위한 용도로 사용합니다.



예시)


Graphics g;

g = new Grapbics(hDC);



void Func()

{

Pen* pen;

/* 빨간색 , 선의 크기 3 */

pen = new Pen(Color(255, 0, 0), 3);

delete pen; //메모리 꼭 풀어주기

}