skidracer: I do agree with you there (however many times I tried to twist it around as a 'bad thing' in my book, it doesn't work), and thus if (probably worth it to continue reading, 'cause that's a big 'if' there) I decide to continue using Max2D I'll just modify it and expose the functions. Or not use Max2D. Which would probably be easier in the long run as then I wouldn't have to deal with its peculiar nuances.
Dreamora: It's not intended for anything beyond simple 2D application. Look at the source, it's obvious that they weren't thinking ahead when designing Max2D and Max3D as Max3D is going to have -another- device class which will then make the Max2D driver utterly useless to have. So what I think is neccessary is that if Blitz Research are going to use hardware acceleration primarily in their 2D system is to write a device class that has 2D and 3D functionality (general functionality, not full blown engine type but rather like the Direct3D Device class, it has DrawPrimitives, states, and such that can be modified via methods) and then Max2D and Max3D should be written to use this device class instead of depending on their own seperate device (or drivers as Mark calls them) classes.
The aforementioned device class proposed would obviously require writing new math classes which -- assuming Mark wouldn't go insane -- would be there for users to use and abuse the device class(es) with.
On another note (I say that way too much), I've been thinking about deleting Brl's Max2D and GLMax2D modules (and any others that depend on them) just because they aren't worth the trouble and then rewriting it in my own way that isn't as ack basswards and instead mimics a full 2D and 3D device class (similar to the Managed DirectX Direct3D Device class, in a sense). Actually, I've already done the device class, it's still a work in progress though..
At the moment, I have that working with OpenGL and I'm working on a software renderer for it now (wrapped SDL's 2D functions and such into a nice neat package so no hardware acceleration is required -- yes folks, I added 'real 2D', it's actually faster than normal Blitz2D/Plus stuff too).
Dreamora: It's not intended for anything beyond simple 2D application. Look at the source, it's obvious that they weren't thinking ahead when designing Max2D and Max3D as Max3D is going to have -another- device class which will then make the Max2D driver utterly useless to have. So what I think is neccessary is that if Blitz Research are going to use hardware acceleration primarily in their 2D system is to write a device class that has 2D and 3D functionality (general functionality, not full blown engine type but rather like the Direct3D Device class, it has DrawPrimitives, states, and such that can be modified via methods) and then Max2D and Max3D should be written to use this device class instead of depending on their own seperate device (or drivers as Mark calls them) classes.
The aforementioned device class proposed would obviously require writing new math classes which -- assuming Mark wouldn't go insane -- would be there for users to use and abuse the device class(es) with.
On another note (I say that way too much), I've been thinking about deleting Brl's Max2D and GLMax2D modules (and any others that depend on them) just because they aren't worth the trouble and then rewriting it in my own way that isn't as ack basswards and instead mimics a full 2D and 3D device class (similar to the Managed DirectX Direct3D Device class, in a sense). Actually, I've already done the device class, it's still a work in progress though..
Type CDevice Abstract Field Indices:Int[] Field Vertices:CVertex[] Field Material:CMaterial Field Width:Int,Height:Int Method ClearColor(R#,G#,B#,A#) Abstract Method SetViewport(X%,Y%,Width%,Height%) Abstract Method GetViewport(X:Int Ptr, Y:Int Ptr, _Width:Int Ptr, _Height:Int Ptr) Abstract Method DrawPrimitives(PrimitiveType:Int) Abstract Method SetVertexData(Indices:Int[],Vertices:CVertex[]) Abstract Method Clear(Enum:Int = CBuffers.Color | CBuffers.Depth) Abstract Method Present() Abstract Method SetWorldMatrix(mat:CMatrix) Abstract Method SetViewMatrix(mat:CMatrix) Abstract Method SetProjectionMatrix(mat:CMatrix) Abstract Method GetWorldMatrix:CMatrix() Abstract Method GetViewMatrix:CMatrix() Abstract Method GetProjectionMatrix:CMatrix() Abstract Method FreeObjectResources(i:Object) Abstract Method LoadObjectResources(i:Object) Abstract Method LoadVertexShader:CVertexShader(path$) Abstract Method LoadPixelShader:CPixelShader(path$) Abstract Method BindShader(i:CShader) Abstract Method BindTexture(i:CTexture) Abstract ' Get this.. CEngine_Global_Device is.. PUBLIC! Oh, my god, Becky. Method SetActiveDevice() CEngine_Global_Device = Self End Method Function GetActiveDevice:CDevice() Return CEngine_Global_Device End Function End Type
At the moment, I have that working with OpenGL and I'm working on a software renderer for it now (wrapped SDL's 2D functions and such into a nice neat package so no hardware acceleration is required -- yes folks, I added 'real 2D', it's actually faster than normal Blitz2D/Plus stuff too).