Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » DirectX - In den Grafikspeicher schreiben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.06.2004, 15:50 Uhr
~Mystor
Gast


Hi,

Ich habe ein Problem, und zwar arbeite ich gerade ein Buch durch von Marius Apetri. Also, folgender Quellcode:


C++:

#include <windows.h>

#include "s2_1.h"

uchar handle_input( MSG *msg );

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow )
{
  surface.open_window( hInstance, 320, 200, 8 ); //surface -> directX class
  
  uchar *screen = (uchar *) surface.get_screen_pointer();

  for( long x=0 ; x<256 ; x++ )
     for( long y=0 ; y<200 ; y++ )
        screen[ y * 320 + x ] = x;
    
  surface.release_screen_pointer();
    
  MSG message;
  while( !handle_input( &message ) ) ;

  return message.wParam;
}

uchar handle_input( MSG *msg )
{
  if( PeekMessage( msg, NULL, 0, 0, PM_REMOVE ) )
  {
    if( msg->message == WM_QUIT || msg->message == WM_KEYDOWN ) return 1;
  
    TranslateMessage( msg );
    DispatchMessage( msg );    
  }
  
  return 0;
}




get_screen_pointer holt die Grafikspeicheradresse, sodass ich dann direkt in den Speicher schreiben kann.
release_screen_pointer setzt den Datenstrom wieder an, sodass die Daten dargestellt werden können.
Problem: Der Bildschirm bleibt schwarz. Setzte ich allerdings in die while-Schleife den Teil

C++:
for( long x=0 ; x<256 ; x++ )
     for( long y=0 ; y<200 ; y++ )
        screen[ y * 320 + x ] = x;
    

ein so erscheinen Farben auf dem Bildschirm. Die sehen dann allerdings auch nicht si aus wie sie sollen.

Ein gravierender Fehler, den ich übersehen habe, irgendwo im System?

Danke schon mal im Vorraus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.06.2004, 15:59 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ich kenn mich mit dem DirektX-Krempel nicht aus aber deinee schleifen sehen richtig aus... unter der annahme das dein bildschrim 320X200 gross ist müsste der jetzt von oben nach unten immer heller werden (jedenfalls die ersten 256 pixel in x richtung)...


was macht denn surface.get_screen_pointer() genau... ist der zeiger den es dir liefert wirklich ein zeiger auf grauwerte? oder musst du immer 3 oder 4 bytes zusammenfassung und das vielleicht rgb kodieren?
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 20.06.2004 um 16:00 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.06.2004, 16:32 Uhr
(un)wissender
Niveauwart


Ich habe keine Ahnung, glaube aber nicht, das du den Grafikkartenspeicher so ansprechen kannst. Mit SDL musste man immer den pitch beachten, da die Pixel sicherlich größer sind als 1 byte, dass kommt auch immer auf die Oberfläche und Farbtiefe an.
Schau dir nachmal die Doku an.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.06.2004, 18:25 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Welche Direct X Version ist das denn?

Ich habe mich mal kurz mit 7,8 und 9 beschäftigt und dein Code sieht mir nicht danach aus, vorallem bindest du nicht eine der Direct X Header ein

Kann es sein das du eine Klasse verwendest die bei dem Buch dabei war?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: