Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#5

Re: CreateDIBSection / OpenGL

  Alt 27. Feb 2009, 00:54
Zitat von turboPASCAL:
Zitat:
Sehe gerade wo übergibst du denn hier das HBITMAP ?
Delphi-Quellcode:
var
  hBmp: HBitmap;

//...

if LoadFromRes
    then hBmp := Loadimage(HInstance, ImageName, IMAGE_BITMAP, 0, 0, 0)
    else hBmp := Loadimage(0, ImageName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
Wir reden aneinander vorbei
Ich möchte weder von resource noch von einem realen Image laden.
Ich erstelle ein HBITMAP mit CreateDIBSection

Delphi-Quellcode:
      
FillChar(BmpInfo, SizeOf(BITMAPINFO), 0);
BmpInfo.bmiHeader.biSize := SizeOf(BITMAPINFOHEADER);
BmpInfo.bmiHeader.biWidth := w;
BmpInfo.bmiHeader.biHeight := -h -2;
BmpInfo.bmiHeader.biPlanes := 1;
BmpInfo.bmiHeader.biBitCount := 32;

VisInfo^.VisBmp := CreateDIBSection(0, BmpInfo, DIB_RGB_COLORS,
  VisInfo^.VisBuf, 0, 0);
Das! VisInfo^.VisBmp
möchte ich jetzt zu einer Texture konvertieren damit ich es als normales Bitmap
auf mein OpenGL Window rendern kann.

Mit BitBlt geht es nicht ..
Alternativ kann ich das verwenden was funktioniert aber ärger macht wenn der Fullscreen geschaltet wird.
Delphi-Quellcode:
StretchDIBits(DC, VisInfo^.x, VisInfo^.y, VisInfo^.w, VisInfo^.h,
  0, 0, VisInfo^.w, VisInfo^.h, VisInfo^.VisBuf, BmpInfo, DIB_RGB_COLORS, SRCCOPY);
Auf einen normalen DC (Window) gehts mit
Delphi-Quellcode:
if (not BitBlt(canvas, VisInfo^.x, VisInfo^.y, VisInfo^.w, VisInfo^.h, VisInfo^.VisDC, 0,
0, SRCCOPY)) then
hmmm muss mal sehn warum das soviel mehr CPU auslastung verursacht.

EDIT:
Es gibt eine methode in .NET
Image.FromHbitmap-Methode (IntPtr)
Aber nichts vergleichbares gefunden für andere Sprachen.
Und die andere frage ob das konvertieren dann nicht noch mehr CPU last verursacht.

gruss Emil
  Mit Zitat antworten Zitat