Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

121

09.06.2007, 20:43

@Phili
Entschuldige die Frage, aber wie hast du dann diese API gemacht?- Ich habe gedacht, dass DX und OGL die einzigen Möglichkeiten sind Grafiken irgendwie zu erstellen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

122

09.06.2007, 20:55

Zitat von »"drakon"«

Ich habe gedacht, dass DX und OGL die einzigen Möglichkeiten sind Grafiken irgendwie zu erstellen.


falsch gedacht, es gibt ziemlich viele wege grafiken anzuzeigen ;

Phili

unregistriert

123

09.06.2007, 21:34

Genau diese Einstellung, dass OpenGl und Dx die einzigen Möglichkeiten sind, hatt mich dazu gebracht das zu machen.
Ich hab halt in eine Datenstruktur aus RGB Farbwerten gerendert und die dann mit WinAPI auf den Bildschirm gebracht.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

124

09.06.2007, 21:38

wo wir grad beim thema sind: wie genau bringst du die bilder aus dem buffer auf dein fenster?
zeichnest du in einen DC?

Phili

unregistriert

125

09.06.2007, 22:20

Jo:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
hBitmap=CreateDIBSection(NULL, (BITMAPINFO*)&info, 0, (void**)&ImageBits, NULL, 0);
for(int i=0; i<Surface->ResolutionX; i++)
    for(int j=0; j<Surface->ResolutionY; j++)
    {
        ImageBits[(i+j*info.biWidth)*3]=(unsigned char)(Surface->Pixels[i][j].z*255.0f);
        ImageBits[(i+j*info.biWidth)*3+1]=(unsigned char)(Surface->Pixels[i][j].y*255.0f);
        ImageBits[(i+j*info.biWidth)*3+2]=(unsigned char)(Surface->Pixels[i][j].x*255.0f);
    }

hdc2=CreateCompatibleDC(hdc);
SelectObject(hdc2, hBitmap);
BitBlt(hdc, 0, 0, info.biWidth, info.biHeight, hdc2, 0, 0, SRCCOPY); 
DeleteObject(hBitmap);
DeleteDC(hdc2);

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

126

09.06.2007, 22:25

kleiner tipp:

mit StretchDIBits() kannst du deine daten direkt auf das fenster blitten. das ist evtl. ein bisschen performanter ;)

EDIT: hm, ok ich denk nicht dass das viel unterschied machen wird.

Phili

unregistriert

127

09.06.2007, 22:34

Das ist absolut kein Unterschied. Wäre reine Haarspalterei ;-)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

128

10.06.2007, 14:40

Aha, du machst das über die WinAPI.
Mach den DirectX das schlussendlich auch über die WinAPI?

Andere Frage:
Könnte man auch noch tiefer als mit der WinAPI zeichnen? - Das heisst, auch WinAPI unabhängig?

Sheddex

unregistriert

129

10.06.2007, 14:51

Ich denke, dann müsstest du dir ein eigenes Betriebssystem programmieren...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

130

10.06.2007, 15:53

Zitat von »"drakon"«

Könnte man auch noch tiefer als mit der WinAPI zeichnen? - Das heisst, auch WinAPI unabhängig?


es geht schon, nur wär das extrem viel sinnloser aufwand (du könntest z.b. einen eigenen treiber schreiben). ist nur fraglich inwiefern du unter windows überhaut etwas "ohne WinAPI" machen kannst. wenn du dir einen eigenen treiber schreibst, dann verwendet dieser treiber ja auch einen teil der WinAPI um mit dem system zu kommunizieren...

Werbeanzeige