← Back to contents
C source, ASCII text
— 4K bytes
— 1994-01-01
/*
------------------------------------------------------------------
Black Nebula
File : viewports.c
Programmer: Colin Adams
Date: 26/4/91
Last Modified : 10/6/91
Description:
Allocates two bitmapped views for the main display.
------------------------------------------------------------------
*/
#define AMIGA_INCLUDES
#include "3d.h"
extern UWORD Palette2[];
extern short swapflag, store1, store2;
struct View my_view;
struct View back_view;
struct View *my_old_view;
struct ViewPort my_view_port;
struct ViewPort back_view_port;
struct RasInfo my_ras_info;
struct RasInfo back_ras_info;
struct BitMap my_bit_map;
struct BitMap back_bit_map;
struct RastPort my_rast_port;
struct RastPort back_rast_port;
void SetUpViews(void)
{
UWORD *pointer;
int loop;
char *temppoint, *temp2;
my_old_view = GfxBase->ActiView;
InitView(&my_view);
InitView(&back_view);
my_view.ViewPort = &my_view_port;
back_view.ViewPort = &back_view_port;
InitVPort(&my_view_port);
InitVPort(&back_view_port);
back_view_port.DWidth = my_view_port.DWidth = G;
back_view_port.DHeight = my_view_port.DHeight = HEIGHT;
my_view_port.RasInfo = &my_ras_info;
my_view_port.Modes = NULL;
back_view_port.RasInfo = &back_ras_info;
back_view_port.Modes = NULL;
my_view_port.ColorMap = (struct ColorMap *) GetColorMap(COLOURS);
if(my_view_port.ColorMap == NULL)
CleanUpandExit();
back_view_port.ColorMap = (struct ColorMap *) GetColorMap(COLOURS);
if(back_view_port.ColorMap == NULL)
CleanUpandExit();
pointer = (UWORD *) my_view_port.ColorMap->ColorTable;
for(loop = 0; loop<COLOURS; loop++)
*pointer++ = Palette2[loop];
pointer = (UWORD *) back_view_port.ColorMap->ColorTable;
for(loop = 0; loop < COLOURS; loop++)
*pointer++ = Palette2[loop];
InitBitMap(&my_bit_map, DEPTH, G, HEIGHT);
InitBitMap(&back_bit_map, DEPTH, G, HEIGHT);
temppoint = AllocMem(40960, MEMF_CHIP);
if(!temppoint)
CleanUpandExit();
temp2 = AllocMem(40960, MEMF_CHIP);
if(!temp2)
CleanUpandExit();
for(loop=0; loop<DEPTH; loop++)
{
my_bit_map.Planes[loop] = (PLANEPTR) temppoint + 10240*loop;
back_bit_map.Planes[loop] = (PLANEPTR) temp2 + 10240*loop;
}
BltClear(temppoint, 40960, 0);
BltClear(temp2, 40960, 0);
my_ras_info.BitMap = &my_bit_map;
my_ras_info.RxOffset = 0;
my_ras_info.RyOffset = 0;
my_ras_info.Next = NULL;
back_ras_info.BitMap = &back_bit_map;
back_ras_info.RxOffset = 0;
back_ras_info.RyOffset = 0;
back_ras_info.Next = NULL;
/* Create the display: */
MakeVPort(&my_view, &my_view_port);
MakeVPort(&back_view, &back_view_port);
MrgCop(&my_view);
MrgCop(&back_view);
InitRastPort( &my_rast_port );
my_rast_port.BitMap = &my_bit_map;
InitRastPort( &back_rast_port );
back_rast_port.BitMap = &back_bit_map;
InitArea(&my_area_info, areabuffer, MAX_POINTS);
back_rast_port.AreaInfo = my_rast_port.AreaInfo = &my_area_info;
if(!(extra_space = (PLANEPTR) AllocRaster(G,256)))
CleanUpandExit();
back_rast_port.TmpRas = my_rast_port.TmpRas = (struct TmpRas *)
InitTmpRas(&my_temp_ras, (APTR) extra_space, RASSIZE(G,HEIGHT));
rastport = &back_rast_port;
BNDRYOFF(&my_rast_port); /* no boundaries around objects */
BNDRYOFF(&back_rast_port);
loadpic("screen.iff");
LoadView(&my_view);
}
void FreeView(void)
{
LoadView(my_old_view);
FreeVPortCopLists(&my_view_port);
FreeVPortCopLists(&back_view_port);
FreeCprList(my_view.LOFCprList);
FreeCprList(back_view.LOFCprList);
if(my_bit_map.Planes[0])
FreeMem(my_bit_map.Planes[0], 40960);
if(back_bit_map.Planes[0])
FreeMem(back_bit_map.Planes[0], 40960);
if(my_view_port.ColorMap) FreeColorMap(my_view_port.ColorMap);
if(back_view_port.ColorMap) FreeColorMap(back_view_port.ColorMap);
if(extra_space)
FreeRaster(extra_space, G, 256);
swapflag = 1;
store1 = store2 = 0;
active_list[0] = NULL;
}
/* end of module views.c */