Fixed some missing unlocks and the missing point size setting in D3D drivers/textures.
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@810 dfc29bdd-3216-0410-991c-e03cc46cb475master
parent
4e4c393d41
commit
f41e314fcc
|
@ -234,8 +234,6 @@ bool CD3D8Driver::initDriver(const core::dimension2d<s32>& screenSize, HWND hwnd
|
|||
// enable anti alias if possible and whished
|
||||
if (antiAlias)
|
||||
{
|
||||
DWORD qualityLevels = 0;
|
||||
|
||||
if (!FAILED(pID3D->CheckDeviceMultiSampleType(D3DADAPTER_DEFAULT,
|
||||
devtype , present.BackBufferFormat, !fullScreen,
|
||||
D3DMULTISAMPLE_2_SAMPLES)))
|
||||
|
@ -1341,6 +1339,12 @@ void CD3D8Driver::setBasicRenderStates(const SMaterial& material, const SMateria
|
|||
pID3DDevice->SetRenderState(D3DRS_NORMALIZENORMALS, material.NormalizeNormals);
|
||||
}
|
||||
|
||||
// thickness
|
||||
if (resetAllRenderstates || lastmaterial.Thickness != material.Thickness)
|
||||
{
|
||||
pID3DDevice->SetRenderState(D3DRS_POINTSIZE, *((DWORD*)&material.Thickness));
|
||||
}
|
||||
|
||||
// texture address mode
|
||||
for (u32 st=0; st<MaxTextureUnits; ++st)
|
||||
{
|
||||
|
|
|
@ -399,6 +399,8 @@ bool CD3D8Texture::createMipMaps(u32 level)
|
|||
if (FAILED(upperSurface->LockRect(&upperlr, NULL, 0)))
|
||||
{
|
||||
os::Printer::log("Could not lock upper texture for mip map generation", ELL_WARNING);
|
||||
upperSurface->Release();
|
||||
lowerSurface->Release();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -406,6 +408,9 @@ bool CD3D8Texture::createMipMaps(u32 level)
|
|||
if (FAILED(lowerSurface->LockRect(&lowerlr, NULL, 0)))
|
||||
{
|
||||
os::Printer::log("Could not lock lower texture for mip map generation", ELL_WARNING);
|
||||
upperSurface->UnlockRect();
|
||||
upperSurface->Release();
|
||||
lowerSurface->Release();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -428,18 +433,19 @@ bool CD3D8Texture::createMipMaps(u32 level)
|
|||
os::Printer::log("Unsupported mipmap format, cannot copy.", ELL_WARNING);
|
||||
}
|
||||
|
||||
bool result=true;
|
||||
// unlock
|
||||
if (FAILED(upperSurface->UnlockRect()))
|
||||
return false;
|
||||
result=false;
|
||||
if (FAILED(lowerSurface->UnlockRect()))
|
||||
return false;
|
||||
result=false;
|
||||
|
||||
// release
|
||||
upperSurface->Release();
|
||||
lowerSurface->Release();
|
||||
|
||||
if (upperDesc.Width <= 2 || upperDesc.Height <= 2)
|
||||
return true; // stop generating levels
|
||||
if (!result || upperDesc.Width < 3 || upperDesc.Height < 3)
|
||||
return result; // stop generating levels
|
||||
|
||||
// generate next level
|
||||
return createMipMaps(level+1);
|
||||
|
|
|
@ -1335,6 +1335,12 @@ void CD3D9Driver::setBasicRenderStates(const SMaterial& material, const SMateria
|
|||
pID3DDevice->SetRenderState(D3DRS_NORMALIZENORMALS, material.NormalizeNormals);
|
||||
}
|
||||
|
||||
// thickness
|
||||
if (resetAllRenderstates || lastmaterial.Thickness != material.Thickness)
|
||||
{
|
||||
pID3DDevice->SetRenderState(D3DRS_POINTSIZE, *((DWORD*)&material.Thickness));
|
||||
}
|
||||
|
||||
// texture address mode
|
||||
for (u32 st=0; st<MaxTextureUnits; ++st)
|
||||
{
|
||||
|
|
|
@ -204,13 +204,14 @@ bool CD3D9Texture::createMipMaps(u32 level)
|
|||
upperSurface->GetDesc(&upperDesc);
|
||||
lowerSurface->GetDesc(&lowerDesc);
|
||||
|
||||
|
||||
D3DLOCKED_RECT upperlr;
|
||||
D3DLOCKED_RECT lowerlr;
|
||||
|
||||
// lock upper surface
|
||||
if (FAILED(upperSurface->LockRect(&upperlr, NULL, 0)))
|
||||
{
|
||||
upperSurface->Release();
|
||||
lowerSurface->Release();
|
||||
os::Printer::log("Could not lock upper texture for mip map generation", ELL_WARNING);
|
||||
return false;
|
||||
}
|
||||
|
@ -218,6 +219,9 @@ bool CD3D9Texture::createMipMaps(u32 level)
|
|||
// lock lower surface
|
||||
if (FAILED(lowerSurface->LockRect(&lowerlr, NULL, 0)))
|
||||
{
|
||||
upperSurface->UnlockRect();
|
||||
upperSurface->Release();
|
||||
lowerSurface->Release();
|
||||
os::Printer::log("Could not lock lower texture for mip map generation", ELL_WARNING);
|
||||
return false;
|
||||
}
|
||||
|
@ -241,18 +245,19 @@ bool CD3D9Texture::createMipMaps(u32 level)
|
|||
os::Printer::log("Unsupported mipmap format, cannot copy.", ELL_WARNING);
|
||||
}
|
||||
|
||||
bool result=true;
|
||||
// unlock
|
||||
if (FAILED(upperSurface->UnlockRect()))
|
||||
return false;
|
||||
result=false;
|
||||
if (FAILED(lowerSurface->UnlockRect()))
|
||||
return false;
|
||||
result=false;
|
||||
|
||||
// release
|
||||
upperSurface->Release();
|
||||
lowerSurface->Release();
|
||||
|
||||
if (upperDesc.Width <= 2 || upperDesc.Height <= 2)
|
||||
return true; // stop generating levels
|
||||
if (!result || upperDesc.Width < 3 || upperDesc.Height < 3)
|
||||
return result; // stop generating levels
|
||||
|
||||
// generate next level
|
||||
return createMipMaps(level+1);
|
||||
|
@ -573,18 +578,20 @@ void CD3D9Texture::copy16BitMipMap(char* src, char* tgt,
|
|||
s32 a=0, r=0, g=0, b=0;
|
||||
|
||||
for (int dx=0; dx<2; ++dx)
|
||||
{
|
||||
for (int dy=0; dy<2; ++dy)
|
||||
{
|
||||
int tgx = (x*2)+dx;
|
||||
int tgy = (y*2)+dy;
|
||||
|
||||
c = *(u16*)((void*)&src[(tgx*2)+(tgy*pitchsrc)]);
|
||||
c = *(u16*)(&src[(tgx*2)+(tgy*pitchsrc)]);
|
||||
|
||||
a += getAlpha(c);
|
||||
r += getRed(c);
|
||||
g += getGreen(c);
|
||||
b += getBlue(c);
|
||||
}
|
||||
}
|
||||
|
||||
a /= 4;
|
||||
r /= 4;
|
||||
|
@ -595,7 +602,7 @@ void CD3D9Texture::copy16BitMipMap(char* src, char* tgt,
|
|||
c = RGBA16(r,g,b,a);
|
||||
else
|
||||
c = A8R8G8B8toR5G6B5(SColor(a,r,g,b).color);
|
||||
*(u16*)((void*)&tgt[(x*2)+(y*pitchtgt)]) = c;
|
||||
*(u16*)(&tgt[(x*2)+(y*pitchtgt)]) = c;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -619,7 +626,7 @@ void CD3D9Texture::copy32BitMipMap(char* src, char* tgt,
|
|||
int tgx = (x*2)+dx;
|
||||
int tgy = (y*2)+dy;
|
||||
|
||||
c = *(u32*)((void*)&src[(tgx<<2)+(tgy*pitchsrc)]);
|
||||
c = *(u32*)(&src[(tgx*4)+(tgy*pitchsrc)]);
|
||||
|
||||
a += c.getAlpha();
|
||||
r += c.getRed();
|
||||
|
@ -628,13 +635,13 @@ void CD3D9Texture::copy32BitMipMap(char* src, char* tgt,
|
|||
}
|
||||
}
|
||||
|
||||
a >>= 2;
|
||||
r >>= 2;
|
||||
g >>= 2;
|
||||
b >>= 2;
|
||||
a /= 4;
|
||||
r /= 4;
|
||||
g /= 4;
|
||||
b /= 4;
|
||||
|
||||
c = ((a & 0xff)<<24) | ((r & 0xff)<<16) | ((g & 0xff)<<8) | (b & 0xff);
|
||||
*(u32*)((void*)&tgt[(x*4)+(y*pitchtgt)]) = c.color;
|
||||
c.set(a, r, g, b);
|
||||
*(u32*)(&tgt[(x*4)+(y*pitchtgt)]) = c.color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue