JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=14f152ac65ab8046425e54ae36afc6b2Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Performance

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
da-harry
Mini JLI'ler



Anmeldedatum: 22.11.2003
Beiträge: 30
Wohnort: München
Medaillen: Keine

BeitragVerfasst am: 04.12.2003, 13:33    Titel: Performance Antworten mit Zitat

Hallo,
ja ich schon wieder, bin halt noob und hab viele Probs! Wink

Also:
Ich mache zur Zeit die Sprite-Klasse aus dem Buch und am anfang kann ich das Sprite auch einigermaßen Flüssig Skalieren aber nach einer gewissen Zeite geht es nur noch total langsam!

Woran liegt das?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 04.12.2003, 14:24    Titel: Antworten mit Zitat

Das liegt daran, dass die Blt()-Funktion im Vergleich zu BltFast() seh langsam ist(das Skalieren, etc... kostet viel Zeit).
Wenn du die Sprites unbedingt skalieren willst und das dir die Performance versaut, würde ich das Sprite in verschiedenen Skalierungen abspeichern und ins Spiel laden.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 04.12.2003, 14:39    Titel: Antworten mit Zitat

Zwischen Blt und BltFast gibt es im Normalfall fast keine Geschwindigkeitsunterschiede, da das Skalieren etc alles von der Hardware erledigt wird... dass es immer langsamer wird muss einen anderen Grund haben. Erstellst du in jedem Frame das Sprite neu?
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
da-harry
Mini JLI'ler



Anmeldedatum: 22.11.2003
Beiträge: 30
Wohnort: München
Medaillen: Keine

BeitragVerfasst am: 05.12.2003, 18:27    Titel: Antworten mit Zitat

Ich glaub nicht, hier ist mal der Code:
Code:

#include "D3Dklasse.h"
#include "CSprite.h"
#include "CDXAudio.h"
#include "global.h"

//Anwendungsfenster erzeugen:
HWND CreateMainWindow(HINSTANCE hInstance);

//Callbackfunktionen zur Nachrichtenbehandlung
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg,
                        WPARAM wParam,
                        LPARAM lParam);

//globale Variable für das Fenster-Handle:
HWND hWnd = 0;

CDirect3D MainD3D;
CDXAudio MainDXA;
CSprite Sprite;


LONGLONG Frequency;
LONGLONG Offset;
LONGLONG NextFrame;
LONGLONG CurCount;

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR     lpCmdLine,
                   int       nCmdShow )
{
   hWnd = CreateMainWindow(hInstance);

   //Fehler? (=0)

   if(0 == hWnd)
   {
      MessageBox(0, "Fenster konnte nicht erzeugt werden!!!", "FEHLER IN DER ANWENDUNG", MB_OK);
      return 0;
   }
   if(!MainD3D.Init(hWnd))
   {
   
      MessageBox(0, "Initialisierung von DirectX fehlgeschlagen", "FEHLER IN DER ANWENDUNG", MB_OK);   
      return -1;
   }
   

   //Nachrichtenstruktur
   MSG msg;

   Sprite.Create(MainD3D.GetDevice(),"texture.png"); //<==hier wird es erstellt

   D3DCOLOR Text = D3DCOLOR_XRGB(0,0xFF,0);


   /* if(!QueryPerformanceFrequency((LARGE_INTEGER*)&Frequency))
   {
      //FEHLER!
   }

   Offset = Frequency / FRAME_RATE;
   QueryPerformanceCounter((LARGE_INTEGER*)&CurCount);

   NextFrame = CurCount + Offset;
   */
   //Wiederholen bis WM_Quit
   while(msg.message != WM_QUIT)
   {
      if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
      {
         TranslateMessage(&msg);
         DispatchMessage(&msg);
      }
      else
      {
         /*QueryPerformanceCounter((LARGE_INTEGER*)&CurCount);

         if(CurCount > NextFrame)
         {*/
            MainD3D.BeginScene();
            MainDXA.InitAudio( hWnd);
            MainDXA.LoadSound( "g:\\", "thx.wav");

            /* if(GetAsyncKeyState(VK_LEFT) & 0x8000)
            {
               Sprite.Move(LEFT);
            }*/
            
            // Wenn Space gedrückt wurde, Sprite rotieren     
            Sprite.Move(DOWN);     

            Sprite.Draw();
            
            MainD3D.EndScene();

            /*NextFrame = CurCount + Offset;
          } */


      }
   }

   return 0;
}

HWND CreateMainWindow(HINSTANCE hInstance)
{
   WNDCLASSEX wndClass = {
      sizeof(WNDCLASSEX),
         CS_DBLCLKS | CS_OWNDC |
         CS_HREDRAW | CS_VREDRAW,
         MessageHandler,
         0,
         0,
         hInstance,
         LoadIcon(NULL, IDI_WINLOGO),
         LoadCursor(NULL, IDC_ARROW),
         (HBRUSH)GetStockObject(WHITE_BRUSH),
         NULL,
         "WindowClass",
         LoadIcon(NULL, IDI_WINLOGO)
   };

RegisterClassEx(&wndClass);

return CreateWindowEx(
                 NULL,
                 "WindowClass",
                 "DirectXGraphics",
                 WS_VISIBLE | WS_OVERLAPPEDWINDOW,
                 200, 100,
                 800,
                 600,
                 NULL,
                 NULL,
                 hInstance,
                 NULL);
}

LRESULT CALLBACK MessageHandler(HWND hWnd, UINT msg,
                        WPARAM wParam, LPARAM lParam)
{   
   switch(msg)
   {
   case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
         break;
   }

   return (DefWindowProc(hWnd, msg, wParam, lParam));
}


Code:

#include "CSprite.h"
#include "global.h"

void CSprite::Create(LPDIRECT3DDEVICE9 lpDevice, LPCSTR lpFileName)
{
   m_lpDevice = lpDevice;

   D3DXCreateSprite(m_lpDevice,&m_lpSprite);

   D3DXIMAGE_INFO ImgInfo;
   D3DXGetImageInfoFromFile(lpFileName,&ImgInfo);

   D3DXCreateTextureFromFileEx(m_lpDevice,
                         lpFileName,
                        ImgInfo.Width,
                        ImgInfo.Height,
                        1,0,
                        D3DFMT_UNKNOWN,
                        D3DPOOL_MANAGED,
                        D3DX_FILTER_NONE,
                        D3DX_FILTER_NONE,
                        0,0,0,
                        &m_lpTexture);
   m_Width      = ImgInfo.Width;
   m_Height   = ImgInfo.Height;
   
   m_vRotationCenter = D3DXVECTOR2((float)m_Width/2,(float)m_Height/2);

   m_vScale = D3DXVECTOR2(1.0f,1.0f);

   m_StepX      = 10.0f;
   m_StepY      = 10.0f;
}

void CSprite::Draw()
{
   m_lpSprite->Draw(m_lpTexture,NULL,&m_vScale,&m_vRotationCenter,m_Rotation,&m_vPosition,0xFFFFFFFF);
}

void CSprite::SetPosition(float x,float y)
{
   m_vPosition.x   = x;
   m_vPosition.y   = y;
}

void CSprite::SetRotation(float rotation)
{
   m_Rotation = (float)rotation * D3DX_PI / 180;
}

void CSprite::SetStep(float StepX,float StepY)
{
   m_StepX      = StepX;
   m_StepY      = StepY;
}

void CSprite::SetScale(float scale)
{
   m_vScale.x = scale;
   m_vScale.y = scale;
}

void CSprite::Move(enum DIRECTION dir)
{
   switch(dir)
   {
     case LEFT:
        if(m_vPosition.x > 0)
        {
           m_vPosition.x -= m_StepX;
        }
     break;

     case RIGHT:
        if(m_vPosition.x > SCR_WIDTH - m_Width)
        {
           m_vPosition.x += m_StepX;
        }
     break;

     case UP:
        if(m_vPosition.y > 0)
        {
           m_vPosition.y -= m_StepY;
        }
     break;

     case DOWN:
        if(m_vPosition.y < SCR_HEIGHT - m_Height)
        {
           m_vPosition.y += m_StepY;
        }
     break;
   }
}

void CSprite::Scale(float dScale)
{
   m_vScale.x += dScale;
   m_vScale.y += dScale;
}

void CSprite::Rotate(float dRotation)
{
   m_Rotation   += dRotation;
}


CSprite::CSprite()
{
    m_lpSprite  = NULL;
    m_lpTexture = NULL;
}

CSprite::~CSprite()
{
    if(NULL != m_lpSprite)
    {
        m_lpSprite->Release();
        m_lpSprite = NULL;
    }

    if(NULL != m_lpTexture)
    {
        m_lpTexture->Release();
        m_lpTexture = NULL;
    }
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 05.12.2003, 18:43    Titel: Antworten mit Zitat

Du initialisierst in jedem Frame dein Soundsystem... ist das beabsichtigt?
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
da-harry
Mini JLI'ler



Anmeldedatum: 22.11.2003
Beiträge: 30
Wohnort: München
Medaillen: Keine

BeitragVerfasst am: 05.12.2003, 18:46    Titel: Antworten mit Zitat

Stimmt, danke das hab ich irgend wie übersehen.
Der Fehler ist mir schon fast peinlich Embarassed
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 05.12.2003, 20:29    Titel: Antworten mit Zitat

Naja, hat's denn geholfen!? ;)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
da-harry
Mini JLI'ler



Anmeldedatum: 22.11.2003
Beiträge: 30
Wohnort: München
Medaillen: Keine

BeitragVerfasst am: 07.12.2003, 16:07    Titel: Antworten mit Zitat

Ja und zwar sehr! Cool
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum