From: Larry Swanson Newsgroups: comp.graphics.algorithms,comp.os.msdos.djgpp Subject: Double Buffer not working in modes larger than 400x300x16(VESA 2.0) Date: Sun, 12 Oct 1997 20:38:26 -0500 Organization: MidWest Communications, Inc. Lines: 66 Message-ID: <34417B92.7B82F875@mwci.net> NNTP-Posting-Host: dial-54.man.mwci.net Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk Hello I'm having some problems getting my double buffer working properly. The following code will work fine in 320x240x16 mode and in 400x300x16 mode but in any larger modes it doesn't work properly. It will flash the Double Buffer on the screen for a moment but then it goes to black. In my code screen_width and screen_height are global variables. Set_VESA_Mode works fine and my Double buffer clearing, making, and freeing functions are solid too. I'm using DJGPP.(if that makes a difference). Video is a pointer made by mapping the physical address of the L.F.B and adding djgpp conventional base.(I don't suppose this is the problem because my regular "straight to the screen" putpixels work fine". Thank you Jordan Swanson jordanswanson AT hotmail DOT com PS. Does anyone know how to access malloced memory in assembler? Where would I get the right selector to do so? Thanks again. Here's my code void ShowDoubleBuffer(){ __djgpp_nearptr_enable(); memcpy(video,DoubleBuffer, screen_width * screen_height * per_pixel); __djgpp_nearptr_disable(); }//------------------------------------------------------------ void Buffer_Pixel(int x, int y, int color){ DoubleBuffer[ y*screen_width + x ] = color; } int main(){ unsigned x,y; Set_VESA_Mode(800,600,16); MakeDoubleBuffer(); Build_Look_Up_Tables(); ClearDoubleBuffer(0); for(y=0; y < 48; y++){ for( x=0 ;x < 0xff ; x++){ Buffer_Pixel(x,y, x); } getch(); ShowDoubleBuffer(); } getch(); SetVGAMode(0x03); DestroyDoubleBuffer(); return 0; }