added a nice alert box when blender is run on a mac with less than 8Mb VRAM

This commit is contained in:
Jean-Luc Peurière 2004-07-28 16:47:08 +00:00
parent 7047817c36
commit bbdfacfde3
2 changed files with 22 additions and 5 deletions

@ -134,6 +134,7 @@ GHOST_WindowCarbon::GHOST_WindowCarbon(
//void *handler = &GHOST_WindowCarbon::myWEventHandlerProc; //void *handler = &GHOST_WindowCarbon::myWEventHandlerProc;
::SetWRefCon(m_windowRef,(SInt32)this); ::SetWRefCon(m_windowRef,(SInt32)this);
setTitle(title);
err = InstallWindowEventHandler (m_windowRef, myWEventHandlerProc, GetEventTypeCount(kWEvents), kWEvents,NULL,NULL); err = InstallWindowEventHandler (m_windowRef, myWEventHandlerProc, GetEventTypeCount(kWEvents), kWEvents,NULL,NULL);
if ( err != noErr) { if ( err != noErr) {
fprintf(stderr," error creating handler %i \n",err); fprintf(stderr," error creating handler %i \n",err);

@ -66,6 +66,7 @@
#ifdef __APPLE__ #ifdef __APPLE__
#include <OpenGL/OpenGL.h> #include <OpenGL/OpenGL.h>
#include <Carbon/Carbon.h>
#endif #endif
/// ///
@ -115,6 +116,8 @@ int checkAppleVideoCard() {
long nrend; long nrend;
int j; int j;
long value; long value;
long maxvram = 0; /* we get always more than 1 renderer, check one, at least, has 8 Mo */
display_mask = CGDisplayIDToOpenGLDisplayMask (CGMainDisplayID() ); display_mask = CGDisplayIDToOpenGLDisplayMask (CGMainDisplayID() );
@ -123,12 +126,14 @@ int checkAppleVideoCard() {
theErr = CGLDescribeRenderer (rend, 0, kCGLRPRendererCount, &nrend); theErr = CGLDescribeRenderer (rend, 0, kCGLRPRendererCount, &nrend);
if (theErr == 0) { if (theErr == 0) {
for (j = 0; j < nrend; j++) { for (j = 0; j < nrend; j++) {
theErr = CGLDescribeRenderer (rend, j, kCGLRPAccelerated, &value); theErr = CGLDescribeRenderer (rend, j, kCGLRPVideoMemory, &value);
if ((theErr == 0) && (value != 0)) { if (value > maxvram)
theErr = CGLDescribeRenderer (rend, j, kCGLRPCompliant, &value); maxvram = value;
if ((theErr == 0) && (value >= 10000000)) {
theErr = CGLDescribeRenderer (rend, j, kCGLRPAccelerated, &value);
if ((theErr == 0) && (value != 0)) { if ((theErr == 0) && (value != 0)) {
theErr = CGLDescribeRenderer (rend, j, kCGLRPVideoMemory, &value); theErr = CGLDescribeRenderer (rend, j, kCGLRPCompliant, &value);
if ((theErr == 0) && (value >= 10000000)) { if ((theErr == 0) && (value != 0)) {
/*fprintf(stderr,"make it big\n");*/ /*fprintf(stderr,"make it big\n");*/
CGLDestroyRendererInfo (rend); CGLDestroyRendererInfo (rend);
macPrefState = 8; macPrefState = 8;
@ -139,6 +144,17 @@ int checkAppleVideoCard() {
} }
} }
} }
if (maxvram < 7500000 ) { /* put a standard alert and quit*/
SInt16 junkHit;
char inError[] = "* Not enough VRAM ";
char inText[] = "* blender needs at least 8Mb ";
inError[0] = 16;
inText[0] = 28;
fprintf(stderr, " vram is %i. not enough, aborting\n", maxvram);
StandardAlert ( kAlertStopAlert, &inError,&inText,NULL,&junkHit);
abort();
}
CGLDestroyRendererInfo (rend); CGLDestroyRendererInfo (rend);
return 0; return 0;
} }