Merged from 1.5 branch revisions 2333:2347. Fix depthbuffer under d3d, renderstates under OpenGL, stencilshadow under OpenGL.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@2349 dfc29bdd-3216-0410-991c-e03cc46cb475
master
hybrid 2009-04-23 13:15:39 +00:00
parent f84e662812
commit bccb6e0112
5 changed files with 34 additions and 10 deletions

View File

@ -439,8 +439,17 @@ bool CD3D9Driver::initDriver(const core::dimension2d<u32>& screenSize,
// store the screen's depth buffer // store the screen's depth buffer
DepthBuffers.push_back(new SDepthSurface()); DepthBuffers.push_back(new SDepthSurface());
pID3DDevice->GetDepthStencilSurface(&(DepthBuffers[0]->Surface)); if (SUCCEEDED(pID3DDevice->GetDepthStencilSurface(&(DepthBuffers[0]->Surface))))
DepthBuffers[0]->Size=ScreenSize; {
D3DSURFACE_DESC desc;
DepthBuffers[0]->Surface->GetDesc(&desc);
DepthBuffers[0]->Size.set(desc.Width, desc.Height);
}
else
{
os::Printer::log("Was not able to get main depth buffer.", ELL_ERROR);
return false;
}
D3DColorFormat = D3DFMT_A8R8G8B8; D3DColorFormat = D3DFMT_A8R8G8B8;
IDirect3DSurface9* bb=0; IDirect3DSurface9* bb=0;
@ -2814,7 +2823,8 @@ void CD3D9Driver::checkDepthBuffer(ITexture* tex)
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
depth=DepthBuffers.getLast(); depth=DepthBuffers.getLast();
depth->Size=optSize; depth->Surface->GetDesc(&desc);
depth->Size.set(desc.Width, desc.Height);
} }
else else
{ {

View File

@ -24,7 +24,12 @@ namespace video
{ {
struct SDepthSurface : public IReferenceCounted struct SDepthSurface : public IReferenceCounted
{ {
SDepthSurface() : Surface(0) {} SDepthSurface() : Surface(0)
{
#ifdef _DEBUG
setDebugName("SDepthSurface");
#endif
}
virtual ~SDepthSurface() virtual ~SDepthSurface()
{ {
if (Surface) if (Surface)

View File

@ -278,7 +278,7 @@ CIrrDeviceWin32::CIrrDeviceWin32(const SIrrlichtCreationParameters& params)
WNDCLASSEX wcex; WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX); wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0; wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0; wcex.cbWndExtra = 0;
wcex.hInstance = hInstance; wcex.hInstance = hInstance;

View File

@ -297,7 +297,7 @@ CIrrDeviceWinCE::CIrrDeviceWinCE(const SIrrlichtCreationParameters& params)
// Register Class // Register Class
WNDCLASS wc; WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW; wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WndProc; wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0; wc.cbClsExtra = 0;
wc.cbWndExtra = 0; wc.cbWndExtra = 0;
wc.hInstance = hInstance; wc.hInstance = hInstance;

View File

@ -555,6 +555,10 @@ bool COpenGLDriver::genericDriverInit(const core::dimension2d<u32>& screenSize,
// create matrix for flipping textures // create matrix for flipping textures
TextureFlipMatrix.buildTextureTransform(0.0f, core::vector2df(0,0), core::vector2df(0,1.0f), core::vector2df(1.0f,-1.0f)); TextureFlipMatrix.buildTextureTransform(0.0f, core::vector2df(0,0), core::vector2df(0,1.0f), core::vector2df(1.0f,-1.0f));
// We need to reset once more at the beginning of the first rendering.
// This fixes problems with intermediate changes to the material during texture load.
ResetRenderStates = true;
return true; return true;
} }
@ -2707,20 +2711,23 @@ void COpenGLDriver::drawStencilShadow(bool clearStencilBuffer, video::SColor lef
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
glPushMatrix(); glPushMatrix();
glLoadIdentity(); glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glBegin(GL_QUADS); glBegin(GL_QUADS);
glColor4ub(leftDownEdge.getRed(), leftDownEdge.getGreen(), leftDownEdge.getBlue(), leftDownEdge.getAlpha()); glColor4ub(leftDownEdge.getRed(), leftDownEdge.getGreen(), leftDownEdge.getBlue(), leftDownEdge.getAlpha());
glVertex3f(-1.1f,-1.1f,0.9f); glVertex3f(-1.f,-1.f,-0.9f);
glColor4ub(leftUpEdge.getRed(), leftUpEdge.getGreen(), leftUpEdge.getBlue(), leftUpEdge.getAlpha()); glColor4ub(leftUpEdge.getRed(), leftUpEdge.getGreen(), leftUpEdge.getBlue(), leftUpEdge.getAlpha());
glVertex3f(-1.1f, 1.1f,0.9f); glVertex3f(-1.f, 1.f,-0.9f);
glColor4ub(rightUpEdge.getRed(), rightUpEdge.getGreen(), rightUpEdge.getBlue(), rightUpEdge.getAlpha()); glColor4ub(rightUpEdge.getRed(), rightUpEdge.getGreen(), rightUpEdge.getBlue(), rightUpEdge.getAlpha());
glVertex3f(1.1f, 1.1f,0.9f); glVertex3f(1.f, 1.f,-0.9f);
glColor4ub(rightDownEdge.getRed(), rightDownEdge.getGreen(), rightDownEdge.getBlue(), rightDownEdge.getAlpha()); glColor4ub(rightDownEdge.getRed(), rightDownEdge.getGreen(), rightDownEdge.getBlue(), rightDownEdge.getAlpha());
glVertex3f(1.1f,-1.1f,0.9f); glVertex3f(1.f,-1.f,-0.9f);
glEnd(); glEnd();
@ -2728,6 +2735,8 @@ void COpenGLDriver::drawStencilShadow(bool clearStencilBuffer, video::SColor lef
// restore settings // restore settings
glPopMatrix(); glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glPopAttrib(); glPopAttrib();
} }