diff --git a/.gitattributes b/.gitattributes index 4b78c2e3a8..0a4c3470c4 100644 --- a/.gitattributes +++ b/.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 diff --git a/packages/extra/opengl/examples/Makefile b/packages/extra/opengl/examples/Makefile index 2571a7bd5e..360e886541 100644 --- a/packages/extra/opengl/examples/Makefile +++ b/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 diff --git a/packages/extra/opengl/examples/Makefile.fpc b/packages/extra/opengl/examples/Makefile.fpc index d49587f93b..461b24e806 100644 --- a/packages/extra/opengl/examples/Makefile.fpc +++ b/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 diff --git a/packages/extra/opengl/examples/glxtest.pp b/packages/extra/opengl/examples/glxtest.pp new file mode 100644 index 0000000000..1bb52f95be --- /dev/null +++ b/packages/extra/opengl/examples/glxtest.pp @@ -0,0 +1,110 @@ +{ + GLX demo for FreePascal + 2005 Bart Tierens, BTierens@netscape.net + + 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. \ No newline at end of file