dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

DirectDraw
Goto page 1, 2  Next
 
dev.gamez.lv Forum Index -> Microsoft DirectX
View previous topic :: View next topic  
Author Message
E13m3nT



Joined: 24 Jan 2006
Posts: 42

PostPosted: Sun Feb 19, 2006 7:03 pm    Post subject: DirectDraw

Sveiki!
Kaads vareetu ieteikt kaadu labu tutoriaali par directdraw?
Nevaru nekaadiigi saprast ar ko saakt.
Ja nav gruuti varat luudzu ielikt kaadu paraugu vai arii atsuutiit man vinju uz e-pastu. Piemeeram kur fullscreenaa tiek paraadiita kaada bilde!

Jau ieprieksh paldies.
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Feb 19, 2006 7:34 pm    Post subject:

Es Rod Of Necropolis taisiiju ar DirectDraw,taka bisk pagaidi.Tulit iemetishu kadu paraugu.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Feb 19, 2006 7:36 pm    Post subject:

Saakumaa tev vajag izdariit shaadas lietas:
Code:

#define DIRECTDRAW_VERSION 0x0700 //DirectDraw versija
#include <ddraw.h> //standarta DirectDraw include fails

#pragma comment(lib,"ddraw.lib") //DirectDraw library fails


Te buus mainiigie kurus naaksies izmantot:

Code:

IDirectDraw*         m_pDD; //galvenais DirectDraw objekts
IDirectDrawClipper*      m_pDDClipper; //clippers (tas neljaus ziimeet aarpus ekraana robezhaam)
IDirectDrawSurface*      m_pDDSPrimary; //primaara virsma (kuru raadiis uz ekraana)
IDirectDrawSurface*      m_pDDSBack; //sekundaaraa virsma uz kuras tu ziimeesi


Te buus DirectDraw setups:

Code:

if (FAILED(DirectDrawCreate(NULL,&m_pDD,NULL))) //ar sho uztaisam galveno DirectDraw objektu
{
   return false;
}

if (FAILED(m_pDD->SetCooperativeLevel(hWnd,DDSCL_ALLOWREBOOT|DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN))) //shitais uzliks DirectDraw uz Windows loga
{
   return false;
}

if (FAILED(m_pDD->SetDisplayMode(nScreenWidth,nScreenHeight,nScreenDepth))) //shitais uzstaadiis izshkjirtspeeju
{
   return false;
}


Tagad uztaisam abus buferus (Primary un back) un clipperi:

Code:

DDSURFACEDESC         m_ddsd; //surface descriptor (datur infomaaciju par virsmu,ko gatavojamies taisiit)

ZeroMemory(&m_ddsd, sizeof(m_ddsd));
m_ddsd.dwSize = sizeof(m_ddsd);
m_ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
m_ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP |
                          DDSCAPS_COMPLEX;
m_ddsd.dwBackBufferCount = 1;
if (FAILED(m_pDD->CreateSurface(&m_ddsd, &m_pDDSPrimary, NULL))) //uztaisam primaaro virsmu
{
   return false;
}

DDSCAPS ddscaps;
ZeroMemory(&ddscaps, sizeof(ddscaps));
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
if (FAILED(m_pDDSPrimary->GetAttachedSurface(&ddscaps, &m_pDDSBack))) //dabuujam aizmugureejo virsmu (back buffer)
{
   return false;
}
   
RGNDATA region;
region.rdh.dwSize = sizeof(RGNDATAHEADER);
region.rdh.iType = RDH_RECTANGLES;
region.rdh.nCount = 1;
region.rdh.nRgnSize = sizeof(RECT);
region.rdh.rcBound.left = 0;
region.rdh.rcBound.top = 0;
region.rdh.rcBound.right = nScreenWidth; //izshkjirtspeeja
region.rdh.rcBound.bottom = nScreenHeight;

RECT rect={0,0,nScreenWidth,nScreenHeight};
   
memcpy(region.Buffer,&rect,sizeof(RECT));
if (FAILED(m_pDD->CreateClipper(0,&m_pDDClipper,NULL))) //uztaisam clipperi
{
   return false;
}

if (FAILED(m_pDDClipper->SetClipList(&region,0))) //uzliekam clippera regjionu sarakstu
{
   return false;
}

if (FAILED(m_pDDSBack->SetClipper(m_pDDClipper))) //uzliekam clipperi aimugureejam buferim
{
   return false;
}


Tagad notiiram aizmugureejo bufer:
Code:

DDBLTFX fx;
memset(&fx, 0, sizeof(fx));
fx.dwSize = sizeof(fx);
fx.dwFillColor = dwColor; //kraasa,kaadaa notiiriit

if (FAILED(m_pDDSBack->Blt(NULL, NULL, NULL, DDBLT_COLORFILL|DDBLT_WAIT, &fx))) //ar sho mees notiiram
         return false;


Ar sho mees apmainam vietaam (flip) buferus:

Code:
if (FAILED(m_pDDSPrimary->Flip(NULL,0))) return false;


Paskaidrojums:lai objekti,kurus tu ziimee no saakuma uz ekraana nebuutu ilgaak,kaa tie,kurus tu ziimee veelaak ieksh DirectDraw tu taisi 2 buferus (var arii vairaak,bet jau ir cita opera).Viens ir prieksheejais,ko raada uz ekraana,bet otrais aizmugureejais,uz kura tu ziimee.Kad esi pabeidzis ziimeet uz aizmugureejaa bufera,tie jaapmaina vietaam.Un tagad aizmugureejas buferis (uz kura tu ziimeeji) paliek par prieksheejo un prieksheejais par aizmugureejo.Liidz ar to viss,ko tu ziimeeji uz aizmugureejaa bufera tagad redzams uz ekraana.

Tomeer naacaas taisiit atsevishkju postu.

Ielaadeejam tekstuuru (tekstuura taapat kaa prieksheejais un aizmugureejais buferis ir virsma):
Code:

IDirectDrawSurface*      m_pDDSurface; //tekstuura
DDSURFACEDESC         m_ddsd; //atkal virsmas apraksts

ZeroMemory(&m_ddsd, sizeof(m_ddsd));
   
m_ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT |
            DDSD_WIDTH | DDSD_CKSRCBLT;

m_ddsd.dwSize=sizeof(m_ddsd);
m_ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;

m_ddsd.dwWidth=nSizeX; //tekstuuras lielums
m_ddsd.dwHeight=nSizeY;
m_ddsd.ddckCKSrcBlt.dwColorSpaceLowValue = RGB(255,0,255);
m_ddsd.ddckCKSrcBlt.dwColorSpaceHighValue = RGB(255,0,255);

if (FAILED(m_pDD->CreateSurface(&m_ddsd,&m_pDDSurface, NULL ))) //uztaisam virsmu
{
   DeleteTexture(nTexture);
   return false;
}

HBITMAP         hbm;
HDC             hdcImage= NULL;
HDC             hdcSurf = NULL;
   
hbm = ( HBITMAP )LoadImage( NULL, sFilename,
           IMAGE_BITMAP, nSizeX,
            nSizeY, LR_LOADFROMFILE | LR_CREATEDIBSECTION ); //ar Windows GDI ielaadeejam tekstuuru

if (hbm==NULL)
{
   DeleteTexture(nTexture);
   return false;
}

hdcImage = CreateCompatibleDC( NULL );
SelectObject( hdcImage, hbm );
 
if ( FAILED(m_pDDSurface->GetDC( &hdcSurf )))
{
   DeleteTexture(nTexture);
   return false;
}
 
if ( BitBlt( hdcSurf, 0, 0, nSizeX, nSizeY, //ziimeejam sho tekstuuru uz DirectDraw tekstuuras virsmas
        hdcImage, 0, 0, SRCCOPY ) == FALSE )
{
   DeleteTexture(nTexture);
        return false;
}

if ( hdcSurf ) m_pDDSurface->ReleaseDC( hdcSurf ); //notiiram visu aiz sevis
if ( hdcImage ) DeleteDC( hdcImage );
if( hbm ) DeleteObject( hbm );


Un pats peedeejais:
ziimeejam sho tekstuuru uz back buffer (ti. ziimeejam vienu virsmu uz otras):
Code:

RECT src;
src.top=0;
src.bottom=m_nSizeY; //tekstuuras izmeeri
src.left=0;
src.right=m_nSizeX;

RECT pos;
pos.top=nY;
pos.bottom=nY+nSizeY; //atkal tekstuuras izmeeri
pos.left=nX;
pos.right=nX+nSizeX;

if (FAILED(m_pDDSBack->Blt(&pos,m_pTextures[nTexture]->m_pDDSurface, &src,DDBLT_WAIT|DDBLT_KEYSRC, NULL))) //ziimeejam tekstuuru uz back buffer
{
     return false;
}


Tagad saliekot visu shito kopaa vari uztaisiit savu nezheeliigi kruto,nenormaali reaalo strateegjiju vai sidescrolleri.
_________________
long time; /* know C */


Last edited by elvman on Sun Feb 19, 2006 8:44 pm; edited 4 times in total
Back to top
View user's profile Visit poster's website
GiGa
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 25 Sep 2003
Posts: 887

PostPosted: Sun Feb 19, 2006 7:39 pm    Post subject:

Elvman, varbuut, lai nepiesaarnjotu forumu, visu uzraksti vienaa postaa Wink Nevaig nekaadus "tuuliit buus trupinaajums".
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Feb 19, 2006 7:41 pm    Post subject:

aa
_________________
long time; /* know C */


Last edited by elvman on Sun Feb 19, 2006 8:42 pm; edited 2 times in total
Back to top
View user's profile Visit poster's website
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Feb 19, 2006 7:48 pm    Post subject:

aa
_________________
long time; /* know C */


Last edited by elvman on Sun Feb 19, 2006 8:43 pm; edited 2 times in total
Back to top
View user's profile Visit poster's website
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Feb 19, 2006 7:52 pm    Post subject:

aa
_________________
long time; /* know C */


Last edited by elvman on Sun Feb 19, 2006 8:44 pm; edited 2 times in total
Back to top
View user's profile Visit poster's website
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Feb 19, 2006 7:54 pm    Post subject:

aa
_________________
long time; /* know C */


Last edited by elvman on Sun Feb 19, 2006 8:44 pm; edited 2 times in total
Back to top
View user's profile Visit poster's website
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Feb 19, 2006 7:56 pm    Post subject:

Esmu pabeidzis likt komentaarus.Varbuut kaads moderators vareetu visu salikt vienaa postaa,lai visiem kam rastos shaadi jautaajumi,buutu vieta uz kurieni vinjus suutiit.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Feb 19, 2006 8:36 pm    Post subject:

Vai tad tu pats nevari salikt visu vienā postā ar labot pogu tagad?

Un pie tam: vai C/C++ autoram der kā piemēra kods? :)
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Feb 19, 2006 8:41 pm    Post subject:

Varu,bet paliks 4 tukshi posti.Nu labi salikshu,bet lai moderatori tukshos postus peec tam izdzeesh.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sun Feb 19, 2006 8:45 pm    Post subject:

Nu taa dzeesiet araa visus nevajadziigos postus (ieskaitot sho).
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Feb 19, 2006 8:52 pm    Post subject:

Pēdējo postu jau nu varēji apvienot ar priekšpēdējo :D
Bet nu ok, dzēsiet manus postus arī ārā.
Back to top
View user's profile Send e-mail
E13m3nT



Joined: 24 Jan 2006
Posts: 42

PostPosted: Mon Feb 20, 2006 3:34 am    Post subject:

Paldies par atbildi!
Tikai vel joprojaam nesaprotu ko dariit... Rolling Eyes
Meegjinaaju shito visu nokompileet bet shis man izmet kaadus 100 ar kapeikaam errorus Embarassed
Nevari man atsuutit uz e-pastu kaadu source moshk tad es iebraukshu!
Ja kas lietoju VC++6 Very Happy
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Mon Feb 20, 2006 9:27 am    Post subject:

Īstenībā kļūdu paziņojumos parasti pateikts, kas tieši ir pie vainas. Atliek vien pareizi izlasīt to :)
Back to top
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> Microsoft DirectX All times are GMT + 2 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group