Main sections
SETORIENTATION
SETORIENTATION iMode%
Setzt die Orientierung (wo ist oben) auf dem Gerät. Dabei werden alle Grafiken, Mauspositionen und Joystickdaten mitgedreht.
GRABSPRITE ist bei Orientierungen ungleich 0 langsamer.
"Oben" Position je iMode:
0=[oben]
1=[rechts]
2=[runter]
3=[links]
// Test mode: 320x480
X_OBJSTART 0
X_OBJADDVERTEX  0, 20,  0, 0,0,0xffffff
X_OBJADDVERTEX  0,-20, 10, 0,0,0xff0000
X_OBJADDVERTEX  0,-20,-10, 0,0,0x0000ff
X_OBJNEWGROUP
X_OBJADDVERTEX   0, 20,0, 0,0,0xffffff
X_OBJADDVERTEX  30,-10,0, 0,0,0xff0000
X_OBJADDVERTEX -30,-10,0, 0,0,0x0000ff
X_OBJNEWGROUP
X_OBJADDVERTEX  10.5,-15,  10.5, 0,0,0x00ffff
X_OBJADDVERTEX  10.5, 15,  10.5, 0,0,0x00ffff
X_OBJADDVERTEX -10.5,-15, -10.5, 0,0,0x00ffff
X_OBJADDVERTEX -10.5, 15, -10.5, 0,0,0x00ffff
X_OBJEND
LOCAL mx%, my%, b1%, b2%
LOCAL irot%  = 0
WHILE TRUE
    IF KEY(2) THEN irot=0
    IF KEY(3) THEN irot=1
    IF KEY(4) THEN irot=2
    IF KEY(5) THEN irot=3
    // rotate the screen. Stays locked until you change that!
    SETORIENTATION irot
    // mouse position on screen (in screen pixels - not device)
    MOUSESTATE mx, my, b1, b2
    // print where mouse is and rotation index
    PRINT "Rot: "+irot+"Mouse: "+FORMAT$(4,0,mx)+ ", "+FORMAT$(4,0,my), 0,0
    // get the full viewport
LOCAL vpx%, vpy%, x%, y%
    GETVIEWPORT x, y, vpx, vpy
    DRAWLINE x,      y,      vpx,    y,       RGB(255,128,128)
    DRAWLINE x,      y,      x,      vpy,     RGB(255,128,128)
    DRAWLINE x+vpx-1,y,      x+vpx-1,vpy,     RGB(255,128,128)
    DRAWLINE x,      y+vpy-1,vpx,    y+vpy-1, RGB(255,128,128)
    PRINT "VP: "+x+","+y+" "+vpx+"x"+vpy, 0,20
    // and screen size
    GETSCREENSIZE vpx, vpy
    PRINT "SC: "+vpx+"x"+vpy, 0,40
    // draw line to viewport rect
    DRAWLINE vpx, vpy, 50+200,100+100, RGB(0,255,255)
    // render to a viewport area
    VIEWPORT 50,100, 200,100
    // make sure we don't paint outside the viewport
    DRAWRECT -999,-999,2000,2000,RGB(64,64,128)
    // render 3D into that viewport
    do3D()
    // start rendering in 2D over the same viewport again
    X_MAKE2D
    VIEWPORT 50,100, 200,100
    PRINT "2D Viewport 200x100",0,0
    // is the size correct?
    GETVIEWPORT x, y, vpx, vpy
    PRINT "VP: "+x+","+y+" "+vpx+"x"+vpy, 0,20
    // now grab that viewport and paste it again
    VIEWPORT 0,0,0,0
    GRABSPRITE 1, 50,100,200,100
    DRAWSPRITE 1, 50,201
    // mouse position
    DRAWRECT mx-4, my-4, 8,8,RGB(255,255,0)
    SHOWSCREEN
WEND
FUNCTION do3D:
    ALPHAMODE 0
    X_CULLMODE 0
    X_MAKE3D 1, 100, 45
    X_CAMERA 3,3,40, 0,0,0
    X_ROTATION GETTIMERALL()*0.1, 0,1,0
    X_DRAWOBJ 0,0
ENDFUNCTION

