�����

 

 

��ũ���Ͷ�?

directX�� �Ұ�

 

 

direct����,���������,������

���̷�Ʈ���ۻ��� ���ݿ� ����

 

 

���� ������ �ø���,��Ʈ�ʺ���

���̷�Ʈ �ķ�Ʈ ����

 

 

Lock,unlock,Blt,BltFast

Direct Sound

 

 

 

 

 

 

1. Lock/Unlock Function

DirecDrawSurface�� ���� �޸𸮸� ����ϰų�  �ý��� �޸𸮸�
����� �� �ִµ� ���� �޸𸮰� ������ ��� �ý��� �޸𸮸�
����ϰ� �˴ϴ�.ǥ���� ��� ������ ���ΰ��� �������� ������
���� �޸𸮿� ǥ���� �����˴ϴ�.

 

���� �޸𸮸� ����� ��쿡 Surface�� ���� ī��� ���� �ŷ�
�� �ϰ� �˴ϴ�. �׷��Ƿ� ���� Surface�� �׻� ���� �޸𸮿� ��
���ϰ� �˴ϴ�. �ø����� �ϰ� �ȴٸ� ���� Surface�� �ĸ� Suface
���� ���� �޸𸮿� ���� �ϰ� �˴ϴ�.
���� Surface�� ����� ��쿡�� ���� Surface���� �ĸ� Surface��
Ŀ���� �ʵ˴ϴ�. �׷��� �ý��� �޸𸮸� ����� ��� �̷��� ����
�� �����ϴ�.

���ݱ����� ��� ���� �޸𸮸� ����ϴ� ������� ����߽��ϴ�.
������ ������ ������ ��ŭ �ý��� �޸𸮿��� ���� �޸𸮷�
�����ϴ� ����� �̾߱� �Ϸ� �մϴ�.
�̹���� �˰� �Ǹ� ��ü ��������Ʈ ������ ����ߴ�(������ ������
����)�� ������ �״�� ��������� �����Ҽ� �ְ���? ^^;

�̹����� ǥ������ �����ϱ� ���ؼ��� ���� �޸𸮸� ���� �ϴµ�
���� �޸� ���� �����ϴ� DirectDrawSurface�� ��� ���̷�Ʈ��
Lock�� ����մϴ�. ��� Lock�� �Ϲ� API���� ���� �ϹǷ� �̰���
�߸� ���� �Ͻø� �ȵ˴ϴ�.

ǥ������ �̹����� ������ �� ���� �޸��� ������ �ҽǵ��� �ʰ�
�ϱ� ���ؼ� ���̷�Ʈ�� Lock��  Unlock�� ���� ���̿� Win16Lock��
����մϴ�. ���Լ��� ��������� ����ϴ� Global Systemm Lock��
�ϴ�. �ٷ� GDI�� Video Display Driver sk �ٸ� 16��Ʈ ������Ʈ��
����ϱ� ���� Lock ��� ���ø� �˴ϴ�.

�����ؼ� �׷� �׷��� ����� ��� Lock�� ����ü � �����ϱ�?
�Ͻô� ���� ��ð���? ��� �ѹ� ���� ���ô�.

==========================================================
HRESULT Lock( LPDIRECTDRAWSURFACE lpDDSurface,
                 LPRECT lpDestRect,
                 LPDDSURFACEDESC lpDDSurfaceDesc,
                 DWORD dwFlags,
                 HANDLE hEvent)
==========================================================
�Լ� ���� ����:
lpDDSurface : LPDIRECTDRAWSURFACE ����ü�� ���� ������
lpDestRect   : ǥ�� ������ lock�Ǵ� ������ ��Ÿ���� RECT����ü ������
lpDDSurfaceDesc : LPDDSURFACEDESC ����ü�� ���� ������
dwFlags : DDLOCK_SURFACEMEMORYPTR, DDLOCK_EVENT,
           DDLOCK_WAIT�� �� ���� �� �ϳ��� �÷��� ����
   ���� blt�߿� lock�� �õ��ϸ� WASSTILLDRAWING������
           �߻��ϴµ� �̶��� �÷��׸� DDLOCK_WAIT�� �����Ѵ�.
hEvent : �ý��� �̺�Ʈ�� ���� �ڵ�


���̷�Ʈ�� �޸𸮸� �����ϴ� ������� �ΰ��� ������ �ֽ��ϴ�.
 1. �� ���� �ѹ���Ʈ�� ����
 2. ��ũ�� ����Ͽ� �ѹ��� 64K�� �����͸� ����
    �̹���� DDSCAPS_BANKSWITCHED �÷��׸� ����մϴ�.
    ���� �������� ���ϸ� page fault�� �߻��˴ϴ�.

��~ �̹����� �տ��� ��� ���� �䵥�� 1�� ����� �̿��� �Լ���
����� ���ô�.

HRESULT              ddrval;
DDSURFACEDESC      ddsd;
LPSTR                 lpBits;
LPSTR                 lpSrc;
int                      I;

ddsd.dwSize = sizeof(ddsd);
ddrval = lpPrimary->Lock(NULL, &ddsd,, 0, NULL);
lpBits == (LPSTR) ddsd.lpPrimary;

for(i=0; I<480; I++)
{
    memory(lpBits, lpSrc, 640);
    lpBits += ddsd.lPitch;
    lpSrc  += 640;
}

ddrval = lpPrimary->Unlock(NULL);

��...��������? �տ����� �̾߱� �ߵ��� blt�Ǵ� ���� lock�� �� ������
���� �޸��� ǥ�������� ���� ���� Ŭ�� ���� ���� ȭ�� ��ȯ��
���ؼ� Flip�ϴ� ���� �ĸ� ���۸� lock�Ҽ� �����ϴ�.

 

2. Blt / BltFast Function

���̷�Ʈ�� ��Ʈ���� ������ؼ� Blt�Լ��� BltFast�� �ֽ��ϴ�. �̵�
�Լ��� Ư¡�� Blt�� Ŭ�����ϴµ� �����Դϴ�. �׷��ٰ� BltFast��
Ŭ������ ���ϴ���? �װ� �ƴմϴ�. ���� Blt�Լ� ���� BltFast�Լ���
�ӵ��� 10%���� �����ϴ�. �׷��� Ŭ���ΰ��� ó���� �ϰ� �Ǹ� �ӵ�
�� ���� ȿ���� ���� �����ϴ�. �̷��� �ȴٸ� ���Լ��� ����� ����
���̳� �ٸ� ��������?

Blt ������ �ܼ��ϰ� ������ GDI�� Blt�Լ��� ����ϹǷ�  BltFast����
�м��ϰڽ��ϴ�.  BltFast�� �����ؼ� Blt �Լ��� �м��غ�����~

===========================================================
 HRESULT BltFast(LPDIRECTDRAWSURFACE lpDDSurface,
                   DWORD dwX,
                   DWORD dwY,
                   LPDIRECTDRAWSURFACE lpDDSrcSurface,
                   LPRECT lpSrcRect,
                   DWORD dwTrans)
===========================================================
�Լ� ���� ���� :
lpDDSurface : BltFast�Լ��� ����Ͽ� ��Ʈ���� bit ���� ������ ������
dwX,dwX : ������ x, y��ǥ
lpDDSrcSurface : ������ ��Ʈ��
lpSrcRect : ������ ��Ʈ���� ����
dwTrans : ������ ��Ʈ���� Ư�� �Ű� ������

�Լ��� ����ϴ� ����� ������ ������ ����� ���ҽ��ϴ�.
Ŭ������ �ǵ��� ó�� �ϴ� ��������Ʈ ��� �Լ��� �ֵ� �����Դϴ�.
���� �����ӿ� ����ϰ� �ִ� ���� ��������Ʈ �Լ��� �ҽ��Դϴ�.

RECT rc;
int tempxs, tempys;
HRESULT ddrval;

rc.left = 0;
rc.top = 0;
rc.bottom = ys;
rc.right = xs;
x-=xs/2;
y-=ys;

tempxs = x+xs;
tempys = y+ys;

if (x > 639 || y > 479) return DD_OK;
if (tempxs <= 0 || tempys <= 0) return DD_OK;


if (x < 0) { rc.left -= x; x=0; }
else if (tempxs > 639) rc.right  -= (tempxs - 639);
if (y < 0) { rc.top  -= y; y=0; }
else if (tempys > 479) rc.bottom -= (tempys - 479);

ddrval = lpSurface->BltFast(x, y, lpDS, &rc,
     DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT);
return ddrval;


�ܼ��ϰ� ��������~ ��ô�̳� ���� ¥�� �ִ� �ҽ��ε� ������
������ �ʿ� ������?