summaryrefslogtreecommitdiff
path: root/packages/libndsfpc/examples/graphics/3D/nehe/lesson02/lesson02.pp
blob: 35d15fb86e6bf11d9686679b80021eec1593638f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
(****************************************
 *    NDS NeHe Lesson 02          *
 *    Author: Dovoto          *
 ****************************************)

program Lesson02;

{$mode objfpc}

uses
  ctypes, nds9;

function DrawGLScene(): boolean;
begin
  glLoadIdentity();                 // Reset The Current Modelview Matrix

  glTranslatef(-1.5,0.0,-6.0);            // Move Left 1.5 Units And Into The Screen 6.0
  glBegin(GL_TRIANGLES);                // Drawing Using Triangles
    glVertex3f( 0.0, 1.0, 0.0);         // Top
    glVertex3f(-1.0,-1.0, 0.0);         // Bottom Left
    glVertex3f( 1.0,-1.0, 0.0);         // Bottom Right
  glEnd();                      // Finished Drawing The Triangle

  glTranslatef(3.0,0.0,0.0);            // Move Right 3 Units
  glBegin(GL_QUADS);                  // Draw A Quad
    glVertex3f(-1.0, 1.0, 0.0);         // Top Left
    glVertex3f( 1.0, 1.0, 0.0);         // Top Right
    glVertex3f( 1.0,-1.0, 0.0);         // Bottom Right
    glVertex3f(-1.0,-1.0, 0.0);         // Bottom Left
  glEnd();                      // Done Drawing The Quad

  result := true;                   // Keep Going
end;

var
  keys: integer;

begin 

  // Setup the Main screen for 3D 
  videoSetMode(MODE_0_3D);

  // initialize the geometry engine
  glInit();
  
  // enable antialiasing
  glEnable(GL_ANTIALIAS);

  // setup the rear plane
  glClearColor(0,0,0,31); // BG must be opaque for AA to work
  glClearPolyID(63); // BG must have a unique polygon ID for AA to work
  glClearDepth($7FFF);
  
  // Set our viewport to be the same size as the screen
  glViewPort(0,0,255,191);
  
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluPerspective(70, 256.0 / 192.0, 0.1, 100);
  // Set the color of the vertices
  glColor3f(1, 1, 1);
  
  while true do
  begin
    //ds specific, several attributes can be set here 
    glPolyFmt(POLY_ALPHA(31) or POLY_CULL_NONE);
    
    // Set the current matrix to be the model matrix
    glMatrixMode(GL_MODELVIEW);
    
    //Push our original Matrix onto the stack (save state)
    glPushMatrix(); 
 
    DrawGLScene();
    
    // Pop our Matrix from the stack (restore state)
    glPopMatrix(1);

    //a handy little built in function to wait for a screen refresh
    swiWaitForVBlank();
    
    // flush to screen  
    glFlush(0);
    scanKeys();
    keys := keysDown();
    if (keys and KEY_START) <> 0 then break;
  end;
  
end.