w3d is very tricky to code of course :) There is tons of functions which you can put here and it will give you that result, or here, and then that result. Pretty possible that you forget something somethere .. Did you use any "SwithScreenBuffer()" function ? If so, how it looks like ? For me it was like this:
void SwitchDisplay(W3D_Context *context,struct Screen *screen)
{
if(window_mode==TRUE)
{
WaitTOF();
W3D_FlushFrame(context);
W3D_WaitIdle(context);
BltBitMapRastPort(bufferrastport.BitMap,0,0,window->RPort,0,0,640,480,0xC0);
W3D_SetScissor(context, &SwiDisp);
W3D_SetDrawRegion(context, bufferrastport.BitMap, 0,&SwiDisp);
}
if(fullscreen_mode==TRUE)
{
#ifdef __AROS
WaitTOF();
W3D_FlushFrame(context);
W3D_WaitIdle(context);
BltBitMapRastPort(bufferrastport.BitMap,0,0,window->RPort,0,0,640,480,0xC0);
W3D_SetScissor(context, &SwiDisp);
W3D_SetDrawRegion(context, bufferrastport.BitMap, 0,&SwiDisp);
#else
buffer[drawBuffer]->sb_DBufInfo->dbi_SafeMessage.mn_ReplyPort=0;
while (!ChangeScreenBuffer(screen, buffer[drawBuffer]));
drawBuffer ^=1;
W3D_SetDrawRegion(context, buffer[drawBuffer]->sb_BitMap,0, &SwiDisp);
// WaitBOVP(&(screen)->ViewPort);
WaitTOF();
#endif
}