bmap_process (BMAP* bmDest, BMAP* bmSrc, MATERIAL* mtl);
Füllt eine Bitmap mittels einer Pixelshader-Function aus einer Quell-Bitmap. Diese Funktion ist sehr schnell auf Shader-Hardware und kann jeden Frame ohne viel Einfluss auf die Framerate aufgerufen werden. Sie kann für die Nachbearbeitung von Bildern oder zum Erstellen und Aktualisieren prozeduraler Texturen in Echtzeit genutzt werden. Mit einer Floating Point Zieltextur kann diese Funktion auch verwendet werden, um Berechnungen direkt auf der GPU auszuführen.
Parameters:
bmDest |
Ziel-Bitmap. |
bmSrc |
Quell-Bitmap, oder NULL zum Erzeugen einer rein prozeduralen Textur. |
mtl |
Material mit einem 2D-Shader zur Bilderzeugung. |
Speed:
Medium
Version:
A8.00 C
Remarks
- Die Bitmap muss nicht gesperrt werden.
- Nur normale 16, 24 oder 32 Bit Bitmaps (1555, 4444, 888, oder 8888-Format) oder Floating Point Texturen können verarbeitet werden. Bitmaps in einem speziellen Format, komprimierte oder DDS Bitmaps können nicht bearbeitet werden.
- TargetMap und vecViewPort werden automatisch auf die Parameter der Quell-und Ziel-Bitmaps gesetzt, so dass die Postprocessing-Shader aus der mtlView.c Shader-Bibliothek mit dieser Funktion arbeiten. A8.11
- Die Pixel-Shader-Funktion läuft für jedes Pixel der Ziel-Bitmap und erhält die xy Texturkoordinaten als Eingabeparameter. Wenn die Quell-Bitmap eine andere Größe hat, müssen die Koordinaten der Textur mit dem Größenverhältnis zur Adressierung der Quell-Bitmap multipliziert werden. Für beste Ergebnisse sollte man ein Blur-Filter anwenden.
-
bmDest wird beim ersten Aufruf dieser Funktion automatisch zu einem Rendertarget. Für den Zugriff auf die Pixel der Bitmap danach kann es wieder in ein normales Pixel-Format zurückverwandelt (bmap_to_format) oder in eine andere Bitmap geblittet werden (bmap_blit).
Example:
// convert an image to sepia colors and display it on the screen
PANEL* panTarget = { bmap = "#256x256x24"; flags = SHOW; } // target bmap
BMAP* bmSrc = "image.tga"; // source bmap
MATERIAL* mtlSepia = { // sepia coloring pixel shader
effect = "
Texture TargetMap; // source bitmap
sampler2D smpSrc = sampler_state { texture = <TargetMap>; };
float4 SepiaColor1 = {0.2, 0.05, 0.0, 1.0};
float4 SepiaColor2 = {1.0, 0.9, 0.5, 1.0};
float4 process_sepia(float2 Tex: TEXCOORD0): COLOR
{
float4 Color = tex2D( smpSrc, Tex.xy);
float sepiaLerp = dot( float3(0.3, 0.59, 0.11), Color);
return lerp(SepiaColor1,SepiaColor2,sepiaLerp);
}
technique Sepia {
pass p1 {
AlphaBlendEnable = false;
PixelShader = compile ps_2_0 process_sepia();
}
}
";
}
function main()
{
wait(1); // until DirectX device is opened
bmap_process(panTarget.bmap,bmSrc,mtlSepia);
}
See also:
bmap_blit, bmap_fill ► latest
version online