Commit 45c26940 authored by nadro's avatar nadro

- More improvements in client states handling.

- Removed debug info drawing for a light in example no. 11.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@4415 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 4e0dc592
...@@ -368,9 +368,6 @@ int main() ...@@ -368,9 +368,6 @@ int main()
smgr->addLightSceneNode(0, core::vector3df(0,0,0), smgr->addLightSceneNode(0, core::vector3df(0,0,0),
video::SColorf(0.5f, 1.0f, 0.5f, 0.0f), 800.0f); video::SColorf(0.5f, 1.0f, 0.5f, 0.0f), 800.0f);
light1->setDebugDataVisible ( scene::EDS_BBOX );
// add fly circle animator to light 1 // add fly circle animator to light 1
scene::ISceneNodeAnimator* anim = scene::ISceneNodeAnimator* anim =
smgr->createFlyCircleAnimator (core::vector3df(50,300,0),190.0f, -0.003f); smgr->createFlyCircleAnimator (core::vector3df(50,300,0),190.0f, -0.003f);
......
...@@ -1477,16 +1477,10 @@ void COpenGLDriver::drawVertexPrimitiveList(const void* vertices, u32 vertexCoun ...@@ -1477,16 +1477,10 @@ void COpenGLDriver::drawVertexPrimitiveList(const void* vertices, u32 vertexCoun
// draw everything // draw everything
setRenderStates3DMode(); setRenderStates3DMode();
if (MultiTextureExtension)
extGlClientActiveTexture(GL_TEXTURE0_ARB);
if ((pType!=scene::EPT_POINTS) && (pType!=scene::EPT_POINT_SPRITES)) if ((pType!=scene::EPT_POINTS) && (pType!=scene::EPT_POINT_SPRITES))
{ BridgeCalls->setClientState(true, true, true, true);
BridgeCalls->setClientState(true, true, true);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
}
else else
BridgeCalls->setClientState(true, false, true); BridgeCalls->setClientState(true, false, true, false);
//due to missing defines in OSX headers, we have to be more specific with this check //due to missing defines in OSX headers, we have to be more specific with this check
//#if defined(GL_ARB_vertex_array_bgra) || defined(GL_EXT_vertex_array_bgra) //#if defined(GL_ARB_vertex_array_bgra) || defined(GL_EXT_vertex_array_bgra)
...@@ -1539,7 +1533,7 @@ void COpenGLDriver::drawVertexPrimitiveList(const void* vertices, u32 vertexCoun ...@@ -1539,7 +1533,7 @@ void COpenGLDriver::drawVertexPrimitiveList(const void* vertices, u32 vertexCoun
if (MultiTextureExtension && CurrentTexture[1]) if (MultiTextureExtension && CurrentTexture[1])
{ {
extGlClientActiveTexture(GL_TEXTURE1_ARB); BridgeCalls->setClientActiveTexture(GL_TEXTURE1_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY);
if (vertices) if (vertices)
glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(vertices))[0].TCoords); glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(vertices))[0].TCoords);
...@@ -1565,7 +1559,7 @@ void COpenGLDriver::drawVertexPrimitiveList(const void* vertices, u32 vertexCoun ...@@ -1565,7 +1559,7 @@ void COpenGLDriver::drawVertexPrimitiveList(const void* vertices, u32 vertexCoun
if (MultiTextureExtension) if (MultiTextureExtension)
{ {
extGlClientActiveTexture(GL_TEXTURE1_ARB); BridgeCalls->setClientActiveTexture(GL_TEXTURE1_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY);
if (vertices) if (vertices)
glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex2TCoords), &(static_cast<const S3DVertex2TCoords*>(vertices))[0].TCoords2); glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex2TCoords), &(static_cast<const S3DVertex2TCoords*>(vertices))[0].TCoords2);
...@@ -1590,14 +1584,14 @@ void COpenGLDriver::drawVertexPrimitiveList(const void* vertices, u32 vertexCoun ...@@ -1590,14 +1584,14 @@ void COpenGLDriver::drawVertexPrimitiveList(const void* vertices, u32 vertexCoun
if (MultiTextureExtension) if (MultiTextureExtension)
{ {
extGlClientActiveTexture(GL_TEXTURE1_ARB); BridgeCalls->setClientActiveTexture(GL_TEXTURE1_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY);
if (vertices) if (vertices)
glTexCoordPointer(3, GL_FLOAT, sizeof(S3DVertexTangents), &(static_cast<const S3DVertexTangents*>(vertices))[0].Tangent); glTexCoordPointer(3, GL_FLOAT, sizeof(S3DVertexTangents), &(static_cast<const S3DVertexTangents*>(vertices))[0].Tangent);
else else
glTexCoordPointer(3, GL_FLOAT, sizeof(S3DVertexTangents), buffer_offset(36)); glTexCoordPointer(3, GL_FLOAT, sizeof(S3DVertexTangents), buffer_offset(36));
extGlClientActiveTexture(GL_TEXTURE2_ARB); BridgeCalls->setClientActiveTexture(GL_TEXTURE2_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY);
if (vertices) if (vertices)
glTexCoordPointer(3, GL_FLOAT, sizeof(S3DVertexTangents), &(static_cast<const S3DVertexTangents*>(vertices))[0].Binormal); glTexCoordPointer(3, GL_FLOAT, sizeof(S3DVertexTangents), &(static_cast<const S3DVertexTangents*>(vertices))[0].Binormal);
...@@ -1613,19 +1607,16 @@ void COpenGLDriver::drawVertexPrimitiveList(const void* vertices, u32 vertexCoun ...@@ -1613,19 +1607,16 @@ void COpenGLDriver::drawVertexPrimitiveList(const void* vertices, u32 vertexCoun
{ {
if (vType==EVT_TANGENTS) if (vType==EVT_TANGENTS)
{ {
extGlClientActiveTexture(GL_TEXTURE2_ARB); BridgeCalls->setClientActiveTexture(GL_TEXTURE2_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY);
} }
if ((vType!=EVT_STANDARD) || CurrentTexture[1]) if ((vType!=EVT_STANDARD) || CurrentTexture[1])
{ {
extGlClientActiveTexture(GL_TEXTURE1_ARB); BridgeCalls->setClientActiveTexture(GL_TEXTURE1_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY);
} }
extGlClientActiveTexture(GL_TEXTURE0_ARB); BridgeCalls->setClientActiveTexture(GL_TEXTURE0_ARB);
} }
if ((pType!=scene::EPT_POINTS) && (pType!=scene::EPT_POINT_SPRITES))
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
} }
...@@ -1808,16 +1799,10 @@ void COpenGLDriver::draw2DVertexPrimitiveList(const void* vertices, u32 vertexCo ...@@ -1808,16 +1799,10 @@ void COpenGLDriver::draw2DVertexPrimitiveList(const void* vertices, u32 vertexCo
else else
setRenderStates2DMode(Material.MaterialType==EMT_TRANSPARENT_VERTEX_ALPHA, (Material.getTexture(0) != 0), Material.MaterialType==EMT_TRANSPARENT_ALPHA_CHANNEL); setRenderStates2DMode(Material.MaterialType==EMT_TRANSPARENT_VERTEX_ALPHA, (Material.getTexture(0) != 0), Material.MaterialType==EMT_TRANSPARENT_ALPHA_CHANNEL);
if (MultiTextureExtension)
extGlClientActiveTexture(GL_TEXTURE0_ARB);
if ((pType!=scene::EPT_POINTS) && (pType!=scene::EPT_POINT_SPRITES)) if ((pType!=scene::EPT_POINTS) && (pType!=scene::EPT_POINT_SPRITES))
{ BridgeCalls->setClientState(true, false, true, true);
BridgeCalls->setClientState(true, false, true);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
}
else else
BridgeCalls->setClientState(true, false, true); BridgeCalls->setClientState(true, false, true, false);
//due to missing defines in OSX headers, we have to be more specific with this check //due to missing defines in OSX headers, we have to be more specific with this check
//#if defined(GL_ARB_vertex_array_bgra) || defined(GL_EXT_vertex_array_bgra) //#if defined(GL_ARB_vertex_array_bgra) || defined(GL_EXT_vertex_array_bgra)
...@@ -1868,7 +1853,7 @@ void COpenGLDriver::draw2DVertexPrimitiveList(const void* vertices, u32 vertexCo ...@@ -1868,7 +1853,7 @@ void COpenGLDriver::draw2DVertexPrimitiveList(const void* vertices, u32 vertexCo
if (MultiTextureExtension && CurrentTexture[1]) if (MultiTextureExtension && CurrentTexture[1])
{ {
extGlClientActiveTexture(GL_TEXTURE1_ARB); BridgeCalls->setClientActiveTexture(GL_TEXTURE1_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY);
if (vertices) if (vertices)
glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(vertices))[0].TCoords); glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(vertices))[0].TCoords);
...@@ -1891,7 +1876,7 @@ void COpenGLDriver::draw2DVertexPrimitiveList(const void* vertices, u32 vertexCo ...@@ -1891,7 +1876,7 @@ void COpenGLDriver::draw2DVertexPrimitiveList(const void* vertices, u32 vertexCo
if (MultiTextureExtension) if (MultiTextureExtension)
{ {
extGlClientActiveTexture(GL_TEXTURE1_ARB); BridgeCalls->setClientActiveTexture(GL_TEXTURE1_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY);
if (vertices) if (vertices)
glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex2TCoords), &(static_cast<const S3DVertex2TCoords*>(vertices))[0].TCoords2); glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex2TCoords), &(static_cast<const S3DVertex2TCoords*>(vertices))[0].TCoords2);
...@@ -1921,14 +1906,11 @@ void COpenGLDriver::draw2DVertexPrimitiveList(const void* vertices, u32 vertexCo ...@@ -1921,14 +1906,11 @@ void COpenGLDriver::draw2DVertexPrimitiveList(const void* vertices, u32 vertexCo
{ {
if ((vType!=EVT_STANDARD) || CurrentTexture[1]) if ((vType!=EVT_STANDARD) || CurrentTexture[1])
{ {
extGlClientActiveTexture(GL_TEXTURE1_ARB); BridgeCalls->setClientActiveTexture(GL_TEXTURE1_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY);
} }
extGlClientActiveTexture(GL_TEXTURE0_ARB); BridgeCalls->setClientActiveTexture(GL_TEXTURE0_ARB);
} }
if ((pType!=scene::EPT_POINTS) && (pType!=scene::EPT_POINT_SPRITES))
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
} }
...@@ -1964,11 +1946,7 @@ void COpenGLDriver::draw2DImageBatch(const video::ITexture* texture, ...@@ -1964,11 +1946,7 @@ void COpenGLDriver::draw2DImageBatch(const video::ITexture* texture,
if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra]) if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra])
getColorBuffer(Quad2DVertices, 4, EVT_STANDARD); getColorBuffer(Quad2DVertices, 4, EVT_STANDARD);
if (MultiTextureExtension) BridgeCalls->setClientState(true, false, true, true);
extGlClientActiveTexture(GL_TEXTURE0_ARB);
BridgeCalls->setClientState(true, false, true);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].TCoords); glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].TCoords);
glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos); glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos);
...@@ -2091,8 +2069,6 @@ void COpenGLDriver::draw2DImageBatch(const video::ITexture* texture, ...@@ -2091,8 +2069,6 @@ void COpenGLDriver::draw2DImageBatch(const video::ITexture* texture,
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, Quad2DIndices); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, Quad2DIndices);
} }
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
} }
...@@ -2227,11 +2203,7 @@ void COpenGLDriver::draw2DImage(const video::ITexture* texture, ...@@ -2227,11 +2203,7 @@ void COpenGLDriver::draw2DImage(const video::ITexture* texture,
if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra]) if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra])
getColorBuffer(Quad2DVertices, 4, EVT_STANDARD); getColorBuffer(Quad2DVertices, 4, EVT_STANDARD);
if (MultiTextureExtension) BridgeCalls->setClientState(true, false, true, true);
extGlClientActiveTexture(GL_TEXTURE0_ARB);
BridgeCalls->setClientState(true, false, true);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].TCoords); glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].TCoords);
glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos); glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos);
...@@ -2250,8 +2222,6 @@ void COpenGLDriver::draw2DImage(const video::ITexture* texture, ...@@ -2250,8 +2222,6 @@ void COpenGLDriver::draw2DImage(const video::ITexture* texture,
} }
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, Quad2DIndices); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, Quad2DIndices);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
} }
...@@ -2318,11 +2288,7 @@ void COpenGLDriver::draw2DImage(const video::ITexture* texture, const core::rect ...@@ -2318,11 +2288,7 @@ void COpenGLDriver::draw2DImage(const video::ITexture* texture, const core::rect
if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra]) if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra])
getColorBuffer(Quad2DVertices, 4, EVT_STANDARD); getColorBuffer(Quad2DVertices, 4, EVT_STANDARD);
if (MultiTextureExtension) BridgeCalls->setClientState(true, false, true, true);
extGlClientActiveTexture(GL_TEXTURE0_ARB);
BridgeCalls->setClientState(true, false, true);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].TCoords); glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].TCoords);
glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos); glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos);
...@@ -2342,8 +2308,6 @@ void COpenGLDriver::draw2DImage(const video::ITexture* texture, const core::rect ...@@ -2342,8 +2308,6 @@ void COpenGLDriver::draw2DImage(const video::ITexture* texture, const core::rect
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, Quad2DIndices); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, Quad2DIndices);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
if (clipRect) if (clipRect)
glDisable(GL_SCISSOR_TEST); glDisable(GL_SCISSOR_TEST);
} }
...@@ -2393,11 +2357,7 @@ void COpenGLDriver::draw2DImage(const video::ITexture* texture, ...@@ -2393,11 +2357,7 @@ void COpenGLDriver::draw2DImage(const video::ITexture* texture,
if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra]) if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra])
getColorBuffer(Quad2DVertices, 4, EVT_STANDARD); getColorBuffer(Quad2DVertices, 4, EVT_STANDARD);
if (MultiTextureExtension) BridgeCalls->setClientState(true, false, true, true);
extGlClientActiveTexture(GL_TEXTURE0_ARB);
BridgeCalls->setClientState(true, false, true);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].TCoords); glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].TCoords);
glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos); glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos);
...@@ -2444,8 +2404,6 @@ void COpenGLDriver::draw2DImage(const video::ITexture* texture, ...@@ -2444,8 +2404,6 @@ void COpenGLDriver::draw2DImage(const video::ITexture* texture,
targetPos.X += sourceRects[currentIndex].getWidth(); targetPos.X += sourceRects[currentIndex].getWidth();
} }
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
if (clipRect) if (clipRect)
glDisable(GL_SCISSOR_TEST); glDisable(GL_SCISSOR_TEST);
} }
...@@ -2505,7 +2463,7 @@ void COpenGLDriver::draw2DRectangle(const core::rect<s32>& position, ...@@ -2505,7 +2463,7 @@ void COpenGLDriver::draw2DRectangle(const core::rect<s32>& position,
if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra]) if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra])
getColorBuffer(Quad2DVertices, 4, EVT_STANDARD); getColorBuffer(Quad2DVertices, 4, EVT_STANDARD);
BridgeCalls->setClientState(true, false, true); BridgeCalls->setClientState(true, false, true, false);
glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos); glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos);
...@@ -2544,9 +2502,9 @@ void COpenGLDriver::draw2DLine(const core::position2d<s32>& start, ...@@ -2544,9 +2502,9 @@ void COpenGLDriver::draw2DLine(const core::position2d<s32>& start,
Quad2DVertices[1].Pos = core::vector3df((f32)end.X, (f32)end.Y, 0.0f); Quad2DVertices[1].Pos = core::vector3df((f32)end.X, (f32)end.Y, 0.0f);
if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra]) if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra])
getColorBuffer(Quad2DVertices, 2, EVT_STANDARD); getColorBuffer(Quad2DVertices, 2, EVT_STANDARD);
BridgeCalls->setClientState(true, false, true); BridgeCalls->setClientState(true, false, true, false);
glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos); glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos);
...@@ -2584,7 +2542,7 @@ void COpenGLDriver::drawPixel(u32 x, u32 y, const SColor &color) ...@@ -2584,7 +2542,7 @@ void COpenGLDriver::drawPixel(u32 x, u32 y, const SColor &color)
if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra]) if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra])
getColorBuffer(Quad2DVertices, 1, EVT_STANDARD); getColorBuffer(Quad2DVertices, 1, EVT_STANDARD);
BridgeCalls->setClientState(true, false, true); BridgeCalls->setClientState(true, false, true, false);
glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos); glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos);
...@@ -3845,7 +3803,7 @@ void COpenGLDriver::drawStencilShadowVolume(const core::array<core::vector3df>& ...@@ -3845,7 +3803,7 @@ void COpenGLDriver::drawStencilShadowVolume(const core::array<core::vector3df>&
glEnable(GL_STENCIL_TEST); glEnable(GL_STENCIL_TEST);
} }
BridgeCalls->setClientState(true, false, false); BridgeCalls->setClientState(true, false, false, false);
glVertexPointer(3,GL_FLOAT,sizeof(core::vector3df),triangles.const_pointer()); glVertexPointer(3,GL_FLOAT,sizeof(core::vector3df),triangles.const_pointer());
glStencilMask(~0); glStencilMask(~0);
glStencilFunc(GL_ALWAYS, 0, ~0); glStencilFunc(GL_ALWAYS, 0, ~0);
...@@ -3998,9 +3956,9 @@ void COpenGLDriver::drawStencilShadow(bool clearStencilBuffer, video::SColor lef ...@@ -3998,9 +3956,9 @@ void COpenGLDriver::drawStencilShadow(bool clearStencilBuffer, video::SColor lef
if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra]) if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra])
getColorBuffer(Quad2DVertices, 4, EVT_STANDARD); getColorBuffer(Quad2DVertices, 4, EVT_STANDARD);
BridgeCalls->setClientState(true, false, true); BridgeCalls->setClientState(true, false, true, false);
glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos); glVertexPointer(3, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos);
#ifdef GL_BGRA #ifdef GL_BGRA
const GLint colorSize=(FeatureAvailable[IRR_ARB_vertex_array_bgra] || FeatureAvailable[IRR_EXT_vertex_array_bgra])?GL_BGRA:4; const GLint colorSize=(FeatureAvailable[IRR_ARB_vertex_array_bgra] || FeatureAvailable[IRR_EXT_vertex_array_bgra])?GL_BGRA:4;
...@@ -4083,9 +4041,9 @@ void COpenGLDriver::draw3DLine(const core::vector3df& start, ...@@ -4083,9 +4041,9 @@ void COpenGLDriver::draw3DLine(const core::vector3df& start,
if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra]) if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra])
getColorBuffer(Quad2DVertices, 2, EVT_STANDARD); getColorBuffer(Quad2DVertices, 2, EVT_STANDARD);
BridgeCalls->setClientState(true, false, true); BridgeCalls->setClientState(true, false, true, false);
glVertexPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos); glVertexPointer(3, GL_FLOAT, sizeof(S3DVertex), &(static_cast<const S3DVertex*>(Quad2DVertices))[0].Pos);
#ifdef GL_BGRA #ifdef GL_BGRA
const GLint colorSize=(FeatureAvailable[IRR_ARB_vertex_array_bgra] || FeatureAvailable[IRR_EXT_vertex_array_bgra])?GL_BGRA:4; const GLint colorSize=(FeatureAvailable[IRR_ARB_vertex_array_bgra] || FeatureAvailable[IRR_EXT_vertex_array_bgra])?GL_BGRA:4;
...@@ -5028,29 +4986,33 @@ const CGcontext& COpenGLDriver::getCgContext() ...@@ -5028,29 +4986,33 @@ const CGcontext& COpenGLDriver::getCgContext()
#endif #endif
COpenGLCallBridge::COpenGLCallBridge(COpenGLDriver* driver) : Driver(driver), COpenGLCallBridge::COpenGLCallBridge(COpenGLDriver* driver) : Driver(driver),
ClientStateVertex(0), ClientStateNormal(0), ClientStateColor(0), ClientStateVertex(false), ClientStateNormal(false), ClientStateColor(false), ClientStateTexCoord0(false),
DepthMask(false), DepthFunc(0), DepthTest(false), MatrixMode(GL_MODELVIEW), DepthMask(false), DepthFunc(0), DepthTest(false), MatrixMode(GL_MODELVIEW),
ActiveTexture(GL_TEXTURE0_ARB) ActiveTexture(GL_TEXTURE0_ARB), ClientActiveTexture(GL_TEXTURE0_ARB)
{ {
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i) for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i)
{ {
Texture[i] = 0; Texture[i] = 0;
TextureFixedPipeline[i] = true; TextureFixedPipeline[i] = true;
} }
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDepthMask(GL_FALSE); glDepthMask(GL_FALSE);
glDisable(GL_DEPTH_TEST); glDisable(GL_DEPTH_TEST);
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
if(Driver->MultiTextureExtension) if(Driver->MultiTextureExtension)
{
Driver->extGlActiveTexture(GL_TEXTURE0_ARB); Driver->extGlActiveTexture(GL_TEXTURE0_ARB);
Driver->extGlClientActiveTexture(GL_TEXTURE0_ARB);
}
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
} }
void COpenGLCallBridge::setClientState(bool vertex, bool normal, bool color) void COpenGLCallBridge::setClientState(bool vertex, bool normal, bool color, bool texCoord0)
{ {
if(ClientStateVertex != vertex) if(ClientStateVertex != vertex)
{ {
...@@ -5081,6 +5043,18 @@ void COpenGLCallBridge::setClientState(bool vertex, bool normal, bool color) ...@@ -5081,6 +5043,18 @@ void COpenGLCallBridge::setClientState(bool vertex, bool normal, bool color)
ClientStateColor = color; ClientStateColor = color;
} }
if(ClientStateTexCoord0 != texCoord0)
{
setClientActiveTexture(GL_TEXTURE0_ARB);
if(texCoord0)
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
else
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
ClientStateTexCoord0 = texCoord0;
}
} }
void COpenGLCallBridge::setDepthMask(bool enabled) void COpenGLCallBridge::setDepthMask(bool enabled)
...@@ -5140,6 +5114,15 @@ void COpenGLCallBridge::setActiveTexture(GLenum texture) ...@@ -5140,6 +5114,15 @@ void COpenGLCallBridge::setActiveTexture(GLenum texture)
ActiveTexture = texture; ActiveTexture = texture;
} }
} }
void COpenGLCallBridge::setClientActiveTexture(GLenum texture)
{
if (Driver->MultiTextureExtension && ClientActiveTexture != texture)
{
Driver->extGlClientActiveTexture(texture);
ClientActiveTexture = texture;
}
}
void COpenGLCallBridge::setTexture(u32 stage, bool fixedPipeline) void COpenGLCallBridge::setTexture(u32 stage, bool fixedPipeline)
{ {
......
...@@ -631,7 +631,7 @@ namespace video ...@@ -631,7 +631,7 @@ namespace video
// Client State calls. // Client State calls.
void setClientState(bool vertex, bool normal, bool color); void setClientState(bool vertex, bool normal, bool color, bool texCoord0);
// Depth calls. // Depth calls.
...@@ -646,6 +646,8 @@ namespace video ...@@ -646,6 +646,8 @@ namespace video
// Texture calls. // Texture calls.
void setActiveTexture(GLenum texture); void setActiveTexture(GLenum texture);
void setClientActiveTexture(GLenum texture);
void setTexture(u32 stage, bool fixedPipeline); void setTexture(u32 stage, bool fixedPipeline);
...@@ -655,6 +657,7 @@ namespace video ...@@ -655,6 +657,7 @@ namespace video
bool ClientStateVertex; bool ClientStateVertex;
bool ClientStateNormal; bool ClientStateNormal;
bool ClientStateColor; bool ClientStateColor;
bool ClientStateTexCoord0;
bool DepthMask; bool DepthMask;
GLenum DepthFunc; GLenum DepthFunc;
...@@ -662,7 +665,8 @@ namespace video ...@@ -662,7 +665,8 @@ namespace video
GLenum MatrixMode; GLenum MatrixMode;
GLenum ActiveTexture; GLenum ActiveTexture;
GLenum ClientActiveTexture;
const ITexture* Texture[MATERIAL_MAX_TEXTURES]; const ITexture* Texture[MATERIAL_MAX_TEXTURES];
bool TextureFixedPipeline[MATERIAL_MAX_TEXTURES]; bool TextureFixedPipeline[MATERIAL_MAX_TEXTURES];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment