Open GL extensions, dglut style
downs
default_357-line at yahoo.de
Tue Apr 14 07:21:14 PDT 2009
AxelS wrote:
> Hello evrybody...
>
> I want to use all the opengl extensions like Shaders in my D2.0 prog...
> I already got the opengl32.lib and also the headers...
>
> I tried it wglGetProc (similar name...)! I could compile it but it hangs up runtime and creates errors which dont tell me the actual problem...
> and yes, I'm sure that these functions which I want to get are existing!
> I know the usage of predefined function variables is recommended...
> I tried but failed...
>
> Thanks in advance!
This is how we do it in dglut:
version(Win32) {
extern(System) void* wglGetProcAddress(char* procName);
alias wglGetProcAddress getExtProc;
} else {
extern(C) void* glXGetProcAddressARB(char* procName);
alias glXGetProcAddressARB getExtProc;
}
template SysFunc(C) { extern(System) alias ReturnType!(C) function(ParameterTypeTuple!(C)) SysFunc; }
struct ExtFunc(C, string name) {
static {
SysFunc!(C) load() {
static if (is(typeof(&getExtProc))) {
return cast(SysFunc!(C)) getExtProc(toStringz("gl"~name));
} else static assert(false, "Platform not supported (yet)");
}
SysFunc!(C) fn;
ReturnType!(C) opCall(ParameterTypeTuple!(C) params) {
if (!fn) fn=cast(typeof(fn)) load();
if (!fn) throw new Exception("Extension function \""~name~"\" not found in lookup table!");
return fn(params);
}
}
}
Then later on, they're used like this:
alias ExtFunc!(void function(GLenum, GLenum, GLenum, int *), "GetFramebufferAttachmentParameterivEXT") getpar;
foreach (where, obj; attachedObjects) {
int res, res2;
getpar(GL_FRAMEBUFFER_EXT, where, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT, &res);
getpar(GL_FRAMEBUFFER_EXT, where, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT, &res2);
More information about the Digitalmars-d-learn
mailing list