Window mit 900000 FPS?



  • ...pst weitersagen...eLISA und CodeFinder sind ein Liebespaar...



  • (D)Evil schrieb:

    float fTest = 2.21234234f;
    char cBuffer[256];
    _snprintf(cBuffer, 256, "Die Variable Test: %4.2f", fTest);
    

    Heisst 4.2 -> 4 Stellen vor, 2 nach dem Komma? (Bin grad froh, eine Stelle zu haben)
    Wasn _snprintf()? tönt schwer nach nicht standardkonformen c..
    ne da bleib ich doch bei meinem tstringstream! 😉

    CodeFinder schrieb:

    ..wie geil!, kannst du DirectX ??? --- --> mein Respekt! ...Obacht

    Sagen wir mal, ich lerne es 😉
    Is ja nich so schwer, die msdn zu bedienen, M$ rechnet zum Glück mit dem DAU 😃

    CodeFinder schrieb:

    ==>>
    lol, fühl dich doch einfach geschmeichelt...das is nicht schwer

    OK... *geschmeicheltfühl*

    CodeFinder schrieb:

    ==>>
    ne ich will damit sagen das du auch ne verdammt gute 'Maschine' bist

    😃 reingefallen..pass immer auf: was du sagst, und was du meinst, ist nicht das gleiche...
    Aber dann mal Danke für die netten Komplimente.

    CodeFinder schrieb:

    ==>>
    jo wsprintf kann auch nicht mit float umgehen hab mir ehrlich gesagt den Typ von fps nicht angeguckt...-sry-

    Ehrlich gesagt, hab ich auch den Typ nicht angegeben, ich mag nicht, wenn jeder meine Typen kennt 😉

    CodeFinder schrieb:

    Dazu müsst ihr sprintf nehmen...sry nochmal wg. der Arbeit...die Zeile:

    wsprintf(szBuf, TEXT("%d FPS"), fps);
    

    in diese umändern:

    sprintf(szBuf, TEXT("%f FPS"), fps);
    

    dann sollte es worken (falls nicht noch ein "#include <stdio.h>" zu deinen anderen Includes)...

    Wie gesagt, ich mag sstreams, is halt "handier" und cpluspluser

    CodeFinder schrieb:

    MfG CodeFinder

    Auch Dir, schöne Grüsse und vielen Dank fürs "kümmern"

    ps: maximal sind 10 smilies erwünscht 😞 👎



  • Jo _snprintf printf usw sind alles C Funktionen. streams sind bei dtandardkomformen C++ richtig.

    Wobei WinAPI auch C ist 😉



  • Ehrlich gesagt, hab ich auch den Typ nicht angegeben, ich mag nicht, wenn jeder meine Typen kennt 😉

    tze tze tze, und n guten Sinn für Humor hat sie auch noch 😃 😃 ...das mit den smilies is mir auch aufgefallen... 😞

    MfG CodeFinder

    PS: Ließt du n Buch bzgl DirectX ?



  • hmm dein Code ist übrigens doch nicht UNICODE konform denn:

    text << std::setprecision(2) << std::fixed << fps << " FPS" ;
    

    muss:

    text << std::setprecision(2) << std::fixed << fps << TEXT(" FPS") ;
    

    heißen;
    glaub ich zum mindestens ...

    sry Schätzchen 😃 😃 😃 😃 😃 😃 😃

    MfG CodeFinder



  • CodeFinder schrieb:

    Ehrlich gesagt, hab ich auch den Typ nicht angegeben, ich mag nicht, wenn jeder meine Typen kennt 😉

    tze tze tze, und n guten Sinn für Humor hat sie auch noch 😃 😃 ...das mit den smilies is mir auch aufgefallen... 😞

    MfG CodeFinder

    PS: Ließt du n Buch bzgl DirectX ?

    He Du
    's wird hier langsam ziemlich OT..mir is es ja egal..

    nö, wieso bücher kaufen, die eh nur auf ihrem eignen Mist aufbauen?
    Hab mir halt die MSDN Tutorials reingezogen (die sind sehr gut, in Verbindung mit der Referenz), und ein weiteres (keine Ahnung mehr woher) wo einer die DXdevice in ne Klasse gekapselt hat. Die Klasse hab ich nun übernommen und angepasst. Ne Klasse für D3DXFONTS is am entstehn. DInput hab ich auch aus der MSDN. Für ne theoretische Abhandlung über 3D Darstellung ist Vertexwahn's Essay recht gut und kompakt.

    CodeFinder schrieb:

    hmm dein Code ist übrigens doch nicht UNICODE konform denn:

    text << std::setprecision(2) << std::fixed << fps << " FPS" ;
    

    muss:

    text << std::setprecision(2) << std::fixed << fps << TEXT(" FPS") ;
    

    heißen;
    glaub ich zum mindestens ...

    sry Schätzchen (zuviele Smilies)
    MfG CodeFinder

    Sorry Schätzchen, mein Compiler (VS2005EE) schluckt das ohne mucken. Frag mich nich wieso... 😕

    Was du immer für CodeFindest 🤡 😃

    ach und @(D)evil: ich weiss, WinAPI ist elend. 😃
    Kein Grund selbst auch elenden Code zu schreiben.
    DX9 is aber objectorientiert..

    Also zusammenfassend kann man sagen, ich hab erst ein Hauptfenster aufgebaut mit WinAPI, dann nen Timer auf Basis des PerformanceCounters für die Framerate ( da kam für mich der Shock mit 900000FPS wo ich hier mal nachfragen musste ), und danach die DirectX Interfaces implementiert. Inzwischen hab ich ein Fensterchen mit einem Background Surface( noch ist alles 2D )( damals, im Ferienlager, hab ich mit SDL angefangen ) und netten 85-90 FPS.
    Ihr seht, die Ausgabe des floats ist für mich sekundär, aber natürlich nett. Es korrekt zu machen is sowas wie Ehrgeiz. Ich könnts ja auch in ein File schreiben, aber all die "coolen" Games habens doch oben links oder rechts in der HUD stehn.
    Soweit bin ich noch nicht, aber es kommt die Zeit... 😉
    Ok ich könnt noch lange plappern, drück aber jetzt mal auf "Senden"..

    Grüsse an euch alle da draussen 😘



  • ehh, ....

    eLISA schrieb:

    He Du
    's wird hier langsam ziemlich OT..mir is es ja egal..

    was isn "OT" 🤡
    und was war "DAU" 🤡

    MfG CodeFinder



  • sry vergessen zu Fragen 🤡

    nochmal @ eLISA (ich hoffe ich nerv dich nicht 😉 )

    eLISA schrieb:

    wo einer die DXdevice in ne Klasse gekapselt hat

    kannste mir die mal schicken ?, bitte? ...wär echt lieb ...würd ich mir gerne mal angucken 😉

    e-Mail: cpp-coding@arcor.de

    schonmal thX A LoT

    MfG CodeFinder



  • Hehe 😃

    Wenn du meine eMail willst, musst du schon etwas phantasievoller sein :-p

    Wenns dir um den Code geht, voila:
    ( weis jetzt nicht ob ich das veröffentlcihen darf, weil ein grosser Teil ausm Tutorial stammt,
    aber "image" und "scene" sind von mir, die darfste haben )
    graphic2D.h

    #ifndef GRAPHIC2D_H
    #define GRAPHIC2D_H
    
    #ifdef _MSC_VER
    #pragma once
    
    #include "globals.h"
    
    class scene;
    
    class graphic2D
    {
    public:
    	graphic2D();
    	~graphic2D();
    	void				init( HWND hWnd_ );
    	void				render( scene& scenerie );
    	void				clear();
    	LPDIRECT3D9			get_interface()	{ return DXinterface; }
    	LPDIRECT3DDEVICE9	get_device()	{ return DXdevice; }
    	HWND				get_hwnd()		{ return hwnd; }	
    private:
    	LPDIRECT3D9			DXinterface;
    	LPDIRECT3DDEVICE9	DXdevice;
    	HWND				hwnd;
    };
    
    #endif
    

    graphic2D.cpp

    #include "graphic2D.h"
    #include "scene.h"
    
    typedef std::vector<image*>				img_cont;
    typedef img_cont::iterator				img_iter;
    
    graphic2D::graphic2D()
    :	DXinterface( 0 ),
    	DXdevice( 0 )
    {
    	clear();
    }
    
    graphic2D::~graphic2D()
    {
    	clear();
    }
    
    void graphic2D::init( HWND hWnd_ )
    {
    	hwnd = hWnd_;
    	if( 0 == ( DXinterface = Direct3DCreate9( D3D_SDK_VERSION ) ) ) {
    		ex_interface ex;
    		throw ex;
    		return;
    	}
    	D3DDISPLAYMODE displaymode;
    	ZeroMemory( &displaymode, sizeof(displaymode) );
    	DXinterface->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &displaymode );
    	D3DPRESENT_PARAMETERS present_parameters; 
    	ZeroMemory( &present_parameters, sizeof(present_parameters) );
    	// TODO: set present parameters here
    	// Note: default for 2D blitting in window
    	present_parameters.Windowed = TRUE;
    	present_parameters.BackBufferFormat = displaymode.Format;
    	present_parameters.SwapEffect = D3DSWAPEFFECT_DISCARD;
    	present_parameters.EnableAutoDepthStencil = TRUE;
    	present_parameters.AutoDepthStencilFormat = D3DFMT_D16;	
    	if(FAILED( DXinterface->CreateDevice(	D3DADAPTER_DEFAULT,
    											D3DDEVTYPE_HAL,
    											hwnd,
    											D3DCREATE_HARDWARE_VERTEXPROCESSING,
    											&present_parameters,
    											&DXdevice ) ) ) {
    		ex_device ex;
    		throw ex;
    		return;
    	}
    	// TODO: set render settings here
    	// Note: defaults for 2D blitting with colorkeying
    	DXdevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
    	DXdevice->SetRenderState( D3DRS_LIGHTING, FALSE );
    	DXdevice->SetRenderState( D3DRS_ZENABLE, TRUE );
    	DXdevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
    	DXdevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
    	DXdevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
    	DXdevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE );
    	DXdevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE );
    	DXdevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_TEXTURE );
    	DXdevice->SetFVF( D3DFVF_CUSTOMVERTEX );
    	DXdevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
    	DXdevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
    	DXdevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
    }
    
    void graphic2D::render( scene& scenerie )
    {
    	DXdevice->Clear(0, 0,
    					D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
    					D3DCOLOR_XRGB( 255, 255, 255 ),
    					1.0f,
    					0L );
    	if( SUCCEEDED( DXdevice->BeginScene() ) ) {
    		// TODO: describe scene here
    		// Note: default 2D blit image
    		for( img_iter it = scenerie.shapes.begin(); it != scenerie.shapes.end(); it++ ) {
    			DXdevice->SetTexture( 0, (*it)->surface.DXtexture );
    			DXdevice->SetStreamSource(	0, 
    										(*it)->body.DXvertexbuffer,
    										0,
    										sizeof( CUSTOMVERTEX ) );
    			DXdevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
    		}
    		DXdevice->EndScene();
    	}
    	DXdevice->Present( 0, 0, 0, 0 );
    }
    
    void graphic2D::clear()
    {
    	if( DXdevice ) {
    		DXdevice->Release();
    		DXdevice = 0;
    	}
    	if( DXinterface ) {
    		DXinterface->Release();
    		DXinterface = 0;
    	}
    }
    

    image.h

    #ifndef IMAGE_H
    #define IMAGE_H
    
    #ifdef _MSC_VER
    #pragma once
    #endif
    
    #include "globals.h"
    #include "mainwin.h"
    #include "rectangle.h"
    #include "texture.h"
    
    class image
    {
    public:
    	 image( mainwin& window_, LPCTSTR filename_ );
    	~image();
    	void		init();
    	void		move_size( int x, int y, int w, int h, float z );
    	void		clear();
    	rectangle	body;
    	texture		surface;
    	mainwin&	window;
    };
    
    #endif
    

    image.cpp

    #include "image.h"
    
    image::image( mainwin& window_, LPCTSTR filename_ )
    :	body( window_ ),
    	surface( window_, filename_ ),
    	window( window_ )
    {
    	clear();
    }
    
    image::~image()
    {
    	clear();
    }
    
    void image::init()
    {
    	body.init();
    	surface.init();
    }
    
    void image::move_size( int x, int y, int w, int h, float z )
    {
    	body.set_pos( x, y, w, h, z );
    }
    
    void image::clear()
    {
    	body.clear();
    	surface.clear();
    }
    

    polygon.h

    #ifndef POLYGON_H
    #define POLYGON_H
    
    #ifdef _MSC_VER
    #pragma once
    #endif
    
    #include "globals.h"
    #include "mainwin.h"
    
    class polygon
    {
    public:
    	 polygon( mainwin& window_ );
    	~polygon();
    	virtual void			init()		= 0		{}
    	virtual void			set_pos( int x, int y, int w, int h, float z ) 
    										= 0		{}
    	void					clear();
    	LPDIRECT3DVERTEXBUFFER9	get_vertexbuffer();
    	mainwin&				window;
    	LPDIRECT3DVERTEXBUFFER9	DXvertexbuffer;
    };
    
    #endif
    

    polygon.cpp

    #include "polygon.h"
    
    polygon::polygon(mainwin &window_)
    :	window( window_ ), DXvertexbuffer( 0 )
    {
    	clear();
    }
    
    polygon::~polygon()
    {
    	clear();
    }
    
    void polygon::clear()
    {
    	if( DXvertexbuffer ) {
    		DXvertexbuffer->Release();
    		DXvertexbuffer = 0;
    	}
    }
    
    LPDIRECT3DVERTEXBUFFER9	polygon::get_vertexbuffer()
    {
    	if( !DXvertexbuffer ) {
    		ex_ ex;
    		throw ex;
    		return 0;	
    	}
    	return DXvertexbuffer;
    }
    

    texture.h

    #ifndef TEXTURE_H
    #define TEXTURE_H
    
    #ifdef _MSC_VER
    #pragma once
    #endif
    
    #include "globals.h"
    #include "mainwin.h"
    
    class texture
    {
    public:
    	 texture( mainwin& window_, LPCTSTR filename_ );
    	~texture();
    	void				init();
    	void				clear();
    	mainwin&			window;
    	LPDIRECT3DTEXTURE9	DXtexture;
    	LPCTSTR				filename;	
    	//int					alpha;
    	//int					width;
    	//int					height;
    	//int					pitch;
    
    };
    
    #endif
    

    texture.cpp

    #include "texture.h"
    
    texture::texture( mainwin& window_, LPCTSTR filename_ )
    :	window( window_ ), filename( filename_ ), DXtexture( 0 ) 
        //alpha( 0 ), width( 0 ), height( 0 ), pitch( 0 )
    {
    	clear();
    }
    
    texture::~texture(void)
    {
    	clear();
    }
    
    void texture::init()
    {
    	if( !window.get_display().get_device() ) {
    		ex_getdevice ex;
    		throw ex;
    		return;
    	}
    	if( FAILED( D3DXCreateTextureFromFileEx( window.get_display().get_device(), 
    											filename,
    											0,
    											0,
    											D3DX_FROM_FILE,
    											0,
    											D3DFMT_A8R8G8B8,
    											D3DPOOL_DEFAULT,
    											D3DX_DEFAULT,
    											D3DX_DEFAULT,
    											0xFFFFFFFF,
    											0,
    											0,
    											&DXtexture ) ) ) {
    		ex_texture_file ex;
    		throw ex;
    		return;
    	}
    }
    
    void texture::clear()
    {
    	if( DXtexture ) {
    		DXtexture->Release();
    		DXtexture = 0;
    	}
    }
    

    scene.h

    #ifndef SCENE_H
    #define SCENE_H
    
    #ifdef _MSC_VER
    #pragma once
    #endif
    
    #include "globals.h"
    #include "image.h"
    
    class mainwin;
    
    typedef std::vector<image*>				img_cont;
    typedef img_cont::iterator				img_iter;
    
    class scene
    {
    public:
    	 scene( mainwin& window_ );
    	~scene();
    	void add_image(LPCTSTR filename_, int x, int y, int w, int h, float z );
    	void		clear();
    	img_cont	shapes;
    	mainwin&	window;
    };
    
    #endif
    

    scene.cpp

    #include "scene.h"
    
    #include "mainwin.h"
    
    scene::scene( mainwin& window_ )
    :	window( window_ )
    {
    	clear();
    }
    
    scene::~scene()
    {
    	clear();
    }
    
    void scene::add_image(LPCTSTR filename_, int x, int y, int w, int h, float z)
    {
    	image* elem = new image( window, filename_ );
    	elem->init();
    	elem->move_size( x, y, w, h, z);
    	shapes.push_back( elem );
    }
    
    void scene::clear()
    {
    	for( img_iter it = shapes.begin(); it != shapes.end(); it++ ) {
    		delete *it;
    	}
    	shapes.empty();
    }
    

    Wie immer für jegliche Kritik offen... 😉



  • [quote="CodeFinder"]ehh, ....

    eLISA schrieb:

    was isn "OT" 🤡
    und was war "DAU" 🤡

    MfG CodeFinder

    Du bis wohl neu im Netz? 🤡 :p
    schau mal hier

    OT heisst OffTopic
    DAU heisst Dümmster Anzunehmender User, also wie ein GAU bei nem KKW, der dein Programm zum m0nd schiesst..



  • hehe^^,

    Wenn du meine eMail willst, musst du schon etwas phantasievoller sein :-p

    lol, daran hat ich echt nicht gedacht es ging mir um den Code 😉 ...aber...
    1. was heißtn jez OT ?
    2. was heißtn jez DAU ?
    3. ist das alles (bzgl. der Klasse) ?

    und danke NOCHMAL!

    MfG CodeFinder



  • CodeFinder schrieb:

    hehe^^,

    Wenn du meine eMail willst, musst du schon etwas phantasievoller sein :-p

    lol, daran hat ich echt nicht gedacht es ging mir um den Code 😉 ...aber...
    1. was heißtn jez OT ?
    2. was heißtn jez DAU ?
    3. ist das alles (bzgl. der Klasse) ?

    und danke NOCHMAL!

    MfG CodeFinder

    1. siehe oben
    2. siehe oben
    3. mehr brauchst Du nicht, nen LPDIRECT3D9, nen LPDIRECT3DDEVICE9..
    was willste noch? 😉



  • Hab grad die Quelle wiedergefunden:
    http://www.flipcode.com/articles/article_adv2ddx8.shtml
    Trotz Einstellung des Betriebs eine sehr gute Seite, mit wirklich interessanten Artikeln.



  • hmm ok ok ok
    also ersmal danke für den Link...dann noch mal was zum Thema was deiner Meinung nach OT 😃 war:

    auch wenn ich darauf nun nicht angespielt hab...warum war das denn keine gute Idee, an deine eMail zu kommen ? ...da gibts doch wohl flacheres oder nicht ...
    😞 ...

    MfG CodeFinder

    PS: Das mit den Abkürzungen ist ja wohl n Witz 😃 😃 😃



  • CodeFinder schrieb:

    hmm ok ok ok
    also ersmal danke für den Link...

    bitte 🙂 schmöcker mal ein bisschen in den Artikeln, wenn du an Spielprogrammieren interessiert bist. Ansonsten wäre noch Gamedev zu nennen ( einfach mal googeln ).

    CodeFinder schrieb:

    dann noch mal was zum Thema was deiner Meinung nach OT 😃 war:

    auch wenn ich darauf nun nicht angespielt hab...warum war das denn keine gute Idee, an deine eMail zu kommen ? ...da gibts doch wohl flacheres oder nicht ...
    😞

    he easy, kein prob, ( check mal deine Mailbox ).
    Nur die Aussage: "Wau, ein Mädchen das Coded" fand ich flach (...), der Rest war ok!
    ...

    CodeFinder schrieb:

    PS: Das mit den Abkürzungen ist ja wohl n Witz 😃 😃 😃

    Kommt immer drauf an, wie schnell man tippen muss/kann. Kommt IMHO (In My Humble Opinion) aus der Zeit, als man noch im Chat abhing und online sein noch nach Zeit berechnet wurde ( völlig unverständlich 😃 ) Bin auch kein Freund kurzer Statements, aber irgendwie hat sich das alles eingebürgert.
    Ach, und Bielefake gibt es nicht!! 😃 😃 😃


Anmelden zum Antworten