/*********************************************************************************
*
* Insane Game Engine
* (c)2005 Nathan Krygier. All Rights Reserved.
*
***********************************************************************************/
#include <ddraw.h>
#include <dsound.h>
#include <dmksctrl.h>
#include <dmusici.h>
#include <dmusicc.h>
#include <dinput.h>
#include "main.h"
void InitDirectDraw7(HWND hwnd)
{
LPDIRECTDRAW7 lpDirectDraw = NULL; // Direct Draw Interface 7
LPDIRECTDRAWSURFACE7 lpPrimaryDDSurface = NULL; // Direct Draw Surface 7
DDSURFACEDESC2 ddSD; // Direct Draw Surface Description
// Create the Direct Draw Interface
if(FAILED(DirectDrawCreateEx(NULL,(void **)&lpDirectDraw,IID_IDirectDraw7,NULL)))
{
MessageBox(NULL,Error_CreateInterface,Interface_Error, MB_OK);
}
// Set The Direct Draw Cooperation Level
if(FAILED(lpDirectDraw->SetCooperativeLevel(hwnd,DDSCL_FULLSCREEN | DDSCL_ALLOWMODEX |
DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT)))
{
MessageBox(NULL,Error_SetCooperationLevel,Cooperation_Error, MB_OK);
}
// Set The Display Mode
if(FAILED(lpDirectDraw->SetDisplayMode(Display_Width,Display_Height,Display_Depth,0,0)))
{
MessageBox(NULL,Error_SetDisplay,Display_Error, MB_OK);
}
// Clear the description and set the size of it
memset(&ddSD,0,sizeof(ddSD));
ddSD.dwSize = sizeof(ddSD);
// Enable the valid fields
ddSD.dwFlags = DDSD_CAPS;
// Request The Primary Surface
ddSD.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
// Create Primary Surface
if(FAILED(lpDirectDraw->CreateSurface(&ddSD, &lpPrimaryDDSurface, NULL)))
{
MessageBox(NULL,Error_CreateSurface,Surface_Error, MB_OK);
}
// Clear ddSD and set size
memset(ddSD,0,sizeof(ddSD));
ddSD.dwSize = sizeof(ddSD);
// Lock Surface
if(FAILED(lpPrimaryDDSurface->Lock(NULL,&ddSD,DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL)))
{
MessageBox(NULL,Error_LockSurface,Surface_Error, MB_OK);
}
// Create Aliases
int mempitch = ddSD.lPitch;
unsigned char *video_buffer = ddSD.lpSurface;
}
Direct Draw 7: Need Help With 2 Errors
Ok, Right now I am adding 2d support into my game engine. I have 2 errors so far trying to just get a basic DD App running.
Here is the source file and errors.
Errors:
------ Build started: Project: Insane Game Engine, Configuration: Debug Win32 ------
Compiling...
main.cpp
C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
.\main.cpp(57) : error C2664: 'memset' : cannot convert parameter 1 from 'DDSURFACEDESC2' to 'void *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
.\main.cpp(68) : error C2440: 'initializing' : cannot convert from 'LPVOID' to 'unsigned char *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Build log was saved at "file://c:\Documents and Settings\Owner\My Documents\Visual Studio\Projects\Insane Game Engine\Insane Game Engine\Debug\BuildLog.htm"
Insane Game Engine - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
The first error is because you are missing the '&' in the line:
It should be:
The second error is because you need a cast in the line:
It should be:
memset(ddSD,0,sizeof(ddSD));
It should be:
memset(&ddSD,0,sizeof(ddSD));
The second error is because you need a cast in the line:
unsigned char *video_buffer = ddSD.lpSurface;
It should be:
unsigned char *video_buffer = (unsigned char *)ddSD.lpSurface;
Thanks :-)
Now all thats left are link errors.
------ Build started: Project: Insane Game Engine, Configuration: Debug Win32 ------
Compiling...
main.cpp
C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
Linking...
main.obj : error LNK2019: unresolved external symbol _IID_IDirectDraw7 referenced in function "void __cdecl InitDirectDraw7(struct HWND__ *)" (?InitDirectDraw7@@YAXPAUHWND__@@@Z)
C:\Documents and Settings\Owner\My Documents\Visual Studio\Projects\Insane Game Engine\Debug\Insane Game Engine.exe : fatal error LNK1120: 1 unresolved externals
Build log was saved at "file://c:\Documents and Settings\Owner\My Documents\Visual Studio\Projects\Insane Game Engine\Insane Game Engine\Debug\BuildLog.htm"
Insane Game Engine - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Now all thats left are link errors.
------ Build started: Project: Insane Game Engine, Configuration: Debug Win32 ------
Compiling...
main.cpp
C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
Linking...
main.obj : error LNK2019: unresolved external symbol _IID_IDirectDraw7 referenced in function "void __cdecl InitDirectDraw7(struct HWND__ *)" (?InitDirectDraw7@@YAXPAUHWND__@@@Z)
C:\Documents and Settings\Owner\My Documents\Visual Studio\Projects\Insane Game Engine\Debug\Insane Game Engine.exe : fatal error LNK1120: 1 unresolved externals
Build log was saved at "file://c:\Documents and Settings\Owner\My Documents\Visual Studio\Projects\Insane Game Engine\Insane Game Engine\Debug\BuildLog.htm"
Insane Game Engine - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Ok I have my plot pixel function all set, well almost.
Im getting this runtime error:
Unhandled exception at 0x00401005 in Insane Game Engine.exe: 0xC0000005: Access violation reading location 0x00000000.
and
No symbols are loaded for any call stack frame. The source code cannot be displayed.
Here is my plot pixel function, and my call to it
[Edited by - Fixxer on December 18, 2005 2:36:48 PM]
Im getting this runtime error:
Unhandled exception at 0x00401005 in Insane Game Engine.exe: 0xC0000005: Access violation reading location 0x00000000.
and
No symbols are loaded for any call stack frame. The source code cannot be displayed.
Here is my plot pixel function, and my call to it
// DRAWS A DIRECT DRAW 7 PIXELvoid DrawPixelDD7(int ix, int iy, int ialpha, int ired, int igreen, int iblue, unsigned int *video_buffer, int lpitch32){ // build color word unsigned int pixel = _RGB32BIT(ialpha,ired,igreen,iblue); // write data video_buffer[ix + iy*lpitch32] = pixel;}// LOCKS THE DIRECT DRAW 7 SURFACEvoid LockSurfaceDD7(){ if(FAILED(lpPrimaryDDSurface->Lock(NULL,&ddSD,DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL))) { MessageBox(NULL,Error_LockSurface,Surface_Error, MB_OK); }}// UNLOCKS THE DIRECT DRAW SURFACEvoid UnlockSurfaceDD7(){ if(FAILED(lpPrimaryDDSurface->Unlock(NULL))) { MessageBox(NULL,Error_LockSurface,Surface_Error, MB_OK); }}
LockSurfaceDD7(); DrawPixelDD7(40,40,0,255,0,0,video_buffer,lpitch32); UnlockSurfaceDD7();
[Edited by - Fixxer on December 18, 2005 2:36:48 PM]
Your mempitch and video_buffer variables are local variables to your InitDirectDraw7 function. So, setting video_buffer to ddSD.lpSurface doesn't have any effect on your (presumably) global video_buffer variable. Thus, when you go to draw a pixel, video_buffer isn't pointing at your surface.
I changed it and still get the same errors.
Ok I have my plot pixel function all set, well almost.
Im getting this runtime error:
Unhandled exception at 0x00401005 in Insane Game Engine.exe: 0xC0000005: Access violation reading location 0x00000000.
and
No symbols are loaded for any call stack frame. The source code cannot be displayed.
Here is my plot pixel function, and my call to it
Ok I have my plot pixel function all set, well almost.
Im getting this runtime error:
Unhandled exception at 0x00401005 in Insane Game Engine.exe: 0xC0000005: Access violation reading location 0x00000000.
and
No symbols are loaded for any call stack frame. The source code cannot be displayed.
Here is my plot pixel function, and my call to it
// DRAWS A DIRECT DRAW 7 PIXELvoid DrawPixelDD7(int ix, int iy, int ialpha, int ired, int igreen, int iblue){ // build color word unsigned int pixel = _RGB32BIT(ialpha,ired,igreen,iblue); // write data video_buffer[ix + iy*lpitch32] = pixel;}// LOCKS THE DIRECT DRAW 7 SURFACEvoid LockSurfaceDD7(){ if(FAILED(lpPrimaryDDSurface->Lock(NULL,&ddSD,DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL))) { MessageBox(NULL,Error_LockSurface,Surface_Error, MB_OK); }}// UNLOCKS THE DIRECT DRAW SURFACEvoid UnlockSurfaceDD7(){ if(FAILED(lpPrimaryDDSurface->Unlock(NULL))) { MessageBox(NULL,Error_LockSurface,Surface_Error, MB_OK); }}
LockSurfaceDD7(); DrawPixelDD7(40,40,0,255,0,0); UnlockSurfaceDD7();
You have a NULL pointer somewhere. I just noticed that ALL of the variables you reference in your Init function are local variables. So NONE of your global variables (lpDirectDraw, lpPrimaryDDSurface, etc) are getting set.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement