123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- {
- $Id$
- Translation of the Mesa GL headers for FreePascal
- Copyright (C) 1999 Sebastian Guenther
- Mesa 3-D graphics library
- Version: 3.0
- Copyright (C) 1995-1998 Brian Paul
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
- You should have received a copy of the GNU Library General Public
- License along with this library; if not, write to the Free
- Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- }
- {$MODE delphi} // objfpc would not work because of direct proc var assignments
- {You have to enable Macros (compiler switch "-Sm") for compiling this unit!
- This is necessary for supporting different platforms with different calling
- conventions via a single unit.}
- unit GL;
- interface
- {$DEFINE GL1_0}
- {$DEFINE GL1_1}
- {$DEFINE GL1_2}
- {$DEFINE MESA} {enable if you want to use some special mesa extensions}
- {$DEFINE EXTENSIONS} {enable if you need one/all of extensions}
- {$DEFINE SGI_EXTENSIONS} {enable if you need one/all of extensions}
- {$MACRO ON}
- {$IFDEF Linux}
- {$LINKLIB c}
- {$ELSE}
- {$MESSAGE Unsupported platform.}
- {$ENDIF}
- // =======================================================
- // Unit specific extensions
- // =======================================================
- function InitGLFromLibrary(libname: PChar): Boolean;
- // determines automatically which libraries to use:
- function InitGL: Boolean;
- var
- GLDumpUnresolvedFunctions,
- GLInitialized: Boolean;
- // =======================================================
- // GL consts, types and functions
- // =======================================================
- // -------------------------------------------------------
- // GL types
- // -------------------------------------------------------
- type
- PSingle = ^Single;
- PDouble = ^Double;
- GLvoid = Pointer;
- GLboolean = Byte;
- GLbyte = ShortInt; // 1-byte signed
- GLshort = Integer; // 2-byte signed
- GLint = LongInt; // 4-byte signed
- GLubyte = Byte; // 1-byte unsigned
- GLushort = Word; // 2-byte unsigned
- GLuint = DWord; // 4-byte signed
- GLsizei = LongInt; // 4-byte signed
- GLfloat = Single; // single precision float
- GLclampf = Single; // single precision float in [0,1]
- GLdouble = Double; // double precision float
- GLclampd = Double; // double precision float in [0,1]
- GLenum = DWord;
- PGLBoolean = ^GLBoolean;
- PGLFloat = ^GLfloat;
- PGLDouble = ^GLDouble;
- type
- GLbitfield = DWord; { was an enum - no corresponding thing in pascal }
- const
- GL_CURRENT_BIT = $00000001;
- GL_POINT_BIT = $00000002;
- GL_LINE_BIT = $00000004;
- GL_POLYGON_BIT = $00000008;
- GL_POLYGON_STIPPLE_BIT= $00000010;
- GL_PIXEL_MODE_BIT = $00000020;
- GL_LIGHTING_BIT = $00000040;
- GL_FOG_BIT = $00000080;
- GL_DEPTH_BUFFER_BIT = $00000100;
- GL_ACCUM_BUFFER_BIT = $00000200;
- GL_STENCIL_BUFFER_BIT = $00000400;
- GL_VIEWPORT_BIT = $00000800;
- GL_TRANSFORM_BIT = $00001000;
- GL_ENABLE_BIT = $00002000;
- GL_COLOR_BUFFER_BIT = $00004000;
- GL_HINT_BIT = $00008000;
- GL_EVAL_BIT = $00010000;
- GL_LIST_BIT = $00020000;
- GL_TEXTURE_BIT = $00040000;
- GL_SCISSOR_BIT = $00080000;
- GL_ALL_ATTRIB_BITS = $000fffff;
- // -------------------------------------------------------
- // GL constants
- // -------------------------------------------------------
- {$IFDEF GL1_0}
- %GLDeclsIF10
- {$ENDIF GL1_0}
- {$IFDEF GL1_1}
- %GLDeclsIF11
- {$ENDIF GL1_1}
- {$IFDEF GL1_2}
- %GLDeclsIF12
- {$ENDIF GL1_2}
- const
- // Utility
- GL_VENDOR = $1F00;
- GL_RENDERER = $1F01;
- GL_VERSION = $1F02;
- GL_EXTENSIONS = $1F03;
- // Errors
- GL_INVALID_VALUE = $0501;
- GL_INVALID_ENUM = $0500;
- GL_INVALID_OPERATION = $0502;
- GL_STACK_OVERFLOW = $0503;
- GL_STACK_UNDERFLOW = $0504;
- GL_OUT_OF_MEMORY = $0505;
- // -------------------------------------------------------
- // GL extensions constants
- // -------------------------------------------------------
- {$IFDEF EXTENSIONS}
- %GLDeclsIF10Ext
- {$ENDIF EXTENSIONS}
- {$IFDEF SGI_EXTENSIONS}
- %GLDeclsIF10SGI
- {$ENDIF SGI_EXTENSIONS}
- {$IFDEF MESA}
- %GLDeclsIF10Mesa
- {$ENDIF MESA}
- // -------------------------------------------------------
- // GL procedures and functions
- // -------------------------------------------------------
- {$IFDEF GL1_0}
- var
- %GLProcsPD10
- {$ENDIF GL1_0}
- {$IFDEF GL1_1}
- var
- %GLProcsPD11
- {$ENDIF GL1_1}
- {$IFDEF GL1_2}
- var
- %GLProcsPD12
- {$ENDIF GL1_2}
- // -------------------------------------------------------
- // GL Extensions
- // -------------------------------------------------------
- {$IFDEF EXTENSIONS}
- var
- %GLProcsPD10Ext
- {$ENDIF EXTENSIONS}
- // library dependent extensions
- {$IFDEF SGI_EXTENSIONS}
- var
- %GLProcsPD10SGI
- {$ENDIF SGI_EXTENSIONS}
- {$ifdef MESA}
- var
- %GLProcsPD10Mesa
- {$endif MESA}
- // =======================================================
- // =======================================================
- implementation
- {$LINKLIB m}
- function dlopen(AFile: PChar; mode: LongInt): Pointer; external 'dl';
- function dlclose(handle: Pointer): LongInt; external 'dl';
- function dlsym(handle: Pointer; name: PChar): Pointer; external 'dl';
- function LoadLibrary(name: PChar): Pointer;
- begin
- Result := dlopen(name, $101 {RTLD_GLOBAL or RTLD_LAZY});
- end;
- function GetProc(handle: Pointer; name: PChar): Pointer;
- begin
- Result := dlsym(handle, name);
- if (Result = nil) and GLDumpUnresolvedFunctions then
- WriteLn('Unresolved: ', name);
- end;
- var
- libGL : Pointer;
- function InitGLFromLibrary(libname: PChar): Boolean;
- begin
- Result := False;
- libGL := LoadLibrary(libname);
- if not Assigned(libGL) then exit;
- {$ifdef GL1_0}
- %GLProcsPL10
- {$endif GL1_0}
- {$ifdef GL1_1}
- %GLProcsPL11
- {$endif GL1_1}
- {$ifdef GL1_2}
- %GLProcsPL12
- {$endif GL1_2}
- {$ifdef EXTENSIONS}
- %GLProcsPL10Ext
- {$endif EXTENSIONS}
- {$ifdef SGI_EXTENSIONS}
- %GLProcsPL10SGI
- {$endif SGI_EXTENSIONS}
- {$ifdef MESA}
- %GLProcsPL10Mesa
- {$endif MESA}
- GLInitialized := True;
- Result := True;
- end;
- function InitGL: Boolean;
- begin
- Result := InitGLFromLibrary('libGL.so') or
- InitGLFromLibrary('libGL.so.1') or
- InitGLFromLibrary('libMesaGL.so') or
- InitGLFromLibrary('libMesaGL.so.3');
- end;
- initialization
- InitGL;
- finalization
- if Assigned(libGL) then dlclose(libGL);
- end.
- {
- $Log$
- Revision 1.1 2000-09-03 21:25:45 peter
- * new updated version
- * gtkglarea unit and demo
- * win32 opengl headers
- * morph3d demo
- Revision 1.1 2000/07/13 06:34:17 michael
- + Initial import
- Revision 1.2 2000/05/31 00:34:28 alex
- made templates work
- }
|