Mail Archives: djgpp/1997/10/16/12:01:22
From: | Larry Swanson <laswanson AT mwci DOT net>
|
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
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
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;
}
- Raw text -