Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie kann man Grafikspeicher reservieren und damit arbeiten ? (https://www.delphipraxis.net/122445-wie-kann-man-grafikspeicher-reservieren-und-damit-arbeiten.html)

devidespe 16. Okt 2008 09:06


Wie kann man Grafikspeicher reservieren und damit arbeiten ?
 
Hi,

wenn ich normalen Arbeitsspeicher reservieren möchte, um etwa Daten hineinzuschreiben, kann ich die Klasse TMemoryStream verwenden:

Delphi-Quellcode:
var MemoryStream : TStream;
begin
  MemoryStream:=TMemoryStream.Create;

  ...

  MemoryStream.WriteBuffer(const Buffer; Count: Longint);

  ...

  MemoryStream.ReadBuffer(var Buffer; Count: Longint);

  ...

  MemoryStream.Free;
end;
Wie funktioniert das mit Grafikspeicher ? Hierfür existiert keine Stream-Klasse, so dass anscheinend andere Funktionen zum Einsaz kommen sollen.

Luckie 16. Okt 2008 09:55

Re: Wie kann man Grafikspeicher reservieren und damit arbeit
 
Was meinst du mit Grafikspeicher? Willst du direkt Speicher der Grafikkarte reservieren oder wie darf man das verstehen? Und wenn ja, warum willst du dies tun?

devidespe 16. Okt 2008 10:03

Re: Wie kann man Grafikspeicher reservieren und damit arbeit
 
Zitat:

Zitat von Luckie
Was meinst du mit Grafikspeicher? Willst du direkt Speicher der Grafikkarte reservieren oder wie darf man das verstehen? Und wenn ja, warum willst du dies tun?

Ja, ich möchte direkt den Speicher, welcher sich auf der Grafikkarte befindet, reservieren. Es geht um einen Benchmark, wobei dieser reservierte Speicherbereich mehrfach gelesen und beschrieben werden soll, das alles wird per Zeitmessung bewertet.

Corpsman 16. Okt 2008 10:20

Re: Wie kann man Grafikspeicher reservieren und damit arbeit
 
den einzigen zugriff den ich auf den Grake speicher kenne, ist via OpenGL

aber ob das das ist was du willst ...

Mit GlGenTextures kannst de das glaubig machen.

Medium 16. Okt 2008 13:40

Re: Wie kann man Grafikspeicher reservieren und damit arbeit
 
Direkten Zugriff wirst du unter NT Systemen nicht bekommen können. Du wirst mit irgend einer Graphik API hantieren müssen, sei es OGL oder DirectX, sein es Texturen, Shader oder wie auch immer. Aber einfach mal ein FillChar() in den Video RAM ist nicht möglich. Mein Wissen um diese APIs ist aber leider zu begrenzt um eine sinnvolle Strategie zum Benchmarken vorzuschlagen.

devidespe 18. Mär 2009 13:54

Re: Wie kann man Grafikspeicher reservieren und damit arbeit
 
Ich muss dieses Thema nochmal aufgreifen, und zwar suche ich nach einer Möglichkeit, freien Grafikspeicher mittels DirectX zu reservieren und anschließend wieder freizugeben.

Kann mir da jemand eine DirectX-Funktion nennen, die man hierfür benutzen kann ?

Sunlight7 18. Mär 2009 19:02

Re: Wie kann man Grafikspeicher reservieren und damit arbeit
 
Wenn Du das mit DirectDraw machst, kannst Du zB. ein Surface erstellen und dann zB. mit SurfaceFillRect den Speicher beschreiben.
Dabei ist aber zu achten, den HAL (Hardware Accerleration Layer) und nicht den HEL (Hardware Emulation Layer) zu verwenden und das Surface im Grafikspeicher, nicht im Systemspeicher zu erstellen.

Mit DirectDraw kann man direkt in den Speicher schreiben, genau weiß ichs nimmer, das hab ih damls mit DirectX 3 gemacht und noch dazu in C++.

- Surfaces gibts IMHO in DirectX 10 nimmer

igel457 18. Mär 2009 20:21

Re: Wie kann man Grafikspeicher reservieren und damit arbeit
 
Ich denke, dass es schwer ist, heutzutage direkt auf den Grafikspeicher zuzugreifen. Du kannst dir nie wirklich sicher sein, ob deine Daten wirklich in der Grafikkarte oder im Hauptspeicher liegen.

Eine Möglichkeit wäre einfach n Texturen einer bestimmten Größe zu reservieren. Dabei auf keinen Fall den "Managed" Modus verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz