Page 1 of 1
How to initialise and use OpenGL (not OGRE) in MacOSX
Posted: Mon Feb 02, 2009 11:48 am
by Niffo
Hello,
I have a working Windows and Linux application in PB that uses direct OpenGL API to show 3D objects.
Does someone know how to initialise OpenGL (not OGRE) and use its API from PB in MacOSX (x86) ?
Regards.
Posted: Wed Feb 25, 2009 7:26 pm
by Niffo
Ok, so here is the minimum to initialize and use OpenGL with Glut on MacOS
Code: Select all
EnableExplicit
ImportC "/System/Library/Frameworks/GLUT.framework/GLUT"
glutInit(*argcp.i, *argv.b)
glutInitDisplayMode(mode.i)
glutInitWindowPosition(x.i, y.i)
glutInitWindowSize(width.i, height.i)
glutMainLoop()
glutCreateWindow(title.s)
glutFullScreen()
glutDisplayFunc(*Proc)
glutIdleFunc(*Proc)
glutSwapBuffers()
EndImport
ImportC "/System/Library/Frameworks/OpenGL.framework/OpenGL"
glClear(mask.l)
glClearColor(red.f, green.f, blue.f, alpha.f)
EndImport
;IncludeFile "gl.pbi"
#GL_COLOR_BUFFER_BIT = $00004000
#GL_DEPTH_BUFFER_BIT = $00000100
;IncludeFile "glut.pbi"
#GLUT_RGB = $0000
#GLUT_DEPTH = $0010
#GLUT_DOUBLE = $0002
ProcedureC draw()
glClearColor(1, 0, 0, 0)
glClear(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
glutSwapBuffers()
EndProcedure
Define a = 0
glutInit(@a, 0)
glutInitWindowSize(256, 256);
glutInitWindowPosition(0, 0);
glutInitDisplayMode(#GLUT_RGB | #GLUT_DEPTH | #GLUT_DOUBLE);
glutCreateWindow("Title")
glutDisplayFunc(@draw())
;glutIdleFunc(@draw())
;glutKeyboardFunc(@key())
;glutReshapeFunc(@reshape())
glutMainLoop()
Posted: Mon Mar 09, 2009 10:30 am
by Niffo
And here is the minimum to initialize OpenGL on a PB Window without the use of GLUT :
Code: Select all
EnableExplicit
ImportC "/System/Library/Frameworks/OpenGL.framework/OpenGL"
glClear(mask.l)
glClearColor(red.f, green.f, blue.f, alpha.f)
EndImport
;IncludeFile "gl.pbi"
#GL_COLOR_BUFFER_BIT = $00004000
#GL_DEPTH_BUFFER_BIT = $00000100
ImportC "/System/Library/Frameworks/AGL.framework/AGL"
aglChoosePixelFormat.l(*gdevs, ndev.i, *attribs.i)
aglDestroyContext.b(ctx.l);
aglDestroyPixelFormat(pix.l)
aglCreateContext.l(pix.l, share.l)
aglSetDrawable.b(ctx.l, draw.l)
aglSetCurrentContext.b(ctx.l)
aglSwapBuffers(ctx.l)
EndImport
;IncludeFile "agl.pbi"
#AGL_NONE = 0
#AGL_RGBA = 4
#AGL_DOUBLEBUFFER = 5
#AGL_DEPTH_SIZE = 12
ImportC "/System/Library/Frameworks/Carbon.framework/Carbon"
GetWindowPort.l(window.l)
EndImport
OpenWindow (0, 100, 100, 256, 256, "OpenGL Window")
Dim attributes.i(4)
attributes(0) = #AGL_RGBA
attributes(1) = #AGL_DOUBLEBUFFER
attributes(2) = #AGL_DEPTH_SIZE
attributes(3) = 24
attributes(4) = #AGL_NONE
Define.l myAGLContext = #Null
Define.l myAGLPixelFormat
myAGLPixelFormat = aglChoosePixelFormat(#Null, 0, @attributes())
If myAGLPixelFormat
myAGLContext = aglCreateContext(myAGLPixelFormat, #Null)
aglSetDrawable(myAGLContext, GetWindowPort(WindowID(0)))
aglSetCurrentContext(myAGLContext)
aglDestroyPixelFormat(myAGLPixelFormat)
EndIf
Repeat
Select WaitWindowEvent(10)
Case #PB_Event_CloseWindow
Break
Default
glClearColor(1, 0, 0, 0)
glClear(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
aglSwapBuffers(myAGLContext)
EndSelect
ForEver
Posted: Mon Mar 09, 2009 1:37 pm
by luis
Thank you for answering to yourself!
Could be useful in the future.
Ehm, please forgive me, but could you share the code you use under linux to open a opengl window with PB ? If possibile both windowed and full screen ? I probably need to look into that in the future and a working example could point me in the right direction from the start.
Thanks.
Posted: Mon Mar 09, 2009 3:21 pm
by Niffo
Maybe you can start with the excellent work of "remi_meier" :
http://www.purebasic.fr/english/viewtop ... 261#223261
Posted: Mon Mar 09, 2009 3:33 pm
by luis
Thank you but I was looking for something not using GLUT or other cross platform libraries.
I thought, looking to your osx example, you had something similar but for linux.
Posted: Mon Mar 09, 2009 4:08 pm
by Niffo
No, unfortunately for the moment I am using GLUT on Linux, but it is less troublesome because it is openglut which is much more comprehensive and usable than the old MacOS GLUT implementation.
Re:
Posted: Sat Mar 27, 2010 1:00 am
by Foz
luis wrote:Ehm, please forgive me, but could you share the code you use under linux to open a opengl window with PB ? If possibile both windowed and full screen ? I probably need to look into that in the future and a working example could point me in the right direction from the start.
Thanks to Fred's little throw away comment in another thread, tis easy - simply set the subsystem to opengl first:
Code: Select all
InitSprite()
ImportC "/usr/lib/libX11.a"+Chr('"')+" -l"+Chr('"')+"GL"
glClear(color.l)
glClearColor(r.f,g.f,b.f,a.f)
EndImport
#GL_COLOR_BUFFER_BIT = $00004000
#GL_DEPTH_BUFFER_BIT = $00000100
OpenWindow (0, 100, 100, 256, 256, "OpenGL Window")
OpenWindowedScreen(WindowID(0), 0, 0, 256, 256, 0, 0, 0)
Repeat
Select WaitWindowEvent(10)
Case #PB_Event_CloseWindow
Break
Default
glClearColor(1, 0.5, 0, 0)
glClear(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
FlipBuffers()
EndSelect
ForEver
Re: How to initialise and use OpenGL (not OGRE) in MacOSX
Posted: Sat Mar 27, 2010 1:11 am
by luis
Yup, I saw that, for basic usage seems to be a good shortcut!
Thanks.
Re: How to initialise and use OpenGL (not OGRE) in MacOSX
Posted: Tue Apr 20, 2010 1:41 pm
by Niffo
Re: How to initialise and use OpenGL (not OGRE) in MacOSX
Posted: Tue Apr 20, 2010 1:45 pm
by Foz
It certainly appears that way, copy and pasting certain strings it can find.