Crash problem

BlitzMax Forums/BlitzMax Programming/Crash problem

gameshastra(Posted 2008) [#1]
The following fragment of code is crashing after some cycles of display.All the code is not shown for proprietary reasons. Please suggest the possible causes for the problem.

<CODE>
While Not KeyDown(KEY_ESCAPE)
Cls()
BindTexture( texture )
DrawTexture( texture )
Flip( 1 )
Wend


Function DrawTexture( texture:IDirectDrawSurface7 )
'some vertex initialization code here and finally this fucntion is called
device.DrawPrimitive( D3DPT_TRIANGLEFAN, D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1, vertData, numVerts, 0 )
End Function


Function BindTexture( texture:IDirectDrawSurface7 )
Local device:IDirect3DDevice7 = D3D7GraphicsDriver().Direct3DDevice7()
device.SetTexture( 0, texture )
device.SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE )
'.... some other SetTextureState calls here
End Function


</CODE>


gameshastra(Posted 2008) [#2]
No clue after several tries. Your help is appreciated.


Brucey(Posted 2008) [#3]
Does it crash in debug and release modes?

In debug mode doesn't it give you an idea of where it had a problem - sometimes you can get an idea of the location it fails at.


gameshastra(Posted 2008) [#4]
Sometimes it crashes in Flip , sometimes in DrawTexture with unhandled memory exception. sometimes it comes out of the program with process ended.


gameshastra(Posted 2008) [#5]
It crashes both in Debug and Release Modes. Sometimes it comes out with a bad ref obj message. Not very clear what the problem could be.


Dreamora(Posted 2008) [#6]
Are you potentially using many textures? Or differently asked: more than your GPU has VRAM.


gameshastra(Posted 2008) [#7]
I am testing only with one texture. This is to establish how to use DDS textures.


gameshastra(Posted 2008) [#8]
Should the Bind And Draw be done repatedly. Are there any example programs about how to correctly use DirectX for Textures, or otherwise.


gameshastra(Posted 2008) [#9]
What is the correct way to Draw a Texture. Please give some info on this.

Awaiting your reply.


Regards


tonyg(Posted 2008) [#10]
Drawimage is the correct way to draw a texture.


gameshastra(Posted 2008) [#11]
I/We are trying out DDS textures which requires DirectX, DrawImage is used to draw images keeps images in uncompressed format in video ram DDS textures use less vram. please give your suggestions and advice.


Dreamora(Posted 2008) [#12]
write your own TCompressedImage that extends TImage and especially TD3D7CompressedImageFrame that extends TD3D7ImageFrame with its own draw method and use DrawImage with that one.

See Indiepaths Render2Texture Module as an idea which creates its own textures as well as stock Max2D textures can not be used as render targets


tonyg(Posted 2008) [#13]
I/We are trying out DDS textures which requires DirectX,

Sorry, I must have missed where you explained that in your post.


gameshastra(Posted 2008) [#14]
DrawImage handles TImage which is stores images in uncompressed format in vram. DirectX texture drawing with DDS textures keeps the texture in compressed format in VRAM. This is needed to optimize VRAM usage for low end machines. What are the possible ways to do this?.

Regards


tonyg(Posted 2008) [#15]
Can't you read them with Freeimage into a replica Timage system (or extend it as Dreamora suggests) and keep them in VRAM by not using default DX Texture Manager?
You might want to post the code, texture and full error messages.
I can't remember anybody discussing the use of DDS textures before (other than yourself) or anybody working with them (ditto). It is obviously a tricky area (I take it you are from a programming house so must be quite skilled in DX/OGL yet you are struggling) so I don't think people are going to drop what they're doing to work it out for you. The options I can see : Make it as easy as possible for somebody to help (e.g. provide code, textures etc) or give them an incentive to do it (payment or through technical interest).


gameshastra(Posted 2008) [#16]
Well here is the code, Sorry to give you the trouble. The teture file used ->dxt1.dds is created with DirectTexture tool of direct draw sdk. If you require I can mail you the texture file also. Thanks very much for your help.




Dreamora(Posted 2008) [#17]
write your own TCompressedImage that extends TImage and especially TD3D7CompressedImageFrame that extends TD3D7ImageFrame with its own draw method and use DrawImage with that one.

See Indiepaths Render2Texture Module as an idea which creates its own textures as well as stock Max2D textures can not be used as render targets


Especially the r2t implementation should give you more than only simple hints on how to implement it cleanly.
As well as BRL.D3D7Max2D Module and the TD3D7Image (Frame) implementations

And you won't be able to safe that much of VRAM as you currently imagine. Any reduction of VRAM comes at a cost. DXT at the cost of quality reduction, so you will most likely use it for larger images like backgrounds etc, but not for everything. at least if your target was to have the same quality as with png

PS: and I would suggest learning the board tags. Its hard to impossible to take a "developer" serious that wants to mess with a System API but is not even capable of reading a simple board faq


tonyg(Posted 2008) [#18]
How about uploading a .zip file with the code and the texture?
p.s I apologise if I have given the impression I am going to help get this to work. What I was suggesting is things for you to check and how you might get help from other people here,


gameshastra(Posted 2008) [#19]
Can you give me your email id so that I can send it.
Thanking you for your response.


tonyg(Posted 2008) [#20]
Can you give me your email id so that I can send it.


You still seem to believe I have agreed to help on this. Just to be clear... I have not.
If you post the code and textures so people have got a chance to run it for themselves then *somebody* might help.


gameshastra(Posted 2008) [#21]
Thanks for your response. I request anybody who knows the solution to this problem to help me. The code is in previous post starting with "well the code.." is complete, it requires a texture file and I don't know how to upload the file to your site.
Appreciating your help.

Regards


tonyg(Posted 2008) [#22]
Upload the texture file to *YOUR* site and then post a link to it here.

<EDIT> P.S. This is more community forum than a support forum. Sometimes the developers respond but, basically, you are relying on the user community to take their own time to help out of the goodness of their own hearts.
<EDIT2> If it helps your problems is when the GC runs.
Turn off GC and it should run OK (or, at least, for much longer).
<edit3> Loop through your vertdata array. It seems not to be holding the values you think it does.


gameshastra(Posted 2008) [#23]
Please use the following texture file

http://1800edrive.com/1800edrive/download/direct/workspace/SpacesStore/bf4794f7-df1c-11dc-8c20-6d2f8b3d9a91/dxt1.dds
Regards


Brucey(Posted 2008) [#24]
except you need to register to download it ;-)


GfK(Posted 2008) [#25]
Have you tried asking one of the other two people that regularly use this account?

I'm sure you could figure out the solution much quicker between the three of you, even though you are strewn across three continents.


gameshastra(Posted 2008) [#26]
We have not found the solution to this problem within the group. The code given will run with the below texture file

Link for texture file is below

http://1800edrive.com/1800edrive/download/direct/workspace/SpacesStore/bf4794f7-df1c-11dc-8c20-6d2f8b3d9a91/dxt1.dds

Thanks for your help


tonyg(Posted 2008) [#27]
You seem not to have read or commented on this :
<EDIT2> If it helps your problems is when the GC runs.
Turn off GC and it should run OK (or, at least, for much longer).
<edit3> Loop through your vertdata array. It seems not to be holding the values you think it does.




gameshastra(Posted 2008) [#28]
Thanks,

I set GCSetmode(2) and called GCCollect() in the while loop

I got the following error after two iterations

bad refs:obj=$18c9a20 refs=$0

Regards


tonyg(Posted 2008) [#29]
... and if you *don't* call GCCOLLECT() what happens?
This is simply to prove to you that the issue is with GC.
If you can prove that then check the vertdata as I suggested. *IF* it is the vertdata causing the problems then try a different method OR, using the obj ref, check using debugstop which object this refers to.
My guess is GC is running and removing one of your pointers to vertdata. You might want to add them as fields in a type to check/prevent this.

P.S. I am personally a bit 'put-out' that you are charging people to write their code and then using these forums as support.
How about releasing some of this code into the code archives for the community to use?


Dreamora(Posted 2008) [#30]
Thta will not help.
If he has an object reference with 0 refs on it, something badly mixed up and that normally only happens when you are crazy / stupid enough to toy with the value of the references or use varptr which is not safe and must not be used within BM because it will not raise the reference counter. so when the original reference is cleared, the varptr points at a dead place


tonyg(Posted 2008) [#31]
Sorry Dreamora. What are you saying will not help? I am not suggesting a solution but an investigation route.


Dreamora(Posted 2008) [#32]
Thats what I given.
Don't use pointers to objects that don't life long enough, otherwise the pointer will point to NULL not an object, as a pointer has no influece on the lifetime of an object!