New D3D7 Modules For Testing!

BlitzMax Forums/BlitzMax Module Tweaks/New D3D7 Modules For Testing!

marksibly(Posted 2006) [#1]
Available here.

Copy the mods contained in this zip into your blitzmax mod/brl.mod folder, and rebuild your project.

Note: The 'buffered' d3d7 driver is not available in this version.


Amon(Posted 2006) [#2]
I tested this with my game Mark and all appears to be working.


Filax(Posted 2006) [#3]
What changes ?? :)


Grey Alien(Posted 2006) [#4]
Thanks Mark, can you list the changes so that I can test them carefully. The reason is I'm about to release a game on Monday to 4+ portals and I have a choice of using the old stable driver with screensaver problems or the new "untested" driver... you see my dilemma. Thanks :-)


Grey Alien(Posted 2006) [#5]
btw, before I asked why D3D7Max2DDriver() would return null and maybe the answer is that the modern cards didn't support DX7, OK. Then you fixed/changed the behaviour of this didn't you? So what will it do now then? My code currently detects null and says "Oh well I'll use OpenGL" but if it now returns something other than null on PCs that don't support DX7 then my code is broke and I'll lose sales...thanks for any answers.


Grey Alien(Posted 2006) [#6]
well it's broke my code. Where has PrimaryDevice gone?

I was using it for this (suggested by skidracer)

'		PrimaryDevice.ddraw.WaitForVerticalBlank DDWAITVB_BLOCKBEGIN,0


and this to get the refresh rate:

'				GameRefreshRate = GetDeviceCaps(GetDC(PrimaryDevice.hWnd), VREFRESH)


Thanks.


Grey Alien(Posted 2006) [#7]
OK I tested the new modules as follows:

First I did a sync mods.
Then I backed up the old module files.
Then I overwrote the contents with the code from the top of this thread.
Then I clicked Build Modules (took quite a while maybe I was fairly out of sync).
Finally I compile my code, ran it outside of the ide with the screensaver set to 1 minute and also with that checkbox ticked, and it still says "Create DX7 Surface Failed".

Sorry Mark no joy unless I'm doing something wrong.

I'll try to paste that code in again and try a Rebuild all Modules instead... [edit] tested, same result.


marksibly(Posted 2006) [#8]
Hi,

You must copy the files in and rebuild modules - there's no way I'd syncmods this yet!

To get a direct3ddevice7 interface, use:

D3D7GraphicsDriver().Direct3DDevice7()

To get hwnd, use GetActiveWindow().


Grey Alien(Posted 2006) [#9]
***Important Bug***
GraphicsModeExists is now broken. It returns 0 for perfectly normal modes like 800x600x32 and this means my framework won't use Full-screen it will resort to windowed mode for safety.

Try this:

Graphics 800,600,32
Local test = GraphicsModeExists(800,600,32)
While Not KeyHit(key_Escape)
	Cls
	DrawText(test, 0,0)
	Flip
Wend

Test should be 1 not 0 right?

Good News: Everything else seems to be fine!

I'm going to restore the backups now.


Grey Alien(Posted 2006) [#10]
You must copy the files in and rebuild modules - there's no way I'd syncmods this yet!
Yeah I just did a sync mods cos I was out of date anyway. The point is, it hasn't fixed the screensaver problem on my PC, sorry.

OK as for the other tips I'm confused, can you be more specific:

because this:

D3D7GraphicsDriver().Direct3DDevice7().ddraw.WaitForVerticalBlank DDWAITVB_BLOCKBEGIN,0

won't compile with Compile Error: Identifier 'ddraw' not found.

and this:

GameRefreshRate = GetDeviceCaps(GetDC(D3D7GraphicsDriver().Direct3DDevice7().hWnd), VREFRESH)

won't compile with Compile Error: Identifier 'hWnd' not found.

However I know how get ActiveWindow works, so I've used that like this (I guess that's what you meant):

GameRefreshRate = GetDeviceCaps(GetDC(GetActiveWindow()), VREFRESH)


Which works thanks. Anyway these issues are small compared to the problem with GraphicsModeExists which it would be great if you can look into ASAP.


Grey Alien(Posted 2006) [#11]
***important bug***
Minimise windowed mode fails with DXERROR code=87


marksibly(Posted 2006) [#12]
The point is, it hasn't fixed the screensaver problem on my PC, sorry.

Did the above code not fix the screen saver bug or just the syncmods?

Anyone else still having screensaver issues even with the above code?

After installing the above and rebuilding modules, can you try a simple:
Graphics 640,480
While Not KeyHit( KEY_ESCAPE )
   Cls
   DrawText "Text Here!",0,0
   Flip
Wend

And let the screensaver kick in?


OK as for the other tips I'm confused, can you be more specific:


Here are all interfaces accessible via the driver:
D3D7GraphicsDriver().DirectDraw7()
D3D7GraphicsDriver().Direct3D7()
D3D7GraphicsDriver().Direct3DDevice7()

It's hopefully obvious what to use where!


marksibly(Posted 2006) [#13]

***important bug***
Minimise windowed mode fails with DXERROR code=87


Sample code?

Also, what OS are you using?

This works here:

Strict

Local window:TGadget=CreateWindow( "Window!",0,0,640,480 )

Local canvas:TGadget=CreateCanvas( 0,0,ClientWidth(window),ClientHeight(window),window )

SetGadgetLayout canvas,1,1,1,1

Repeat

	If PollEvent()=EVENT_WINDOWCLOSE End

	SetGraphics CanvasGraphics( canvas )

	SetViewport 0,0,GraphicsWidth(),GraphicsHeight()
	
	SetClsColor 255,0,0

	Cls
	
	DrawText "Hello World!",GraphicsWidth(),GraphicsHeight()

	Flip

Forever



Grey Alien(Posted 2006) [#14]
Did the above code not fix the screen saver bug or just the syncmods?
The above code did not fix the screensaver bug. I did a syncmods first. THEN I pasted your code over the modules and did a Rebuild All.

However, you mini test code DOES work. So now I'm trying to figure out why mine doesn't.

Did you see my post about GraphicsModeExists always returning 0?

It's hopefully obvious what to use where!
Regretably that's not the case as I don't know anything about DirectX, I bought BMax to get into the top level fun stuff of making games rather than the technical underlying stuff (had enough of that on the Amiga). However, it seems that I've answered my question by replacing PrimaryDevice.ddraw with DirectDraw7().

As for minimise, I'm not using MaxGUI, I'm using a Windowed mode Graphics window with a minimise icon on it. This used to work and now doesn't, I'll try to make some test code.


Grey Alien(Posted 2006) [#15]
Minimise bug:

Graphics 800,600,0
WindowHandle = GetActiveWindow()
ccEnableMinimize(WindowHandle)			

While Not KeyHit( KEY_ESCAPE )
   Cls
   DrawText "Text Here!",0,0
   Flip
Wend

Function ccEnableMinimize(hWnd:Long)
	' Adds the Minimize Button "_"
	?Win32
	Local tmp:Long = GetWindowLongA( hWnd, GWL_STYLE )
	tmp = tmp | WS_MINIMIZEBOX
	SetWindowLongA( hWnd, GWL_STYLE, tmp )
	DrawMenuBar( hWnd )
	?
End Function



Grey Alien(Posted 2006) [#16]
OK here is some code that crashes 100% of the time on my PC:

Extern "win32"
	Function GetCursorPos%(point: Byte Ptr)
End Extern

Type TPoint
	Field X
	Field Y
End Type

Graphics 800,600,0

WindowHandle = GetActiveWindow()
ccEnableMinimize(WindowHandle)			

Local start = MilliSecs()
While Not KeyHit( KEY_ESCAPE )
   Cls
   DrawText "Text Here!",0,0
	Local pt:TPoint = ccGetCursorPos() 'this is position relative to the top left of the desktop
	If pt<>Null Then DrawText pt.x + "," + pt.y,0,20
	DrawText (MilliSecs()-Start)/1000,0,40
   Flip
Wend

Function ccEnableMinimize(hWnd:Long)
	' Adds the Minimize Button "_"
	?Win32
	Local tmp:Long = GetWindowLongA( hWnd, GWL_STYLE )
	tmp = tmp | WS_MINIMIZEBOX
	SetWindowLongA( hWnd, GWL_STYLE, tmp )
	DrawMenuBar( hWnd )
	?
End Function

Function ccGetCursorPos:TPoint()
	'Returns a TPoint
	Local point:TPoint = New TPoint
	If Not GetCursorPos(point) Then
	 	ccRunTimeError ("Error Getting Cursor Pos")	
		Return Null
	Else
		Return point
	EndIf
	?
	Return point 'safety for non-windows
End Function

' -----------------------------------------------------------------------------
' ccRunTimeError
' -----------------------------------------------------------------------------
Function ccRunTimeError(message$)
	DrawText Message,0,0
End Function


This took ages to track down in my framework. So what happens is this. It's getting the cursor position all the time with a windows API call (I know I can do this within BMax a different way but there is a reason for it) and basically this call fails when the screensaver kicks in so it calls ccRunTimeError which just draws some text (the full version I have does lots more), and that's where it crashes in there (with the Create DX7 surface Failed error)!

Looking at the debugger on the right I can see that it crashes in DrawText, then Draw (for Timagefont), then Frame (for TImage), then CreateFrameFromPixMap (for TD3D7Max2DDriver), then Create. Hope this helps.


marksibly(Posted 2006) [#17]
Ok, I've updated the above files, plus imagefont.

Please replace all 3 files, rebuild mods and try again.

/mod/brl.mod/max2d.mod/imagefont.bmx



Grey Alien(Posted 2006) [#18]
Thanks.

Mark, I just spent a while reinstalling V1.18 then the 1.22 patch then syncmods. (This time I'll backup my mods folder doh). But before I spend a while testing, did you manage to fix the Minimise issue and the GraphicsModeExists issue?

Also a little while ago I reported that D3D7Max2DDriver() sometimes returns null on some modern cards and I use the null result to choose OpenGL instead. Did you fix this so that it now doesn't report null on those cards or will it still report null if DirectX7 cannot be found? Basically what change did you make please? I'm asking because I want to check if my framework will break or not and to see if I have to ask someone who had the problem to retest for me. Thanks.


marksibly(Posted 2006) [#19]
Hi,

Done minimize/screensaver, not GraphicsModeExists.


Did you fix this so that it now doesn't report null on those cards or will it still report null if DirectX7 cannot be found?


As I said in the bug reports forum, there was a bug in there until a week or so ago that may have been causing the library to incorrectly return Null (or, for that matter, incorrectly return non-null) upon initialization.

The rewrite includes this fix so maybe it'll work now - the only real way to find out is to try it again on the machines that were failing.

Sorry I can't be more positive, but this is the wonderful world of Windows and it is a strange place full of vagaries and randomness...


Grey Alien(Posted 2006) [#20]
Hi Mark. Thanks for the response. I'll test this later today and try to get the person with the problem to test the Null/non-null issue again.

Meanwhile it would be great to have the GraphicsModeExists fix too.

Also, when testing yesterday, my code (using the DX code from above) was generating a bug (access violation to do with frame index being out of bounds) with some animated particles. I assumed that I'd altered something in my code and created a bug. However, when I restored the old DX code (and hadn't touched my particle code), the particle bug went away. This is odd, so later when I try the new DX code again, I'll see if this bug comes back.


marksibly(Posted 2006) [#21]
Ok, GraphicsModeExists should be fixed now.

Update d3d7graphics.bmx above and rebuild mods.


Grey Alien(Posted 2006) [#22]
Great I'll just finish my current bit of code then I'll test.


Grey Alien(Posted 2006) [#23]
testing right now...

Just as a side issue, this used to compile:

PrimaryDevice.backbuffer.unlock(Null)

but now no longer does, I've replaced PrimaryDevice with all 3 of these with no joy:

D3D7GraphicsDriver().DirectDraw7()
D3D7GraphicsDriver().Direct3D7()
D3D7GraphicsDriver().Direct3DDevice7()

Any ideas?


Grey Alien(Posted 2006) [#24]
OK tested. Minimise and GraphicsModeExists bugs are fixed, well done. The font problem is resolved in the sample code I posted about but NOT in my framework (I'm loading in a ttf font when my game books and it's using this font to draw my RunTimeError when the screensaver is active). The error I get is "Unhandled Exception: Attempt to access field or method of Null object"

The crash is in DrawText() then Draw(). Here's a screenshot of the IDE's debug vars, the only null I could find (on opening all the +s) was on Local Image.Frames[0] which I'm not sure is correct.



Actually, normally my framework crashes on ShowPaused() which shows an "paused" image centrally when it detects the screen has lost focus (which occurs when the screensaver kicks in), but I had this commented out and so it was crashing on the RunTimeError code which tries to draw text. Anyway the error message is the same "Unhandled Exception: Attempt to access field or method of Null object" and the error occurs in DrawImage. If you look at this debug screenshot you can see that the problem could also be in image.frames[0] which is null...



Just to compare I did a debustop when showpaused is drawn normally (no screensaver) and Image.frames[0] is NOT null, it's a TD3D7ImageFrame and has fields like driver:TD3D7Max2DDriver, surface, sinfo etc.

I don't have time to write some test code for this right now, I need to revert to the old modules and carry on developing as my deadline is sailing way past. I hope you have enough to go on for now and that maybe others can help to - if not I'll get back on the case next week.

Thanks Mark


Grey Alien(Posted 2006) [#25]
one more thing, I mentioned that I was getting an access violation to do with frame index being out of bounds (after trying to draw an anim frame with the frame number obtained with the code below). This is really strange but on the old modules (V1.18 install upgraded to V1.22 then a sync mods) this code:

'Counter starts high and goes to zero
Frame = Floor(((1-Counter/Length))*(TotalFrames)) 'anim frames are zero based


never results in frame being the same as totalframes (thus out of bounds e.g. if there are 8 frames, frame 8 in a zero based array is the 9th frame) because I also check that Counter>0 before calling the code. When counter is zero you can see why frames would be too high e.g. If length = 100 you get (1-0/100) = 1*Totalframes which is too high.

***Anyway, the long and short of all this is that when I paste in your 2 DX modules from above and hit build modules in the IDE, then run my game, the above code DOES crash quite often because when counter is very close to zero e.g. 0.7e-7 it gets treated as zero in the formula (probably because of the /100) and thus resulting in an out of bounds frame.

Therefore my question is this: Why should simply plugging in two new DX modules and clicking build modules cause floating point calculations to be handled differntly? It know it shouldn't but something has changed! Maybe it's the build modules that's going "funny" (technical term).

Any ideas?


DStastny(Posted 2006) [#26]
The problem with the Floating calcs is caused by this being missing from IDirectDraw7::SetCooperativeLevel not having this flag set DDSCL_FPUPRESERVE

This flag needs to be set wheter in windowed or Fullscreen Mode.

So Mark you need to set Cooperative level when fullscreen or Windowed and ensure you set this flag.

I had trouble with some bizarre floating point behaviro when making my Max2d DX9 driver and had to ensure that floating point precesion is maintained by DirectX.

This is technical issue with DirectX it sets the FPU precsion differently for performance reasons. Most compilers use double precsion as default. Beats me why MS did this as its kinda of going back to early FPU slow speed. But unfortunatly its still in DirectX even through DX9

Hope that helps.


Doug Stastny


Grey Alien(Posted 2006) [#27]
wow that's crazy but I'm sure glad you read this thread Budman. sounds totally feasible.


Grey Alien(Posted 2006) [#28]
believe it or not but Oberon Media's QA deptartment found this bug (via Ctrl+Alt+Del on certain OSs: XP Pro and Win2K) and they *won't* distribute OZ or Holiday Bonus until it's fixed! sigh...so that's no games on AOL, MSN, Yahoo, Pogo etc...anyway Mark, if you are out there, a fix will help me sink or swim - pretty please with sugar on :-)


marksibly(Posted 2006) [#29]
Ok,

New mods available - see first post.

Nore: The debug posts are nice, but please also show the line where the exception happened - ie: double click on the 'lowest' function in the debug trace.


tonyg(Posted 2006) [#30]
@GA, So from this
I have a choice of using the old stable driver with screensaver problems or the new "untested" driver...
you actually decided to
go with the untested driver?


Grey Alien(Posted 2006) [#31]
Mark: So I double click on the line in the IDE, cool, I never knew that, will do. So has anything changed since the last version I tested i.e. has the floating point thing been sorted? and has that image.frame issue been sorted (including for fonts)? Thanks.

Tonyg: It's no longer "untested" as I've been testing it loads. Actually I *wasn't* going to use the new one but now that a major distributor has said they won't sell my games unles the DX Screensaver issue is fixed, I have no choice but to keep on testing the new driver until it's fixed. This is also major time distraction for me now that I really don't need, but it should hopefully all turn out rosy...


marksibly(Posted 2006) [#32]
Hi,

Yes, hopefully all issus have been addressed.

If you're still having problems, feel free to email me the source+media, to blitzman at blitzbasic dot com and I'll have a hack.


Grey Alien(Posted 2006) [#33]
OK cool thanks I'll try this out over the weekend. So the floating point thing is sorted too as Budman suggested right?


marksibly(Posted 2006) [#34]

So the floating point thing is sorted too as Budman suggested right?


Theoretically...the new version was indeed missing the FPUPRESERVE so I put that back in.


Grey Alien(Posted 2006) [#35]
OK, I'll retest that too now that I know it's "fixed" thanks for the reply. Have a good weekend! (I'm working right through it - two 16 hours days...)


Grey Alien(Posted 2006) [#36]
Mark. Still having problems with this. I was fully up to date with sync mods before I tried out your new modules. I extracted them over the existing files, that was I all I had to do wasn't it? Anyway, when the screensaver runs my game crashes in DrawText still, same debug readout as before i.e. ImageFont.Image.Frames[0] is null.

Nore: The debug posts are nice, but please also show the line where the exception happened - ie: double click on the 'lowest' function in the debug trace.
ACtually I already did this for both debug screeshots (see the scroll bar is at the bottom on the right). After you said that I thought that you could double click on the line in the IDE and it would open up the correct file and show the correct line but that doesn't work, then I realised you mean click the little + signs on the debug trace (which I'd already done 4U).

Also I tried rebuild modules just in case it needed that but that fails in D3D7graphics with:

Compile Error: Too many function parameters
[C:/BlitzMax/mod/brl.mod/dxgraphics.mod/d3d7graphics.bmx;385;3]

Which is this line:

		If _dd7.GetCaps( caps,Null )<0 Return _Destroy()


So the new GetCaps is not compatible with some old module.

On a positive note it seems that the floating point problem is fixed.


Yan(Posted 2006) [#37]
...Oops...


Yan(Posted 2006) [#38]
I installed the new stuff and rebuilt all modules (which I tend to do every few sync mods anyway, as it generally rectifies occasional funkiness).

My screen savers don't hang when coming out of power saving mode now like they did with the old driver.


[edit]
Grey Alien's test code doesn't crash when coming out of a password protected screen saver here, either.
[/edit]


Grey Alien(Posted 2006) [#39]
my rebuild modules doesn't work. But the new modules are working just after I plugged them in as there is a difference.

Yeah that test code works but in my framework I'm still getting the "Attempt to access field or method of Null object" when trying to draw text. I'm not freeing the text up or anything but I AM drawing it when the app is "suspended" by the screensaver+dialog. In fact I tested this on a slimline piece of code and the text DID show up on return from the screensaver (instead of crashing with the null error) but some letters were missing from it! crazy.

Also in my framework, if I stop the text from showing so that my code doesn't crash, my code draws a "paused" imaged when the app is suspend. Upon successful return from the screensaver (woo) I pressed P to bring up paused manually and nothing appeared. The image was empty!!! It wasn't null (I think, perhaps I protected against this, or maybe you did as part of your fix?), so didn't crash, there was just nothing there. This is repeatable, but only in Holiday Bonus which has a lot of graphics loaded. Mark, I don't know what you did to repair the image.frame=null problem (for fonts and images) but it's not 100% fixed...

Could it be that the restoration of the DX surface and image frames works but only on some of them and that if you have a lot loaded others still remain corrupted (blank) or get Null pointers for some reason? Any ideas?


Grey Alien(Posted 2006) [#40]
nice screenie of that font problem. Note that the dialog continually redraws BUT without a CLS which is why the background is corrupt on return from screensaver.




***[edit]just noticed that the <press any key> is fine. It should be printing "Error Getting Cursor Pos" so the caps are gone, and u for some reason...


Grey Alien(Posted 2006) [#41]
I've posted some test code to duplicate the above problem. Sorry it's got lots of extra stuff in there but I was pasting stuff in from the framework.

Basically run this code, note how the first dialog is fine. Click to show the main app. Wait 1 min and after screensaver disappears you need to logon again, then the dialog can be seen but with that corruption to the text (ignore the other corruption on the black background, that's due to no CLS in ccDialogOK()). Remember this dialog is redrawing and using Flip so it should be fine. Also the dialog is first drawn when the app loses focus and EVENT_APPSUSPENDED is recieved, so in theory it's drawing when the screensaver is running, maybe, I don't know what happens for sure...



I hope that this helps. Meanwhile I'm going to remove the ccRunTimeError from ccGetCursorPos so at least my game doesn't crash (even if paused disappears) and release that to the portals and hope they don't notice the missing pause!


DStastny(Posted 2006) [#42]
Before I wrote the MaxD9 driver, I had written a replacement Dx7 driver that I shared with Skidracer that had fixed all these issues with Screensavers and resolution changing. This was well over a year/two years ago. I offered the code to BRL to use as they wish. Since I had no need for Max2d, I moved on to DX9. My Max2d Dx9 driver was more of see if I could do it.

I subsquently had a brain fart and misplaced the final, but might be able to dig up a version that was pretty close to what I thought was final. If you want Grey I'll dig it up and see if I can polish it up. There was a couple of revsions I had to deal with Bad Drivers, so that is what would need to be resolved. But for most part it was stable, just needed wide testing.

The issue that Mark's implmentation has is revolves around two things. Texture Managment and the function

HRESULT TestCooperativeLevel(void); 


If this returns DDERR_WRONGMODE which Screensavers with log in or if you just change the resoultion of your desktop while app is running it will return. You MUST tear down the entire DirectX device and rebuild it since the surfaces can not be restored. To tear down the device you must make sure that the last referenced Release returns a count of zero before rebuild. ie. DirectX is pretty much gone.

The tricky part with MAX is to make TImageFrame's work.
I had to implement a more sohpisticated messaging system to notfiy all the textures to destroy them selves then recreate them. The Dx9 driver does this although not nessary under DX9, which is why it works correctly in these situations. Although its bit easier to implement with DX9 than Dx7 it still doable.

This is probably cause of your corruption.

The tear down of the device must get all the reference counts to zero before the rebuild. Otherwise you get wonky behvaior.

I do feel for BRL trying to get DX7 to work as many vendors cheated on thier drivers to get performance so they dont always work as desired with the API. Its funny how many developers blame MS when its really the hardware vendors fault.

I'll try to help anyway I can as I can understand your need for a 100% stable driver.


Doug Stastny


Grey Alien(Posted 2006) [#43]
Hi Doug. The same behaviour has also been reported in win2K/XP PRo when the user presses Ctrl+Alt+Del and there is some talk of it happening due to fast user switching (although I've never looked into this). So it's not just the scrensaver thing but no doubt it's all the same cause.

At this stage Doug I can' try out a new driver as I have to release the full version tomorrow, so for now I have to be content with some textures disappearing but the game doesn't totally bomb anymore.

It would be cool if Mark can solve the problem with your help. It would be a bad idea to drop DX7 as lots of older PCs only have this and to force people onto DX9 would reduce the market size hugely and be an unwise move in my optinion. Maybe in a year or two that would be fine...


marksibly(Posted 2006) [#44]
Grey, can you plese email the project+media to blitzman at blitzbasic dot com? This trial and error approach could end up taking ages.

I'm still confused about why it's still crashing in TImageFont.Draw, as all objects are checked for null-ness before use now.

But I can't see from your debug output what line within TImageFont.Draw it thinks it's on.

etc, etc.


Grey Alien(Posted 2006) [#45]
Hi Mark, currently it's occuring the full version of Holiday Bonus. I can't send you that source and media but I'll get you something next Monday (or maybe at the weekend - I'm away Fri/Sat otherwise I'd do it sooner). Meanwhile the codebox I posted above does result in null letters in the font. Can you fix that? Have you tested it? I spent a while today copying and pasting out of my project to give you that runnable code which requires no media so that you can duplicate the error easily. Thanks for looking into this.

So maybe you've answered my question about why Paused does not show, it's been made null by the screensaver DX problem and then nothing draws when control returns to my game. But isn't having a null check just a "cure" instead of a "prevention"?


Grey Alien(Posted 2006) [#46]
Sorry mark, not had time to do anything yet, been marketing Holiday Bonus - God it takes ages! Anyway like I said about the codebox I posted a few posts up will result in null letters in the font and that needs to be fixed. I spend ages making that example :-( ...


MGE(Posted 2007) [#47]
Good lord!! Where do we stand with all this?!?!?!


Dreamora(Posted 2007) [#48]
the new "test dx7" module has replaced the old one in the middle of 1.24 lifetime and is the one you are using now.