DisplayList.pp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. program DisplayList;
  2. {$mode objfpc}
  3. uses
  4. ctypes, nds9;
  5. var
  6. triangle: array [0..12] of cuint32; // Display List
  7. rotateX: cfloat = 0.0;
  8. rotateY: cfloat = 0.0;
  9. keys: cuint16;
  10. procedure SetDisplayList;
  11. begin
  12. triangle[0] := 12;
  13. triangle[1] := FIFO_COMMAND_PACK(FIFO_BEGIN, FIFO_COLOR, FIFO_VERTEX16, FIFO_COLOR);
  14. triangle[2] := GL_TRIANGLE;
  15. triangle[3] := RGB15(31,0,0);
  16. triangle[4] := VERTEX_PACK(inttov16(-1),inttov16(-1));
  17. triangle[5] := VERTEX_PACK(0,0);
  18. triangle[6] := RGB15(0,31,0);
  19. triangle[7] := FIFO_COMMAND_PACK(FIFO_VERTEX16, FIFO_COLOR, FIFO_VERTEX16, FIFO_END);
  20. triangle[8] := VERTEX_PACK(inttov16(1),inttov16(-1));
  21. triangle[9] := VERTEX_PACK(0,0);
  22. triangle[10] := RGB15(0,0,31);
  23. triangle[11] := VERTEX_PACK(inttov16(0),inttov16(1));
  24. triangle[12] := VERTEX_PACK(0,0);
  25. end;
  26. begin
  27. //set mode 0, enable BG0 and set it to 3D
  28. videoSetMode(MODE_0_3D);
  29. // initialize gl
  30. glInit();
  31. // enable antialiasing
  32. glEnable(GL_ANTIALIAS);
  33. // setup the rear plane
  34. glClearColor(0,0,0,31); // BG must be opaque for AA to work
  35. glClearPolyID(63); // BG must have a unique polygon ID for AA to work
  36. glClearDepth($7FFF);
  37. //this should work the same as the normal gl call
  38. glViewport(0,0,255,191);
  39. SetDisplayList;
  40. glMatrixMode(GL_PROJECTION);
  41. glLoadIdentity();
  42. gluPerspective(70, 256.0 / 192.0, 0.1, 40);
  43. gluLookAt( 0.0, 0.0, 1.0, //camera position
  44. 0.0, 0.0, 0.0, //look at
  45. 0.0, 1.0, 0.0); //up
  46. while true do
  47. begin
  48. glPushMatrix();
  49. //move it away from the camera
  50. glTranslatef32(0, 0, floattof32(-1.0));
  51. glRotateX(rotateX);
  52. glRotateY(rotateY);
  53. glMatrixMode(GL_TEXTURE);
  54. glLoadIdentity();
  55. glMatrixMode(GL_MODELVIEW);
  56. //not a real gl function and will likely change
  57. glPolyFmt(POLY_ALPHA(31) or POLY_CULL_NONE);
  58. scanKeys();
  59. keys := keysHeld();
  60. if ((keys and KEY_UP)) <> 0 then rotateX := rotateX + 3;
  61. if ((keys and KEY_DOWN)) <> 0 then rotateX := rotateX - 3;
  62. if ((keys and KEY_LEFT)) <> 0 then rotateY := rotateY + 3;
  63. if ((keys and KEY_RIGHT)) <> 0 then rotateY := rotateY - 3;
  64. glCallList(@triangle);
  65. glPopMatrix(1);
  66. glFlush(0);
  67. end;
  68. end.