direct draw
#1 Anonymous Poster_Anonymous Poster_* Guests - Reputation:
Posted 18 October 1999 - 05:58 AM
#2 Members - Reputation: 122
Posted 11 October 1999 - 01:09 PM
but this book takes the sting out of reading the MSDN DirectX docs (which is what I did) and will also help you with more than just DirectDraw. I believe by the end of the book you have completed a small game engine.However, if you need to learn C++ as well, you might want to settle for a slightly (read: much) less advanced project than a game. The scope of a game is quite large by the time you are complete.
But, to answer your question more directly, I think once you actually make a simple game loop, you will realize that it's fast enough without ANY need for optimization.
Also, if I'm completely underestimating your experience feel free to take a jab
hehe
#3 Anonymous Poster_Anonymous Poster_* Guests - Reputation:
Posted 14 October 1999 - 06:05 PM
I'm probably not making any sense because I'm rambling on and on...
#4 Members - Reputation: 122
Posted 15 October 1999 - 12:55 PM
You definately have to keep in mind that hardware operations are going to be MUCH faster in most cases that CPU operations because of proximity to the actually video memory. However, there are a few considerations you must keep in mind. Basically, video->video blits are the fastest, then comes system->system blits, and last comes system->video blits (leaving out AGP stuff). So basically, if your game wants to display 1,000 different sprites, you have two options:1) Leave the sprites in system memory, use a backbuffer in system memory, create your frame, then with one mighty blit copy it to the video card's backbuffer and Flip(). This is ideal when you can't/won't place your sprites in video memory.
2) Put your sprites in video memory, use the hardware blitter to blit to the video backbuffer, then Flip()
All of this makes little difference however if you are blitting maybe 30-50 times a frame. Or if you have a P2 350+! 
Also, large blitting counts may make you want to simply Lock() the backbuffer and memcpy() or use a custom software blitter to copy the data in. This is because every blit in DirectX requires a Lock()/Unlock() sequence (hidden to the programmer) that locks the memory completely using a Win16 mutex (i believe).
Anyway, have fun with that. I hope I was helpful. This week has kinda been my introduction to programming forums, so my teaching skills may not be up to par yet.
- Splat
#5 Anonymous Poster_Anonymous Poster_* Guests - Reputation:
Posted 15 October 1999 - 06:52 PM
#6 Anonymous Poster_Anonymous Poster_* Guests - Reputation:
Posted 15 October 1999 - 07:59 PM
Sorry to interrupt, but what do you suggest about this?
I have a lot a bitmaps to blit to the screen. All available
video memory is filled up with bitmaps (the ones that are most used),
and the remaining bitmaps are created in system memory.
So I got both kinds.
I don't keep track of what bitmaps are in video and what are in system.
(Hmmm...maybe I should?)
And I have one flippable back buffer and one primary surface.
(I would think that these two are both video memory by default, but I
do nothing to specific it when creating them).
Right now, I blit everything (both video and system bitmaps) to the
flippable back buffer and then flip it, so nothing out of the ordinary.
Would you suggest I create an additional back buffer, however, this
one will be specified as system memory? And try to separate the
blits according to video (bitmap)->video (buffer), and
system (bitmap)->system (buffer)?
I don't know if this would be faster, since I would have to do an
additional blitting of this new system memory back buffer to the
flippable back buffer (video).
Does this makes sense?
#7 Members - Reputation: 631
Posted 15 October 1999 - 08:16 PM
------------------
~CGameProgrammer( );
#9 Anonymous Poster_Anonymous Poster_* Guests - Reputation:
Posted 16 October 1999 - 06:25 PM
thanks,
matt t
#10 Members - Reputation: 682
Posted 17 October 1999 - 06:03 AM
Of course, another idea is to use Direct3D in a 2d game so that you have access to the users 3D hardware and therefore have access to a whole bunch of neat features. Of course this probably isn't the best approach if your just learning directdraw.
--TheGoop
#11 Members - Reputation: 122
Posted 18 October 1999 - 05:58 AM
Reading from video memory is a very bad idea, it is incredibly slow.
Writing to video memory is a bad idea also, it is incredibly slow (though not as slow as reading.)
If you want to write, read, and modify a sprite, and at the same time use blt, then you should use a system memory surface.
If you don't want to use blt, and just read or modify, then you should just use your own system memory buffer to avoid the lock()/Unlock() penatlies. If your hardware accelerates sysmem-vidmem blts (doubtful) you may want to then lock and copy into a system memory surface, then blt, otherwise lock the back buffer and copy your data in.






