usage: mglOpen(whichScreen, <screenWidth>, <screenHeight>, <frameRate>, <bitDepth>)
purpose: Opens an openGL window
argument | value |
---|---|
whichScreen | 0=Window, 1=primary screen, 2=secondary screen, etc |
<screenWidth> | [width] in pixels |
<screenHeight> | [height] in pixels |
<frameRate> | [frameRate] in hertz |
<bitDepth> | [bitDepth] this is usually 32 bits |
Open last monitor in list with current window settings
mglOpen
Open with resolution 800×600 60Hz 32bit fullscreen
mglOpen(1,800,600,60,32);
Open in a window
mglOpen(0);
Note that mglOpen hides the mouse cursor as a default. If you want to show the mouse cursor, you should call mglDisplayCursor after opening the screen.
purpose: swap front and back buffer (waits for one frame tick)
usage: mglFlush
N.B. mglFlush has to be called after each operation that involves drawing or erasing from the currently open window
purpose: close OpenGL screen
usage: mglClose
usage: mglSwitchDisplay(<displayID>)
purpose: If you are using multiple monitors to display stimuli (like for a dichoptic presentation), you can open up multiple displays using this function.
argument | value |
---|---|
<displayID> | which display to switch to |
You can use this to open up two separate screens and control them independently. For example, say you have two monitors 1 and 2. You open the first in the usual way:
mglOpen(1)
Then you switch monitors so that you can open up the other one
mglSwitchDisplay mglOpen(2)
Now if you want draw to the first display, you can do
mglSwitchDisplay(1) mglClearScreen(0.5); mglFlush;
Similarly, to draw to the second display
mglSwitchDisplay(2); mglClearScreen(1); mglFlush;
You can check the status of all open displays with:
mglSwitchDisplay(-2);
If you want to close all displays at once, you can do:
mglSwitchDisplay(-1);
usage: mglMoveWindow(leftPos,topPos)
purpose: Moves a window created by mglOpen(0)
argument | value |
---|---|
leftPos | Left position of where the window will be moved to |
topPos | Top position of where the window will be moved to |
mglOpen(0); mglMoveWindow(100,100);
usage: [displayInfo computerInfo] = mglDescribeDisplays()
purpose: Gets information about your displays (as an array of structs with values for each monitor). As well as a single struct with info about your computer.
usage: mglFrameGrab(<frameRect>)
purpose: Does a frame grab of the current mgl screen and returns it as a matrix of dimensions widthxheightx3
argument | value |
---|---|
frameRect | Optional argument that is a 1×4 array specifying a rectangular part of the frame to grab in the format [x y width height] |
mglOpen(); mglScreenCoordinates; mglClearScreen([0 0 0]); global MGL; mglPoints2(MGL.screenWidth*rand(5000,1),MGL.screenHeight*rand(5000,1)); mglPolygon([0 0 MGL.screenWidth MGL.screenWidth],[MGL.screenHeight/3 MGL.screenHeight*2/3 MGL.screenHeight*2/3 MGL.screenHeight/3],0); mglTextSet('Helvetica',32,[1 1 1]); mglTextDraw('Frame Grab',[MGL.screenWidth/2 MGL.screenHeight/2]); frame = mglFrameGrab; mglFlush imagesc(mean(frame,3)');colormap('gray')
purpose: Sets view transformation to correspond to visual angles (in degrees) given size and distance of display. Display must be open and have valid width and height (defined in MGL variable)
usage: mglVisualAngleCoordinates(physicalDistance,physicalSize);
argument | value |
---|---|
physicalDistance | [distance] in cm |
physicalSize | [width height] in cm |
mglOpen mglVisualAngleCoordinates(57,[16 12]);
purpose: Set coordinate frame so that it is in pixels with 0,0 in the top left hand corrner
usage: mglScreenCoordinates()
purpose: applies view transformations
usage: mglTransform(whichMatrix, whichTransform, [whichParameters])
argument | value |
---|---|
whichMatrix | 'GL_MODELVIEW', 'GL_PROJECTION', or 'GL_TEXTURE' |
whichTransform | 'glRotate', 'glTranslate', 'glScale','glMultMatrix', 'glFrustum', 'glOrtho','glLoadMatrix', 'glLoadIdentity', 'glPushMatrix','glPopMatrix', 'glDepthRange', or 'glViewport' |
whichParameters | function-specific; see OpenGL documentation |
You can also specifiy one of GL_MODELVIEW, GL_PROJECTION, or GL_TEXTURE and a return variable current matrix values. If two outputs are specified, the result of the computation will be returned.
This function is usually not called directly, but called by mglVisualAngleCoordinates or mglScreenCoordinates to set the transforms
purpose: flips coordinate frame horizontally, useful for when the display is viewed through a mirror
usage: mglHFlip()
mglOpen mglVisualAngleCoordinates(57,[16 12]); mglHFlip mglTextSet('Helvetica',32,1,0,0,0,0,0,0,0); mglTextDraw('Mirror reversed',[0 0]); mglFlush;
purpose: flips coordinate frame vertically
usage: mglVFlip
mglOpen mglVisualAngleCoordinates(57,[16 12]); mglVFlip mglTextSet('Helvetica',32,[1 1 1],0,0,0,0,0,0,0); mglTextDraw('Vertically flipped',[0 0]); mglFlush;
purpose: Create a texture for display on the screen with mglBltTexture image can either be grayscale nxm, color nxmx3 or color+alpha nxmx4
usage: texture = mglCreateTexture(image,axis)
argument | value |
---|---|
image | nxm matrix of grayscale values from 0 to 255, or nxmx3 matrix of RGB values or nxmx4 of RGBA values |
axis | 'xy' rows are x and columns are y dimension (default–matlab oriented matrix, i.e. will give you the same results as using imagesc), 'yx' rows are y and columns are x dimension |
OUTPUT: texture | a texture structure that can be drawn to the screen using mglBltTexture |
mglOpen; mglClearScreen mglScreenCoordinates texture = mglCreateTexture(round(rand(100,100)*255)); mglBltTexture(texture,[0 0]); mglFlush;
purpose: Draw a texture to the screen in desired position.
usage: mglBltTexture(texture,position,<hAlignment>,<vAlignment>,<rotation>)
argument | value |
---|---|
texture | A texture structure created by mglCreateTexture or mglText. |
position | Either a 2-vector [xpos ypos] or 4-vector [xpos ypos width height]. units are degrees. |
hAlignment | -1 = left, 0 = center, 1 = right (defaults to center) |
vAlignment | -1 = top, 0 = center, 1 = bottom (defaults to center) |
rotation | rotation in degrees, defaults to 0 |
To display several textures at once, texture can be an array of n textures, position is nx2, or nx4 and hAlignment, vAlignment and rotation are either a single value or an array of n.
multiple textures:
mglOpen; mglVisualAngleCoordinates(57,[16 12]); image = rand(200,200)*255; imageTex = mglCreateTexture(image); mglBltTexture([imageTex imageTex],[-3 0;3 0],0,0,[-15 15]); mglFlush;
single textures
mglOpen; mglVisualAngleCoordinates(57,[16 12]); image = rand(200,200)*255; imageTex = mglCreateTexture(image); mglBltTexture(imageTex,[0 0]); mglFlush;
purpose: Deletes a texture. This will free up memory for textures that will not be drawn again. Note that when you call mglClose texture memory is freed up. You only need to call this if you are running out of memory and have textures that you do not need to use anymore.
usage: mglDeleteTexture(tex)
argument | value |
---|---|
tex | The texture created by mglCreateTexture that you want to delete |
mglOpen; mglClearScreen mglScreenCoordinates texture = mglCreateTexture(round(rand(100,100)*255)); mglBltTexture(texture,[0 0]); mglFlush; mglDeleteTexture(texture);
purpose: Set text properties for mglText
usage: mglTextSet(fontName,<fontSize>,<fontColor>,<fontVFlip>,<fontHFlip>,<fontRotation>,<fontBold>,<fontItalic>,<fontUnderline>,<fontStrikeThrough>)
argument | value |
---|---|
fontName | 'fontName' (defaults to 'Times Roman') |
fontSize | font point size (defaults to 36) |
fontColor | [r g b] where r, g and b are values between 0 and 1 (defaults to [1 1 1]) |
fontVFlip | 0 = no vertical flip, 1 = vertical flip (defaults to 0) |
fontHFlip | 0 = no horizontal flip, 1 = horizontal flip (defaults to 0) |
fontRotation | rotation in degrees (defaults to 0) |
fontBold | 0 for normal, 1 for bold (defaults to 0) |
fontItalic | 0 for normal, 1 for italic (defaults to 0) |
fontUnderline | 0 for normal, 1 for underline (defaults to 0) |
fontStrikethrough | 0 for normal, 1 for strikethrough (defaults to 0) |
mglOpen; mglVisualAngleCoordinates(57,[16 12]); mglTextSet('Helvetica',32,[0 0.5 1 1],0,0,0,0,0,0,0); mglTextDraw('Hello There',[0 0]); mglFlush;
purpose: Creates a texture from a string.
usage: tex = mglText('string')
argument | value |
---|---|
string | The string you want to draw |
mglOpen; mglVisualAngleCoordinates(57,[16 12]); mglTextSet('Helvetica',32,[0 0.5 1 1],0,0,0,0,0,0,0); thisText = mglText('hello') mglBltTexture(thisText,[0 0],'left','top'); mglFlush;
Normally you will only set one output argument which is a texture usable by mglBltTexture. But if you have two output arguments
[tex texMatrix] = mglText('hello');
texMatrix will contain a 2D matlab array that has a rendering of the text (i.e. it will have values from 0-255 that represent the string). You can modify this matrix as you want and then use mglCreateTexture to create it into a texture that can be displayed by mglBltTexture
purpose: wrapper around mglText and mglBltTexture to draw some text on the screen. If you need to draw text more quickly, you will have to pre-make the text textures with mglText and then use mglBltTexture when you want it. Otherwise, for non time-critical things this functions should be used.
usage: mglTextDraw(str,pos,<hAlignment>,<vAlignment>)
argument | value |
---|---|
str | desired string |
pos | [x y] position on screen |
hAlignment | -1 = left, 0 = center, 1 = right (defaults to center) |
vAlignment | -1 = top, 0 = center, 1 = bottom (defaults to center) |
mglOpen; mglVisualAngleCoordinates(57,[16 12]); mglTextSet('Helvetica',32,[0 0.5 1 1],0,0,0,0,0,0,0); mglTextDraw('Hello There',[0 0]); mglFlush;
purpose: Draws a stroked fixed-width character or string on MGL display. Default width is 1, default height 1.8 (in current screen coordinates)
usage: [x,y]=mglStrokeText( string, x, y, scalex, scaley, linewidth, color, rotation );
argument | value |
---|---|
string | text string. Unsupported characters are printed as # |
x,y | center coordinates of first character (current screen coordinates) |
scalex | scale factor in x dimension (relative to character) (current screen coordinates). Note that text can be mirrored by setting this factor to a negative value. |
scaley | scale factor in y dimension (relative to character) (current screen coordinates). Optional, defaults to scalex. |
linewidth | width of line used to draw text. Default 1. |
color | text color. Default [1 1 1] |
rotation | in radians. Default 0. |
OUTPUT x,y | position after last letter (for subsequent calls) [optional] |
mglOpen; mglVisualAngleCoordinates(57,[16 12]); mglStrokeText('Hello',0,0); mglFlush;
purpose: Set the gamma table
usage: There are a number of ways of calling this function explained below.
Setting a redMin, redMax, redGamma, greenMin, etc.
mglSetGammaTable(0,1,0.8,0,1,0.9,0,1,0.75);
or with a vector of length 9:
mglSetGammaTable([0 1 0.8 0 1 0.9 0 1 0.75]);
or set with a single table for all there colors. Note that the table values go from 0 to 1 (i.e. 0 is the darkest value and 1 is the brightest value). If you have a 10 bit gamma table (most cards do–see section on monitor calibration for a list), then the intermediate values will be interpreted with 10 bits of resolution.
gammaTable = ((0:1/255:1).^0.8)'; mglSetGammaTable(gammaTable);
or set all three colors with differnet tables
redGammaTable = (0:1/255:1).^0.8; greenGammaTable = (0:1/255:1).^0.9; blueGammaTable = (0:1/255:1).^0.75; mglSetGammaTable(redGammaTable,greenGammaTable,blueGammaTable);
can also be called with an nx3 table
gammaTable(:,1) = (0:1/255:1).^0.8; gammaTable(:,2) = (0:1/255:1).^0.9; gammaTable(:,3) = (0:1/255:1).^0.75; mglSetGammaTable(gammaTable);
can also be called with the structure returned by mglGetGammaTable
mglSetGammaTable(mglGetGammaTable);
Note that the gamma table will be restored to the original after mglClose.
Timing. The setting of the gamma table is done by the OS in a way that seems to be asynchronous with mglFlush. For instance, the following code gives unexpected results:
mglOpen(1); mglClearScreen(1); % set back buffer to white mglWaitSecs(2);
mglSetGammaTable(zeros(1,256)); % now set the gamma table to all black, this should insure that nothing will be displayed mglFlush; % now the flush will bring the value 255, set by the mglClearScreen above, to the front buffer, but because the gamma table is set to black, nothing should be displayed
mglWaitSecs(2); mglClose;
This should keep the screen black, but on my machine, the screen temporarily flashes white. Presumably this is because the mglSetGammaTable happens after the mglFlush. It is recommended that you change the gamma while there is nothing displayed on the screen and wait for at least one screen refresh before assuming that the gamma table has actually changed.
purpose: returns what the gamma table is set to usage: table = mglGetGammaTable()
mglOpen; gammaTable = mglGetGammaTable
purpose: sets the background color
usage: mglClearScreen(<color>)
argument | value |
---|---|
color | color to set background to, can be a grayscale value or an [r g b] value |
set to the level of gray (0-1)
mglClearScreen(gray)
set to the given [r g b]
mglClearScreen([r g b])
full example
mglOpen; mglClearScreen([0.7 0.2 0.5]); mglFlush();
purpose: plot 2D points on an OpenGL screen opened with mglOpen
usage: mglPoints2(x,y,size,color)
argument | value |
---|---|
x,y | position of dots on screen |
size | size of dots (in pixels) |
color | color of dots |
mglOpen; mglVisualAngleCoordinates(57,[16 12]); mglPoints2(16*rand(500,1)-8,12*rand(500,1)-6,2,1); mglFlush
purpose: plot 2D points on an OpenGL screen opened with mglOpen
usage: mglPoints2(x,y,z,size,color)
argument | value |
---|---|
x,y,z | position of dots on screen |
size | size of dots (in pixels) |
color | color of dots |
mglOpen; mglVisualAngleCoordinates(57,[16 12]); mglPoints3(16*rand(500,1)-8,12*rand(500,1)-6,zeros(500,1),2,1); mglFlush
purpose: mex function to plot lines on an OpenGL screen opened with glopen
usage: mglLines(x0, y0, x1, y1,size,color,<bgcolor>)
argument | value |
---|---|
x0,y0 | initial position of line |
x0,y0 | end position of line |
size | size of line (in pixels) |
color | color of line |
bgcolor | background color of line |
mglOpen mglVisualAngleCoordinates(57,[16 12]); mglLines2(-4, -4, 4, 4, 2, [1 0.6 1]); mglFlush
purpose: draw filled oval(s) centered at x,y with size [xsize ysize] and color [rgb]. the function is vectorized, so if you provide many x/y coordinates (identical) ovals will be plotted at all those locations.
usage: mglFillOval(x,y, size, color)
argument | value |
---|---|
x,y | center position of oval |
size | [width height] of oval |
color | color of oval |
mglOpen; mglVisualAngleCoordinates(57,[16 12]); x = [-1 -4 -3 0 3 4 1]; y = [-1 -4 -3 0 3 4 1]; sz = [1 1]; mglFillOval(x, y, sz, [1 0 0]); mglFlush();
purpose: draw filled rectangles(s) centered at x,y with size [xsize ysize] and color [rgb]. the function is vectorized, so if you provide many x/y coordinates (identical) ovals will be plotted at all those locations.
usage: [ ] = mglFillRect(x,y, size, color)
argument | value |
---|---|
x,y | center position of rectangle |
size | [width height] of rectangle |
color | color of rectangle |
mglOpen; mglVisualAngleCoordinates(57,[16 12]); x = [-1 -4 -3 0 3 4 1]; y = [-1 -4 -3 0 3 4 1]; sz = [1 1]; mglFillRect(x, y, sz, [1 1 0]); mglFlush();
purpose: draws a fixation cross with no arguments, draws a fixation cross at origin (default width 0.2 with linewidth 1 in white at [0,0])
usage: mglFixationCross([width], [linewidth], [color], [origin]);
alternate usage: mglFixationCross( params )
argument | value |
---|---|
params | [width linewidth r g b x y] |
width | width in degrees of fixation cross |
linewidth | width in pixels on line |
color | color of fixation cross |
origin | center position of fixation (defaults to [0 0]) |
mglOpen; mglVisualAngleCoordinates(57,[16 12]); mglFixationCross; mglFlush;
purpose: for annuli and rings, e.g. for retinotopic stimuli. The function is vectorized, such that multiple annuli can be rendered in one call. In this case, x,y, isize, and osize need to have the same number of elements. Color is also vectorized.
usage: [ ] = mglGluAnnulus( x, y, isize, osize, color, [nslices], [nloops] )
argument | value |
---|---|
x,y | position of circle from which annulus/annuli is/are derived |
isize | inner radius/radii |
osize | outer radius/radii |
color | color of annuli, either [], 3-vector, or 3-row by n-column matrix |
nslices | number of wedges used in polygon→circle approximation [default 8] |
nloops | number of annuli used in polygon→circle approximation [default 1] |
mglOpen(0); mglVisualAngleCoordinates(57,[16 12]); x = zeros(10, 1); y = zeros(10, 1); isize = ones(10,1) osize = 3*ones(10,1); startAngles = linspace(0,180, 10) sweepAngles = ones(1,10).*10; colors = jet(10)'; % nb! transpose mglGluPartialDisk(x, y, isize, osize, startAngles, sweepAngles, colors, 60, 2); mglFlush();
purpose: for plotting circular (rather than square dots), use this function. on slower machines, large number of dots may lead to dropped frames. there may be a way to speed this up a bit in future.
usage: [ ] = mglGluDisk( x, y, size, color, [nslices], [nloops] )
argument | value |
---|---|
x,y | position of dots |
size | size of dots |
color | color of dots |
nslices | number of wedges used in polygon→circle approximation [default 8] |
nloops | number of annuli used in polygon→circle approximation [default 1] |
mglOpen; mglVisualAngleCoordinates(57,[16 12]); x = 16*rand(100,1)-8; y = 12*rand(100,1)-6; mglGluDisk(x, y, 0.1, [0.1 0.6 1], 24, 2); mglFlush();
purpose: for segments and wedges, e.g. for retinotopic stimuli. The function is vectorized, such that multiple segments can be rendered in one call. In this case, x,y, isize, osize, startAngles, and sweepAngles need to have the same number of elements. Color is also vectorized (see mglGluAnnulus and the example below).
usage: [ ] = mglGluPartialDisk( x, y, isize, osize, startAngles, sweepAngles, color, [nslices], [nloops] )
argument | value |
---|---|
x,y | center position of circle from which segment is derived |
isize | innter radius of segment |
osize | outer radius of segment |
startAngles | angle at which segment(s) start |
sweepAngles | angle each segment(s) sweep(s) out |
color | color of segment |
nslices | number of wedges used in polygon→circle approximation [default 8] |
nloops | number of annuli used in polygon→circle approximation [default 2] |
mglOpen(0); mglVisualAngleCoordinates(57,[16 12]); x = zeros(10, 1); y = zeros(10, 1); isize = linspace(1, 5, 10); osize = 3+isize; startAngles = linspace(0,180, 10) sweepAngles = ones(1,10).*10; colors = jet(10)'; mglGluPartialDisk(x, y, isize, osize, startAngles, sweepAngles, colors, 60, 2); mglFlush();
purpose: mex function to draw a polygon in an OpenGL screen opened with mglOpen. x and y can be vectors (the polygon will be closed)
usage: mglPolygon(x, y, [color])
argument | value |
---|---|
x,y | position of vertices |
color | color of polygon |
mglOpen; mglVisualAngleCoordinates(57,[16 12]); x = [-5 -6 -3 4 5]; y = [ 5 1 -4 -2 3]; mglPolygon(x, y, [1 0 0]); mglFlush();
usage: mglQuad( vX, vY, rgbColor, [antiAliasFlag] );
purpose: mex function to draw a quad in an OpenGL screen opened with mglOpen
argument | value |
---|---|
vX | 4 row by N column matrix of 'X' coordinates |
vY | 4 row by N column matrix of 'Y' coordinates |
rgbColors | 3 row by N column of r-g-b specifing the color of each quad |
antiAliasFlag | turns on antialiasing to smooth the edges |
mglOpen; mglScreenCoordinates mglQuad([100; 600; 600; 100], [100; 200; 600; 100], [1; 1; 1], 1); mglFlush();
Here is a demonstration of how to use stencils using these these functions:
mglOpen; mglScreenCoordinates;
%Draw an oval stencil mglStencilCreateBegin(1); mglFillOval(300,400,[100 100]); mglStencilCreateEnd; mglClearScreen;
% now draw some dots, masked by the oval stencil mglStencilSelect(1); mglPoints2(rand(1,5000)*500,rand(1,5000)*500); mglFlush; mglStencilSelect(0);
purpose: Begin drawing to stencil. Until mglStencilCreateEnd is called, all drawing operations will also draw to the stencil. Check MGL.stencilBits to see how many stencil planes there are. If invert is set to one, then the inverse stencil is made
usage: mglStencilCreateBegin(stencilNumber,invert)
argument | value |
---|---|
stencilNumber | stencil number, usualy 1-8 but look at the global variable MGL.stencilBits to see how many stencil planes there are. |
invert | 1 or 0 to invert the stencil that is made |
see example above.
purpose: Ends drawing to stencil usage: mglStencilCreateEnd
see example above.
purpose: Sets which stencil to use, 0 for no stencil usage: mglStencilSelect(stencilNumber)
argument | value |
---|---|
stencilNumber | number of stencil to use |
See example above.
purpose: Hide or display the mouse cursor
usage: mglDisplayCursor(<display>)
argument | value |
---|---|
display | 1 or 0 to display or hide the cursor |
When you call mglOpen the mouse cursor is hidden by default. You can get it to come back by doing:
mglOpen mglDisplayCursor
purpose: returns the status of the keyboard (regardless of whether the focus is on the mgl window)
usage: mglGetKeys(<keys>)
argument | value |
---|---|
keys | array of keycodes. In this case mglGetKeys will only return thestatus of those keys, for example: mglGetKeys([61 46]) will return the values of key 61 and 46. |
usage: mglGetMouse()
purpose: returns the status of the mouse buttons (regardless of whether the focuse is on the mgl window
purpose: returns a key down event waitTicks specifies how long to wait for a key press event in seconds. Note that the timing precision is system-dependent:
The default wait time is 0, which will return immediately and if no keypress event is found, will return an empty array []. The return structure contains the character (ASCII) code of the pressed key, the system-specific keycode, a keyboard identifier (on Linux, this is the keyboard state, or modifier field), and and the time (in secs) of the key press event. NOTE that to get a key event the focus *MUST* be on the mgl window. For faster timing, try mglGetKeys
usage: mglGetKeyEvent(waitTicks)
argument | value |
---|---|
waitTicks | Ticks to wait for before giving up and returning empty event |
mglOpen mglGetKeyEvent(0.5)
usage: mglGetMouseEvent(waitTicks)
purpose: returns a mouse down event waitTicks specifies how long to wait for a mouse event in seconds. Note that the timing precision is system-dependent:
The default wait time is 0, which will return immediately with the mouse position regardless of button state. The return structure contains the x,y coordinates of the mouse, the button identifier if pressed (on the button-challenged Mac this is always 1) and 0 otherwise, and the time (in secs) of the mouse event. NOTE that the mouse down event has to be *ON* the mgl window for this to work with waitTicks not equal to 0
argument | value |
---|---|
waitTicks | Ticks to wait for before giving up and returning empty event |
mglOpen mglGetMouseEvent(0.5)
Purpose: Returns the keycodes of a (list of) keynames
Usage: keycode=mglCharToKeycode(keyname)
Note on special keys: On Linux (X), special keys and function keys have unique names, e.g., 'Escape', 'F1', etc., so obtaining the keycodes for these is done by mglCharToKeycode({'Escape','F1'}) etc. On Macs, this is not possible; instead, test for the keycode and name of a key using the mglShowKey function.
The keycodes match those used by mglGetKeys and mglGetKeyEvent
argument | value |
---|---|
keyname | cell array where each entry is a key name string e.g. keyname = {'h','g' '1'} |
OUTPUT:keycode | vector of integer keycodes for each keyname entry e.g. for the above example, keyname=[44 43 11] (on Linux) |
Example: testing for specific keypresses:
keycodes=mglCharToKeycode({'1','2' '3'}) % keys 1-3 on main keyboard while (1); k=mglGetKeys(keycodes); if (any(k)),break;end;end
Technical note: the returned keycodes are identical to system keycodes+1
Purpose: Returns the keynames of a (list of) keycodes
Usage: keyname=mglKeycodeToChar(keycode)
Note on special keys: This repeats the above entry, deleted.
argument | value |
---|---|
keycode | vector of integer keycodes for each keyname entry for example, keyname=[44 43 11] |
OUTPUT:keyname | cell array where each entry is a key name string for the above example on linux keyname = {'h','g' '1'} |
Example: testing which keys were pressed:
while (1); k=mglGetKeys; if (any(k)),break;end;end keycodes=find(k); keynames=mglKeycodeToChar(keycodes)
Technical note: keycodes are identical to system keycodes+1
purpose: Get current or elapsed time
usage: mglGetSecs(<t0>)
argument | value |
---|---|
t0 | start time from which to compute elapsed time |
To get current time
t=mglGetSecs
Get elapsed time since t0
t0 = mglGetSecs; elapsedTime=mglGetSecs(t0)
purpose: Wait for some time
usage: mglWaitSecs(waitTime)
argument | value |
---|---|
waitTime | time to wait for in seconds |
Wait 3.3 seconds:
mglWaitSecs(3.3);
purpose: Install an .aiff file for playing with mglPlaySound
usage: mglInstallSound(soundName)
argument | value |
---|---|
soundName | aiff filename |
This will install sounds to be played using mglPlaySound. Note that if you just want to use systems sounds then you do not need to call this function directly, it will be called by mglOpen to install all your system sounds. Once the sound is installed you can play it with mglPlaySound
soundNum = mglInstallSound('/System/Library/Sounds/Submarine.aiff'); mglPlaySound(soundNum);
With no arguments, mglInstallSound uninstalls all sounds
mglInstallSound
purpose: Play a sound
usage: mglPlaySound(soundNum)
argument | value |
---|---|
soundNum | number of sound |
Plays a system sound. After calling mglOpen, all of the system sounds will be installed and you can play a specific one as follows:
mglOpen; global MGL; mglPlaySound(find(strcmp(MGL.soundNames,'Submarine')));
With no arguments mglPlaySound plays the system alert sound
mglPlaySound
Note that this function returns right after it starts playing the sound (it does not wait until the sound finishes playing).
Run these test programs without any parameters and they should display on your second monitor. With an optional single argument you can pass the number of the display you want to display on.