本文整理汇总了C++中PsychErrorExit函数的典型用法代码示例。如果您正苦于以下问题:C++ PsychErrorExit函数的具体用法?C++ PsychErrorExit怎么用?C++ PsychErrorExit使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PsychErrorExit函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: SCREENBeginOpenGL
PsychError SCREENBeginOpenGL(void)
{
static char useString[] = "Screen('BeginOpenGL', windowPtr [, sharecontext=0]);";
static char synopsisString[] = "Prepare window 'windowPtr' for OpenGL rendering by external OpenGL code. "
"This allows to use OpenGL drawing routines other than the ones implemented "
"in Screen() to draw to a Psychtoolbox onscreen- or offscreen window via execution of "
"OpenGL commands. Typical clients of this function are mogl (Richard F. Murrays OpenGL for Matlab wrapper), "
"the new Eyelink-Toolbox and third party Matlab Mex-Files which contain OpenGL rendering routines. "
"You *have to* call this command once before using any of those external drawing commands for the window. "
"After drawing, you *must* switch back to PTB's rendering via the Screen('EndOpenGL', windowPtr); command. "
"Normally, you won't provide the optional flag 'sharecontext', so PTB will automatically isolate the OpenGL "
"state of your code from its internal state. However, if you provide sharecontext=1, then PTB will allow "
"your code to use and affect PTBs internal context. Only do this if you really know what you're doing! "
"If you provide sharecontext=2 then PTB will give you your own private context, but it will synchronize "
"the state of that context with its internal state - Seldomly needed, but here for your convenience. "
"The context state isolation is as strict as possible without seriously affecting performance and functionality: "
"All OpenGL context state is separated, with two exceptions: The framebuffer binding (if any) is always synchronized "
"with PTB (and reset to zero when calling 'EndOpenGL' or another Screen command) to allow external code to transparently "
"render into PTBs internal framebuffers - Needed for the imaging pipeline to work. Ressources like textures, display lists, "
"FBOs, VBOs, PBOs and GLSL shaders are shared between PTB and your code as well for efficiency reasons. Both types of "
"ressource sharing shouldn't be a problem, because either you are a beginner or advanced OpenGL programmer and won't use "
"those facilities anyway, or you are an expert user - in which case you'll know how to prevent any conflicts easily.";
static char seeAlsoString[] = "EndOpenGL SetOpenGLTexture GetOpenGLTexture moglcore";
PsychWindowRecordType *windowRecord;
GLint fboid, coltexid, ztexid, stexid;
//all sub functions should have these two lines
PsychPushHelp(useString, synopsisString,seeAlsoString);
if(PsychIsGiveHelp()){PsychGiveHelp();return(PsychError_none);};
//check for superfluous arguments
PsychErrorExit(PsychCapNumInputArgs(2)); // The maximum number of inputs
PsychErrorExit(PsychRequireNumInputArgs(1)); // Number of required inputs.
PsychErrorExit(PsychCapNumOutputArgs(0)); // The maximum number of outputs
//get the window record from the window record argument and get info from the window record
PsychAllocInWindowRecordArg(kPsychUseDefaultArgPosition, TRUE, &windowRecord);
// Already in userspace mode?
if (PsychIsUserspaceRendering()) PsychErrorExitMsg(PsychError_user, "Tried to call Screen('BeginOpenGL'), but userspace rendering is already active! Missing or mismatched Screen('EndOpenGL')? Check your code.");
// (Optional) context sharing flag provided?
sharecontext = 0;
PsychCopyInIntegerArg(2, FALSE, &sharecontext);
if (sharecontext<0 || sharecontext>2) PsychErrorExitMsg(PsychError_user, "Invalid value for 'sharecontext' provided. Not in range 0 to 2.");
// Master override: If context isolation is disabled then we use the PTB internal context...
if (PsychPrefStateGet_ConserveVRAM() & kPsychDisableContextIsolation) sharecontext = 1;
// Set it as drawing target: This will set up the proper FBO bindings as well:
PsychSetDrawingTarget(windowRecord);
// Store it as a reference for later 'EndOpenGL' call:
preswitchWindowRecord = windowRecord;
// Userspace wants its own private rendering context, optionally updated to match PTBs internal state?
if (sharecontext == 0 || sharecontext == 2) {
// Yes. This is the normal case for 3D rendering. MOGLs and PTBs contexts are separated to
// increase robustness, only ressources like textures, display lists, PBO's, VBO's, FBO's
// and GLSL shaders are shared, but not the current renderstate.
// Make sure 3D rendering is globally enabled, otherwise this is considered a userspace bug:
if (PsychPrefStateGet_3DGfx()==0) PsychErrorExitMsg(PsychError_user, "Tried to call 'BeginOpenGL' for external rendering, but 3D rendering not globally enabled! Call 'InitializeMatlabOpenGL' at the beginning of your script!!");
// Query current FBO binding. We need to manually transfer this to the userspace context, so
// it can render into our window:
if (glBindFramebufferEXT) {
fboid = 0;
glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &fboid);
if (fboid>0) {
// Query attachments of FBO:
glGetFramebufferAttachmentParameterivEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT, &coltexid);
glGetFramebufferAttachmentParameterivEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT, &ztexid);
glGetFramebufferAttachmentParameterivEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT, &stexid);
}
}
// Flush our context before context switch:
glFlush();
// Unbind possible FBOs, so system FB is active in our context:
if (glBindFramebufferEXT && (fboid > 0)) {
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glFlush();
}
// Switch to userspace context for this window, optionally sync state with PTBs context:
PsychOSSetUserGLContext(windowRecord, (sharecontext==2) ? TRUE : FALSE);
// All following ops apply to the usercontext, not our internal context:
// Manually establish proper FBO binding for userspace. This will get reset automaticaly on back-transition
// inside PsychSetGLContext on its first invocation. If we are in non-imaging mode then there's nothing to do.
if (glBindFramebufferEXT && (fboid > 0)) {
if (!glIsFramebufferEXT(fboid)) {
// Special case: Need to bind a special FBO and the underlying OpenGL driver is faulty,
// i.e. it doesn't share FBO names accross our OpenGL contexts as it should according to
// spec.: We manually create a clone of our internal FBO - Create an FBO in the userspace
//.........这里部分代码省略.........
开发者ID:AlanFreeman,项目名称:Psychtoolbox-3,代码行数:101,代码来源:SCREENglMatrixFunctionWrappers.c
示例2: SCREENGetMouseHelper
PsychError SCREENGetMouseHelper(void)
{
const char *valuatorInfo[]={"label", "min", "max", "resolution", "mode", "sourceID"};
int numValuatorStructFieldNames = 6;
int numIValuators = 0;
PsychGenericScriptType *valuatorStruct = NULL;
#if PSYCH_SYSTEM == PSYCH_OSX
Point mouseXY;
UInt32 buttonState;
double *buttonArray;
int numButtons, i;
psych_bool doButtonArray;
PsychWindowRecordType *windowRecord;
//all subfunctions should have these two lines.
PsychPushHelp(useString, synopsisString, seeAlsoString);
if(PsychIsGiveHelp()){PsychGiveHelp();return(PsychError_none);};
//cap the numbers of inputs and outputs
PsychErrorExit(PsychCapNumInputArgs(3)); //The maximum number of inputs
PsychErrorExit(PsychCapNumOutputArgs(6)); //The maximum number of outputs
//Buttons.
// The only way I know to detect the number number of mouse buttons is directly via HID. The device reports
//that information but OS X seems to ignore it above the level of the HID driver, that is, no OS X API above the HID driver
//exposes it. So GetMouse.m function calls PsychHID detect the number of buttons and then passes that value to GetMouseHelper
//which returns that number of button values in a vector.
PsychCopyInIntegerArg(1, kPsychArgRequired, &numButtons);
if(numButtons > 32)
PsychErrorExitMsg(PsychErorr_argumentValueOutOfRange, "numButtons must not exceed 32");
// Special codes -10 to -15? --> Console keyboard queries:
if(numButtons <= -10 && numButtons >= -15) {
ConsoleInputHelper((int) numButtons);
return(PsychError_none);
}
if(numButtons < 1)
PsychErrorExitMsg(PsychErorr_argumentValueOutOfRange, "numButtons must exceed 1");
doButtonArray=PsychAllocOutDoubleMatArg(3, kPsychArgOptional, (int)1, (int)numButtons, (int)1, &buttonArray);
if(doButtonArray){
buttonState=GetCurrentButtonState();
for(i=0;i<numButtons;i++)
buttonArray[i]=(double)(buttonState & (1<<i));
}
// Get cursor position:
#ifndef __LP64__
// 32-Bit Carbon version:
GetGlobalMouse(&mouseXY);
PsychCopyOutDoubleArg(1, kPsychArgOptional, (double)mouseXY.h);
PsychCopyOutDoubleArg(2, kPsychArgOptional, (double)mouseXY.v);
#else
// 64-Bit HIToolbox version (OSX 10.5 and later):
HIPoint outPoint;
HIGetMousePosition(kHICoordSpaceScreenPixel, NULL, &outPoint);
PsychCopyOutDoubleArg(1, kPsychArgOptional, (double) outPoint.x);
PsychCopyOutDoubleArg(2, kPsychArgOptional, (double) outPoint.y);
#endif
// Return optional keyboard input focus status:
if (numButtons > 0) {
// Window provided?
// We only have the function GetUserFocusWindow on 32-Bit Carbon.
// We have a drop-in replacement in OSX/PsychCocoaGlue.c for 64-Bit Cocoa.
if (PsychIsWindowIndexArg(2)) {
// Yes: Check if it has focus.
PsychAllocInWindowRecordArg(2, TRUE, &windowRecord);
if (!PsychIsOnscreenWindow(windowRecord)) {
PsychErrorExitMsg(PsychError_user, "Provided window handle isn't an onscreen window, as required.");
}
PsychCopyOutDoubleArg(4, kPsychArgOptional, (double) (GetUserFocusWindow() == windowRecord->targetSpecific.windowHandle) ? 1 : 0);
} else
{
// No. Just always return "has focus":
PsychCopyOutDoubleArg(4, kPsychArgOptional, (double) 1);
}
}
// Return optional valuator values: Unimplemented on OS/X. Just return an empty matrix.
// The buttonArray is just a dummy assignment without any meaning.
PsychCopyOutDoubleMatArg(5, kPsychArgOptional, (int) 1, (int) 0, (int) 1, buttonArray);
PsychCopyOutDoubleMatArg(6, kPsychArgOptional, (int) 1, (int) 0, (int) 1, buttonArray);
#endif
#if PSYCH_SYSTEM == PSYCH_WINDOWS
static unsigned char disabledKeys[256];
static unsigned char firsttime = 1;
int keysdown, i, priorityLevel;
unsigned char keyState[256];
double* buttonArray;
double numButtons, timestamp;
PsychNativeBooleanType* buttonStates;
POINT point;
HANDLE currentProcess;
DWORD oldPriority = NORMAL_PRIORITY_CLASS;
const DWORD realtime_class = REALTIME_PRIORITY_CLASS;
//.........这里部分代码省略.........
开发者ID:theOfficialJuan,项目名称:Psychtoolbox-3,代码行数:101,代码来源:SCREENGetMouseHelper.c
示例3: SCREENNull
PsychError SCREENNull(void)
{
const double defaultMatrix[] = {1.1, 1.2, 1.3, 1.4, 2.1, 2.2, 2.3, 2.4};
const double defaultM=2, defaultN=4;
double tempValue;
double *array;
int i, m,n, p, numInArgs, numOutArgs, numNamedOutArgs;
char *str;
PsychArgFormatType format;
const char defaultString[] = "I am the default string\n";
//all sub functions should have these two lines
PsychPushHelp(useString, synopsisString, seeAlsoString);
if(PsychIsGiveHelp()){PsychGiveHelp();return(PsychError_none);};
//demonstrate how we find the function and subfunction names
//printf("Psychtoolbox function: %s, subfunction %s\n", PsychGetModuleName(), PsychGetFunctionName() );
//copy all the input argument to their outputs if we have doubles, if not error.
numInArgs = PsychGetNumInputArgs();
numOutArgs = PsychGetNumOutputArgs();
numNamedOutArgs = PsychGetNumNamedOutputArgs();
PsychErrorExit(PsychCapNumOutputArgs(numInArgs));
/*
printf("number of input arguments: %d\n", numInArgs);
printf("number of output arguments: %d\n", numOutArgs);
printf("number of named output arguments: %d\n", numNamedOutArgs);
*/
//iterate over each of the supplied inputs. If the input is a two-dimensional array
//of doubles or a character array, then copy it to the output.
for(i=1;i<=numInArgs;i++){
format = PsychGetArgType(i);
switch(format){
case PsychArgType_double:
if(PsychGetArgM(i)==1 && PsychGetArgN(i)==1){
tempValue=i; //if 1x1 double then the default return value is the arg position.
PsychCopyInDoubleArg(i, FALSE, &tempValue);
PsychCopyOutDoubleArg(i, FALSE, tempValue);
}else{
PsychAllocInDoubleMatArg(i, FALSE, &m, &n, &p, &array);
PsychCopyOutDoubleMatArg(i, FALSE, m, n, p, array);
}
//.........这里部分代码省略.........
开发者ID:BackupTheBerlios,项目名称:osxptb-svn,代码行数:101,代码来源:SCREENNull.c
示例4: IOPORTRead
PsychError IOPORTRead(void)
{
static char useString[] = "[data, when, errmsg] = IOPort('Read', handle [, blocking=0] [, amount]);";
static char synopsisString[] =
"Read data from device, specified by 'handle'.\n"
"Returned 'data' will be a row vector of read data bytes. 'when' will be a receive "
"timestamp of when the data read was complete. 'errmsg' will be a human readable "
"char string with an error message if any error occured, otherwise an empty string. "
"The optional flag 'blocking' if set to 0 will ask the read function to not block, "
"but return immediately: The read function will return whatever amount of data is "
"currently available in the internal input queue, but at most 'amount' bytes if 'amount' "
"is specified. If no data is available, it will return an empty matrix. This is the default.\n"
"If 'blocking' is set to 1, you must specify the 'amount' of bytes to receive and the "
"function will wait until that exact amount of data is available, then return it."
"Even in blocking mode, the function will return if no data becomes available within "
"the time period specified by the configuration setting 'ReadTimeout' (see help for "
"'OpenSerialPort' for description). In some situations, the read function may return "
"less data than requested, e.g., in specific error cases, where a read could only "
"get partially satisfied.";
static char seeAlsoString[] = "'Write', 'OpenSerialPort', 'ConfigureSerialPort'";
char errmsg[1024];
int handle, blocking, nread, amount, i;
psych_uint8* readbuffer;
double* outbuffer;
double timestamp;
errmsg[0] = 0;
// Setup online help:
PsychPushHelp(useString, synopsisString, seeAlsoString);
if(PsychIsGiveHelp()) {PsychGiveHelp(); return(PsychError_none); };
PsychErrorExit(PsychCapNumInputArgs(3)); // The maximum number of inputs
PsychErrorExit(PsychRequireNumInputArgs(1)); // The required number of inputs
PsychErrorExit(PsychCapNumOutputArgs(3)); // The maximum number of outputs
// Get required port handle:
PsychCopyInIntegerArg(1, kPsychArgRequired, &handle);
// Get optional blocking flag: Defaults to 0 -- non-blocking.
blocking = 0;
PsychCopyInIntegerArg(2, kPsychArgOptional, &blocking);
// Get optional maximum or exact amount to read:
amount = INT_MAX;
if (!PsychCopyInIntegerArg(3, kPsychArgOptional, &amount)) {
// Not spec'd:
if (blocking > 0) PsychErrorExitMsg(PsychError_user, "When issuing a 'Read' in blocking mode, you must specify the exact 'amount' to read, but 'amount' was omitted!");
}
if (amount < 0) PsychErrorExitMsg(PsychError_user, "Invalid (negative) 'amount' of data to read!");
// Read data:
nread = PsychReadIOPort(handle, (void**) &readbuffer, amount, blocking, errmsg, ×tamp);
// Allocate outbuffer of proper size:
PsychAllocOutDoubleMatArg(1, kPsychArgOptional, 1, ((nread >=0) ? nread : 0), 1, &outbuffer);
// Copy to outbuffer: We copy our uint8 values to a double matrix. This is arguably a bit of a waste of
// memory and bandwidth, but it simplifies interfacing with Octave, old Matlab versions and possible
// future runtime environments a lot:
if (nread > 0) for (i=0; i<nread; i++) outbuffer[i] = readbuffer[i];
if (nread < 0 && verbosity > 0) printf("IOPort: Error: %s\n", errmsg);
// Return timestamp and errmsg, if any:
PsychCopyOutDoubleArg(2, kPsychArgOptional, timestamp);
PsychCopyOutCharArg(3, kPsychArgOptional, errmsg);
return(PsychError_none);
}
开发者ID:BackupTheBerlios,项目名称:osxptb-svn,代码行数:72,代码来源:IOPort.c
示例5: SCREENPreference
PsychError SCREENPreference(void)
{
PsychArgFormatType arg1Type;
char *preferenceName, *newFontName;
const char *tableCreator, *oldDefaultFontName;
Boolean preferenceNameArgumentValid, booleanInput, ignoreCase, tempFlag, textAlphaBlendingFlag, suppressAllWarningsFlag;
int numInputArgs, i, newFontStyleNumber, newFontSize, tempInt;
double returnDoubleValue, inputDoubleValue;
//all sub functions should have these two lines
PsychPushHelp(useString, synopsisString,seeAlsoString);
if(PsychIsGiveHelp()){PsychGiveHelp();return(PsychError_none);};
//check for superfluous or missing arguments
PsychErrorExit(PsychCapNumInputArgs(3));
PsychErrorExit(PsychRequireNumInputArgs(1));
PsychErrorExit(PsychCapNumOutputArgs(1));
numInputArgs=PsychGetNumInputArgs();
arg1Type=PsychGetArgType(1);
preferenceNameArgumentValid=FALSE;
//Cases which require both a window pointer or screen number and preference name. Argument 1 is the wposn and argument 2 is the preference name.
if( numInputArgs >= 2 && (PsychIsScreenNumberArg(1) || PsychIsScreenNumberArg(1)) && PsychGetArgType(2)==PsychArgType_char ){
PsychAllocInCharArg(2, kPsychArgRequired, &preferenceName);
//preferences which require window pointer or screen number argument which we DO NOT support
for(i=0;i<kPsychNumUnsupportedMacVideoPreferences;i++){
if(PsychMatch(preferenceName, unsupportedMacVideoPreferenceNames[i]))
PsychErrorExit(PsychError_unsupportedOS9Preference);
}
//insert here conditionals to act on prefernces which accept a window pointer or screen number argument which we DO support.
PsychErrorExit(PsychError_unrecognizedPreferenceName);
}
//Cases which do not require a wposn. Argument 1 is the preference name. if present Argument 2 is the new value
if(arg1Type==PsychArgType_char){
PsychAllocInCharArg(1, kPsychArgRequired, &preferenceName);
//Preferernces which we do not support and which do not require a wposn
for(i=0;i<kPsychNumUnsupportedMacNonVideoPreferences;i++){
if(PsychMatch(preferenceName, unsupportedMacNonVideoPreferenceNames[i]))
PsychErrorExit(PsychError_unsupportedOS9Preference);
}
//Preferences which we do support
if(PsychMatch(preferenceName, "IgnoreCase")){
ignoreCase=!PsychIsPsychMatchCaseSensitive();
PsychCopyOutFlagArg(1, kPsychArgOptional, ignoreCase);
if(numInputArgs==2){
PsychCopyInFlagArg(2, kPsychArgRequired, &booleanInput);
PsychSetPsychMatchCaseSenstive(!booleanInput);
}
preferenceNameArgumentValid=TRUE;
}else
if(PsychMatch(preferenceName, "Tick0Secs")){
if(PsychCopyInDoubleArg(2, kPsychArgOptional, &inputDoubleValue) && inputDoubleValue==PsychGetNanValue())
PsychEstimateGetSecsValueAtTickCountZero();
returnDoubleValue=PsychGetEstimatedSecsValueAtTickCountZero();
PsychCopyOutDoubleArg(1, kPsychArgOptional, returnDoubleValue);
preferenceNameArgumentValid=TRUE;
}else
if(PsychMatch(preferenceName, "PsychTableVersion")){
if(numInputArgs==2)
PsychErrorExit(PsychError_extraInputArg);
PsychCopyOutDoubleArg(1, kPsychArgOptional, (double)PsychPrefStateGet_PsychTableVersion());
preferenceNameArgumentValid=TRUE;
}else
if(PsychMatch(preferenceName, "PsychTableCreator")){
if(numInputArgs==2)
PsychErrorExit(PsychError_extraInputArg);
tableCreator=PsychPrefStateGet_PsychTableCreator();
PsychCopyOutCharArg(1, kPsychArgOptional, tableCreator);
preferenceNameArgumentValid=TRUE;
}else
if(PsychMatch(preferenceName, "Process")){
if(numInputArgs==2)
PsychErrorExit(PsychError_extraInputArg);
PsychCopyOutDoubleArg(1, kPsychArgOptional, (double)getpid());
preferenceNameArgumentValid=TRUE;
}else
if(PsychMatch(preferenceName, "DefaultFontName")){
PsychPrefStateGet_DefaultFontName(&oldDefaultFontName);
PsychCopyOutCharArg(1, kPsychArgOptional, oldDefaultFontName);
if(numInputArgs==2){
PsychAllocInCharArg(2, kPsychArgRequired, &newFontName);
PsychPrefStateSet_DefaultFontName(newFontName);
}
preferenceNameArgumentValid=TRUE;
}else
if(PsychMatch(preferenceName, "DefaultFontStyle")){
PsychCopyOutDoubleArg(1, kPsychArgOptional, PsychPrefStateGet_DefaultTextStyle());
if(numInputArgs==2){
PsychCopyInIntegerArg(2, kPsychArgRequired, &newFontStyleNumber);
PsychPrefStateSet_DefaultTextStyle(newFontStyleNumber);
}
preferenceNameArgumentValid=TRUE;
}else
if(PsychMatch(preferenceName, "DefaultTextYPositionIsBaseline")){
//.........这里部分代码省略.........
开发者ID:BackupTheBerlios,项目名称:osxptb-svn,代码行数:101,代码来源:SCREENPreference.c
示例6: SCREENComputer
// M$-Windows implementation of Screen('Computer'): This is very rudimentary for now.
// We only report the operating sytem type (="Windows") and MAC-Address, but don't report any more useful
// information. MAC query does not work yet - We do not have the neccessary libraries to compile the code :(
PsychError SCREENComputer(void)
{
// Info struct for queries to OS:
OSVERSIONINFO osvi;
char versionString[256];
// const char *majorStructFieldNames[]={"macintosh", "windows", "osx" ,"linux", "kern", "hw", "processUserLongName",
// "processUserShortName", "consoleUserName", "machineName", "localHostName", "location", "MACAddress", "system" };
const char *majorStructFieldNames[]={"macintosh", "windows", "osx" ,"linux", "system", "MACAddress"};
const char *kernStructFieldNames[]={"ostype", "osrelease", "osrevision", "version","hostname"};
const char *hwStructFieldNames[]={"machine", "model", "ncpu", "physmem", "usermem", "busfreq", "cpufreq"};
int numMajorStructDimensions=1, numKernStructDimensions=1, numHwStructDimensions=1;
int numMajorStructFieldNames=5, numKernStructFieldNames=5, numHwStructFieldNames=7;
// char ethernetMACStr[20];
// unsigned char MACData[6];
// UUID uuid;
int i;
PsychGenericScriptType *kernStruct, *hwStruct, *majorStruct;
//all subfunctions should have these two lines
PsychPushHelp(useString, synopsisString, seeAlsoString);
if(PsychIsGiveHelp()){PsychGiveHelp();return(PsychError_none);};
PsychErrorExit(PsychCapNumOutputArgs(1));
PsychErrorExit(PsychCapNumInputArgs(0));
//fill the major struct
PsychAllocOutStructArray(1, FALSE, numMajorStructDimensions, numMajorStructFieldNames, majorStructFieldNames, &majorStruct);
PsychSetStructArrayDoubleElement("macintosh", 0, 0, majorStruct);
PsychSetStructArrayDoubleElement("windows", 0, 1, majorStruct);
PsychSetStructArrayDoubleElement("linux", 0, 0, majorStruct);
PsychSetStructArrayDoubleElement("osx", 0, 0, majorStruct);
// Query info about Windows version:
versionString[0]=0;
memset(&osvi, 0, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
// Convert into string with major.minor.buildnumber - Name of service packs (max 128 chars) etc.:
// Versions to products: 6.1 = Windows-7, 6.0 = Vista, 5.2 = Windows Server 2003, 5.1 = WindowsXP, 5.0 = Windows 2000, 4.x = NT
sprintf(versionString, "%i.%i.%i - %s", osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber, (char*) osvi.szCSDVersion);
PsychSetStructArrayStringElement("system", 0, versionString, majorStruct);
// Query hardware MAC address of primary ethernet interface: This is a unique id of the computer,
// good enough to disambiguate our statistics:
// sprintf(ethernetMACStr, "00:00:00:00:00:00");
// Ask OS to create UUID. Windows uses the MAC address of primary interface
// in bytes 2 to 7 to do this:
//UuidCreateSequential( &uuid ); // Ask OS to create UUID
//for (i=2; i<8; i++) MACData[i - 2] = uuid.Data4[i];
//sprintf(ethernetMACStr, "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
// MACData[0] & 0xff, MACData[1] & 0xff,
// MACData[2] & 0xff, MACData[3] & 0xff,
// MACData[4] & 0xff, MACData[5] & 0xff);
// PsychSetStructArrayStringElement("MACAddress", 0, ethernetMACStr, majorStruct);
return(PsychError_none);
}
开发者ID:BackupTheBerlios,项目名称:osxptb-svn,代码行数:66,代码来源:SCREENComputer.c
示例7: PsychModuleInit
PsychError PsychModuleInit(void)
{
// Initialize all Screen('Preference', ...); settings to startup defaults:
PrepareScreenPreferences();
// Register the project exit function
PsychErrorExitMsg(PsychRegisterExit(&ScreenExitFunction), "Failed to register the Screen exit function.");
// Register the project function which is called when the module
// is invoked with no arguments:
PsychErrorExitMsg(PsychRegister(NULL, &PsychDisplayScreenSynopsis), "Failed to register the Screen synopsis function.");
// Register the module name
PsychErrorExitMsg(PsychRegister("Screen", NULL), "Failed to register the Screen module name.");
// Register named subfunctions
// Enable for debugging purposes
PsychErrorExit(PsychRegister("Null", &SCREENNull));
PsychErrorExit(PsychRegister("Version", &MODULEVersion));
PsychErrorExit(PsychRegister("Computer", &SCREENComputer));
PsychErrorExit(PsychRegister("Screens", &SCREENScreens));
PsychErrorExit(PsychRegister("PixelSize",&SCREENPixelSize));
PsychErrorExit(PsychRegister("PixelSizes",&SCREENPixelSizes));
PsychErrorExit(PsychRegister("OpenWindow", &SCREENOpenWindow));
PsychErrorExit(PsychRegister("OpenOffscreenWindow", &SCREENOpenOffscreenWindow));
PsychErrorExit(PsychRegister("Close", &SCREENClose));
PsychErrorExit(PsychRegister("CloseAll", &SCREENCloseAll));
PsychErrorExit(PsychRegister("Flip", &SCREENFlip));
PsychErrorExit(PsychRegister("AsyncFlipBegin", &SCREENFlip));
PsychErrorExit(PsychRegister("AsyncFlipEnd", &SCREENFlip));
PsychErrorExit(PsychRegister("AsyncFlipCheckEnd", &SCREENFlip));
PsychErrorExit(PsychRegister("WaitUntilAsyncFlipCertain" , &SCREENWaitUntilAsyncFlipCertain));
PsychErrorExit(PsychRegister("FillRect", &SCREENFillRect));
PsychErrorExit(PsychRegister("GetImage", &SCREENGetImage));
PsychErrorExit(PsychRegister("PutImage", &SCREENPutImage));
PsychErrorExit(PsychRegister("HideCursorHelper", &SCREENHideCursorHelper));
PsychErrorExit(PsychRegister("ShowCursorHelper", &SCREENShowCursorHelper));
PsychErrorExit(PsychRegister("SetMouseHelper", &SCREENSetMouseHelper));
PsychErrorExit(PsychRegister("Rect", &SCREENRect));
PsychErrorExit(PsychRegister("WindowScreenNumber", &SCREENWindowScreenNumber));
PsychErrorExit(PsychRegister("Windows", &SCREENWindows));
PsychErrorExit(PsychRegister("WindowKind", &SCREENWindowKind));
PsychErrorExit(PsychRegister("IsOffscreen", &SCREENIsOffscreen));
PsychErrorExit(PsychRegister("ReadNormalizedGammaTable", &SCREENReadNormalizedGammaTable));
PsychErrorExit(PsychRegister("LoadNormalizedGammaTable", &SCREENLoadNormalizedGammaTable));
PsychErrorExit(PsychRegister("FrameRate", &SCREENNominalFramerate));
PsychErrorExit(PsychRegister("NominalFrameRate", &SCREENNominalFramerate));
PsychErrorExit(PsychRegister("glPoint", &SCREENglPoint));
PsychErrorExit(PsychRegister("gluDisk", &SCREENgluDisk));
PsychErrorExit(PsychRegister("FillOval", &SCREENFillOval));
PsychErrorExit(PsychRegister("FrameOval", &SCREENFrameOval));
PsychErrorExit(PsychRegister("TextModes", &SCREENTextModes));
PsychErrorExit(PsychRegister("TextMode", &SCREENTextMode));
PsychErrorExit(PsychRegister("TextSize", &SCREENTextSize));
PsychErrorExit(PsychRegister("TextStyle", &SCREENTextStyle));
PsychErrorExit(PsychRegister("TextFont", &SCREENTextFont));
PsychErrorExit(PsychRegister("TextBounds", &SCREENTextBounds));
PsychErrorExit(PsychRegister("DrawText", &SCREENDrawText));
PsychErrorExit(PsychRegister("TextColor", &SCREENTextColor));
PsychErrorExit(PsychRegister("Preference", &SCREENPreference));
PsychErrorExit(PsychRegister("MakeTexture", &SCREENMakeTexture));
PsychErrorExit(PsychRegister("DrawTexture", &SCREENDrawTexture));
PsychErrorExit(PsychRegister("FrameRect", &SCREENFrameRect));
PsychErrorExit(PsychRegister("DrawLine", &SCREENDrawLine));
PsychErrorExit(PsychRegister("FillPoly", &SCREENFillPoly));
PsychErrorExit(PsychRegister("FramePoly", &SCREENFramePoly));
PsychErrorExit(PsychRegister("GlobalRect", &SCREENGlobalRect));
PsychErrorExit(PsychRegister("DrawDots", &SCREENDrawDots));
PsychErrorExit(PsychRegister("GetTimeList", &SCREENGetTimeList));
PsychErrorExit(PsychRegister("ClearTimeList", &SCREENClearTimeList));
PsychErrorExit(PsychRegister("BlendFunction", &SCREENBlendFunction));
PsychErrorExit(PsychRegister("WindowSize", &SCREENWindowSize));
PsychErrorExit(PsychRegister("GetMouseHelper", &SCREENGetMouseHelper));
PsychErrorExit(PsychRegister("TextBackgroundColor", &SCREENTextBackgroundColor));
PsychErrorExit(PsychRegister("LineStipple", &SCREENLineStipple));
PsychErrorExit(PsychRegister("SelectStereoDrawBuffer", &SCREENSelectStereoDrawBuffer));
PsychErrorExit(PsychRegister("DrawingFinished", &SCREENDrawingFinished));
PsychErrorExit(PsychRegister("DrawLines", &SCREENDrawLines));
PsychErrorExit(PsychRegister("GetFlipInterval", &SCREENGetFlipInterval));
PsychErrorExit(PsychRegister("CloseMovie", &SCREENCloseMovie));
PsychErrorExit(PsychRegister("OpenMovie", &SCREENOpenMovie));
PsychErrorExit(PsychRegister("PlayMovie", &SCREENPlayMovie));
PsychErrorExit(PsychRegister("SetMovieTimeIndex", &SCREENSetMovieTimeIndex));
PsychErrorExit(PsychRegister("GetMovieTimeIndex", &SCREENGetMovieTimeIndex));
PsychErrorExit(PsychRegister("GetMovieImage", &SCREENGetMovieImage));
PsychErrorExit(PsychRegister("glPushMatrix", &SCREENglPushMatrix));
PsychErrorExit(PsychRegister("glPopMatrix", &SCREENglPopMatrix));
PsychErrorExit(PsychRegister("glLoadIdentity", &SCREENglLoadIdentity));
PsychErrorExit(PsychRegister("glTranslate", &SCREENglTranslate));
PsychErrorExit(PsychRegister("glScale", &SCREENglScale));
PsychErrorExit(PsychRegister("glRotate", &SCREENglRotate));
PsychErrorExit(PsychRegister("PreloadTextures", &SCREENPreloadTextures));
PsychErrorExit(PsychRegister("FillArc", &SCREENFillArc));
PsychErrorExit(PsychRegister("DrawArc", &SCREENDrawArc));
PsychErrorExit(PsychRegister("FrameArc", &SCREENFrameArc));
PsychErrorExit(PsychRegister("CopyWindow", &SCREENCopyWindow));
PsychErrorExit(PsychRegister("WaitBlanking", &SCREENWaitBlanking));
PsychErrorExit(PsychRegister("GetOpenGLTexture", &SCREENGetOpenGLTexture));
PsychErrorExit(PsychRegister("SetOpenGLTexture", &SCREENSetOpenGLTexture));
//.........这里部分代码省略.........
开发者ID:BackupTheBerlios,项目名称:osxptb-svn,代码行数:101,代码来源:RegisterProject.c
示例8: SCREENPutImage
PsychError SCREENPutImage(void)
{
PsychRectType windowRect,positionRect;
int ix, iy, numPlanes, bitsPerColor, matrixRedIndex, matrixGreenIndex, matrixBlueIndex, matrixAlphaIndex, matrixGrayIndex;
int inputM, inputN, inputP, positionRectWidth, positionRectHeight;
PsychWindowRecordType *windowRecord;
unsigned char *inputMatrixByte;
double *inputMatrixDouble;
GLuint *compactMat, matrixGrayValue, matrixRedValue, matrixGreenValue, matrixBlueValue, matrixAlphaValue, compactPixelValue;
PsychArgFormatType inputMatrixType;
GLfloat xZoom=1, yZoom=-1;
//all sub functions should have these two lines
PsychPushHelp(useString, synopsisString, seeAlsoString);
if(PsychIsGiveHelp()){PsychGiveHelp();return(PsychError_none);};
//cap the number of inputs
PsychErrorExit(PsychCapNumInputArgs(4)); //The maximum number of inputs
PsychErrorExit(PsychCapNumOutputArgs(0)); //The maximum number of outputs
//get the image matrix
inputMatrixType=PsychGetArgType(2);
switch(inputMatrixType){
case PsychArgType_none : case PsychArgType_default:
PsychErrorExitMsg(PsychError_user, "imageArray argument required");
break;
case PsychArgType_uint8 :
PsychAllocInUnsignedByteMatArg(2, TRUE, &inputM, &inputN, &inputP, &inputMatrixByte);
break;
case PsychArgType_double :
PsychAllocInDoubleMatArg(2, TRUE, &inputM, &inputN, &inputP, &inputMatrixDouble);
break;
default :
PsychErrorExitMsg(PsychError_user, "imageArray must be uint8 or double type");
break;
}
//get the window and get the rect and stuff
PsychAllocInWindowRecordArg(kPsychUseDefaultArgPosition, TRUE, &windowRecord);
numPlanes=PsychGetNumPlanesFromWindowRecord(windowRecord);
bitsPerColor=PsychGetColorSizeFromWindowRecord(windowRecord);
PsychGetRectFromWindowRecord(windowRect, windowRecord);
if(PsychCopyInRectArg(3, FALSE, positionRect)){
positionRectWidth=(int)PsychGetWidthFromRect(positionRect);
positionRectHeight=(int)PsychGetHeightFromRect(positionRect);
if(inputP != 1 && inputP != 3 && inputP != 4)
PsychErrorExitMsg(PsychError_user, "Third dimension of image matrix must be 1, 3, or 4");
if( positionRectWidth != inputN || positionRectHeight != inputM){
//calculate the zoom factor
xZoom=(GLfloat)positionRectWidth/(GLfloat)inputN;
yZoom=-((GLfloat)positionRectHeight/(GLfloat)inputM);
}
}else{
positionRect[kPsychLeft]=0;
positionRect[kPsychTop]=0;
positionRect[kPsychRight]=inputN;
positionRect[kPsychBottom]=inputM;
PsychCenterRect(positionRect, windowRect, positionRect);
//This should be centered
}
//put up the image
if(numPlanes==1){ //screen planes, not image matrix planes.
PsychErrorExitMsg(PsychError_unimplemented, "Put Image does not yet support indexed mode");
//remember to test here for inputP==3 because that would be wrong.
}else if(numPlanes==4){
compactMat=(GLuint *)mxMalloc(sizeof(GLuint) * inputN * inputM);
for(ix=0;ix<inputN;ix++){
for(iy=0;iy<inputM;iy++){
if(inputP==1){
matrixGrayIndex=PsychIndexElementFrom3DArray(inputM, inputN, 1, iy, ix, 0);
if(inputMatrixType==PsychArgType_uint8)
matrixGrayValue=(GLuint)inputMatrixByte[matrixGrayIndex];
else //inputMatrixType==PsychArgType_double
matrixGrayValue=(GLuint)inputMatrixDouble[matrixGrayIndex];
compactPixelValue=((matrixGrayValue<<8 | matrixGrayValue)<<8 | matrixGrayValue)<<8 | 255;
compactMat[iy*inputN+ix]=compactPixelValue;
}else if(inputP==3){
matrixRedIndex=PsychIndexElementFrom3DArray(inputM, inputN, 3, iy, ix, 0);
matrixGreenIndex=PsychIndexElementFrom3DArray(inputM, inputN, 3, iy, ix, 1);
matrixBlueIndex=PsychIndexElementFrom3DArray(inputM, inputN, 3, iy, ix, 2);
if(inputMatrixType==PsychArgType_uint8){
matrixRedValue=(GLuint)inputMatrixByte[matrixRedIndex];
matrixGreenValue=(GLuint)inputMatrixByte[matrixGreenIndex];
matrixBlueValue=(GLuint)inputMatrixByte[matrixBlueIndex];
matrixAlphaValue=(GLuint)255;
}else{
matrixRedValue=(GLuint)inputMatrixDouble[matrixRedIndex];
matrixGreenValue=(GLuint)inputMatrixDouble[matrixGreenIndex];
matrixBlueValue=(GLuint)inputMatrixDouble[matrixBlueIndex];
matrixAlphaValue=(GLuint)255;
}
compactPixelValue= ((matrixRedValue<<8 | matrixGreenValue )<<8 | matrixBlueValue)<<8 | matrixAlphaValue;
compactMat[iy*inputN+ix]=compactPixelValue;
}else if(inputP==4){
matrixRedIndex=PsychIndexElementFrom3DArray(inputM, inputN, 3, iy, ix, 0);
matrixGreenIndex=PsychIndexElementFrom3DArray(inputM, inputN, 3, iy, ix, 1);
matrixBlueIndex=PsychIndexElementFrom3DArray(inputM, inputN, 3, iy, ix, 2);
//.........这里部分代码省略.........
开发者ID:BackupTheBerlios,项目名称:osxptb-svn,代码行数:101,代码来源:SCREENPutImage.c
示例9: PsychModuleInit
PsychError PsychModuleInit(void)
{
//register the project exit function
PsychErrorExit(PsychRegisterExit(&PsychCVExit));
// Register the project function which is called when the module
// is invoked with no arguments:
PsychErrorExit(PsychRegister(NULL, &PSYCHCVDisplaySynopsis));
// Report the version
#if PSYCH_SYSTEM == PSYCH_OSX
PsychErrorExit(PsychRegister("Version", &MODULEVersion));
#endif
// Register the module name
PsychErrorExit(PsychRegister("PsychCV", NULL));
// Register synopsis and named subfunctions.
PsychErrorExit(PsychRegister("Verbosity", &PSYCHCVVerbosity));
#ifdef PSYCHCV_USE_OPENCV
PsychErrorExit(PsychRegister("OpenEyesInitialize", &PSYCHCVOpenEyesInitialize));
PsychErrorExit(PsychRegister("OpenEyesShutdown", &PSYCHCVOpenEyesShutdown));
PsychErrorExit(PsychRegister("OpenEyesParameters", &PSYCHCVOpenEyesParameters));
PsychErrorExit(PsychRegister("OpenEyesTrackEyePosition", &PSYCHCVOpenEyesTrackEyePosition));
#endif
PsychErrorExit(PsychRegister("CopyMatrixToMemBuffer", &PSYCHCVCopyMatrixToMemBuffer));
PsychErrorExit(PsychRegister("ARInitialize", &PSYCHCVARInitialize));
PsychErrorExit(PsychRegister("ARShutdown", &PSYCHCVARShutdown));
PsychErrorExit(PsychRegister("ARLoadMarker", &PSYCHCVARLoadMarker));
PsychErrorExit(PsychRegister("ARDetectMarkers", &PSYCHCVARDetectMarkers));
PsychErrorExit(PsychRegister("ARRenderImage", &PSYCHCVARRenderImage));
PsychErrorExit(PsychRegister("ARTrackerSettings", &PSYCHCVARTrackerSettings));
PsychErrorExit(PsychRegister("ARRenderSettings", &PSYCHCVARRenderSettings));
// Setup synopsis help strings:
InitializeSynopsis(); //Scripting glue won't require this if the function takes no arguments.
// Setup module author:
PsychSetModuleAuthorByInitials("mk");
// Call wait-routine for 0.1 secs: This to initialize the time glue on MS-Windows,
// so the first call to a timing function won't delay:
PsychWaitIntervalSeconds(0.1);
// Perform all remaining initialization:
PsychCVInitialize();
// Startup finished.
return(PsychError_none);
}
开发者ID:BackupTheBerlios,项目名称:osxptb-svn,代码行数:52,代码来源:RegisterProject.c
示例10: SCREENShowCursorHelper
PsychError SCREENShowCursorHelper(void)
{
int screenNumber, cursorid, mouseIdx;
#if PSYCH_SYSTEM == PSYCH_LINUX
Cursor mycursor;
#endif
//all subfunctions should have these two lines.
PsychPushHelp(useString, synopsisString, seeAlsoString);
if(PsychIsGiveHelp()){PsychGiveHelp();return(PsychError_none);};
PsychErrorExit(PsychCapNumInputArgs(3)); //The maximum number of inputs
PsychErrorExit(PsychCapNumOutputArgs(0)); //The maximum number of outputs
PsychCopyInScreenNumberArg(1, TRUE, &screenNumber);
mouseIdx = -1;
PsychCopyInIntegerArg(3, FALSE, &mouseIdx);
PsychShowCursor(screenNumber, mouseIdx);
// Copy in optional cursor shape id argument: The default of -1 means to
// not change cursor appearance. Any other positive value changes to an
// OS dependent shape (== the mapping of numbers to shapes is OS dependent).
cursorid = -1;
PsychCopyInIntegerArg(2, FALSE, &cursorid);
// Cursor change request?
if (cursorid!=-1) {
// Yes.
#if PSYCH_SYSTEM == PSYCH_OSX
// OS/X:
PsychCocoaSetThemeCursor(cursorid);
#endif
#if PSYCH_SYSTEM == PSYCH_LINUX
// GNU/Linux with X11 windowing system:
// Map screenNumber to X11 display handle and screenid:
CGDirectDisplayID dpy;
PsychGetCGDisplayIDFromScreenNumber(&dpy, screenNumber);
// Create cursor spec from passed cursorid:
mycursor = XCreateFontCursor(dpy, (unsigned int) cursorid);
if (mouseIdx < 0) {
// Set cursor for our window:
PsychOSDefineX11Cursor(screenNumber, -1, mycursor);
} else {
// XInput cursor: Master pointers only.
int nDevices;
XIDeviceInfo* indevs = PsychGetInputDevicesForScreen(screenNumber, &nDevices);
// Sanity check:
if (NULL == indevs) PsychErrorExitMsg(PsychError_user, "Sorry, your system does not support individual mouse pointers.");
if (mouseIdx >= nDevices) PsychErrorExitMsg(PsychError_user, "Invalid 'mouseIndex' provided. No such cursor pointer.");
if (indevs[mouseIdx].use != XIMasterPointer) PsychErrorExitMsg(PsychError_user, "Invalid 'mouseIndex' provided. No such master cursor pointer.");
PsychOSDefineX11Cursor(screenNumber, indevs[mouseIdx].deviceid, mycursor);
}
XFlush(dpy);
// Done (hopefully).
#endif
#if PSYCH_SYSTEM == PSYCH_WINDOWS
// Microsoft Windows:
LPCTSTR lpCursorName;
#ifndef IDC_HAND
#define IDC_HAND MAKEINTRESOURCE(32649)
#endif
// Map provided cursor id to a Windows system id for such a cursor:
switch(cursorid) {
case 0:
// Standard arrow cursor:
lpCursorName = IDC_ARROW;
break;
case 1:
// haircross cursor:
lpCursorName = IDC_CROSS;
break;
case 2:
// hand cursor:
lpCursorName = IDC_HAND;
break;
case 3:
// Arrows in all 4 directions cursor:
lpCursorName = IDC_SIZEALL;
break;
case 4:
// north-south cursor:
lpCursorName = IDC_SIZENS;
break;
case 5:
// east-west cursor:
//.........这里部分代码省略.........
开发者ID:cchlking,项目名称:Psychtoolbox-3,代码行数:101,代码来源:SCREENShowCursorHelper.c
示例11: SCREENMakeTexture
PsychError SCREENMakeTexture(void)
{
int ix;
PsychWindowRecordType *textureRecord;
PsychWindowRecordType *windowRecord;
PsychRectType rect;
Boolean isImageMatrixBytes, isImageMatrixDoubles;
int numMatrixPlanes, xSize, ySize, iters;
unsigned char *byteMatrix;
double *doubleMatrix;
GLuint *texturePointer;
GLubyte *texturePointer_b;
GLfloat *texturePointer_f;
double *rp, *gp, *bp, *ap;
GLubyte *rpb, *gpb, *bpb, *apb;
int usepoweroftwo, usefloatformat, assume_texorientation, textureShader;
double optimized_orientation;
Boolean bigendian;
// Detect endianity (byte-order) of machine:
ix=255;
rpb=(GLubyte*) &ix;
bigendian = ( *rpb == 255 ) ? FALSE : TRUE;
ix = 0; rpb = NULL;
if(PsychPrefStateGet_DebugMakeTexture()) //MARK #1
StoreNowTime();
//all subfunctions should have these two lines.
PsychPushHelp(useString, synopsisString, seeAlsoString);
if(PsychIsGiveHelp()){PsychGiveHelp();return(PsychError_none);};
//Get the window structure for the onscreen window. It holds the onscreein GL context which we will need in the
//final step when we copy the texture from system RAM onto the screen.
PsychErrorExit(PsychCapNumInputArgs(7));
PsychErrorExit(PsychRequireNumInputArgs(2));
PsychErrorExit(PsychCapNumOutputArgs(1));
//get the window record from the window record argument and get info from the window record
PsychAllocInWindowRecordArg(kPsychUseDefaultArgPosition, TRUE, &windowRecord);
if((windowRecord->windowType!=kPsychDoubleBufferOnscreen) && (windowRecord->windowType!=kPsychSingleBufferOnscreen))
PsychErrorExitMsg(PsychError_user, "MakeTexture called on something else than a onscreen window");
// Get optional texture orientation flag:
assume_texorientation = 0;
PsychCopyInIntegerArg(6, FALSE, &assume_texorientation);
// Get optional texture shader handle:
textureShader = 0;
PsychCopyInIntegerArg(7, FALSE, &textureShader);
//get the argument and sanity check it.
isImageMatrixBytes=PsychAllocInUnsignedByteMatArg(2, kPsychArgAnything, &ySize, &xSize, &numMatrixPlanes, &byteMatrix);
isImageMatrixDoubles=PsychAllocInDoubleMatArg(2, kPsychArgAnything, &ySize, &xSize, &numMatrixPlanes, &doubleMatrix);
if(numMatrixPlanes > 4)
PsychErrorExitMsg(PsychError_inputMatrixIllegalDimensionSize, "Specified image matrix exceeds maximum depth of 4 layers");
if(ySize<1 || xSize <1)
PsychErrorExitMsg(PsychError_inputMatrixIllegalDimensionSize, "Specified image matrix must be at least 1 x 1 pixels in size");
if(! (isImageMatrixBytes || isImageMatrixDoubles))
PsychErrorExitMsg(PsychError_user, "Illegal argument type"); //not likely.
// Is this a special image matrix which is already pre-transposed to fit our optimal format?
if (assume_texorientation == 2) {
// Yes. Swap xSize and ySize to take this into account:
ix = xSize;
xSize = ySize;
ySize = ix;
ix = 0;
}
// Build defining rect for this texture:
PsychMakeRect(rect, 0, 0, xSize, ySize);
// Copy in texture preferred draw orientation hint. We default to zero degrees, if
// not provided.
// This parameter is not yet used. It is silently ignorerd for now...
optimized_orientation = 0;
PsychCopyInDoubleArg(3, FALSE, &optimized_orientation);
// Copy in special creation mode flag: It defaults to zero. If set to 1 then we
// always create a power-of-two GL_TEXTURE_2D texture. This is useful if one wants
// to create and use drifting gratings with no effort - texture wrapping is only available
// for GL_TEXTURE_2D, not for non-pot types. It is also useful if the texture is to be
// exported to external OpenGL code to simplify tex coords assignments.
usepoweroftwo=0;
PsychCopyInIntegerArg(4, FALSE, &usepoweroftwo);
// Check if size constraints are fullfilled for power-of-two mode:
if (usepoweroftwo & 1) {
for(ix = 1; ix < xSize; ix*=2);
if (ix!=xSize) {
PsychErrorExitMsg(PsychError_inputMatrixIllegalDimensionSize, "Power-of-two texture reque
|
请发表评论