Browse Source

* Added glxtest, contributed by Bart Tierens

git-svn-id: trunk@1228 -
sg 20 years ago
parent
commit
e8be272fb4

+ 1 - 0
.gitattributes

@@ -2812,6 +2812,7 @@ packages/extra/opengl/examples/Makefile svneol=native#text/plain
 packages/extra/opengl/examples/Makefile.fpc svneol=native#text/plain
 packages/extra/opengl/examples/bounce.pp svneol=native#text/plain
 packages/extra/opengl/examples/glutdemo.pp svneol=native#text/plain
+packages/extra/opengl/examples/glxtest.pp -text
 packages/extra/opengl/examples/morph3d.pp svneol=native#text/plain
 packages/extra/opengl/examples/radblur.pp svneol=native#text/plain
 packages/extra/opengl/fpmake.inc svneol=native#text/plain

+ 17 - 17
packages/extra/opengl/examples/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2005/08/10]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2005/09/28]
 #
 default: all
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-emx i386-watcom i386-netwlibc i386-wince m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-solaris x86_64-linux x86_64-freebsd x86_64-win64 arm-linux arm-wince
@@ -231,7 +231,7 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
@@ -243,13 +243,13 @@ ifeq ($(FULL_TARGET),i386-os2)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
@@ -261,7 +261,7 @@ ifeq ($(FULL_TARGET),i386-netware)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
@@ -279,13 +279,13 @@ ifeq ($(FULL_TARGET),i386-wince)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
@@ -294,46 +294,46 @@ ifeq ($(FULL_TARGET),m68k-atari)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur  glxtest
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur

+ 5 - 0
packages/extra/opengl/examples/Makefile.fpc

@@ -4,6 +4,11 @@
 
 [target]
 programs=glutdemo morph3d bounce radblur
+programs_linux=glxtest
+programs_freebsd=glxtest
+programs_netbsd=glxtest
+programs_openbsd=glxtest
+programs_darwin=glxtest
 
 [require]
 packages=opengl

+ 110 - 0
packages/extra/opengl/examples/glxtest.pp

@@ -0,0 +1,110 @@
+{
+  GLX demo for FreePascal
+  2005 Bart Tierens, [email protected]
+
+  This program is in the public domain
+  
+  Warning: This demo works only with FreePascal 2.1 and better, due to changes to the glx header
+}
+program glxTest;
+
+{$MODE delphi}
+
+uses glx,unix,x,xlib,xutil,gl,glu;
+
+var
+  attr: Array[0..8] of integer = (GLX_RGBA,GLX_RED_SIZE,1,GLX_GREEN_SIZE,1,GLX_BLUE_SIZE,1,GLX_DOUBLEBUFFER,none);
+  visinfo: PXVisualInfo;
+  cm: TColormap;
+  winAttr: TXSetWindowAttributes;
+  glXCont: GLXContext;
+  dpy: PDisplay;
+  win: TWindow;
+
+procedure redraw();
+begin
+  glClear(GL_COLOR_BUFFER_BIT);
+
+  glTranslatef(-0.5,-0.5,-2);
+  glBegin(GL_QUADS);
+    glColor3f(1,0,0);
+    glVertex3f(0,0,0);
+    glColor3f(0,1,0);
+    glVertex3f(1,0,0);
+    glColor3f(0,0,1);
+    glVertex3f(1,1,0);
+    glColor3f(1,1,1);
+    glVertex3f(0,1,0);
+  glEnd();
+
+  glXSwapBuffers(dpy, win); //Swap the buffers
+end;
+
+procedure resize(width,height: integer);
+begin
+  glViewport(0,0,width,height);
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+  gluPerspective(45,width/height,0.1,200);
+  glMatrixMode(GL_MODELVIEW);
+end;
+
+procedure loop();
+var
+  event: TXEvent;
+begin
+  while true do
+  begin
+    XNextEvent(dpy,@event);
+    case event._type of
+    Expose: redraw();
+    ConfigureNotify: resize(event.xconfigure.width,event.xconfigure.height);
+    KeyPress: halt(1);
+    end;
+  end;
+end;
+
+var
+  errorBase,eventBase: integer;
+  window_title_property: TXTextProperty;
+  title: String;
+begin
+  initGlx();
+  dpy := XOpenDisplay(nil);
+  if(dpy = nil) then
+  writeLn('Error: Could not connect to X server');
+
+  if not (glXQueryExtension(dpy,errorBase,eventBase)) then
+  writeLn('Error: GLX extension not supported');
+
+  visinfo := glXChooseVisual(dpy,DefaultScreen(dpy), Attr);
+  if(visinfo = nil) then
+  writeLn('Error: Could not find visual');
+
+  //Create a new colormap
+  cm := XCreateColormap(dpy,RootWindow(dpy,visinfo.screen),visinfo.visual,AllocNone);
+  winAttr.colormap := cm;
+  winAttr.border_pixel := 0;
+  winAttr.background_pixel := 0;
+  winAttr.event_mask := ExposureMask or ButtonPressMask or StructureNotifyMask or KeyPressMask;
+
+  //Create a window
+  win := XCreateWindow(dpy,RootWindow(dpy,visinfo.screen),0,0,640,480,0,visinfo.depth,InputOutput,visinfo.visual,CWBorderPixel or CWColormap or CWEventMask,@winAttr);
+
+  title := 'FreePascal GLX demo --------- Press any key to exit';
+  XStringListToTextProperty(@title,1,@window_title_property);
+  XSetWMName(dpy,win,@window_title_property);
+
+  //Create an OpenGL rendering context
+  glXCont := glXCreateContext(dpy,visinfo,none,true);
+  if(glXCont = nil) then
+  writeLn('Error: Could not create an OpenGL rendering context');
+
+  //Make it current
+  glXMakeCurrent(dpy,win,glXCont);
+
+  //Map the window on the display
+  XMapWindow(dpy,win);
+  
+  loop();
+end.