Mathias hat geschrieben:Welche Modi werden überhaupt unterstützt von PTC unter Windows und Linux.
Mir ist da etwas aufgefallen, unter Linux, läuft ptc in einem Fenster, und bei Windows schaltet es in Vollbild um.
Zuerst mal egal. Hauptsache ich kriege das Teil zum Laufen.
Mathias hat geschrieben:Wäre es nicht klasse, mit PTC auch alle Linien, Kreis, Ellipsen- .... Funktionen zu haben?????
Wen ptc dies nicht kann, müsste man dies alles manuell machen, und somit nicht Hardware beschleunigt, was wieder ein grosser Nachteil ist.
Ok, aber die Grafikfunktionen sind softwareseitig zwar nicht in PTC, aber doch in FPPixlCanv (Ordner /fcl-image) erst mal dabei. softwaremäßig halt, nicht hardwarebeschleunigt. Ein Grund mehr eigentlich, das unter die Lupe zu nehmen und mal Geschwindigkeitstests zu machen. Indem ich für das Zeichenen der endgültigen Pixel PTC verwende, das ja immerhin erst mal in einen Puffer schreibt und erst wenn das Bild fertig gezeichnet ist, mit einem schnellen Console.Update Befehl alles in den Bildspeicher schreibt.
Mathias hat geschrieben:Einfache GDI-Funktionen auf einem Canvas sind je nach Hardware beschleunigt.
Ups, das habe ich nicht gewusst.
Mathias hat geschrieben:Was mir auch noch aufgefallen ist, die PTC-Fenster reagieren bei mit nicht auf Tastatur-Eingabe. Egal ob bei eine Readln, oder Keypressed von der Unit Crt.
keypressed gibt es in der PTC-Console als Methode der Klasse. Auch dafür gibt es im Ordner Examples Beispielprogramme.
Hier ist zum Beispiel das Programm console.pp aus dem Ordner /examples des PTC Paketes:
Keypressed habe ich da gleich mal hervorgehoben.
Code: Alles auswählen
{
Ported to FPC by Nikolay Nikolov (nickysn@users.sourceforge.net)
}
{
Console example for OpenPTC 1.0 C++ implementation
Copyright (c) Glenn Fiedler (ptc@gaffer.org)
This source code is in the public domain
}
program ConsoleExample;
{$MODE objfpc}
uses
ptc;
var
console: IPTCConsole;
palette: IPTCPalette;
data: array [0..255] of DWord;
i: Integer;
pixels: PByte;
width, height, pitch: Integer;
format: IPTCFormat;
bits, bytes: Integer;
x, y: Integer;
color: DWord;
pixel: PByte;
_data: PByte;
begin
try
try
{ create console }
console := TPTCConsoleFactory.CreateNew;
{ open the console with one page }
console.open('Console example', 1);
{ create palette }
palette := TPTCPaletteFactory.CreateNew;
{ generate palette }
for i := 0 to 255 do
data[i] := i;
{ load palette data }
palette.Load(data);
{ set console palette }
console.Palette(palette);
{ loop until a key is pressed }
while not console.KeyPressed do
begin
{ lock console }
pixels := console.Lock;
try
{ get console dimensions }
width := console.width;
height := console.height;
pitch := console.pitch;
{ get console format }
format := console.format;
{ get format information }
bits := format.bits;
bytes := format.bytes;
{ draw random pixels }
for i := 1 to 100 do
begin
{ get random position }
x := Random(width);
y := Random(height);
{ generate random color integer }
color := (DWord(Random(256)) shl 0) or
(DWord(Random(256)) shl 8) or
(DWord(Random(256)) shl 16) or
(DWord(Random(256)) shl 24);
{ calculate pointer to pixel [x,y] }
pixel := pixels + y * pitch + x * bytes;
{ check bits }
case bits of
{ 32 bits per pixel }
32: PDWord(pixel)^ := color;
24: begin
{ 24 bits per pixel }
_data := pixel;
_data[0] := (color and $000000FF) shr 0;
_data[1] := (color and $0000FF00) shr 8;
_data[2] := (color and $00FF0000) shr 16;
end;
{ 16 bits per pixel }
16: PWord(pixel)^ := color;
{ 8 bits per pixel }
8: PByte(pixel)^ := color;
end;
end;
finally
{ unlock console }
console.Unlock;
end;
{ update console }
console.Update;
end;
finally
if Assigned(console) then
console.Close;
end;
except
on error: TPTCError do
{ report error }
error.report;
end;
end.
Mathias hat geschrieben:Also wenn es bei Dir läuft, mit welcher FPC Version hast Du übersetzt?
3.0.4 und 3.1.1. Auch mit dem Win-Crosscompiler habe ich es probiert.
Ok, da werde ich nicht umhin kommen, den Compiler der Version 3.0.4 runter zu laden und zu installieren. Gibt es denn den 3.1.1-er noch. Ich kenne nur 3.0, dann 3.02 und eben den 3.0.4. Da muss Dein 3.1-er eine Entwicklerversion sein. Durch Snapshots aktualisiert?
Mathias hat geschrieben:Was mit mir gerade aufgefallen ist, wen man das Programm von einer Text-Console aus startet, reagiert er in der Text-Console auf Readln.
Ok, das macht die Konsole also schon mal. Aber wie meinst Du das mit der Textkonsole?
Windows-Eigabeaufforderung oder Linix XTerm oder DOS?
In Linux wird für die Verwendung von PTC X11 vorausgesetzt, da glaub ich nicht, dass das ohne XServer läuft.
Mathias hat geschrieben:Im Anhang dein Beispiel als Project.
Danke!
Mathias hat geschrieben:Kannst du mal deine Fehlermeldung ganz zeigen.
Kann ich machen, passiert morgen. Bin momentan in Linux.
Mathias hat geschrieben:Unterstützt Dein BS die Auflösung 1024 x 768 ? Ersetze dies mal mit deiner nativen Auflösung.
Ja das tut es, ich habe in Windows dieselbe Auflösung eingestellt.
Mathias hat geschrieben:Aber was ist dein Ziel, willst du ein Games schreiben und einfach nur ptc ausprobieren ?
Erst mal einfach nur ptc ausprobieren und dann FPpixlCanv damit implementieren. Da gibt es einerseits die herrlich schnelle ptc-Grafik, aber ohne Linien, Kreis, Ellipsenfunktionen. Und es gibt die FCLImage Klassen und das besagte FPPixlCanv. Diese Klasse ist im /fcl-image Ordner aber nicht vollständig implementiert. Image Funktionen sind da, umfangreiche Interpolationsalgorithmen, die wahrscheinlich zum Strecken oder Verkleinern der Images und zu anderen Dingen gebraucht werden, die grundlegenden Grafikfunktionen zum Zeichnen von Linien sind auch schon da, aber nichts was die Pixel am Ende in den Bildschirm schreibt. Die wird dann erst von der LCL erledigt. Mit wiederum systemabhängigen Grafikfunktionen. Warum da nicht eine Version mit PTC bauen? Und dann mal testen wie schnell das untern Strich wirklich wird. Dass GDI Funktionen hardwarebescleunigt sind, habe ich bis vorhin nicht gewusst. Womöglich sind dann selbst Kreis- Linien- und Ellipsenfunktionen bei Spieleengines auch hardwarebeschleunigt. Da will ich um so mehr mal schauen, wie schnell eine Grafikmaschine mit PTC wird, wenn ich dazu die softwaregesteuerten Grafikfunktionen fer fcl verwende und mittels ptc implementiere.
Sozusagen erst mal mit ptc rumspielen. Die mitgelieferten Beispiele will ich natürlich auch ausprobieren. Eine Motivation mehr, mal wieder Mathe aufzufrischen, um die Quellcodes zu verstehen. (Tunnel3d, Flower und so).
Ich schätze ein,, dass hier die Vektorrechnung mein Freund ist. Oder braucht es noch mehr?