gtkglarea.pp 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. {
  2. Translation of the gtkglarea 4 headers for Free Pascal
  3. Copyright (C) 2000 Sebastian Guenther
  4. Copyright notice of gtkglarea:
  5. * Copyright (C) 1997-1998 Janne Löf <[email protected]>
  6. *
  7. * This library is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Library General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2 of the License, or (at your option) any later version.
  11. *
  12. * This library is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Library General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Library General Public
  18. * License along with this library; if not, write to the Free
  19. * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. }
  21. unit gtkglarea;
  22. {$MODE objfpc}
  23. {$PACKRECORDS C}
  24. interface
  25. {$ifndef os2}
  26. uses
  27. GDK, GTK, GL;
  28. const
  29. libgtkgl = 'gtkgl';
  30. // ===================================================================
  31. // gdkgl
  32. // ===================================================================
  33. {
  34. These definitions are duplicated from GL/glx.h that comes with Mesa.
  35. I don't want every program to include GL/glx.h, that might become
  36. problem if GtkGLArea is ever ported to non X environments like
  37. (horror!) Windows.
  38. }
  39. // enum _GDK_GL_CONFIGS
  40. GDK_GL_NONE = 0;
  41. GDK_GL_USE_GL = 1;
  42. GDK_GL_BUFFER_SIZE = 2;
  43. GDK_GL_LEVEL = 3;
  44. GDK_GL_RGBA = 4;
  45. GDK_GL_DOUBLEBUFFER = 5;
  46. GDK_GL_STEREO = 6;
  47. GDK_GL_AUX_BUFFERS = 7;
  48. GDK_GL_RED_SIZE = 8;
  49. GDK_GL_GREEN_SIZE = 9;
  50. GDK_GL_BLUE_SIZE = 10;
  51. GDK_GL_ALPHA_SIZE = 11;
  52. GDK_GL_DEPTH_SIZE = 12;
  53. GDK_GL_STENCIL_SIZE = 13;
  54. GDK_GL_ACCUM_RED_SIZE = 14;
  55. GDK_GL_ACCUM_GREEN_SIZE = 15;
  56. GDK_GL_ACCUM_BLUE_SIZE = 16;
  57. GDK_GL_ACCUM_ALPHA_SIZE = 17;
  58. // GLX_EXT_visual_info extension
  59. GDK_GL_X_VISUAL_TYPE_EXT = $22;
  60. GDK_GL_TRANSPARENT_TYPE_EXT = $23;
  61. GDK_GL_TRANSPARENT_INDEX_VALUE_EXT = $24;
  62. GDK_GL_TRANSPARENT_RED_VALUE_EXT = $25;
  63. GDK_GL_TRANSPARENT_GREEN_VALUE_EXT = $26;
  64. GDK_GL_TRANSPARENT_BLUE_VALUE_EXT = $27;
  65. GDK_GL_TRANSPARENT_ALPHA_VALUE_EXT = $28;
  66. type
  67. TGdkGLContext = record end;
  68. PGdkGLContext = ^TGdkGLContext;
  69. function gdk_gl_query: Integer; cdecl; external libgtkgl;
  70. function gdk_gl_choose_visual(attrList: PInteger): PGdkVisual; cdecl; external libgtkgl;
  71. {$ifndef win32}
  72. function gdk_gl_get_config(visual: PGdkVisual; attrib: Integer): Integer; cdecl; external libgtkgl;
  73. function gdk_gl_context_new(visual: PGdkVisual): PGdkGLContext; cdecl; external libgtkgl;
  74. function gdk_gl_context_share_new(visual: PGdkVisual; sharelist: PGdkGLContext; direct: Integer): PGdkGLContext; cdecl; external libgtkgl;
  75. function gdk_gl_context_ref(context: PGdkGLContext): PGdkGLContext; cdecl; external libgtkgl;
  76. procedure gdk_gl_context_unref(context: PGdkGLContext); cdecl; external libgtkgl;
  77. {$endif}
  78. function gdk_gl_make_current(drawable: PGdkDrawable; context: PGdkGLContext): Integer; cdecl; external libgtkgl;
  79. procedure gdk_gl_swap_buffers(drawable: PGdkDrawable); cdecl; external libgtkgl;
  80. procedure gdk_gl_wait_gdk; cdecl; external libgtkgl;
  81. procedure gdk_gl_wait_gl; cdecl; external libgtkgl;
  82. // glpixmap stuff
  83. type
  84. TGdkGLPixmap = record end;
  85. PGdkGLPixmap = ^TGdkGLPixmap;
  86. {$ifndef win32}
  87. function gdk_gl_pixmap_new(visual: PGdkVisual; pixmap: PGdkPixmap): PGdkGLPixmap; cdecl; external libgtkgl;
  88. function gdk_gl_pixmap_ref(glpixmap: PGdkGLPixmap): PGdkGLPixmap; cdecl; external libgtkgl;
  89. procedure gdk_gl_pixmap_unref(glpixmap: PGdkGLPixmap); cdecl; external libgtkgl;
  90. function gdk_gl_pixmap_make_current(glpixmap: PGdkGLPixmap; context: PGdkGLContext): Integer; cdecl; external libgtkgl;
  91. {$endif}
  92. // fonts
  93. {$ifndef win32}
  94. procedure gdk_gl_use_gdk_font(font: PGdkFont; first, count, list_base: Integer); cdecl; external libgtkgl;
  95. {$endif}
  96. // ===================================================================
  97. // gtkglarea
  98. // ===================================================================
  99. type
  100. PGtkGLArea = ^TGtkGLArea;
  101. TGtkGLArea = record
  102. darea: TGtkDrawingArea;
  103. glcontext: PGdkGLContext;
  104. end;
  105. PGtkGLAreaClass = ^TGtkGLAreaClass;
  106. TGtkGLAreaClass = record
  107. parent_class: TGtkDrawingAreaClass;
  108. end;
  109. function GTK_TYPE_GL_AREA: TGtkType; cdecl; external libgtkgl name 'gtk_gl_area_get_type';
  110. function GTK_IS_GL_AREA(obj: Pointer): Boolean;
  111. function GTK_IS_GL_AREA_CLASS(klass: Pointer): Boolean;
  112. function gtk_gl_area_get_type: TGtkType; cdecl; external libgtkgl;
  113. function gtk_gl_area_new(attrList: PInteger): PGtkWidget; cdecl; external libgtkgl;
  114. function gtk_gl_area_share_new(attrList: PInteger; share: PGtkGLArea): PGtkWidget; cdecl; external libgtkgl;
  115. function gtk_gl_area_new_vargs(share: PGtkGLArea; args: array of const): PGtkWidget; cdecl; external libgtkgl;
  116. function gtk_gl_area_make_current(glarea: PGtkGLArea): Integer; cdecl; external libgtkgl;
  117. procedure gtk_gl_area_swapbuffers(glarea: PGtkGLArea); cdecl; external libgtkgl;
  118. {$endif os2}
  119. implementation
  120. {$ifndef os2}
  121. function GTK_IS_GL_AREA(obj: Pointer): Boolean;
  122. begin
  123. Result := Assigned(obj) and GTK_IS_GL_AREA_CLASS(PGtkTypeObject(obj)^.klass);
  124. end;
  125. function GTK_IS_GL_AREA_CLASS(klass: Pointer): Boolean;
  126. begin
  127. Result := Assigned(klass) and (PGtkTypeClass(klass)^.thetype = GTK_TYPE_GL_AREA);
  128. end;
  129. {$endif os2}
  130. end.