00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <cave_ogl.h>
00024
00025 #include "CaveRoutines.h"
00026 #include "Inform.h"
00027 #include "VMDApp.h"
00028 #include "CaveDisplayDevice.h"
00029 #include "CaveScene.h"
00030
00031 #if defined(ARCH_IRIX6)
00032 static void *shared_CAVE_memory_arena = NULL;
00033 #endif
00034
00035 #define CAVEMAGICINIT 3141
00036 static int vmd_cave_initialized_flag = 0;
00037
00038 int vmd_cave_is_initialized() {
00039 if (vmd_cave_initialized_flag == CAVEMAGICINIT)
00040 return 1;
00041 else
00042 return 0;
00043 }
00044
00045 void vmd_set_cave_is_initialized() {
00046 vmd_cave_initialized_flag = CAVEMAGICINIT;
00047 }
00048
00049 void *malloc_from_CAVE_memory(size_t size) {
00050 #if defined(ARCH_IRIX6)
00051
00052 if (shared_CAVE_memory_arena == NULL) {
00053
00054 msgErr << "Shared CAVE memory not allocated. Prepare to crash and burn."
00055 << sendmsg;
00056 return NULL;
00057 } else {
00058
00059 return amalloc(size, shared_CAVE_memory_arena);
00060 }
00061 #else
00062
00063 void *retval = CAVEMalloc(size);
00064 if (!retval)
00065
00066 msgErr << "Not enough shared CAVE memory. Prepare to crash and burn."
00067 << sendmsg;
00068 return retval;
00069 #endif
00070 }
00071
00072 void free_to_CAVE_memory(void *data) {
00073 #if defined(ARCH_IRIX6)
00074
00075 afree(data, shared_CAVE_memory_arena);
00076 #else
00077
00078 CAVEFree(data);
00079 #endif
00080 }
00081
00082
00083
00084 void grab_CAVE_memory(int megs) {
00085 #if defined(ARCH_IRIX6)
00086
00087
00088 int size = (megs>1?megs:1) * 1024 * 1024;
00089 shared_CAVE_memory_arena = CAVEUserSharedMemory(size);
00090
00091 if (!shared_CAVE_memory_arena)
00092 msgErr << "Bad juju in the arena. We're gonna die!" << sendmsg;
00093 else
00094 msgInfo << "Created arena." << sendmsg;
00095 #else
00096
00097 int size = (megs>1?megs:1) * 1024 * 1024;
00098 CAVESetOption(CAVE_SHMEM_SIZE, size);
00099 #endif
00100 }
00101
00102
00103
00104 void cave_gl_init_fn(void) {
00105
00106 }
00107
00108
00109 static Scene *cavescene;
00110 static DisplayDevice *cavedisplay;
00111
00112 void set_cave_pointers(Scene *scene, DisplayDevice *display) {
00113 cavescene = scene;
00114 cavedisplay = display;
00115 }
00116
00117
00118 void cave_renderer(void) {
00119 cavescene->draw(cavedisplay);
00120 }
00121