Mirage Source

Free ORPG making software.
It is currently Thu Mar 28, 2024 5:28 pm

All times are UTC




Post new topic Reply to topic  [ 85 posts ]  Go to page 1, 2, 3, 4  Next
Author Message
 Post subject: Optimized Surfaces
PostPosted: Fri Oct 27, 2006 11:21 pm 
Offline
Regular
User avatar

Joined: Mon May 29, 2006 5:33 pm
Posts: 30
Tutorial Difficulty 3/5: Intermediate

First and foremost. If you are just learning to program, please do not try to attempt this. You can RIP it from the code download, but do me a favor, and do not ask me questions. I am not here to teach you the basics. This requires you to have a good knowledge of Visual Basic AND (NOT OR), DirectX 7.

As I had mentioned in a previous topic of William's, I created this for the use in one of my own projects. It has since been converted for use in MSE Build 1. This will not be a pure copy and paste tutorial. It will require you to read some, ok, ALOT. However, at the bottom of this post will be a link to the code download of a copy of MSE with this tutorial already implemented.

OK, I recently updated this tutorial to work with map animations as well, I added it at the center for simplicity. While reading this tutorial, you'll see a few code snippets here and there. Those are small pointers for code that you may not already know.
------------------------------------------------------------------------------------------------------------------
Enough formalities. Let's get our hands dirty now, shall we?

In Mirage, as you should know, when DX is initialized all graphics are loaded into individual surfaces. In the game loop, the client will make calls to procedures that will draw directly to the backbuffer, which in turn is drawn directly to the primary surface. For the most basic level of a game, this is perfectly fine. However, as you begin to add more and more things, you will begin to notice a drop in your FPS. Slowly overtime, as you add more and more, you will notice you are losing precious time in certain procedures in your gameloop.

So, let's get ahead of the game and fix this before it happens, let's minimize how much the map is drawn each loop. In fact, we are going to make the map not draw at all during the game loop. The only time you truly need to draw the map is when you first join it, when changes are made to it, and in the event of scrolling maps, when you move. For the purpose of this tutorial, we are going to assume you do NOT have scrolling maps. However, at the very end of this tutorial, I will give some pointers for if you happen to already have scrolling maps.

Now, first you need to create a few new buffers. We will name them, DD_LowerBuffer, DD_MiddleBuffer, and DD_UpperBuffer to go along with the Mirage flavor. If you cannot guess, DD_LowerBuffer and DD_UpperBuffer will be where we draw our maps. DD_MiddleBuffer is left for Items, NPCs, and Players. Why do we split the map between lower and upper? Well, if you can understand the logic of the current way of drawing to the backbuffer, you will know that you make calls to the draws in the order you want them to appear. Therefore, we split the map to lower for everything below the player, and upper for everything that will be shown above the player.

Simple enough so far right? Well try to keep with me. Now that you have defined your buffers, you need to initialize them with all the other surfaces. Did you notice that we did not create a surface description for those as well? That is because we did not need to. These three surfaces will have the exact same surface description as the BackBuffer. Therefore, in order to initialize the surface for use, you just create the surface in the exact same manner as you would the BackBuffer.

Now that you have initialized the surface, we have to create the color keys for the buffers. Oh and, yes, we really do need to do this. I know the backbuffer does not currently have a color key set, but now it needs to have one. After you have created all four surfaces (BackBuffer included), right under, we are going to set the colorkey. How do you do this? Well, it is really simple, and if you study the tile surfaces, you should be able to figure it out, but if not here is how you do so for the BackBuffer:

Code:
DD_BackBuffer.SetColorKey DDCKEY_SRCBLT, Key


Still with me? I hope so. Before we go any further, let's go ahead and clean house a little. Go into the procedure where DX is cleared (DestroyDirectX) and set the 3 new surfaces to nothing AND add in the BackBuffer since it was not there before. Now for the fun stuff.

Currently, we have the map split into two functions, BltTile and BltFringeTile. What you want to do now, is copy everything inside BltFringeTile and paste it over at the bottom of BltTile, delete the entire sub of BltFringeTile and rename BltTile to BltMap. This procedure may look a little messy, but we will leave it like that for now. Now, for the ground, mask, and animation layers, you need to change DD_BackBuffer to the new DD_LowerBuffer. Next, you need to change the Fringe to DD_UpperBuffer. Have you kept with me so far? Do not go attempt to test this yet. We are not done yet. Now, remove the X and Y parameters in BltMap, and dim X and y as bytes. Now we need to create two for loops one for x and one for y. We moved the For loops inside the procedure because, well to be honest, there's a lot of lag when you do it the old way and I'm not quite sure why there's more lag than usual.

Do not skip this step; it is very important. Later on after everything has finished, you can comment this out to see what I mean, but until then, just take my word for it. Now, if you left everything as is now, you would notice after loading a map that had every tile filled and loading another with blank tiles, you would still see the old tile in its place. That is not a good thing. So let's clear out the buffer before we start drawing. With rec, we need to define it the same size as the game screen. In order to do this, you can either take the size of picscreen on frmMirage or you can make it the size of the max tiles +1 times the tile size ((MAX_MAPY +1) * PIC_Y). After you have defined the size of rec, you need to clear out the buffer. In order to do this, we are going to fill the entire buffer with black. You do this with BltColorFill.

Code:
Surface.BltColorFill rec, RGB(0, 0, 0)


Make sure you do this for both the Lower and Upper buffers inside of BltMap, before you start drawing (above your two loops). So far so good. Now before we go further. Let's go ahead and clear out the backbuffer in the same way. We are going to do this inside the main game loop. You will want to do this before anything starts drawing. So right under the check to restore surfaces, add the same code from above to here and change the surface to DD_BackBuffer. While we are here, go ahead and completely remove the calls to BltTile and BltFringeTile. We are going to move the call to BltMap elsewhere.

Next, copy and paste the bltcolorfill directly under the original. Make this new one DD_MiddleBuffer. Now you have cleared out the Middlebuffer for drawing as well. Had you not done this, it would have been EXTREMELY noticeable. Go ahead and comment it out and you will see later on in the testing of this new system.

Since we are still in gameloop, let's go ahead and finish up in here. After all drawing routines are down, and before we start drawing text to the backbuffer, we need to draw all our new buffers to the backbuffer. To do this again we need to define our rec to the same size as the gamescreen. After that has been done, you will need three calls to BltFast. The X and Y will be zero, and the source surface will be each of our new surfaces. Easy right?

Code:
Call DD_BackBuffer.BltFast(0, 0, DD_LowerBuffer, rec, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY)


So far so good. Now had we not removed the call to BltMap, you would be ready to go for a short test run. So you still want to test it...OK, well for the purpose of you testing this out, let's go ahead and re-add in our call to BltMap. Go into your handlepacket procedure and in the "mapdone" packet, after you set the GettingMap Boolean, add your call to BltMap. Now you can go test.

Uh-oh. It errored didn't it? Can you take a guess why it errored? Well I will give you a hint, the error has to do with DD_LowerBuffer. Ah, now you see, our directx has not been initialized yet. Why you ask? Well it really has to do with the order you receive the packets, but since there is a much simpler fix than messing with the packets, we will fix it the easy way. Go into GameInit (GameLogic module), delete the line to "InitDirectX," and move it into Sub Main after "TCPInit." You may also want to set the status to "Initializing Direct X...," but that's an optional choice. One more thing to change, go into InitDirectX, and remove frmMirage.Show. Now, you can test.

Hm, something is still off. What could it be? Could it be what I mentioned before? Perhaps not clearing one of the buffers causes the problem you may be seeing. Hm, well let's go back and uncomment that Color fill of the MiddleBuffer. Ah, works right? Good. Yes, if you have a map that is not blank, you will not see your players, items, or npcs. Well we have not finished yet, so that is perfectly fine.

After you are satisfied in testing how this works, let us go ahead and fix everything else. Go into BltItem, BltPlayer, and BltNPC and change each of the calls to DD_BackBuffer to DD_MiddleBuffer. Now everything will be displayed correctly. However, what would happen if we started editing the map? Well, no changes would be shown. How do we fix this? It's very, very simple. I bet you'll be able to figure it out.

Whenever you click on the map while in the editor, you place a new tile on the map. Whenever you right click, you delete a tile on the map. Whenever you clear a layer or the entire map, you clear tiles. Whenever you cancel from mapediting, you change all the tiles back to the stored version. You need a bltmap after you go through each of those. So, at the bottom of EditorMouseDown, before the last End If, you should have a bltmap. After you set the map back to the stored version in EditorCancel, you should have a bltmap. At the end of the entire procedure of EditorClearLayer, you should have a bltmap. However, you don't need one for EditorClearAttributes. Can you guess why? That's right, the tile attributes are blted every loop and not with the map.

Now, want even more convincing that you need those colorfills? OK, now that we have moved things to the middle buffer, go ahead and comment out the colorfill. You will now notice a nasty change. You will see a trail behind every player and npc after they move, and even AFTER you have left the map. Ugly right? Well uncomment the BltColorFill and you will see what you were expecting to see.

Now that we've finished everything else, let's go ahead and fix those map animations. What you'll want to do is go into the BltMap, and cut out the actual animation part. Then you'll want to remove the If statement before it draws the mask. So now you should be left with drawing the ground, mask, and then the fringe. Now create a new sub called BltAnimations. Take the code you cut out before and paste it in here. You'll need to define a new x and y variable as bytes. Now, make two new for loops using the x and y variables and the size of the map. So now you should have a pretty small procedure that looks similar to the old BltFringeTile procedure. Well minus the whole For loops.

Go into your game loop now and before you start drawing items, make a new If statement that checks if mapanimations need are on or not and then call the BltAnimations procedure from there.

Code:
If MapAnim <> 0 Then


Now your animations should work perfectly. If you have any questions after adding this, please feel free to contact me however you want, although posting here is probably the best method as with the exception of today, I'm rarely ever home.
-----------------------------------------------------------------------------------------------------------------
Extra stuff:
So you have scrolling maps? Well this will work for you too. You just need one additional change. Open up your ProcessMovement procedure. Remove the first check that stops the player from moving. On the second one, close off the If Statement before it and after it sets Moving to 0, add another call to BltMap. Finally, go back to the top of the procedure, and at the very top and a check to see if the player is moving:

Code:
If Player(Index).Moving <> 0 Then


There, now your maps should update after a player moves too. However, did you notice, the map now updates when ANY player moves and not just when YOUR player moves? I bet you didn't. That's OK; I'll forgive you this time. Go back to your new call to BltMap. Surround it with a check that makes sure the Index equals your index.

Code:
If Index = MyIndex Then


There you go. All done.

However, while we are on the subject of scrolling maps, consider this a small bonus for you. Please note, if you did not code the scrolling maps yourself and ripped it from another project, then you may as well skip this step. I am not going to give you any code, just an idea for you to use. I say this because this uses another level of basic math that will not help you if you did not know how to make the maps scroll yourself. If you happen to have scrolling maps, and I am not talking about Verrigan's method. You likely made your maps much bigger than the default size. Do you want to speed your drawing routine up even more? Good. If you were really smart, you have already done this, but if you have not, then pay attention.

Go into your BltMap procedure (assuming you used this tutorial), and look at your For loops. If you have a map size bigger than the gamescreen, then you should not be drawing every tile, all the time. Why draw what you cannot see, right? So, assuming you draw your player in the direct center of the map, take the gamescreen's size, divide it by PIC_X and Y, and subtract from the player's current x & y position with the halved value and you have your first x and y values. Add to the player's x & y position with the halved value and you have your second x and y values. Now, just make your for loops with these two new x and y's and you're only drawing what the player can see. However, if you notice choppy movement with this, simply add/subtract one more from those values. Did that any of that make since?
-----------------------------------------------------------------------------------------------------------------
Please note, this code has many of my own personal touches/fixes to it. Some basic changes to speed things up slightly and the removal of things that does not need to be there. If you want to know ALL the changes, compare it to a vanilla copy of MSE Build 1. However, here are few key changes in this compared to a vanilla:
- Complete removal of BitBlt
- Removal of Saving online players (redundant)
- Re-addition of the system tray (minimizes to tray)
- Hundreds of tiny optimizations
- Minimum form size for the client. (In case you never noticed, if you resized too small, it would error)
- Slightly faster server loading (many redundant clears that should have been combined)
- Fixed status window not showing ALL of what it was doing and added Progressbar to it
- Made Client chat text wrap rather than extend past the screen.

Later on for this code package, I plan to convert the server and client to SOX. Yes, IOCP is nice, but not everyone has WinXP and since there's already a tutorial to add that, this will be for those who don't have WinXP and want to remove the Winsock control.
------------------------------------------------------------------------------------------------------------------
No warranties on any of the other features/fixes in this code download.

As my site seems to be down, here's some temporary download links until I can get it uploaded:
Mirror 1
Mirror 2

Edit 02/16/08: It seems my links died over time. So I have reuploaded the to the first link and am personally hosting on Mirror 2. However, mirror 2 is not always online (usually is, but sometimes not). Be aware that if you are downloading from a university, you may be on my blocked list which would result in an error when trying to download.


Last edited by BigRed on Sat Feb 16, 2008 3:44 pm, edited 2 times in total.

Top
 Profile  
 
 Post subject:
PostPosted: Sat Oct 28, 2006 1:33 am 
Offline
Regular

Joined: Mon Jun 12, 2006 10:10 pm
Posts: 68
A great tutorial. I can't act on it because my trusty computer died on me, but reading was good enough right now.

So, basically, you divide all output onto three divisions if you will. The bottom one is for ground (and mask) layers of the map, the middle is for players, items, NPCs, etc, and the top one is for fringe stuff, right? That way we only need to clear and blit the middle layer whenever something happens (player moves) instead of clearing and rebliting the stuff that doesn't change too.

If what I've said is true, the idea is great in itself. I had tried a method in which I only reblitted the few tiles with changes occurring, but this way is much better because you can ignore the map stuff and just blit the changes in the other stuff.

Yeah, I have scrolling in my game/engine/thingy, but this will still help when the player isn't moving or nothing is happening at all. The only thing I'm wondering about is the possibility of a check to see if any change is occurring on the middle buffer and only then blitting it to save FPS when nothing is happening at all. That'd be amazing if there was some way to compare the contents of two buffers to see if they are the same (middle buffer with the last frame's image and tempmiddle buffer with the current frame's ones). So long as you do save speed by not displaying the graphic at all (I'd assume so).

Oh, and I've already done that last little option for scrolling maps. I've programmed in seamless scrolling maps and it's vital that I don't print the 8 surrounding maps worth of data when I don't need to. It'll open some other people's eyes, though.


Actually, as a last thought, don't you think it would be better to give items and even animations their own layers? NPCs and players would be on the same layer of course, but items don't exactly move around that much and we wouldn't need to reblit them all the time. Animations need their own layer too because they would effectively require you to reblit stuff all the time even when it hasn't changed.

Anyway, great tutorial!

_________________
Image


Top
 Profile  
 
 Post subject:
PostPosted: Sat Oct 28, 2006 5:30 am 
Offline
Pro

Joined: Mon May 29, 2006 2:15 am
Posts: 368
I've actually already tested this. Tutorial works perfectly, and it's very well explained and though out. Absolute necessity for any MS programmer. Good job BR :wink:

_________________
Image
Image
The quality of a man is not measured by how well he treats the knowledgeable and competent, but rather how he treats those less fortunate than himself.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Oct 29, 2006 3:48 pm 
Offline
Pro
User avatar

Joined: Mon May 29, 2006 3:26 pm
Posts: 493
Location: São Paulo, Brasil
Google Talk: blackagesbr@gmail.com
Obsidian wrote:
Absolute necessity for any MS programmer.


Great tut, realy, nice job! The idea itselfs is a very inteligent concept. I read it all and it seams to work perfectly. I will add this when I have more time. Btw, comparing a vanilla MS and a vanilla MS with this system, what's the efective change? I mean, how many fps it does change in average?


Top
 Profile  
 
 Post subject:
PostPosted: Fri Nov 03, 2006 2:21 am 
Offline
Pro
User avatar

Joined: Mon May 29, 2006 3:26 pm
Posts: 493
Location: São Paulo, Brasil
Google Talk: blackagesbr@gmail.com
Sry for double post.
BigRed, I did this and well... It actualy made fps goes down. I know it shoulds and actualy is not a problem w/ your tut. The thing is that I've added much more Buffers b couse I needed them, I added like... 7 Buffers more than your tut. That's becouse I did a floor system and I have mask2,maskanim2, fringeanim, fringe2 and fringeanim2 layers. It made a fps70+- changes to a fps40+-
Tnx anyway xD


Top
 Profile  
 
 Post subject:
PostPosted: Fri Nov 03, 2006 5:06 am 
Offline
Knowledgeable

Joined: Tue May 30, 2006 5:11 am
Posts: 156
Location: Australia
I think for the different masks, i think if you call them in a certain order and put it on the buffer, it should be fine.. I dont think you need that many buffers.. But yeah.. I think thats how it works after reading through the tute..


Top
 Profile  
 
 Post subject:
PostPosted: Fri Nov 03, 2006 4:49 pm 
Offline
Pro
User avatar

Joined: Mon May 29, 2006 3:26 pm
Posts: 493
Location: São Paulo, Brasil
Google Talk: blackagesbr@gmail.com
I did it like I dont need any animation sub, it blits the animations to a diferent buffer and then when mapanim=1 it blit that surface to the backbuffer, else it just does not. And w/ this floor system I realy need all that buffers, that's the min I could get.


Top
 Profile  
 
 Post subject:
PostPosted: Sat Nov 04, 2006 10:36 am 
Offline
Community Leader
User avatar

Joined: Mon May 29, 2006 1:00 pm
Posts: 2538
Location: Sweden
Google Talk: johansson_tk@hotmail.com
Very nice tutorial :) I will for sure use this in my game.

_________________
I'm on Facebook!My Youtube Channel Send me an email
Image


Top
 Profile  
 
 Post subject:
PostPosted: Fri Dec 01, 2006 9:45 pm 
Offline
Community Leader
User avatar

Joined: Mon May 29, 2006 1:00 pm
Posts: 2538
Location: Sweden
Google Talk: johansson_tk@hotmail.com
I just checked your source, and it seems from what I can see that this will actually slow it down? It will probably make it more organized, but what about the speed?

_________________
I'm on Facebook!My Youtube Channel Send me an email
Image


Top
 Profile  
 
 Post subject:
PostPosted: Fri Dec 01, 2006 10:10 pm 
Offline
Pro

Joined: Mon May 29, 2006 2:15 am
Posts: 368
The original would do this...

every X loop (x being a certain time)
Draw The Ground (one tile at a time)
Draw The Player
Draw Items
Draw NPCs
Draw The Fringe (one tile at a time)
end the loop

well the new system....


Draws the Ground Once
Draws the Fringe Once (and if you've added more layers, it draws all of them once)

Then it just draws the
Player
Item
Npc

So you're saving yourself.... a LOT of loops... i'm not good at estimating, but i bet it's in the thousands of loops... it's a very essential optimization IMHO

_________________
Image
Image
The quality of a man is not measured by how well he treats the knowledgeable and competent, but rather how he treats those less fortunate than himself.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Dec 01, 2006 11:36 pm 
Offline
Knowledgeable
User avatar

Joined: Mon Jul 24, 2006 2:04 pm
Posts: 339
...granted the layers don't have to change much.

But since players/items/npcs dont take a full layer like the farthest background tiles, doesn't that mean that you are rendering more? Why not just do it for the far background layer?

_________________
NetGore Free Open Source MMORPG Maker


Top
 Profile  
 
 Post subject:
PostPosted: Fri Dec 01, 2006 11:45 pm 
Offline
Community Leader
User avatar

Joined: Sun May 28, 2006 10:29 pm
Posts: 1762
Location: Salt Lake City, UT, USA
Google Talk: Darunada@gmail.com
Store 3 surfaces in memory. When someone enters the map, draw the map ground (stuff under the player) to one layer. Then draw the player layer to the next surface, include any door openings on this layer, etc. Then draw the fringe layer to the third surface. Then each loop, draw the background layer, then the player layer, then the fringe layer. Only three major blits per loop, instead of hundreds. Also, then, you'll only really need to change the player layer.

_________________
I'm on Facebook! Google Plus LinkedIn My Youtube Channel Send me an email Call me with Skype Check me out on Bitbucket Yup, I'm an EVE Online player!
Why not try my app, ColorEye, on your Android devlce?
Do you like social gaming? Fight it out in Battle Juice!

I am a professional software developer in Salt Lake City, UT.


Top
 Profile  
 
 Post subject:
PostPosted: Sat Dec 02, 2006 7:19 am 
Offline
Knowledgeable
User avatar

Joined: Mon Jul 24, 2006 2:04 pm
Posts: 339
You make less draw calls, yes, but you are drawing one huge surface with invisible pixels is my point. Not sure whether that'd be much slower or not since batch rendering only really seems to have much of a performance boost when batching at least a couple hundred renders.

_________________
NetGore Free Open Source MMORPG Maker


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 15, 2007 2:04 am 
Offline
Newbie

Joined: Mon May 29, 2006 2:18 pm
Posts: 22
Location: Florida
Was bored, and wanted to see how well this worked and well... It doesn't make the key tiles invisible when you open them...

Edit: Simple fix, just add BltMap to the keyopen packet. But, does that pretty much make this tutorial useless?


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 15, 2007 2:16 am 
Offline
Knowledgeable
User avatar

Joined: Mon Jul 24, 2006 2:04 pm
Posts: 339
This isn't a bad tutorial, but I would limit it to only the two tile layers since they do not change unless editing the map. Maybe even just the base tile layer, since the "flashing" layer doesn't always have a lot of tiles.

_________________
NetGore Free Open Source MMORPG Maker


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 15, 2007 2:56 am 
Offline
Pro

Joined: Mon May 29, 2006 2:15 am
Posts: 368
Why would you limit it if it saved so many drawing loops?

_________________
Image
Image
The quality of a man is not measured by how well he treats the knowledgeable and competent, but rather how he treats those less fortunate than himself.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 15, 2007 4:29 am 
Offline
Knowledgeable
User avatar

Joined: Mon Jul 24, 2006 2:04 pm
Posts: 339
Because you're not making effecient draws. If you draw the character layer, for example, the size of the whole screen, when theres only like 2 characters, you are drawing one HUGE imagine instead of 2 small images, combined with constantly updating that surface. With the ground tiles, its on pretty much every tile, so theres no wasting there.

_________________
NetGore Free Open Source MMORPG Maker


Top
 Profile  
 
 Post subject:
PostPosted: Thu Mar 15, 2007 4:11 pm 
Offline
Persistant Poster
User avatar

Joined: Tue May 30, 2006 2:07 am
Posts: 836
Location: Nashville, Tennessee, USA
Google Talk: rs.ruggles@gmail.com
Dragoons Master wrote:
Obsidian wrote:
Absolute necessity for any MS programmer.


Great tut, realy, nice job! The idea itselfs is a very inteligent concept. I read it all and it seams to work perfectly. I will add this when I have more time. Btw, comparing a vanilla MS and a vanilla MS with this system, what's the efective change? I mean, how many fps it does change in average?


It's been a while since anyone has said anything about this tut. I haven't tried adding it to my actual game (with extra layers added and what not).

However, I did add it to a testing client. The test client used Verrigan's seamless scrolling tut. My maps were 28x21 (much larger than the original 15x11, that I believe, is MSE default).

Before doing this tutorial, my fps was 16. I dropped the fps lock from 50 to 20 and was surprised to find that it only raised my fps to 17 or 18 (result of the huge maps, and loading surrounding maps I'm guessing, because even with a normal client with all the layers added, that usually raised my fps to 21).

After doing this tutorial, with my fps lock dropped to 20 still, my FPS was at a steady 32 during game play, including 5 npcs on the map.

Hope someone finds these test results interesting.

_________________
I'm on Facebook! Google Plus My Youtube Channel My Steam Profile

Image


Top
 Profile  
 
 Post subject: Re: Optimized Surfaces
PostPosted: Fri Jul 06, 2007 10:40 pm 
Offline
Submit-Happy
User avatar

Joined: Fri Jun 16, 2006 7:01 am
Posts: 2768
Location: Yorkshire, UK
First one is default mirage uncapped.

Second is Winds Whisper uncapped.

Winds Whisper has 3 NPCS on the map.
Winds Whisper has 5 extra layers (being used).
Winds Whisper has tilesets being set by tile.
Winds Whisper uses this tutorial :]

Image
Image

_________________
Quote:
Robin:
Why aren't maps and shit loaded up in a dynamic array?
Jacob:
the 4 people that know how are lazy
Robin:
Who are those 4 people?
Jacob:
um
you, me, and 2 others?


Image


Top
 Profile  
 
 Post subject: Re: Optimized Surfaces
PostPosted: Fri Jul 06, 2007 11:54 pm 
Offline
Community Leader
User avatar

Joined: Mon May 29, 2006 1:00 pm
Posts: 2538
Location: Sweden
Google Talk: johansson_tk@hotmail.com
Are you saying the fps changes so much due to this tutorial?

_________________
I'm on Facebook!My Youtube Channel Send me an email
Image


Top
 Profile  
 
 Post subject: Re: Optimized Surfaces
PostPosted: Sat Jul 07, 2007 12:01 am 
Offline
Submit-Happy
User avatar

Joined: Fri Jun 16, 2006 7:01 am
Posts: 2768
Location: Yorkshire, UK
No, I'm saying it changes even more.

Heres the source when I backed up just before I added the tutorial:

Image

_________________
Quote:
Robin:
Why aren't maps and shit loaded up in a dynamic array?
Jacob:
the 4 people that know how are lazy
Robin:
Who are those 4 people?
Jacob:
um
you, me, and 2 others?


Image


Top
 Profile  
 
 Post subject: Re: Optimized Surfaces
PostPosted: Sat Jul 07, 2007 6:44 pm 
Wow.. That's a big change. Too bad it don't work with scrolling. =(


Top
  
 
 Post subject: Re: Optimized Surfaces
PostPosted: Sat Jul 07, 2007 7:11 pm 
Offline
Submit-Happy
User avatar

Joined: Fri Jun 16, 2006 7:01 am
Posts: 2768
Location: Yorkshire, UK
It does >_>

_________________
Quote:
Robin:
Why aren't maps and shit loaded up in a dynamic array?
Jacob:
the 4 people that know how are lazy
Robin:
Who are those 4 people?
Jacob:
um
you, me, and 2 others?


Image


Top
 Profile  
 
 Post subject: Re: Optimized Surfaces
PostPosted: Sat Jul 07, 2007 7:24 pm 
Everyone that's tried it, has ran into problems. So I never bothered trying.


Top
  
 
 Post subject: Re: Optimized Surfaces
PostPosted: Sat Jul 07, 2007 7:35 pm 
Offline
Submit-Happy
User avatar

Joined: Fri Jun 16, 2006 7:01 am
Posts: 2768
Location: Yorkshire, UK
Just because instead of copy and paste, he only told you what you need to do doesn't mean it doesn't work.

It just means people don't know enough about DirectX.

_________________
Quote:
Robin:
Why aren't maps and shit loaded up in a dynamic array?
Jacob:
the 4 people that know how are lazy
Robin:
Who are those 4 people?
Jacob:
um
you, me, and 2 others?


Image


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 85 posts ]  Go to page 1, 2, 3, 4  Next

All times are UTC


Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group