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

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

1

28.08.2010, 23:56

OGL, pixels direkt zeichnen

Hi,
Ich dachte mit ich versuchs mal mirt software rendering und das einzige was die Grafikkarte machen soll ist eben die pixels auf den Bildschirm zu zeichnen.
Das erste Problem was ich hab is das Korrd. System.
Das Bild wird verkehr herum also um 180° gedreht gerendert.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
//raspos -> fensterkoord.
GLint viewport[4] = {0};
glGetIntegerv(GL_VIEWPORT, viewport);
GLint bottom = y+bitmap.h;
GLint rasposy = viewport[3] - bottom;

glRasterPos3i(x,rasposy,z);
glDrawPixels(bitmap.w,bitmap.h,GL_RGBA,GL_UNSIGNED_BYTE,bitmap.pixels);
glFlush();

LukasBanana

Alter Hase

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

2

29.08.2010, 13:03

Machs genau so wie ich mit dem SoftwareRenderer aus meiner SoftPixel Engine.
Render in einen ImageBuffer (z.B. unsigned char Buffer[640*480*4]), setzte das dann mittels "glTexImage2D" in eine Texture ein und zeichne ein Quad auf den Bildschirm. OpenGL bzw. die GrafikKarte muss dann nur noch ein Quad zeichnen, also das Endergebniss von deinem SoftwareRenderer.
Die Texture kannst du dann spiegelverkehrt mappen (TexCoord: 0, 1, 1, 0 anstatt 0, 0, 1, 1) ;)
Notfalls guck mal in den Code meiner Engine in der Datei "spRaySoftwareRenderer.c". "glDrawPixels" ist eh viel zu langsam.
Gruß,
Lukas

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

3

30.08.2010, 14:07

ich wollt bewust den direkten weg nehmen.
Da ich mir dachte, wenn ich erst eine Textur erstellen muss und bei jedem aktualisieren des Screenbuffer immer wieder die pixels in die Textur laden muss dann wäre das doch langsam, oder nicht.
Die Sprite mittels bitblt auf ein Screenbuffer zu zeichen und dann Texture erstellen,Texture neu mit pixels beladen und dann rendern.
Sollte doch langsamer sein als den direkten weg mit glBitmap oder glDrawPixels, oder lieg ich da flasch.

Ansonsten wäre es dann ja einfach die Texture immer neu zu beladen und zu rendern.

Tobiking

1x Rätselkönig

  • Private Nachricht senden

4

30.08.2010, 16:11

Die Grafikkarten und Treiber werden darauf optimiert texturierte Dreiecke zu zeichnen. Einzelne Pixel direkt zu zeichnen passt nicht so richtig ins Konzept, und ist daher in einigen Fällen deutlich langsamer als wenn man zuerst in eine Textur schreibt, und diese dann rendert.

Werbeanzeige