mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 08:09:33 +02:00
+ added a 32bpp accelerated pattern line drawing routine
git-svn-id: trunk@40880 -
This commit is contained in:
parent
ec5bdaee76
commit
13793e9354
@ -1686,6 +1686,61 @@ begin
|
||||
ptc_update;
|
||||
end;
|
||||
|
||||
{$ifdef FPC_GRAPH_SUPPORTS_TRUECOLOR}
|
||||
procedure ptc_PatternLineProc_32bpp(x1,x2,y: smallint);
|
||||
{********************************************************}
|
||||
{ Draws a horizontal patterned line according to the }
|
||||
{ current Fill Settings. }
|
||||
{********************************************************}
|
||||
{ Important notes: }
|
||||
{ - CurrentColor must be set correctly before entering }
|
||||
{ this routine. }
|
||||
{********************************************************}
|
||||
var
|
||||
pixels: PLongWord;
|
||||
NrIterations: smallint;
|
||||
i : smallint;
|
||||
j : smallint;
|
||||
TmpFillPattern : byte;
|
||||
begin
|
||||
{ convert to global coordinates ... }
|
||||
x1 := x1 + StartXViewPort;
|
||||
x2 := x2 + StartXViewPort;
|
||||
y := y + StartYViewPort;
|
||||
{ if line was fully clipped then exit...}
|
||||
if LineClipped(x1,y,x2,y,StartXViewPort,StartYViewPort,
|
||||
StartXViewPort+ViewWidth, StartYViewPort+ViewHeight) then
|
||||
exit;
|
||||
|
||||
{ Get the current pattern }
|
||||
TmpFillPattern := FillPatternTable
|
||||
[FillSettings.Pattern][(y and $7)+1];
|
||||
|
||||
pixels := ptc_surface_lock;
|
||||
|
||||
{ number of times to go throuh the 8x8 pattern }
|
||||
NrIterations := abs(x2 - x1+8) div 8;
|
||||
for i := 0 to NrIterations do
|
||||
for j := 0 to 7 do
|
||||
begin
|
||||
{ x1 mod 8 }
|
||||
if RevBitArray[x1 and 7] and TmpFillPattern <> 0 then
|
||||
pixels[x1+y*PTCWidth] := FillSettings.Color
|
||||
else
|
||||
pixels[x1+y*PTCWidth] := CurrentBkColor;
|
||||
Inc(x1);
|
||||
if x1 > x2 then
|
||||
begin
|
||||
ptc_surface_unlock;
|
||||
ptc_update;
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
ptc_surface_unlock;
|
||||
ptc_update;
|
||||
end;
|
||||
{$endif FPC_GRAPH_SUPPORTS_TRUECOLOR}
|
||||
|
||||
procedure ptc_SetRGBAllPaletteProc(const Palette: PaletteType);
|
||||
begin
|
||||
{...}
|
||||
@ -2667,6 +2722,7 @@ end;
|
||||
//mode.SetAllPalette := {$ifdef fpc}@{$endif}SetVGARGBAllPalette;
|
||||
mode.HLine := @ptc_HLineProc_32bpp;
|
||||
mode.VLine := @ptc_VLineProc_32bpp;
|
||||
mode.PatternLine := @ptc_PatternLineProc_32bpp;
|
||||
mode.SetVisualPage := @ptc_SetVisualPage;
|
||||
mode.SetActivePage := @ptc_SetActivePage;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user