This topic is now archived and is closed to further replies.


surface coords not correct WHY!?

Recommended Posts

Under the game main below I drawtext to the backsurface, when I do that and then flip the location is not at 0,0. it''s like 40 pixels to the right. and 20 pixels down. It''s not just drawing text, when I blit bitmaps it''s the same thing. It''s like the whole surface is rigged or something. Below I have the game main(which draws the text) initdirectdraw(which creates primary surface etc) and the drawtextfunction itself. Any ideas on what''s causing this? THX!

int Game_Main(void *parms = NULL, int num_parms = 0)

// test if user is hitting ESC and send WM_CLOSE



} // end Game_Main


int InitDirectDraw(int width,  int height,   int bpp)
// Creates DirectDraw and creates a double buffer

LPDIRECTDRAW ddraw1obj; //ddraw 1.0

DirectDrawCreate( NULL, &ddraw1obj, NULL); //create the object

ddraw1obj->QueryInterface(IID_IDirectDraw4,(LPVOID *)&ddraw4obj); //get the ddraw 4.0 with 1.0

ddraw1obj->Release(); //dump ddraw 1.0 obj, we using 4.0 now
ddraw1obj = NULL;     //set it to null just for the hell of it

//from now on we can always use ddraw 4.0, which is really directx 6.0
ddraw4obj->SetCooperativeLevel( main_window_handle, //windows stuff

							    DDSCL_EXCLUSIVE|    //don''t let anything interrupt ddraw

							    DDSCL_FULLSCREEN|   //fullscreen is nice

							    DDSCL_ALLOWMODEX);  //modex is some vga thing

ddraw4obj->SetDisplayMode(width, height, bpp, 0, 0); //simply set the display,bpp is bits per pixel

ShowCursor(FALSE); //don''t want to see windows cursor

memset(&surfdesc,0,sizeof(surfdesc)); //zero out and set size


surfdesc.dwFlags= DDSD_CAPS | DDSD_BACKBUFFERCOUNT; //setting these enable dwCaps and dwBackBufferCount

surfdesc.dwBackBufferCount = 1; //set backbuffercount to 1, double buffer including primary surface
surfdesc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP; //ddsCaps is just required to get to dwCaps 

//the settings above  are required if you want to make a double buffer

if(FAILED(ddraw4obj->CreateSurface(&surfdesc,&primsurf,NULL))) //create the primary surface from the ddraw4 object


surfdesc.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; // set the description to backbuffer

if(FAILED(primsurf->GetAttachedSurface(&surfdesc.ddsCaps,&backsurf))) //now using the description(set to back buffer) we attach the backsurf(declared at top) to primsurf

//make the following global so we can use em in main program

width  = Screen_Width; 
height = Screen_Height;
bpp    = Screen_BPP;

int Draw_Text_GDI(char *text, 
				  int x, 
				  int y, 
				  COLORREF color, 
HDC devicecontext;



Share this post

Link to post
Share on other sites
Perhaps the problem is that the monitor settings are changed?
If there is a black edge above and to the left of your surfce that might be the problem.

See what happens if you play with your monitor a bit.
If you move the screen up a bit and you see more of the surface coming up at the bottom then that is your problem.
I don''t know how to fix it.

Share this post

Link to post
Share on other sites