On 9/27/17 12:35 PM, DreadKyller wrote:
Been using D for a couple years now, however one problem I've had, more
so recently since I've been dealing a lot with OpenGL is related to
pointers.
I have a matrix object to aid with the matrix math required for working
with 3D transforms. However OpenGL (I'm using DerelictGL3 bindings)
requires pointers to the data. I am currently doing the following:
Matrix!float ortho(float l, float r, float b, float t, float f, float n
= -1)
{
Matrix!float oMat = identity(); // Get default Identity Matrix
oMat[0,0] = 2 / (r - l);
oMat[1,1] = 2 / (t - b);
oMat[2,2] = -2 / (f - n);
oMat[3] = [-(r+l)/(r-l), -(t+b)/(t-b), -(f+n)/(f-n), 1];
return oMat;
}
And then to use with OpenGL (passing as uniform into shader):
glUniformMatrix4fv(transform_uniform, 1, GL_FALSE, matrix.addr );
where addr is a property that returns the address of the first item in
the Matrix's internal data. I know I can also use &matrix[0][0]
This is what I would do. For each prototype that takes a matrix pointer,
I would create an overloaded prototype that takes a pointer to your
matrix type instead. The overloaded prototype would then simply call the
real function with the matrix.addr property.
Using metaprogramming, you could probably generate this based on the
current opengl module.
Then your ported code doesn't need to change.
-Steve