|
|||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
|
|
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;
�ܼ��ϰ� ��������~ ��ô�̳� ���� ¥�� �ִ� �ҽ��ε� ������
������ �ʿ� ������?