mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 10:19:30 +02:00
* Added glxtest, contributed by Bart Tierens
git-svn-id: trunk@1228 -
This commit is contained in:
parent
3571e59542
commit
e8be272fb4
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
packages/extra/opengl/examples/glxtest.pp
Normal file
110
packages/extra/opengl/examples/glxtest.pp
Normal file
@ -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.
|
Loading…
Reference in New Issue
Block a user