digitalmars.D.announce - headers for OpenGL, OpenAL, and SDL
- Jamie Pelcis (13/13) Mar 04 2006 Here's a few headers for anyone who wants them, with the only license
- Hasan Aljudy (3/22) Mar 04 2006 Thanks!!
- Bruno Medeiros (9/28) Mar 06 2006 Hum, what are these headers different from those from Anders
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (25/30) Mar 06 2006 From what I can tell from it, there are some differences both
- James Pelcis (8/55) Mar 06 2006 I thought it would be a good idea to put things that are ported into the...
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (12/19) Mar 06 2006 Well, I think it was "supposed" to go in the etc.c (Deimos) namespace -
- James Pelcis (8/36) Mar 06 2006 Let me put this a different way... I don't have a Mac, so I don't have
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (10/17) Mar 07 2006 And that is the problem. Without a Mac, you don't have the original
- James Pelcis (3/5) Mar 07 2006 Would derivative works still be under the same non-redistributable
- James Pelcis (5/11) Mar 07 2006 If http://darcs.brianweb.net/vendor/powerpc-apple-darwin/include/ is
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (25/30) Mar 07 2006 Hmm, not sure how I would test it without the rest of Carbon ?
- James Pelcis (4/43) Mar 08 2006 Thanks for the help. I think everything works. The glext errors were
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (8/9) Mar 07 2006 That would be an oldskool Mac type:
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (23/24) Mar 08 2006 Also, there was a (C) declaration missed on the glut fonts:
- James Pelcis (9/38) Mar 06 2006 The primary differences are the version and what is included. The
- Don Clugston (38/41) Mar 07 2006 I have a grandiose scheme for a C2D project, where rather than storing
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (12/22) Mar 07 2006 Arguably, if those "scripts" are verbose enough they could be
- Don Clugston (18/42) Mar 07 2006 I guess that's possible, but they'll have very little information in
- James Pelcis (9/15) Mar 07 2006 Keeping up with the changes isn't normally a big deal (although there
Here's a few headers for anyone who wants them, with the only license restriction from me being that I am in no way, shape, or form responsible for any problems. OpenGL http://www.summerseas.com/jpelcis/downloads/opengl.zip OpenAL http://www.summerseas.com/jpelcis/downloads/openal.zip SDL http://www.summerseas.com/jpelcis/downloads/sdl.zip These are essentially untested, so please tell me if something goes wrong. On a different note... Walter, would you please replace std.loader? If Mike Parker (Derelict project) doesn't mind you using his, it would be a good change.
Mar 04 2006
Jamie Pelcis wrote:Here's a few headers for anyone who wants them, with the only license restriction from me being that I am in no way, shape, or form responsible for any problems. OpenGL http://www.summerseas.com/jpelcis/downloads/opengl.zip OpenAL http://www.summerseas.com/jpelcis/downloads/openal.zip SDL http://www.summerseas.com/jpelcis/downloads/sdl.zip These are essentially untested, so please tell me if something goes wrong. On a different note... Walter, would you please replace std.loader? If Mike Parker (Derelict project) doesn't mind you using his, it would be a good change.Thanks!! I've been looking for complete opengl headers for a while!
Mar 04 2006
Jamie Pelcis wrote:Here's a few headers for anyone who wants them, with the only license restriction from me being that I am in no way, shape, or form responsible for any problems. OpenGL http://www.summerseas.com/jpelcis/downloads/opengl.zip OpenAL http://www.summerseas.com/jpelcis/downloads/openal.zip SDL http://www.summerseas.com/jpelcis/downloads/sdl.zip These are essentially untested, so please tell me if something goes wrong. On a different note... Walter, would you please replace std.loader? If Mike Parker (Derelict project) doesn't mind you using his, it would be a good change.Hum, what are these headers different from those from Anders (http://www.algonet.se/~afb/d/) or from Dporting (http://shinh.skr.jp/d/porting.html) ? (well, the SDL version seems more recent, but still looks like duplicated effort) -- Bruno Medeiros - CS/E student http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D
Mar 06 2006
Bruno Medeiros wrote:Hum, what are these headers different from those from Anders (http://www.algonet.se/~afb/d/) or from Dporting (http://shinh.skr.jp/d/porting.html) ? (well, the SDL version seems more recent, but still looks like duplicated effort)From what I can tell from it, there are some differences both in general (i.e. "how") and in coverage/license (i.e. "what") They seem to be using the same kind of function pointers as in Derelict, while my headers linked directly to the C libs... i.e. the import module contains global function pointer entries, and these are loaded from the DLL/SO at startup with std.loader And these are in c.sdl and c.gl, mine were in sdl and opengl. (there are also the derelict.sdl and derelict.opengl modules) These OpenGL headers are based on Mesa 3-D and FreeGLUT, while I used the SGI OpenGL 1.2.1 and GLUT 3.7 (both from opengl.org) The licenses on these Open Source versions are much "nicer" than the old ones, so that is really a good thing. They're newer, too. They also included the GLX, WGL and AGL [empty now] extensions, while I only included the GL/GLUT cross-platform variants in mine. Oh, and these new ones don't support the Mac yet (maybe just Windows ?) Tested mine (before) without any problems on Mac OS X, Linux and MinGW. It's possible to add Mac support to these; by completing the AGL module, and by adding support for calling the "SDL_main" hack (as usual) to SDL. But I don't care much for the function pointers, though. Sorry... :-) Understand they are handy on Windows, when you don't have the implibs. --anders PS. I have SDL 1.2.9 in the CVS, so there shouldn't be any version diff ? Haven't gotten around to updating the ZIPs, or fixing the DMD linking.
Mar 06 2006
I thought it would be a good idea to put things that are ported into the c namespace. If the project ever gets a pure D implementation, it wouldn't conflict with programs written for the c version. If someone gives me the AGL header, I'll see what I can do to take care of it, too. I'm not sure exactly what you're asking in the ps, but mine should work with 1.2.9. Anders F Björklund wrote:Bruno Medeiros wrote:Hum, what are these headers different from those from Anders (http://www.algonet.se/~afb/d/) or from Dporting (http://shinh.skr.jp/d/porting.html) ? (well, the SDL version seems more recent, but still looks like duplicated effort)From what I can tell from it, there are some differences both in general (i.e. "how") and in coverage/license (i.e. "what") They seem to be using the same kind of function pointers as in Derelict, while my headers linked directly to the C libs... i.e. the import module contains global function pointer entries, and these are loaded from the DLL/SO at startup with std.loader And these are in c.sdl and c.gl, mine were in sdl and opengl. (there are also the derelict.sdl and derelict.opengl modules) These OpenGL headers are based on Mesa 3-D and FreeGLUT, while I used the SGI OpenGL 1.2.1 and GLUT 3.7 (both from opengl.org) The licenses on these Open Source versions are much "nicer" than the old ones, so that is really a good thing. They're newer, too. They also included the GLX, WGL and AGL [empty now] extensions, while I only included the GL/GLUT cross-platform variants in mine. Oh, and these new ones don't support the Mac yet (maybe just Windows ?) Tested mine (before) without any problems on Mac OS X, Linux and MinGW. It's possible to add Mac support to these; by completing the AGL module, and by adding support for calling the "SDL_main" hack (as usual) to SDL. But I don't care much for the function pointers, though. Sorry... :-) Understand they are handy on Windows, when you don't have the implibs. --anders PS. I have SDL 1.2.9 in the CVS, so there shouldn't be any version diff ? Haven't gotten around to updating the ZIPs, or fixing the DMD linking.
Mar 06 2006
James Pelcis wrote:I thought it would be a good idea to put things that are ported into the c namespace. If the project ever gets a pure D implementation, it wouldn't conflict with programs written for the c version.Well, I think it was "supposed" to go in the etc.c (Deimos) namespace - but since there was never any guidelines I just went with the shorter...If someone gives me the AGL header, I'll see what I can do to take care of it, too.It's copyrighted by Apple, but should be straightforward to translate... Located in /System/Library/Frameworks/AGL.framework/Headers/agl.h on OSX Distributing Apple system headers has the same issues as Win32 headers, but without any "w32api" version like available for the MinGW compiler. The GL library location is /System/Library/Frameworks/OpenGL.framework, by the way (i.e. same as "OpenGL32.dll" or "libGLX.so", but without AGL)I'm not sure exactly what you're asking in the ps, but mine should work with 1.2.9.Oh, I was just meaning that I had SDL 1.2.8 as ZIP - but 1.2.9 in CVS. Apparently the implibs I bundled weren't working for DMD/Windows either --anders
Mar 06 2006
Let me put this a different way... I don't have a Mac, so I don't have a copy of the header. I would still be more than happy to port it though. The SDL 1.2.9 interface is either a superset of 1.2.8 or exactly the same, but I'm not sure which. I'd try using your CVS version with an older version of the library to find out for sure. If it works, assume that there is no version difference. What's the official "version (Mac)?" Anders F Björklund wrote:James Pelcis wrote:I thought it would be a good idea to put things that are ported into the c namespace. If the project ever gets a pure D implementation, it wouldn't conflict with programs written for the c version.Well, I think it was "supposed" to go in the etc.c (Deimos) namespace - but since there was never any guidelines I just went with the shorter...If someone gives me the AGL header, I'll see what I can do to take care of it, too.It's copyrighted by Apple, but should be straightforward to translate... Located in /System/Library/Frameworks/AGL.framework/Headers/agl.h on OSX Distributing Apple system headers has the same issues as Win32 headers, but without any "w32api" version like available for the MinGW compiler. The GL library location is /System/Library/Frameworks/OpenGL.framework, by the way (i.e. same as "OpenGL32.dll" or "libGLX.so", but without AGL)I'm not sure exactly what you're asking in the ps, but mine should work with 1.2.9.Oh, I was just meaning that I had SDL 1.2.8 as ZIP - but 1.2.9 in CVS. Apparently the implibs I bundled weren't working for DMD/Windows either --anders
Mar 06 2006
James Pelcis wrote:Let me put this a different way... I don't have a Mac, so I don't have a copy of the header. I would still be more than happy to port it though.And that is the problem. Without a Mac, you don't have the original headers and they can't be-redistributed without permission from Apple... For SWT on Mac OS X for instance, they have a special "license" for itThe SDL 1.2.9 interface is either a superset of 1.2.8 or exactly the same, but I'm not sure which. I'd try using your CVS version with an older version of the library to find out for sure. If it works, assume that there is no version difference.I just ran a diff on the headers from 1.2.8 to 1.2.9 and applied it... As I recall it, there was just cosmetical differences - no API changes.What's the official "version (Mac)?"version(darwin) Only problem that it is valid both for Darwin (which runs X11, and GLX) and for Mac OS X (which runs Quartz and AGL). But it's usually Mac OS X. --anders
Mar 07 2006
Would derivative works still be under the same non-redistributable license? If so, there is no point in porting it. Anders F Björklund wrote:And that is the problem. Without a Mac, you don't have the original headers and they can't be-redistributed without permission from Apple...
Mar 07 2006
If http://darcs.brianweb.net/vendor/powerpc-apple-darwin/include/ is legal, then so is a port of AGL. The updated version on the website should have most of it, but I had trouble finding the information on Style. Would someone with a Mac (hi Anders) please test it? Thank you! James Pelcis wrote:Would derivative works still be under the same non-redistributable license? If so, there is no point in porting it. Anders F Björklund wrote:And that is the problem. Without a Mac, you don't have the original headers and they can't be-redistributed without permission from Apple...
Mar 07 2006
James Pelcis wrote:If http://darcs.brianweb.net/vendor/powerpc-apple-darwin/include/ is legal, then so is a port of AGL.Yeah, so that only leaves the question: is it ? :-)The updated version on the website should have most of it, but I had trouble finding the information on Style. Would someone with a Mac (hi Anders) please test it? Thank you!Hmm, not sure how I would test it without the rest of Carbon ? But maybe I can use my old hello world to get an AGL window up... Anyway, here are two bugs meanwhile: c/gl/glext.d:2868: glTexCoord2fColor4fNormal3fVertex3fSUN is used as a type c/gl/glext.d:2868: variable c.gl.glext._staticCtor.glTexCoord2fColor4fNormal3fVertex3fSUN voids have no value c/gl/glext.d:2869: cannot implicitly convert expression (cast(void(C *)(float, float, float, float, float, float, float, float, float, float, float, float))(getProc("glTexCoord2fColor4fNormal3fVertex3fSUN"))) of type pfglTexCoord2fColor4fNormal3fVertex3fSUN to int c/gl/glext.d:3308: glGetFramebufferAttachmentParameterivEXT is used as a type c/gl/glext.d:3308: variable c.gl.glext._staticCtor.glGetFramebufferAttachmentParameterivEXT voids have no value c/gl/glext.d:3309: cannot implicitly convert expression (cast(void(C *)(uint, uint, uint, int*))(getProc("glGetFramebufferAttachmentParameterivEXT"))) of type pfglGetFramebufferAttachmentParameterivEXT to int You'll notice I had to move all the D sources, before it compiled... (they are supposed to go in a c/gl subdirectory, to match the module) --anders
Mar 07 2006
Thanks for the help. I think everything works. The glext errors were caused by the partial failure of a regex. I think everything works, but it would be nice if you could get that "Hello World" in AGL. Anders F Björklund wrote:James Pelcis wrote:If http://darcs.brianweb.net/vendor/powerpc-apple-darwin/include/ is legal, then so is a port of AGL.Yeah, so that only leaves the question: is it ? :-)The updated version on the website should have most of it, but I had trouble finding the information on Style. Would someone with a Mac (hi Anders) please test it? Thank you!Hmm, not sure how I would test it without the rest of Carbon ? But maybe I can use my old hello world to get an AGL window up... Anyway, here are two bugs meanwhile: c/gl/glext.d:2868: glTexCoord2fColor4fNormal3fVertex3fSUN is used as a type c/gl/glext.d:2868: variable c.gl.glext._staticCtor.glTexCoord2fColor4fNormal3fVertex3fSUN voids have no value c/gl/glext.d:2869: cannot implicitly convert expression (cast(void(C *)(float, float, float, float, float, float, float, float, float, float, float, float))(getProc("glTexCoord2fColor4fNormal3fVertex3fSUN"))) of type pfglTexCoord2fColor4fNormal3fVertex3fSUN to int c/gl/glext.d:3308: glGetFramebufferAttachmentParameterivEXT is used as a type c/gl/glext.d:3308: variable c.gl.glext._staticCtor.glGetFramebufferAttachmentParameterivEXT voids have no value c/gl/glext.d:3309: cannot implicitly convert expression (cast(void(C *)(uint, uint, uint, int*))(getProc("glGetFramebufferAttachmentParameterivEXT"))) of type pfglGetFramebufferAttachmentParameterivEXT to int You'll notice I had to move all the D sources, before it compiled... (they are supposed to go in a c/gl subdirectory, to match the module) --anders
Mar 08 2006
James Pelcis wrote:but I had trouble finding the information on Style.That would be an oldskool Mac type: // Quickdraw font rendering styles alias ubyte Style; alias short StyleParameter; alias Style StyleField; Part of <CarbonCore/MacTypes.h> --anders
Mar 07 2006
James Pelcis wrote:Would someone with a Mac (hi Anders) please test it? Thank you!Also, there was a (C) declaration missed on the glut fonts: ld: Undefined symbols: __D1c2gl4glut15glutBitmap8By13Pv __D1c2gl4glut15glutBitmap9By15Pv __D1c2gl4glut15glutStrokeRomanPv __D1c2gl4glut19glutStrokeMonoRomanPv __D1c2gl4glut21glutBitmapHelvetica10Pv __D1c2gl4glut21glutBitmapHelvetica12Pv __D1c2gl4glut21glutBitmapHelvetica18Pv __D1c2gl4glut22glutBitmapTimesRoman10Pv __D1c2gl4glut22glutBitmapTimesRoman24Pv Should be declared like this: extern (C) GLvoid* glutStrokeRoman; Otherwise they get D mangling. You can't declare them in the D import module either, since then it won't link to the external ones from C ? i.e. they should go into a separate "glutextern.d" file --anders PS. Doesn't seem to start, though: Error: circular initialization dependency with module gl Not sure what that is all about.
Mar 08 2006
The primary differences are the version and what is included. The versions should be OpenGL 2.0, GLU 1.3, GLX 1.4, FreeGLUT 2.4.0 (includes the latest GLUT), OpenAL 1.1, and SDL 1.2.9. If I remember right, the GLext is actually more up-to-date than the official C/C++ one. Aside from that, you're right about the duplicated effort. We need more of a central repository for translated headers than currently exists (no offense meant to dsource). Bruno Medeiros wrote:Jamie Pelcis wrote:Here's a few headers for anyone who wants them, with the only license restriction from me being that I am in no way, shape, or form responsible for any problems. OpenGL http://www.summerseas.com/jpelcis/downloads/opengl.zip OpenAL http://www.summerseas.com/jpelcis/downloads/openal.zip SDL http://www.summerseas.com/jpelcis/downloads/sdl.zip These are essentially untested, so please tell me if something goes wrong. On a different note... Walter, would you please replace std.loader? If Mike Parker (Derelict project) doesn't mind you using his, it would be a good change.Hum, what are these headers different from those from Anders (http://www.algonet.se/~afb/d/) or from Dporting (http://shinh.skr.jp/d/porting.html) ? (well, the SDL version seems more recent, but still looks like duplicated effort)
Mar 06 2006
James Pelcis wrote:Aside from that, you're right about the duplicated effort. We need more of a central repository for translated headers than currently exists (no offense meant to dsource).I have a grandiose scheme for a C2D project, where rather than storing the converted headers (with associated licensing issues), we instead store the 'script' (actually more of a hint file) that was used for conversion. It would be fantastic to accumulate a database of C2D files. Sample C2D script format (excerpt of part of the one that converts the Win SDK headers). There are a few other sections, apart from those shown here. The C2D program can't do the full Win SDK yet (I'm currently working out what to do with bitfields in structs), but it's OK for fairly simple headers right now. ==================================== ; comments start with a semicolon ; --- The following ones are only for MingW --- #REMOVE AbnormalTermination ; --- These are common to both Microsoft and MingW --- ; these macros get removed entirely #REMOVE MAKEINTATOM DefineHandleTable FreeProcInstance GetFreeSpace LimitEmsPages ; these macros are replaced with inline functions #MACRO RtlFillMemory void RtlFillMemory(void* d, uint len, ubyte f){ memset(d, f, len); } FreeModule alias FreeLibrary FreeModule; HasOverlappedIoCompleted bool HasOverlappedIoCompleted(LPOVERLAPPED lpOverlapped){ return (*lpOverlapped).Internal != STATUS_PENDING; } ; these '#if's get turned into version(xxx) { #VERSION (_WIN32_WINNT >= 0x0500) version(WinXP)
Mar 07 2006
Don Clugston wrote:I have a grandiose scheme for a C2D project, where rather than storing the converted headers (with associated licensing issues), we instead store the 'script' (actually more of a hint file) that was used for conversion.Arguably, if those "scripts" are verbose enough they could be subject to the very same licensing issues as the header files... :-( But it would be neat to have for the old Mac OS headers (i.e. Carbon), in addition to the full Win32 SDK headers that I gather you're doing.It would be fantastic to accumulate a database of C2D files.Or have a better tool ? I guess you've looked at SWIG, by the way ?Sample C2D script format (excerpt of part of the one that converts the Win SDK headers). There are a few other sections, apart from those shown here. The C2D program can't do the full Win SDK yet (I'm currently working out what to do with bitfields in structs), but it's OK for fairly simple headers right now.Bitfields usually means writing wrapper accessors/mutators... But I guess that would be a bit hard to do automated, right ? The Perl hack I used is at http://www.algonet.se/~afb/d/h2d.pl It doesn't preprocess and it doesn't parse. It just replaces... But I've successfully used it for "step one" in translating. --anders
Mar 07 2006
Anders F Björklund wrote:Don Clugston wrote:I guess that's possible, but they'll have very little information in them. Typically, just the names of a couple of the #defines, most of which are listed in external documentation, and which are used in samples. It's not a problem for the Windows SDK, because the MingW header script seems to work with the Microsoft files, too. I'm not sure about Carbon, though. In any case, it will be clear that the source is not being redistributed. Actually, though, my primary intention is to be able to keep up with open-source header changes, rather than avoid the license issues.I have a grandiose scheme for a C2D project, where rather than storing the converted headers (with associated licensing issues), we instead store the 'script' (actually more of a hint file) that was used for conversion.Arguably, if those "scripts" are verbose enough they could be subject to the very same licensing issues as the header files... :-(But it would be neat to have for the old Mac OS headers (i.e. Carbon), in addition to the full Win32 SDK headers that I gather you're doing.Yes, it would be good to leverage off something else. Unfortunately, it seems that SWIG requires you to modify the header file. It would definitely be the way to go for C++ code, though.It would be fantastic to accumulate a database of C2D files.Or have a better tool ? I guess you've looked at SWIG, by the way ?It's tricky, but possible. I might just cheat and require them to be defined manually for now.Sample C2D script format (excerpt of part of the one that converts the Win SDK headers). There are a few other sections, apart from those shown here. The C2D program can't do the full Win SDK yet (I'm currently working out what to do with bitfields in structs), but it's OK for fairly simple headers right now.Bitfields usually means writing wrapper accessors/mutators... But I guess that would be a bit hard to do automated, right ?The Perl hack I used is at http://www.algonet.se/~afb/d/h2d.pl It doesn't preprocess and it doesn't parse. It just replaces...C isn't too difficult to parse, fortunately. And _perfect_ parsing doesn't seem to be necessary (there's a huge advantage in knowing that the code is valid C).
Mar 07 2006
Keeping up with the changes isn't normally a big deal (although there are exceptions). It's getting it done the first time. Don Clugston wrote:Actually, though, my primary intention is to be able to keep up with open-source header changes, rather than avoid the license issues.Fortunately many of the larger projects attempt to make their headers as simple as possible to make sure all compilers will treat it the same. A problem may arise from different conventions on how to make code look good though.C isn't too difficult to parse, fortunately. And _perfect_ parsing doesn't seem to be necessary (there's a huge advantage in knowing that the code is valid C).That makes it all worth it! Anders F Björklund wrote:But I've successfully used it for "step one" in translating.
Mar 07 2006