WORD *pGrassIndices,*pDirtIndices,*pSandIndices;
if(grassIndices) if(FAILED(grassIndices->Lock(0,0,(BYTE**)&pGrassIndices,0))) return false;
if(dirtIndices) if(FAILED(dirtIndices->Lock(0,0,(BYTE**)&pDirtIndices,0))) {
grassIndices->Unlock();
return false;
}
if(sandIndices) if(FAILED(sandIndices->Lock(0,0,(BYTE**)&pSandIndices,0))) {
grassIndices->Unlock();
dirtIndices->Unlock();
return false;
}
int position = 0;
for(int i=0;i<32;i++) {
for(int j=0;j<32;j++) {
if(tilelookup[i][j] & GrassID) {
pGrassIndices[0] = position + 0;
pGrassIndices[1] = position + 1;
pGrassIndices[2] = position + 3;
pGrassIndices[3] = position + 1;
pGrassIndices[4] = position + 2;
pGrassIndices[5] = position + 3;
pGrassIndices += 6;
}
if(tilelookup[i][j] & DirtID) {
pDirtIndices[0] = position + 0;
pDirtIndices[1] = position + 1;
pDirtIndices[2] = position + 3;
pDirtIndices[3] = position + 1;
pDirtIndices[4] = position + 2;
pDirtIndices[5] = position + 3;
pDirtIndices += 6;
}
if(tilelookup[i][j] & SandID) {
pSandIndices[0] = position + 0;
pSandIndices[1] = position + 1;
pSandIndices[2] = position + 3;
pSandIndices[3] = position + 1;
pSandIndices[4] = position + 2;
pSandIndices[5] = position + 3;
pSandIndices += 6;
}
position += 4;
}
}
if(sandIndices) sandIndices->Unlock();
if(dirtIndices) dirtIndices->Unlock();
if(grassIndices) grassIndices->Unlock();
GrassID is set to 1, DirtID is set to 2, and SandID is 4 so I can use | to set the tilelookup array to contain multiple types in one element.
First I go through my base array and set the tiles to all grass. I then go and set the tilelookup array using the bits above for each adjacent tile. I ran some tests and everything works fine so far. However, if I try adding in a few random sand or dirt tiles, it won't render at all except for a few places at the beginning of the array. Any ideas? I'm so confused .
[edited by - Raloth on August 13, 2003 9:54:07 PM]
multiple index buffers for 1 tilemap array - headaches
I am working on getting an index buffer for each of the different tiles in my tilemap so that I can blend in between them. I am sure that it's setting the array right so it knows which tiles go where, so it can only be the indices that are wrong. Can anyone spot a problem with this code?
The second parameter to Lock should be the size in bytes that you want to lock, ie. 32*32*6*sizeof(WORD) instead of zero ;->
You may be able to lock a smaller region if you''ve already counted how many tiles use each type ( which you need to know anyway when you draw the data ).
You may be able to lock a smaller region if you''ve already counted how many tiles use each type ( which you need to know anyway when you draw the data ).
Why use a different set of indicies for each sand/dirt/grss when they are exsactly the same? O_o
quote:Original post by Osc
The second parameter to Lock should be the size in bytes that you want to lock, ie. 32*32*6*sizeof(WORD) instead of zero ;->
You may be able to lock a smaller region if you''ve already counted how many tiles use each type ( which you need to know anyway when you draw the data ).
If you give both parameters 0 then it locks the entire buffer.
quote:Original post by ACAC
Why use a different set of indicies for each sand/dirt/grss when they are exsactly the same? O_o
They aren''t the same...
Raloth,
I think you may want to consider only using 1 index buffer instead of splitting it into one for each texture type. The reason I had been splitting it before was because I wasn''t doing any blending. If you''re blending, however, you''re going to be rendering several textures for each "tile" so there''s no real point to splitting the index buffer. I think...
I think you may want to consider only using 1 index buffer instead of splitting it into one for each texture type. The reason I had been splitting it before was because I wasn''t doing any blending. If you''re blending, however, you''re going to be rendering several textures for each "tile" so there''s no real point to splitting the index buffer. I think...
Well, I could render the entire map several times. The problem is once you get to things like 6 different texture types you end up rendering 4 times the number of tiles you need to...
A better way might be to create your index buffers in such a way that all geometry that will be rendered with 1 pass is in 1 buffer, 2 passes in another buffer, 3 passes in another, etc. That way, you''re only rendering a small portion of the geometry multiple times.
Dont lock all your index buffers at 1 time, do them seperately. Your code is almost correct, BUT it over writing each IB.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement