SelfDXD von Martin Pyka
SelfDXD --- DirectXGraphic --- Programme / Quellcodes / Klassen
Textur: Gittermuster zur Laufzeit erstellen
DXPaint_Texture( )

DXPaint_Texture( )

Mit der folgenden Funktion lassen sich zur Laufzeit Texturen erstellen, die ein Gittermuster (zaunähnlich) haben. Durch mehrmaliges Ausführen der Prozedur mit unterschiedlichen Parametern, lassen sich diverse Effekte erzielen. Am einfachsten lässt sich die Prozedur verwenden, wenn Sie damit 16-Bit-Texturen bearbeiten wollen, wobei jeweils 4 Bits jedem Farbkanal (einschliesslich Alpha-Kanal) zugeordnet sind.


procedure DXPaint_Texture(_textur: IDirect3DTexture8;
                          _breite, _abstand, _sx, _sy: integer;
                          _color: word; _overwrt: boolean);
var
  d3dlr: TD3DLocked_Rect;
  cursor: pWord;
  x, y: integer;
  YInc: longint;
  summe: integer;
  hr: HRESULT;
begin
  summe := _breite + _abstand;

  hr := _textur.LockRect(0, d3dlr, nil, 0);
  if hr = D3D_OK then
  begin
    YInc := (d3dlr.Pitch shr 1);

    cursor := d3dlr.pBits;

    for x := 1 to YInc do
    begin
      for y := 1 to YInc do
      begin
        if ((y + x - _sx) mod summe) <= _breite then
        begin
          cursor^ := _color;
        end
        else
        begin
          if _overwrt then
          begin
            cursor^ := $f000;
          end;
        end;
        if ((y + Yinc - x - _sy) mod summe) <= _breite then
        begin
          cursor^ := _color;
        end;
        inc(cursor);
      end;
    end;
  end
  else
  begin
    hHalt(PChar(errtostr(hr)), Application);
  end;
  _textur.UnlockRect(0);
end;

_textur: die Textur, die bearbeitet werden soll. Beachten Sie, dass man nur Texturen locken kann, die mit D3DPOOL_MANAGED erstellt worden sind.

_breite, _abstand: Die Breite der Linien und der Abstand zwischen zwei Linien.

_sx, _sy: Werte, um das Gitter zu verschieben.

_color: Farbe der Linien. Die freien Stellen werden, sofern _overwrt auf TRUE gesetzt wurde, mit einem transparenten Schwarz gefüllt.

_overwrt: Gibt an, ob die freien Stellen mit einem transparenten Schwarz übermal werden sollen, oder nicht. Diese Auswahl erlaubt es Ihnen, die Prozedur mehrmals aufzurufen, und so mehrere Gitter "übereinander" zu malen (zum Beispiel für Schatteneffekte).