00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <stdlib.h>
00024 #include "Inform.h"
00025 #include "FreeVRRoutines.h"
00026 #include "VMDApp.h"
00027 #include "FreeVRDisplayDevice.h"
00028 #include "FreeVRScene.h"
00029
00030 #include <freevr.h>
00031
00032 void *malloc_from_FreeVR_memory(size_t size) {
00033 return vrShmemAlloc(size);
00034 }
00035
00036 void free_to_FreeVR_memory(void *data) {
00037 vrShmemFree(data);
00038 }
00039
00040
00041
00042 void grab_FreeVR_memory(size_t megs) {
00043 size_t size = ((megs>1) ? megs : 1) * 1024L * 1024L;
00044 size_t sz=0;
00045
00046 while (((sz = vrShmemInit(size)) == 0) && (size > 64*1024*1024)) {
00047 msgErr << "Failed to create FreeVR arena of size "
00048 << (size / (1024*1024))
00049 << ", reducing allocation by half." << sendmsg;
00050 size >>= 1;
00051 }
00052
00053 if (sz == 0)
00054 msgErr << "Failed to create FreeVR arena. We're gonna die!" << sendmsg;
00055 else
00056 msgInfo << "Created arena, size " << (sz / (1024*1024))
00057 << "MB." << sendmsg;
00058 }
00059
00060
00061
00062 void freevr_gl_init_fn(void) {
00063 }
00064
00065 static Scene *freevrscene;
00066 static DisplayDevice *freevrdisplay;
00067
00068 void set_freevr_pointers(Scene *scene, DisplayDevice *display) {
00069 freevrscene = scene;
00070 freevrdisplay = display;
00071 }
00072
00073
00074 void freevr_renderer(void) {
00075 freevrscene->draw(freevrdisplay);
00076 }
00077