ShowMessage (IntToStr(d3dpp.BackBufferCount));
Π ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ Π±Π΅Π· Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π°. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° - ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠΊΠ½Π°, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ, ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ:
procedure TfrmDBD.FormCreate(Sender: TObject);
var
hRet : HRESULT;
begin
hRet := InitD3D;
if Failed (hRet} then ErrorOut ('InitD3D', hRet);
end;
ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π½Π°Π³ΡΡΠ·ΠΊΠ° Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π»ΠΎΠΆΠΈΡΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Render, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ - ΡΠΊΡΠ°Π½ ΠΎΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΈΠ½ΠΈΠΌ ΡΠ²Π΅ΡΠΎΠΌ:
function TfrmDSD.Render : HRESULT;
var
hRet : HRESULT;
begin
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°, Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΡΠ΅ΡΡΠ΅Π·Π½Π°Ρ Π°Π²Π°ΡΠΈΡ
if FDSDDevice = nil then begin
Result := E__FAIL;
Exit;
end;
hRet := FD3DDevice.Clear(0, nil, D3DCLEARJTARGET,
D3DCOLOR_XRGB(0, 0, 255), 0.0, 0); // ΠΡΠΈΡΡΠΊΠ° Π·Π°Π΄Π½Π΅Π³ΠΎ Π±ΡΡΠ΅ΡΠ°
if FAILED(hRet) then begin
Result := hRet;
Exit;
end;
// ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΡΡΠ΅ΡΠΎΠ² ΡΡΡΡΠΎΠΉΡΡΠ²Π°
Result := FD3DDevice.Present(nil, nil, 0, nil);
end;
ΠΠ°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΊΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π°. ΠΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»Π°ΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΡΠ΅ΡΡΠ½. ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ, ΠΊΠΎΠ³Π΄Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎ Ρ ΠΎΠ΄Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠ΅Π½ΡΡΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΡΡΠΎΠ»Π°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Render Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ E_FAIL, Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ DXGErrorString Π² ΠΎΡΠ²Π΅Ρ Π½Π° ΡΠ°ΠΊΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ 'Unrecognized Error' (ΠΠ΅ΠΎΠΏΠΎΠ·Π½Π°Π½Π½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ°). ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π²Π²Π΅Π΄Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π½Π° ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎΡΠ΅ΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π°.
ΠΠ°Π»Π΅Π΅ Π² ΡΡΠ½ΠΊΡΠΈΠΈ Render Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ clear ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π°. ΠΠ΅ΡΠ²ΡΠΉ ΠΈ Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΎΡΠΈΡΠ°Π΅ΠΌΡΡ ΠΎΠ±Π»Π°ΡΡΡ: ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π·Π°Π΄Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ², Π²ΡΠΎΡΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΌΠ°ΡΡΠΈΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π½Π°Π±ΠΎΡ Π²Π΅Π»ΠΈΡΠΈΠ½ ΡΠΈΠΏΠ° TRect.
Π’ΡΠ΅ΡΡΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° clear ΡΡΠΎΡΠ½ΡΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΡΠΈΡΡΠΊΠΈ. ΠΠ΄Π΅ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ»Π°Π³ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΠ»Π°Π³ΠΎΠ². ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° DSDCLEARJTARGET ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠΈΡΠ°Π΅ΡΡΡ ΡΠ²Π΅ΡΠΎΠ²Π°Ρ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°. Π‘Π°ΠΌ ΡΠ²Π΅Ρ, Π² ΠΊΠΎΡΠΎΡΡΠΉ "ΠΏΠ΅ΡΠ΅ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ" ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ²Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΌ Π±ΡΠ΄Π΅Ρ ΠΎΠΊΡΠ°ΡΠ΅Π½ΠΎ ΠΎΠΊΠ½ΠΎ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π³ΠΎΡΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ D3DCOLOR_XRGB. ΠΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΎΠΉΠΊΠ° Π²Π΅ΡΠΎΠ² ΡΠΈΡΡΡΡ ΡΠ²Π΅ΡΠΎΠ², ΠΎΠ±ΡΠ°Π·ΡΡΡΠΈΡ Π½ΡΠΆΠ½ΡΠΉ Π½Π°ΠΌ ΠΎΡΡΠ΅Π½ΠΎΠΊ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΠΎΠΊΠ° ΠΎΡΡΠ°Π²ΠΈΠΌ Π±Π΅Π· ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Ρ ΠΎΠ½ΠΈ ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ Π±ΡΡΠ΅ΡΠ°ΠΌΠΈ.
ΠΠΊΡΠ°ΡΠΈΠ² Π·Π°Π΄Π½ΠΈΠΉ Π±ΡΡΠ΅Ρ ΡΠΈΡΡΡΠΌ ΡΠΈΠ½ΠΈΠΌ ΡΠ²Π΅ΡΠΎΠΌ, Π½Π°ΠΌ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π²ΠΈΡΡ Π±ΡΡΠ΅ΡΡ - Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ Present ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π°. ΠΡΠ»ΠΈ ΡΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Π½ΡΠ»Π΅Π²ΠΎΠΉ, ΡΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΠΎΠΊΠ½Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ°Π±ΠΎΡΠ°, Π±Π΅ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΡΠ°Π½Π΅Π΅, Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ»ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, ΠΈΠ»ΠΈ ΠΏΡΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π½ΡΠ»Π΅Π²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ Π·Π°Π΄Π°ΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎ Π²ΡΠ΅ΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΡΡ ΠΎΠΊΠ½Π°, ΡΡΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ.
Π ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π±Π΅ΡΠΏΡΠ΅ΡΡΠ²Π½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Render, Π΅ΡΠ»ΠΈ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ:
procedure TfrmDBD.ApplicationEventslMinimize(Sender: TObject);
begin
FActive := False; // ΠΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ»Π°Π³ ΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ
end;
procedure TfrmDSD.ApplicationEventslRestore(Sender: TObject);
begin
FActive := True; // ΠΠΊΠ½ΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ, ΡΠ»Π°Π³ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΠΌ
end;
ΠΠΎΠΌΠΈΠΌΠΎ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΠΊΠ½Π° ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π² Π΅Π³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ FPS:
procedure TfrmDSD.ApplicationEventslIdle(Sender: TObject;
var Done: Boolean);
var
hRet : HRESULT;
begin
if FActive then begin // Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ Inc (Frames);
hRet := Render; // ΠΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ° ΠΎΠΊΠ½Π°
if FAILED(hRet) then begin
FActive := False; ErrorOut ('Render', hRet);
Exit;
end;
ThisTickCount := GetTickCount;
if ThisTickCount - LastTickCount > 50 then begin
// ΠΠΎΠ΄ΡΡΠ΅Ρ ΠΈ Π²ΡΠ²ΠΎΠ΄ FPS
Caption := 'FPS = ' + Format('%6.2f',
[frames * 1000 / (ThisTickCount - LastTickCount)]);
Frames := 0;
LastTickCount := GetTickCount;
end;
end;
Done := False;
end;
ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π΅ DirectSD, ΠΌΡ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈ, ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ. Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΡ 02 Π»Π΅Π²Π°Ρ ΠΈ ΠΏΡΠ°Π²Π°Ρ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ ΠΎΠΊΠ½Π° ΠΎΠΊΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ Π² ΡΠΈΠ½ΠΈΠΉ ΠΈ ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠ²Π΅ΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΠΊΠ½Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ 300x300 ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ². Π ΡΡΠ½ΠΊΡΠΈΠΈ Render Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ ΠΎΠΊΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ wrkRect ΡΠΈΠΏΠ° TRect:
SetRect (wrkRect, 0, 0, 150, 300); // ΠΠ΅Π²Π°Ρ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΠΊΠ½Π°
hRet := FDSDDevice.Clear(1, @wrkRect, D3DCLEAR_TARGET,
D3DCOLOR__XRGB(0, 0, 255), 0.0, 0); // ΠΠ΅ΡΠ²ΡΡ ΠΎΠ±Π»Π°ΡΡΡ
// ΠΎΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΡΠΈΠ½ΠΈΠΌ
if FAILED(hRet) then begin
Result := hRet;
Exit;
end;
SetRect (wrkRect, 150, 0, 300, 300); // ΠΡΠ°Π²Π°Ρ ΠΎΠ±Π»Π°ΡΡΡ
hRet := FDSDDevice.Clear(1, @wrkRect, D3DCLEAR_TARGET,
D3DCOLOR_XRGB(255, 0, 0), 0.0, 0); // ΠΡΠΎΡΡΡ ΠΎΠ±Π»Π°ΡΡΡ
// ΠΎΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΡΠ°ΡΠ½ΡΠΌ
if FAILED(hRet) then begin
Result :=0 hRet;
Exit;
end;
ΠΡΠΎΠ΅ΠΊΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΡ 03 Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡ ΠΈ Π±Π΅Π· ΠΌΠΎΠ΅ΠΉ ΠΏΠΎΠΌΠΎΡΠΈ, ΡΡΠΎ Π½Π΅ΡΠ»ΠΎΠΆΠ½Π°Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΠΎΡΠ»ΠΈΡΠ°ΡΡΠ°ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΌ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠ²ΡΡ Π²Π΅ΡΠΎΠ² ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΌΠ΅Π½ΡΡΡΡΡ. Π― ΠΆΠ΅ ΠΎΠ±ΡΠ°ΡΡ Π²Π°ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠ΄Π½Ρ Π½Π΅ΠΌΠ°Π»ΠΎΠ²Π°ΠΆΠ½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π΄Π²ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²: ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠΊΠ½Π° Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ ΠΎΠΊΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ ΡΠ°ΠΊ, Π±ΡΠ΄ΡΠΎ Π² ΠΊΠΎΠ΄Π΅ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΡΡ Π΅Π³ΠΎ ΡΠ΅ΠΊΡΡΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡ. ΠΠ΅Π»Π°Π΅ΠΌ Π²Π°ΠΆΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄: ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΎΠΊΠ½Π° Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Direct3D ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π²ΡΠ²ΠΎΠ΄Π° Π½Π° Π²Π΅ΡΡ ΡΠ΅Π°Π½Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ.
Π’ΠΈΠΏ TColor ΠΈ ΡΠ²Π΅Ρ Π² DirectSD
Π¦Π²Π΅Ρ Π² Direct3D Π·Π°Π΄Π°Π΅ΡΡΡ 32-Π±ΠΈΡΠ½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ, ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΡΠΎΡΠΌΠ°Ρ ARGB. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±Π°ΠΉΡ ΡΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° Π·Π°Π΄Π°Π΅Ρ Π²Π΅Ρ ΡΠΈΠ½Π΅Π³ΠΎ ΡΠ²Π΅ΡΠ° (Π), ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ - JS Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ (G), Π²ΡΠΎΡΠΎΠΉ - ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ (R). Π‘ΠΌΡΡΠ» ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ° ΡΠ°ΡΠΊΡΠΎΠ΅ΠΌ ΠΏΠΎΠΏΠΎΠ·ΠΆΠ΅, ΠΏΠΎΠΊΠ° ΠΆΠ΅ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
Π Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π»Ρ ΠΎΠΊΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΎΠΊΠ½Π° Π² ΡΠΈΡΡΡΠΉ ΡΠΈΠ½ΠΈΠΉ ΡΡΡΠΎΠΊΡ ΠΎΡΠΈΡΡΠΊΠΈ Π·Π°Π΄Π½Π΅Π³ΠΎ Π±ΡΡΠ΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊ:
hRet := FD3DDevi.ee.Clear(0, nil, D3DCLEARJTARGET, $000000FF, 0.0, 0);
Π ΡΠΈΠΏΠ΅ TColor, Ρ ΠΊΠΎΡΠΎΡΡΠΌ Π²Π°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΡΠ°ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² Delphi, ΡΠ°ΠΊΠΆΠ΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Ρ ΡΠ΅ΡΡΡΠ΅ Π±Π°ΠΉΡΠ°, Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±Π°ΠΉΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΊΡΠ°ΡΠ½ΡΠΉ, Π° Π²ΡΠΎΡΠΎΠΉ - Π·Π° ΡΠΈΠ½ΠΈΠΉ ΡΠ²Π΅ΡΠ°. ΠΠΎΡΡΠ΅Π½ΠΈΡΡΠ΅ΠΌΡΡ Π² ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π΅ ΡΠ²Π΅ΡΠ° ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π² Π΄ΡΡΠ³ΠΎΠΉ ΠΈ ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ Π·Π° ΠΏΠΎΠΌΠΎΡΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΡ 04.
ΠΠ° ΡΠΎΡΠΌΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ Π΄Π²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°: ΠΊΠ½ΠΎΠΏΠΊΠ° Color ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠΌ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠ²Π΅ΡΠ°. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ DXColor ΡΠΈΠΏΠ° DWORD Ρ ΡΠ°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠ°, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π·Π°Π΄Π½ΠΈΠΉ Π±ΡΡΠ΅Ρ. ΠΡΠΈ Π² Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠ²Π΅ΡΠ°. ΠΡΠ±ΡΠ°Π½Π½ΡΠΉ ΡΠ²Π΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ DXColor:
procedure Tf rmD3D.Buttonldick (Sender: TObject) ;
begin
if ColorDialogl.Execute then DXColor := ColorToDX (ColorDialogl.Color);
end;
Π ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ColorToDX ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° "Π²ΡΡΠ΅Π·Π°ΡΡΡΡ" Π±Π°ΠΉΡΡ ΡΠ²Π΅ΡΠΎΠ²ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², Π·Π°ΡΠ΅ΠΌ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠΊΠ»Π΅ΠΈΠ²Π°ΡΡΡΡ Π² Π½ΡΠΆΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΏΠ΅ΡΠ²ΡΠΉ Π±Π°ΠΉΡ ΠΎΡΡΠ°Π΅ΡΡΡ Π½ΡΠ»Π΅Π²ΡΠΌ:
function ColorToDX (Π‘ : TColor) : DWORD;
var
R, G, Π : Byte;
begin
R := Π‘ and $FF; // ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±Π°ΠΉΡ, ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ
G := (Π‘ and $FFOO) shr 8; // ΠΡΠ΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±Π°ΠΉΡ, Π·Π΅Π»Π΅Π½ΡΠΉ ΡΠ²Π΅Ρ
Π := (Π‘ and $FFOOOO) shr 16; // Π‘ΠΈΠ½ΠΈΠΉ ΡΠ²Π΅Ρ
Result := (R shl 16) or (G shl 8) or B;
end ;
ΠΡΠΎΡΠ΅ΡΡΠΈΡΡΠΉΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π²ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΡΠΎΡΠΎ. ΠΠΎΠΏΡΡΠ½ΠΎ ΡΡΠΎΡ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π±Π΅Π· ΠΎΡΠΎΠ±ΡΡ ΡΡ ΠΈΡΡΠ΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Delphi Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ DirectSD. ΠΡΡ Ρ ΠΎΡΠΎΡΡΡ Π½ΠΎΠ²ΠΎΡΡΡ Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΏΠΎΡΡΡ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ΠΌ, ΡΡΠΎ Π½Π΅ Π²ΡΠ΅ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Ρ ΠΎΡΠΎΡΠΎ ΠΊΠΎΠΎΠΏΠ΅ΡΠΈΡΡΡΡΡΡ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ. Π’ΠΎΠ»ΡΠΊΠΎ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Handle, Π½Π΅ Π±ΡΠ΄ΡΡ Π·Π°Π³ΠΎΡΠΎΠΆΠ΅Π½Ρ ΡΠΊΡΠ°Π½ΠΎΠΌ Π²ΠΎcΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ. Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π°.
ΠΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΈΠΌΠ΅ΡΡΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Handle, Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Ρ ΠΎΠ»ΡΡΠ°. ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΡ 05, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ΅ΠΌ, ΡΡΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π½Π΅ΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ Π½Π° ΠΊΠ°Π½Π²Ρ ΠΎΠΊΠ½Π°, Π° Π½Π° ΠΏΠ°Π½Π΅Π»Ρ, Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ Π»ΠΈΡΡ ΡΠ°ΡΡΡ ΠΎΠΊΠ½Π° (ΡΠΈΡ. 7.1).
ΠΡΠΎ ΡΡΠΎΠΈΠ»ΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΡΡΡΠ΄ΠΎΠ²: ΡΡΠ΅ΡΡΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° CreateDevice Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΠΊΠ½Π° ΠΏΠ°Π½Π΅Π»ΠΈ:
Result := FD3D. CreateDevice (D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
Pane 11. Handle,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
d3dpp, FD3DDevice) ;
ΠΠ°Π²Π΅ΡΠ½ΠΎΠ΅, ΠΌΡ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²Ρ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π½Π° ΡΠΊΡΠ°Π½Π΅.
ΠΡΠΈΠΌΠΈΡΠΈΠ²Ρ
Π ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Direct3D ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ². ΠΠΎΠ΄ ΡΡΠΈΠΌ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΏΡΠΎΡΡΡΡ ΡΠΈΠ³ΡΡΡ. ΠΠ°Π·ΠΎΠ²ΡΠΌΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π°ΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠΎΡΠΊΠ°, ΠΎΡΡΠ΅Π·ΠΎΠΊ ΠΈ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ.
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΈΠΌΠΈΡΠΈΠ² Π·Π°Π΄Π°Π΅ΡΡΡ Π½Π°Π±ΠΎΡΠΎΠΌ Π²Π΅ΡΡΠΈΠ½, Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΎΠΏΠΎΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π°. ΠΠ»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΠ½, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ², ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π±ΡΡΠ΅Ρ Π²Π΅ΡΡΠΈΠ½ (vertex buffer). ΠΡΡΠ΅ΡΡ Π²Π΅ΡΡΠΈΠ½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Direct3D. ΠΠ°Π½Π½ΡΠ΅ Π² Π±ΡΡΠ΅ΡΠ΅ Π²Π΅ΡΡΠΈΠ½ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΡΡΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΈΠ· Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ°. ΠΡΡΡΠ½ΠΈΠ² ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΡΠΎΡΠΌΠ°Ρ, ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ²Π΅Π΄ΠΎΠΌΠΈΡΡ ΠΎΠ± ΡΡΠΎΠΌ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π°Π±ΠΎΡΠ° ΡΠ»Π°Π³ΠΎΠ² FVF (Flexible Vertex Format, ΡΠΎΡΠΌΠ°Ρ Π³ΠΈΠ±ΠΊΠΈΡ Π²Π΅ΡΡΠΈΠ½). Π FVF-ΡΠ»Π°Π³Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΡΠΎΡΠΌΠ°ΡΠ° Π²Π΅ΡΡΠΈΠ½Ρ ΠΈΠ· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ°.
ΠΠ»Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΉ Ρ Π²Π΅ΡΡΠΈΠ½Π°ΠΌΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ ΠΎΡΠΎΠ±ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ Π²Π΅ΡΡΠΈΠ½Π½ΡΠΌ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠΌ (vertex shader). ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π±ΡΡΠ΅ΡΡ Π²Π΅ΡΡΠΈΠ½ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ, ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ΅ΠΉΠ΄Π΅Ρ Π²Π΅ΡΡΠΈΠ½, Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ Π΄Π°Π½Π½ΡΠΌΠΈ Π±ΡΡΠ΅ΡΠ°.