• Advertisement

Archived

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

surface coords not correct WHY!?

This topic is 6390 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

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

if (KEYDOWN(VK_ESCAPE))
   SendMessage(main_window_handle,WM_CLOSE,0,0);

FillSurface(backsurf,_RGB16BIT565(32,64,32));
Draw_Text_GDI("HI",0,0,_RGB16BIT565(255,255,0),backsurf);

FlipSurfaces();
return(1);
} // 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.dwSize=sizeof(surfdesc);

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

     return(0);

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
    return(0);

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

width  = Screen_Width; 
height = Screen_Height;
bpp    = Screen_BPP;
return(1);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int Draw_Text_GDI(char *text, 
				  int x, 
				  int y, 
				  COLORREF color, 
				  LPDIRECTDRAWSURFACE4 surface)
{
HDC devicecontext;
surface->GetDC(&devicecontext);
SetTextColor(devicecontext,color);
SetBkMode(devicecontext,TRANSPARENT);
TextOut(devicecontext,x,y,text,strlen(text));
surface->ReleaseDC(devicecontext);


return(1);
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    

Share this post


Link to post
Share on other sites
Advertisement
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

  • Advertisement