Backup proyecto Joyfe - Borland
This commit is contained in:
119
CPP/DXVIDEO.CPP
Normal file
119
CPP/DXVIDEO.CPP
Normal file
@ -0,0 +1,119 @@
|
||||
// ************************************************************************************************
|
||||
//
|
||||
// Direct Video
|
||||
//
|
||||
//
|
||||
// ************************************** (c) Pedro D<>ez L<>pez ************************************
|
||||
|
||||
#include <malloc.h>
|
||||
#include "DXVideo.h"
|
||||
//
|
||||
// Inicio
|
||||
//
|
||||
BOOL CDXVideo::Inicio(HWND hwnd,int Ancho,int Alto,int BPP)
|
||||
{
|
||||
char buf[256];
|
||||
|
||||
ddrval = DirectDrawCreate(NULL, &lpDD, NULL);
|
||||
|
||||
if(ddrval == DD_OK)
|
||||
{
|
||||
ddrval = lpDD->SetCooperativeLevel(hwnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
if(ddrval == DD_OK)
|
||||
{
|
||||
ddrval = lpDD->SetDisplayMode(Ancho,Alto,BPP);
|
||||
if(ddrval == DD_OK)
|
||||
{
|
||||
ddsd.dwSize = sizeof(ddsd);
|
||||
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
|
||||
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
|
||||
ddsd.dwBackBufferCount = 1;
|
||||
ddrval = lpDD->CreateSurface(&ddsd, &lpDDSView, NULL);
|
||||
if(ddrval == DD_OK)
|
||||
{
|
||||
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
|
||||
ddrval = lpDDSView->GetAttachedSurface(&ddscaps, &lpDDSBack);
|
||||
if(ddrval == DD_OK)
|
||||
{
|
||||
hres = Ancho;
|
||||
vres = Alto;
|
||||
bpp = BPP;
|
||||
ElmBuffer = hres*vres;
|
||||
DimBuffer = hres*vres*(bpp/8);
|
||||
pBuffer.bpp = malloc (DimBuffer);
|
||||
if(pBuffer.bpp==NULL)
|
||||
{
|
||||
hres = 0;
|
||||
vres = 0;
|
||||
bpp = 0;
|
||||
ElmBuffer = 0;
|
||||
DimBuffer = 0;
|
||||
Fin();
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
wsprintf(buf, "Fallo %08lX al iniciliazr DirectDraw\n",ddrval);
|
||||
MessageBox(hwnd, buf, "ERROR DirectX", MB_OK);
|
||||
Fin();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//
|
||||
// Cursor
|
||||
//
|
||||
void CDXVideo::Cursor(HCURSOR nCursor)
|
||||
{
|
||||
mDDCursorShape = nCursor;
|
||||
}
|
||||
|
||||
//
|
||||
// Pinta
|
||||
//
|
||||
void CDXVideo::Pinta ()
|
||||
{
|
||||
// Copia el buffer de trabajo al BackBuffer.
|
||||
while (TRUE)
|
||||
{
|
||||
ddrval=lpDDSBack->Lock(NULL,&ddsd,0,NULL);
|
||||
if(ddrval == DD_OK) break;
|
||||
if (ddrval != DDERR_WASSTILLDRAWING) return;
|
||||
}
|
||||
lpDXBuffer = (void *)ddsd.lpSurface;
|
||||
memcpy(lpDXBuffer,pBuffer.bpp,DimBuffer);
|
||||
lpDDSBack->Unlock(NULL);
|
||||
// Cambia el buffer.
|
||||
while (TRUE)
|
||||
{
|
||||
ddrval=lpDDSView->Flip(NULL, 0);
|
||||
if (ddrval == DD_OK) return;
|
||||
if (ddrval == DDERR_SURFACELOST)
|
||||
{
|
||||
ddrval=lpDDSView->Restore();
|
||||
if (ddrval!=DD_OK) return;
|
||||
}
|
||||
if (ddrval!=DDERR_WASSTILLDRAWING) return;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Fin
|
||||
//
|
||||
void CDXVideo::Fin()
|
||||
{
|
||||
if (pBuffer.bpp != NULL) free (pBuffer.bpp);
|
||||
if(lpDD != NULL)
|
||||
{
|
||||
if(lpDDSView!=NULL)
|
||||
{
|
||||
lpDDSView->Release();
|
||||
lpDDSView = NULL;
|
||||
}
|
||||
lpDD->Release();
|
||||
lpDD = NULL;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user