HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1014
infogdi+ について3解決


info

リンク

2010/10/14(Thu) 03:43:01|NO.35349

a2d.hsp の alCopyImageToScreen のCPU の付加が激しいので。
>> 約 640 * 480 のサイズのイメージをhsp のスクリーンに向かって 一秒間に 30 回コピーする。

a2d.hsp の内部をのぞいてみたところ。

どうやら、hsp ユーザーがとっつきやすいように、色々と技巧が凝らして有るようです。
とても使いやすいのですが、私的には、もっと速度と、Cpu の付加を抑えたいと思うので、
そのために、必要な部分のみを抜き出そうとしているのですが、うまくいきません。
 画面に反映されない状態です。

下がそのスクリプトです。a2d.hsp からの コピペが多いですが多めに見てくれると嬉しいです。


#uselib "gdiplus" #func GdiplusStartup "GdiplusStartup" var , var , int #func GdiplusShutdown "GdiplusShutdown" int #func GdipCreateBitmapFromScan0 "GdipCreateBitmapFromScan0" int, int, int, int, int, int #func GdipGetImageGraphicsContext "GdipGetImageGraphicsContext" int, int #func GdipCreateSolidFill "GdipCreateSolidFill" int, int #func GdipCreatePen2 "GdipCreatePen2" int, float, int, int #func GdipDisposeImage "GdipDisposeImage" int #func GdipDeleteGraphics "GdipDeleteGraphics" int #func GdipDeleteBrush "GdipDeleteBrush" int #func GdipDeletePen "GdipDeletePen" int #func GdipFillRectangleI "GdipFillRectangleI" int, int, int, int, int, int #func GdipCreateFromHDC "GdipCreateFromHDC" int, int #func GdipDrawImageRectRectI "GdipDrawImageRectRectI" int, int, int, int, int, int, int, int, int, int, int, int, int, int #func GdipSetSmoothingMode "GdipSetSmoothingMode" int, int #func GdipSetPixelOffsetMode "GdipSetPixelOffsetMode" int, int #func GdipSetCompositingQuality "GdipSetCompositingQuality" int, int #func GdipSetTextRenderingHint "GdipSetTextRenderingHint" int, int #func GdipSetCompositingMode "GdipSetCompositingMode" int, int #func GdipSetWorldTransform "GdipSetWorldTransform" int, int ; PixelFormat #const PixelFormatGDI 0x00020000 // Is a GDI-supported format #const PixelFormatAlpha 0x00040000 // Has an alpha component #const PixelFormatCanonical 0x00200000 #const PixelFormat24bppRGB (8 | (24 << 8) | PixelFormatGDI) #const PixelFormat32bppARGB (10 | (32 << 8) | PixelFormatAlpha | PixelFormatGDI | PixelFormatCanonical) #enum UnitWorld = 0 // 0 -- World coordinate (non-physical unit) #enum UnitDisplay // 1 -- Variable -- for PageTransform only #enum UnitPixel // 2 -- Each unit is one device pixel. onexit *exit GdiplusStartup gdipToken , gdiSi , 0 GdipCreateBitmapFromScan0 100 , 100 , 0, PixelFormat32bppARGB, 0, varptr(imgImage) GdipGetImageGraphicsContext imgImage, varptr(hic) GdipSetSmoothingMode hic, 2 ; SmoothingModeHighQuality = QualityModeHigh GdipSetPixelOffsetMode hic, 2 ; PixelOffsetModeHighQuality = QualityModeHigh GdipSetTextRenderingHint hic, 4 ; TextRenderingHintAntiAlias GdipCreateSolidFill 0xF0FFA2B0, varptr(imgBrush) GdipCreatePen2 imgBrush, 1, UnitPixel , varptr(imgPen) GdipFillRectangleI hic , imgBrush , 0,0 , 100,100 GdipCreateFromHDC hdc , varptr(tmpGraphics) GdipDrawImageRectRectI tmpGraphics, imgImage, 0 , 0 , 100 , 100 , 0 , 0 , 100, 100, UnitPixel, 0 , 0, 0 redraw 1 stop *exit GdipDeleteGraphics tmpGraphics ; tmpGraphics を削除 GdipDisposeImage imgImage ; Image を処分 GdipDeleteGraphics hic ; Graphics を削除 GdipDeleteBrush imgBrush ; Brush を削除 GdipDeletePen imgPen ; Pen を削除 GdiplusShutdown gdipToken end

 それと gdi+ に関する、情報が詳しく載っているサイトは、どこかに有りますでしょうか?
 色々探しましたが見つからない状態です。



この記事に返信する


GENKI

リンク

2010/10/14(Thu) 21:06:49|NO.35353

a2d.hsp…Artlet2Dのことですね。最初、分かりませんでした。(^ ^;

> それと gdi+ に関する、情報が詳しく載っているサイトは、どこかに有りますでしょうか?

普通にMSDNじゃダメですか?
http://msdn.microsoft.com/ja-jp/library/aa984108%28VS.71%29.aspx


さて、CPU負荷についてですが…。
GDI/GDI+はGPUは使われず、全てCPU処理されますからCPU負荷が高くなるのは避けられません。
CPU負荷の主原因はGDI+そのものにあります。(…ですよね?間違ってたら指摘してください。)

どうしてもCPU負荷を減らしたいならDirect3DかDirect2Dの導入をお勧めします。



ANTARES

リンク

2010/10/15(Fri) 01:03:11|NO.35366

>CPU負荷の主原因はGDI+そのものにあります。
>(…ですよね?間違ってたら指摘してください。)
 いずれにせよ、必要な部分だけ抜き出したところで、
速度やCPUの負荷が向上しないのは確かです。

 必要な部分だけ抜き出すには、エディタの検索機能を使って使用しているものを
次々に別ファイルに抜き出していけば、機械的な作業で済むはずですが?
まあ、たいていのエディタの検索機能は使う気にならんほど使い勝手が悪いので、
たいへんだとは思いますが。



info

リンク

2010/10/15(Fri) 01:45:27|NO.35368

GENKI さん
ANTARES さん

 有難うございます。理解しました。
 directX には今まで、手が出ませんでしたが少し頑張ってみようと思います。



ONION software Copyright 1997-2023(c) All rights reserved.