From: <re...@us...> - 2008-07-17 13:37:06
|
Revision: 30403 http://crystal.svn.sourceforge.net/crystal/?rev=30403&view=rev Author: res2002 Date: 2008-07-17 13:36:48 +0000 (Thu, 17 Jul 2008) Log Message: ----------- Add state cache to common GL shader plugin code Modified Paths: -------------- CS/trunk/include/csplugincommon/opengl/shaderplugin.h CS/trunk/libs/csplugincommon/opengl/shaderplugin.cpp Modified: CS/trunk/include/csplugincommon/opengl/shaderplugin.h =================================================================== --- CS/trunk/include/csplugincommon/opengl/shaderplugin.h 2008-07-17 13:14:49 UTC (rev 30402) +++ CS/trunk/include/csplugincommon/opengl/shaderplugin.h 2008-07-17 13:36:48 UTC (rev 30403) @@ -30,6 +30,7 @@ #include "csutil/scf_implementation.h" struct csGLExtensionManager; +struct csGLStateCache; namespace CS { @@ -95,6 +96,8 @@ iObjectRegistry* object_reg; /// GL extension manager csGLExtensionManager* ext; + /// GL state cache + csGLStateCache* statecache; /// Whether verbose reporting was enabled. bool doVerbose; /** Modified: CS/trunk/libs/csplugincommon/opengl/shaderplugin.cpp =================================================================== --- CS/trunk/libs/csplugincommon/opengl/shaderplugin.cpp 2008-07-17 13:14:49 UTC (rev 30402) +++ CS/trunk/libs/csplugincommon/opengl/shaderplugin.cpp 2008-07-17 13:36:48 UTC (rev 30403) @@ -72,8 +72,14 @@ f->QueryClassID ()) != 0) return false; - if (r) r->GetDriver2D()->PerformExtension ("getextmanager", &ext); - if (ext == 0) + ext = 0; + statecache = 0; + if (r) + { + r->GetDriver2D()->PerformExtension ("getstatecache", &statecache); + r->GetDriver2D()->PerformExtension ("getextmanager", &ext); + } + if ((ext == 0) || (statecache == 0)) return false; csString vendorStr ((const char*)glGetString (GL_VENDOR)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2008-07-17 17:58:49
|
Revision: 30404 http://crystal.svn.sourceforge.net/crystal/?rev=30404&view=rev Author: res2002 Date: 2008-07-17 17:58:36 +0000 (Thu, 17 Jul 2008) Log Message: ----------- Added support for GL_ARB_color_buffer_float extension Modified Paths: -------------- CS/trunk/include/csplugincommon/opengl/glextmanager.h CS/trunk/include/csplugincommon/opengl/glstates.h CS/trunk/scripts/python/glextgen.py CS/trunk/scripts/python/metaglext.xml Modified: CS/trunk/include/csplugincommon/opengl/glextmanager.h =================================================================== --- CS/trunk/include/csplugincommon/opengl/glextmanager.h 2008-07-17 13:36:48 UTC (rev 30403) +++ CS/trunk/include/csplugincommon/opengl/glextmanager.h 2008-07-17 17:58:36 UTC (rev 30404) @@ -1,5 +1,5 @@ /** - * WARNING - This file is automatically generated + * WARNING - This file is automagically tenerated */ /* @@ -11155,8 +11155,40 @@ typedef GLvoid (csAPIENTRY* csGLPROGRAMENVPARAMETERS4FVEXT) (GLenum target, GLuint index, GLsizei count, const GLfloat* params); /** @} */ +/**\name GL_ARB_color_buffer_float constants + * For a description of what this ext does, see <a href="http://www.opengl.org/registry/specs/ARB/color_buffer_float.txt">http://www.opengl.org/registry/specs/ARB/color_buffer_float.txt</a>. + * @{ */ +#ifndef GL_RGBA_FLOAT_MODE_ARB +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#endif +#ifndef GL_CLAMP_VERTEX_COLOR_ARB +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#endif +#ifndef GL_CLAMP_FRAGMENT_COLOR_ARB +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#endif + +#ifndef GL_CLAMP_READ_COLOR_ARB +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#endif + +#ifndef GL_FIXED_ONLY_ARB +#define GL_FIXED_ONLY_ARB 0x891D +#endif + + +/** @} */ + +/**\name GL_ARB_color_buffer_float functions + * For a description of what this ext does, see <a href="http://www.opengl.org/registry/specs/ARB/color_buffer_float.txt">http://www.opengl.org/registry/specs/ARB/color_buffer_float.txt</a>. + * @{ */ +typedef GLvoid (csAPIENTRY* csGLCLAMPCOLORARB) (GLenum target, GLenum clamp); + +/** @} */ + + // end of definitions #ifdef CS_DEBUG @@ -17005,7 +17037,17 @@ /** @} */ + /**\name GL_ARB_color_buffer_float functions + * For a description of what this ext does, see <a href="http://www.opengl.org/registry/specs/ARB/color_buffer_float.txt">http://www.opengl.org/registry/specs/ARB/color_buffer_float.txt</a>. + * @{ */ + #ifndef GLCLAMPCOLORARB_DECL + #define GLCLAMPCOLORARB_DECL + csGLCLAMPCOLORARB glClampColorARB; + #endif + + /** @} */ + // end of functions }; @@ -17532,6 +17574,9 @@ /** Whether the <a href="http://www.opengl.org/registry/specs/EXT/gpu_program_parameters.txt">GL_EXT_gpu_program_parameters</a> extension was found. * Set by csGLExtensionManager::InitGL_EXT_gpu_program_parameters(). */ bool CS_GL_EXT_gpu_program_parameters; + /** Whether the <a href="http://www.opengl.org/registry/specs/ARB/color_buffer_float.txt">GL_ARB_color_buffer_float</a> extension was found. + * Set by csGLExtensionManager::InitGL_ARB_color_buffer_float(). */ + bool CS_GL_ARB_color_buffer_float; protected: bool tested_CS_GL_version_1_2; @@ -17709,6 +17754,7 @@ bool tested_CS_GL_ARB_half_float_pixel; bool tested_CS_GL_NV_gpu_program4; bool tested_CS_GL_EXT_gpu_program_parameters; + bool tested_CS_GL_ARB_color_buffer_float; }; @@ -24025,7 +24071,37 @@ } } + /** Initialize <a href="http://www.opengl.org/registry/specs/ARB/color_buffer_float.txt">GL_ARB_color_buffer_float</a> extension. + * Check presence with csGLExtensionFlags::CS_GL_ARB_color_buffer_float. */ + void InitGL_ARB_color_buffer_float () + { + if (tested_CS_GL_ARB_color_buffer_float) return; + if (!extstrGL) return; + tested_CS_GL_ARB_color_buffer_float = true; + const char* ext = "GL_ARB_color_buffer_float"; + char cfgkey[26 + 25 + 1]; + sprintf (cfgkey, "Video.OpenGL.UseExtension.%s", ext); + + CS_GL_ARB_color_buffer_float = (strstr (extstrGL, ext) != 0); + + bool allclear, funcTest; + (void)funcTest; // shut up "variable unused" warnings + bool init = CS_GL_ARB_color_buffer_float; + allclear = true; + if (init) // Don't check the functions if ext isn't reported anyway + { + EXTMGR_FUNC_INIT(glClampColorARB, GLCLAMPCOLORARB); + + EXTMGR_REPORT_INIT_RESULT("GL", GL_ARB_color_buffer_float) + } + else + { + Report (msgExtNotFound, "GL", ext); + } + } + + }; #undef REPORT_MISSING_ENTRIES Modified: CS/trunk/include/csplugincommon/opengl/glstates.h =================================================================== --- CS/trunk/include/csplugincommon/opengl/glstates.h 2008-07-17 13:36:48 UTC (rev 30403) +++ CS/trunk/include/csplugincommon/opengl/glstates.h 2008-07-17 17:58:36 UTC (rev 30404) @@ -518,6 +518,24 @@ // Pixel storage GLint pixelUnpackAlignment; bool pixelUnpackSwapBytes; + + // Color clamp control + enum + { + clampVertex = 0, clampFragment = 1, clampRead = 2, + clampCount + }; + GLenum clampState[clampCount]; + static int GLClampTargetToCacheIndex (GLenum target) + { + switch (target) + { + case GL_CLAMP_VERTEX_COLOR_ARB: return clampVertex; + case GL_CLAMP_FRAGMENT_COLOR_ARB: return clampFragment; + case GL_CLAMP_READ_COLOR_ARB: return clampRead; + default: return -1; + } + } // Standardized caches DECLARE_CACHED_BOOL (GL_DEPTH_TEST) @@ -611,6 +629,10 @@ parameter_tvbo.Setup (numTexCoords); memset (activeBufferID, 0, sizeof (activeBufferID)); + + clampState[clampVertex] = GL_TRUE; + clampState[clampFragment] = GL_FIXED_ONLY_ARB; + clampState[clampRead] = GL_FIXED_ONLY_ARB; } /** @@ -842,6 +864,17 @@ GLint v; glGetIntegerv (GL_UNPACK_SWAP_BYTES, &v); pixelUnpackSwapBytes = v != 0; + + if (extmgr->CS_GL_ARB_color_buffer_float) + { + GLint clampState; + glGetIntegerv (GL_CLAMP_VERTEX_COLOR_ARB, &clampState); + this->clampState[clampVertex] = (GLenum)clampState; + glGetIntegerv (GL_CLAMP_FRAGMENT_COLOR_ARB, &clampState); + this->clampState[clampFragment] = (GLenum)clampState; + glGetIntegerv (GL_CLAMP_READ_COLOR_ARB, &clampState); + this->clampState[clampRead] = (GLenum)clampState; + } } }; @@ -1126,6 +1159,26 @@ } /** @} */ + /**\name Clamp control + * @{ */ + void SetClampColor (GLenum target, GLenum clamp) + { + int index = csGLStateCacheContext::GLClampTargetToCacheIndex (target); + CS_ASSERT (index >= 0); + if (clamp != currentContext->clampState[index]) + { + extmgr->glClampColorARB (target, clamp); + currentContext->clampState[index] = clamp; + } + } + GLenum GetClampColor (GLenum target) const + { + int index = csGLStateCacheContext::GLClampTargetToCacheIndex (target); + CS_ASSERT (index >= 0); + return currentContext->clampState[index]; + } + /** @} */ + /// Query the number of texture image units supported by OpenGL GLint GetNumImageUnits() const { return currentContext->numImageUnits; } /// Query the number of texture coordinate sets supported by OpenGL Modified: CS/trunk/scripts/python/glextgen.py =================================================================== --- CS/trunk/scripts/python/glextgen.py 2008-07-17 13:36:48 UTC (rev 30403) +++ CS/trunk/scripts/python/glextgen.py 2008-07-17 17:58:36 UTC (rev 30404) @@ -218,7 +218,7 @@ ""); output = file ("glextmanager.h", "w") output.write ("/**\n") -output.write (" * WARNING - This file is automatically generated\n") +output.write (" * WARNING - This file is automagically tenerated\n") output.write (" */\n\n") output.write (stuff) output.close () Modified: CS/trunk/scripts/python/metaglext.xml =================================================================== --- CS/trunk/scripts/python/metaglext.xml 2008-07-17 13:36:48 UTC (rev 30403) +++ CS/trunk/scripts/python/metaglext.xml 2008-07-17 17:58:36 UTC (rev 30404) @@ -7555,4 +7555,15 @@ <arg name="params" type="GLfloat" const="true" pointer="true" /> </function> </extension> + <extension name="GL_ARB_color_buffer_float" type="GL"> + <token name="GL_RGBA_FLOAT_MODE_ARB" value="0x8820" /> + <token name="GL_CLAMP_VERTEX_COLOR_ARB" value="0x891A" /> + <token name="GL_CLAMP_FRAGMENT_COLOR_ARB" value="0x891B" /> + <token name="GL_CLAMP_READ_COLOR_ARB" value="0x891C" /> + <token name="GL_FIXED_ONLY_ARB" value="0x891D" /> + <function name="glClampColorARB" return="GLvoid" pointer="false"> + <arg name="target" type="GLenum" const="false" pointer="false" /> + <arg name="clamp" type="GLenum" const="false" pointer="false" /> + </function> + </extension> </extensionlist> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <er...@us...> - 2008-07-17 21:46:45
|
Revision: 30412 http://crystal.svn.sourceforge.net/crystal/?rev=30412&view=rev Author: erluk Date: 2008-07-17 21:46:33 +0000 (Thu, 17 Jul 2008) Log Message: ----------- - Corrected event handler names Modified Paths: -------------- CS/trunk/apps/walktest/walktest.h CS/trunk/plugins/utilities/movierecorder/movierecorder.h Modified: CS/trunk/apps/walktest/walktest.h =================================================================== --- CS/trunk/apps/walktest/walktest.h 2008-07-17 21:44:19 UTC (rev 30411) +++ CS/trunk/apps/walktest/walktest.h 2008-07-17 21:46:33 UTC (rev 30412) @@ -621,7 +621,7 @@ return false; } - CS_EVENTHANDLER_PHASE_FRAME("crystalspace.walktest.frame.logic") + CS_EVENTHANDLER_PHASE_FRAME("crystalspace.walktest.frame.frame") }; csRef<FrameEventHandler> frameEventHandler; Modified: CS/trunk/plugins/utilities/movierecorder/movierecorder.h =================================================================== --- CS/trunk/plugins/utilities/movierecorder/movierecorder.h 2008-07-17 21:44:19 UTC (rev 30411) +++ CS/trunk/plugins/utilities/movierecorder/movierecorder.h 2008-07-17 21:46:33 UTC (rev 30412) @@ -218,7 +218,7 @@ return false; } - CS_EVENTHANDLER_PHASE_FRAME("crystalspace.movierecorder.frame.logic") + CS_EVENTHANDLER_PHASE_FRAME("crystalspace.movierecorder.frame.frame") }; csRef<FrameEventHandler> frameEventHandler; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2008-07-19 00:18:05
|
Revision: 30454 http://crystal.svn.sourceforge.net/crystal/?rev=30454&view=rev Author: res2002 Date: 2008-07-19 00:18:02 +0000 (Sat, 19 Jul 2008) Log Message: ----------- Un-inlined scfString constructors to avoid cross-module memory allocs+frees Modified Paths: -------------- CS/trunk/include/csutil/scfstr.h CS/trunk/libs/csutil/scfstr.cpp Modified: CS/trunk/include/csutil/scfstr.h =================================================================== --- CS/trunk/include/csutil/scfstr.h 2008-07-18 23:40:41 UTC (rev 30453) +++ CS/trunk/include/csutil/scfstr.h 2008-07-19 00:18:02 UTC (rev 30454) @@ -39,28 +39,19 @@ public: /// Create an empty scfString object - scfString () - : scfImplementationType (this) - { } + scfString (); /// Create an scfString object and reserve space for iLength characters - scfString (size_t iLength) - : scfImplementationType (this), s(iLength) - { } + scfString (size_t iLength); /// Copy constructor - scfString (const iString ©) - : iBase(), scfImplementationType (this), s(copy.GetData()) - { } + scfString (const iString ©); /// Yet another copy constructor - scfString (const char *copy) - : scfImplementationType (this), s(copy) - { } + scfString (const char *copy); /// Destroy a scfString object - virtual ~scfString () - { } + virtual ~scfString (); /// Get the pointer to the internal csString. const csString& GetCsString () const { return s; } Modified: CS/trunk/libs/csutil/scfstr.cpp =================================================================== --- CS/trunk/libs/csutil/scfstr.cpp 2008-07-18 23:40:41 UTC (rev 30453) +++ CS/trunk/libs/csutil/scfstr.cpp 2008-07-19 00:18:02 UTC (rev 30454) @@ -21,6 +21,25 @@ #include "csutil/ref.h" #include "csutil/scfstr.h" +scfString::scfString () + : scfImplementationType (this) +{ } + +scfString::scfString (size_t iLength) + : scfImplementationType (this), s(iLength) +{ } + +scfString::scfString (const iString ©) + : iBase(), scfImplementationType (this), s(copy.GetData()) +{ } + +scfString::scfString (const char *copy) + : scfImplementationType (this), s(copy) +{ } + +scfString::~scfString () +{ } + void scfString::SetCapacity (size_t NewSize) { s.SetCapacity (NewSize); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jo...@us...> - 2008-07-19 06:09:19
|
Revision: 30461 http://crystal.svn.sourceforge.net/crystal/?rev=30461&view=rev Author: jorrit Date: 2008-07-19 06:09:16 +0000 (Sat, 19 Jul 2008) Log Message: ----------- - The unshadowed and shadow_pssm render managers were forgetting to call iRenderView->SetFrustum(). While this frustum is only used for debugging purposes in dynavis it is still best to be complete here. - iRenderView->SetFrustum() would accidently call SetFrustumFromBox() again but with different view resolution (i.e. screen pixel coordinates instead of normalized coordinates). Removing this call fixes the problem that it was impossible to get both rl_compat and unshadowed working right with regards to clipping. - Restored the clipping routine (SetFrustumFromBox()) from 1.9. Modified Paths: -------------- CS/trunk/libs/csplugincommon/rendermanager/renderview.cpp CS/trunk/plugins/rendermanager/shadow_pssm/shadow_pssm.cpp CS/trunk/plugins/rendermanager/unshadowed/unshadowed.cpp Modified: CS/trunk/libs/csplugincommon/rendermanager/renderview.cpp =================================================================== --- CS/trunk/libs/csplugincommon/rendermanager/renderview.cpp 2008-07-19 02:54:48 UTC (rev 30460) +++ CS/trunk/libs/csplugincommon/rendermanager/renderview.cpp 2008-07-19 06:09:16 UTC (rev 30461) @@ -195,18 +195,16 @@ void RenderView::SetFrustumFromBox (const csBox2& box) { -#if 0 float iw = 2.0f/viewWidth; float ih = 2.0f/viewHeight; float lx_n = csClamp (box.MinX() * iw - 1.0f, 1.0f, -1.0f); float rx_n = csClamp (box.MaxX() * iw - 1.0f, 1.0f, -1.0f); float ty_n = csClamp (box.MinY() * ih - 1.0f, 1.0f, -1.0f); float by_n = csClamp (box.MaxY() * ih - 1.0f, 1.0f, -1.0f); -#endif - + CS::Math::Matrix4 invMatrix_inv_t = ctxt->icamera->GetProjectionMatrix().GetTranspose(); - + int n = 0; csPlane3 *frustum = ctxt->frustum; csPlane3 p; @@ -215,7 +213,6 @@ frustum[n] = invMatrix_inv_t * p; frustum[n].Normalize(); -#if 0 n++; // Far plane /*p.Set (0, 0, -1, 1); @@ -242,21 +239,6 @@ frustum[n] = invMatrix_inv_t * p; frustum[n].Normalize(); n++; -#endif - - csVector3 v1 (box.MinX (), box.MinY (), 1); - csVector3 v2 (box.MaxX (), box.MinY (), 1); - frustum[1].Set (v1 % v2, 0); - frustum[1].norm.Normalize (); - - csVector3 v3 (box.MaxX (), box.MaxY (), 1); - frustum[2].Set (v2 % v3, 0); - frustum[2].norm.Normalize (); - v2.Set (box.MinX (), box.MaxY (), 1); - frustum[3].Set (v3 % v2, 0); - frustum[3].norm.Normalize (); - frustum[4].Set (v2 % v1, 0); - frustum[4].norm.Normalize (); } void RenderView::SetFrustum (float lx, float rx, float ty, float by) @@ -265,8 +247,8 @@ rightx = rx; topy = ty; boty = by; - - SetFrustumFromBox (csBox2 (lx, ty, rx, by)); + + //SetFrustumFromBox (csBox2 (lx, ty, rx, by)); } void RenderView::CreateRenderContext () Modified: CS/trunk/plugins/rendermanager/shadow_pssm/shadow_pssm.cpp =================================================================== --- CS/trunk/plugins/rendermanager/shadow_pssm/shadow_pssm.cpp 2008-07-19 02:54:48 UTC (rev 30460) +++ CS/trunk/plugins/rendermanager/shadow_pssm/shadow_pssm.cpp 2008-07-19 06:09:16 UTC (rev 30461) @@ -176,11 +176,20 @@ rview.AttachNew (new (treePersistent.renderViewPool) CS::RenderManager::RenderView(view)); #include "csutil/custom_new_enable.h" - view->GetCamera()->SetViewportSize (rview->GetGraphics3D()->GetWidth(), - rview->GetGraphics3D()->GetHeight()); + iCamera* c = view->GetCamera (); + iGraphics3D* G3D = rview->GetGraphics3D (); + int frameWidth = G3D->GetWidth (); + int frameHeight = G3D->GetHeight (); + c->SetViewportSize (frameWidth, frameHeight); view->GetEngine ()->UpdateNewFrame (); view->GetEngine ()->FireStartFrame (rview); + float leftx = -c->GetShiftX () * c->GetInvFOV (); + float rightx = (frameWidth - c->GetShiftX ()) * c->GetInvFOV (); + float topy = -c->GetShiftY () * c->GetInvFOV (); + float boty = (frameHeight - c->GetShiftY ()) * c->GetInvFOV (); + rview->SetFrustum (leftx, rightx, topy, boty); + contextsScannedForTargets.Empty (); portalPersistent.UpdateNewFrame (); lightPersistent.UpdateNewFrame (); Modified: CS/trunk/plugins/rendermanager/unshadowed/unshadowed.cpp =================================================================== --- CS/trunk/plugins/rendermanager/unshadowed/unshadowed.cpp 2008-07-19 02:54:48 UTC (rev 30460) +++ CS/trunk/plugins/rendermanager/unshadowed/unshadowed.cpp 2008-07-19 06:09:16 UTC (rev 30461) @@ -171,11 +171,20 @@ rview.AttachNew (new (treePersistent.renderViewPool) CS::RenderManager::RenderView(view)); #include "csutil/custom_new_enable.h" - view->GetCamera()->SetViewportSize (rview->GetGraphics3D()->GetWidth(), - rview->GetGraphics3D()->GetHeight()); + iCamera* c = view->GetCamera (); + iGraphics3D* G3D = rview->GetGraphics3D (); + int frameWidth = G3D->GetWidth (); + int frameHeight = G3D->GetHeight (); + c->SetViewportSize (frameWidth, frameHeight); view->GetEngine ()->UpdateNewFrame (); view->GetEngine ()->FireStartFrame (rview); + float leftx = -c->GetShiftX () * c->GetInvFOV (); + float rightx = (frameWidth - c->GetShiftX ()) * c->GetInvFOV (); + float topy = -c->GetShiftY () * c->GetInvFOV (); + float boty = (frameHeight - c->GetShiftY ()) * c->GetInvFOV (); + rview->SetFrustum (leftx, rightx, topy, boty); + contextsScannedForTargets.Empty (); portalPersistent.UpdateNewFrame (); lightPersistent.UpdateNewFrame (); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: res <re...@gm...> - 2008-07-19 19:29:37
Attachments:
signature.asc
|
On 19.07.2008 08:09, jo...@us... wrote: > - iRenderView->SetFrustum() would accidently call SetFrustumFromBox() again > but with different view resolution (i.e. screen pixel coordinates instead > of normalized coordinates). Removing this call fixes the problem that > it was impossible to get both rl_compat and unshadowed working right > with regards to clipping. But doesn't that mean that the planes in frustum in a render view are not updated when SetFrustum() is called? -f.r. |
From: <mg...@us...> - 2008-07-19 22:30:24
|
Revision: 30464 http://crystal.svn.sourceforge.net/crystal/?rev=30464&view=rev Author: mgist Date: 2008-07-19 22:27:54 +0000 (Sat, 19 Jul 2008) Log Message: ----------- Merged revisions 30463 via svnmerge from https://crystal.svn.sourceforge.net/svnroot/crystal/CS/branches/release/V1.4 ........ r30463 | mgist | 2008-07-19 22:22:41 +0100 (Sat, 19 Jul 2008) | 1 line - Fixed terrain2 unloading. ........ Modified Paths: -------------- CS/trunk/plugins/mesh/terrain/terrain2/cell.cpp CS/trunk/plugins/mesh/terrain/terrain2/terrainsystem.cpp Property Changed: ---------------- CS/trunk/ Property changes on: CS/trunk ___________________________________________________________________ Modified: svnmerge-integrated - /CS/branches/feature/newanim:1-30040 /CS/branches/feature/rendermanager:1-29759,29761-29886 /CS/branches/release/V1.4:1-29935,30181,30333 + /CS/branches/feature/newanim:1-30040 /CS/branches/feature/rendermanager:1-29759,29761-29886 /CS/branches/release/V1.4:1-29935,30181,30333,30463 Added: svn:mergeinfo + /CS/branches/release/V1.4:30463 Modified: CS/trunk/plugins/mesh/terrain/terrain2/cell.cpp =================================================================== --- CS/trunk/plugins/mesh/terrain/terrain2/cell.cpp 2008-07-19 21:22:41 UTC (rev 30463) +++ CS/trunk/plugins/mesh/terrain/terrain2/cell.cpp 2008-07-19 22:27:54 UTC (rev 30464) @@ -65,6 +65,7 @@ csTerrainCell::~csTerrainCell () { + SetLoadState (NotLoaded); } iTerrainSystem* csTerrainCell::GetTerrain() @@ -158,6 +159,8 @@ { case NotLoaded: { + terrain->FireUnloadCallbacks (this); + heightmap.DeleteAll (); materialmap.DeleteAll (); @@ -167,8 +170,6 @@ loadState = NotLoaded; - terrain->FireUnloadCallbacks (this); - break; } case PreLoaded: Modified: CS/trunk/plugins/mesh/terrain/terrain2/terrainsystem.cpp =================================================================== --- CS/trunk/plugins/mesh/terrain/terrain2/terrainsystem.cpp 2008-07-19 21:22:41 UTC (rev 30463) +++ CS/trunk/plugins/mesh/terrain/terrain2/terrainsystem.cpp 2008-07-19 22:27:54 UTC (rev 30464) @@ -53,6 +53,8 @@ csTerrainSystem::~csTerrainSystem () { + cells.Empty(); + renderer->DisconnectTerrain (this); } void csTerrainSystem::AddCell (csTerrainCell* cell) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2008-07-20 07:26:20
|
Revision: 30466 http://crystal.svn.sourceforge.net/crystal/?rev=30466&view=rev Author: res2002 Date: 2008-07-20 07:25:54 +0000 (Sun, 20 Jul 2008) Log Message: ----------- Added option to lighter2 disable self shadows for select objects Modified Paths: -------------- CS/trunk/apps/tools/lighter2/directlight.cpp CS/trunk/apps/tools/lighter2/light.cpp CS/trunk/apps/tools/lighter2/light.h CS/trunk/apps/tools/lighter2/object.cpp CS/trunk/apps/tools/lighter2/object.h CS/trunk/apps/tools/lighter2/raytracer.cpp CS/trunk/apps/tools/lighter2/raytracer.h CS/trunk/docs/texinfo/content/lighter2/developers.txi CS/trunk/docs/texinfo/content/lighter2/users.txi Modified: CS/trunk/apps/tools/lighter2/directlight.cpp =================================================================== --- CS/trunk/apps/tools/lighter2/directlight.cpp 2008-07-20 06:17:08 UTC (rev 30465) +++ CS/trunk/apps/tools/lighter2/directlight.cpp 2008-07-20 07:25:54 UTC (rev 30466) @@ -113,6 +113,14 @@ defElementQuadrantConstants, clippedElementQuadrantConstants); ElementQuadrantConstants = clippedElementQuadrantConstants; } + +#ifdef DUMP_NORMALS + { + const csVector3 normal = ComputeElementNormal (element, elementC); + const csVector3 normalBiased = normal*0.5f + csVector3 (0.5f); + return csColor (normalBiased.x, normalBiased.y, normalBiased.z); + } +#endif for (size_t qi = 0; qi < 4; ++qi) { @@ -248,6 +256,8 @@ VisibilityTester visTester (light, obj); float lightPdf, cosineTerm = 0; csVector3 lightVec; + const Object* ignObj = obj->GetFlags().Check (OBJECT_FLAG_NOSELFSHADOW) + ? obj : 0; const bool isDelta = true; //light->IsDeltaLight (); no support for area lights yet @@ -266,11 +276,11 @@ { DirectLightingBorderIgnoreCb icb (shadowIgnorePrimitive, -lightVec, point); - occlusion = visTester.Occlusion (&icb); + occlusion = visTester.Occlusion (ignObj, &icb); } else { - occlusion = visTester.Occlusion (shadowIgnorePrimitive); + occlusion = visTester.Occlusion (ignObj, shadowIgnorePrimitive); } if (occlusion == VisibilityTester::occlOccluded) return csColor (0, 0, 0); @@ -470,11 +480,13 @@ for (size_t i = 0; i < vdata.positions.GetSize (); ++i) { + csColor& c = litColors->Get (i); + const csVector3& normal = ComputeVertexNormal (obj, i); +#ifdef DUMP_NORMALS + const csVector3 normalBiased = normal*0.5f + csVector3 (0.5f); + c = csColor (normalBiased.x, normalBiased.y, normalBiased.z); +#else const csVector3& pos = vdata.positions[i]; - const csVector3& normal = ComputeVertexNormal (obj, i); - - csColor& c = litColors->Get (i); - c = (this->*pvlPointShader) (sector, obj, pos, normal, masterSampler); // Shade PD lights @@ -485,6 +497,7 @@ pdlColors->Get (i) += UniformShadeOneLight (sector, obj, pos, normal, pdl, masterSampler); } +#endif progress.Advance (); } Modified: CS/trunk/apps/tools/lighter2/light.cpp =================================================================== --- CS/trunk/apps/tools/lighter2/light.cpp 2008-07-20 06:17:08 UTC (rev 30465) +++ CS/trunk/apps/tools/lighter2/light.cpp 2008-07-20 07:25:54 UTC (rev 30466) @@ -98,7 +98,7 @@ } VisibilityTester::OcclusionState VisibilityTester::Occlusion ( - const Primitive* ignorePrim) + const Object* ignoreObject, const Primitive* ignorePrim) { HitCallback hitcb (*this); size_t lastHitCount = transparentHits.GetSize(); @@ -112,6 +112,7 @@ for (size_t i = 0; i < allSegments.GetSize (); ++i) { Segment& s = allSegments[i]; + s.ray.ignoreObject = ignoreObject; s.ray.ignorePrimitive = ignorePrim; if (Raytracer::TraceAnyHit (s.tree,s.ray, &hitcb)) @@ -131,6 +132,7 @@ for (size_t i = 0; i < allSegments.GetSize (); ++i) { Segment& s = allSegments[i]; + s.ray.ignoreObject = ignoreObject; s.ray.ignorePrimitive = ignorePrim; HitPoint hit; @@ -155,6 +157,7 @@ for (size_t i = 0; i < allSegments.GetSize (); ++i) { Segment& s = allSegments[i]; + s.ray.ignoreObject = ignoreObject; s.ray.ignorePrimitive = ignorePrim; if (Raytracer::TraceAllHits (s.tree, s.ray, &hitcb)) @@ -171,7 +174,7 @@ } VisibilityTester::OcclusionState VisibilityTester::Occlusion ( - HitIgnoreCallback* ignoreCB) + const Object* ignoreObject, HitIgnoreCallback* ignoreCB) { HitCallback hitcb (*this); size_t lastHitCount = transparentHits.GetSize(); @@ -182,6 +185,7 @@ for (size_t i = 0; i < allSegments.GetSize (); ++i) { Segment& s = allSegments[i]; + s.ray.ignoreObject = ignoreObject; HitPoint hit; if (Raytracer::TraceAnyHit (s.tree,s.ray, hit, ignoreCB)) @@ -204,6 +208,7 @@ for (size_t i = 0; i < allSegments.GetSize (); ++i) { Segment& s = allSegments[i]; + s.ray.ignoreObject = ignoreObject; if (Raytracer::TraceAllHits (s.tree, s.ray, &hitcb, ignoreCB)) { Modified: CS/trunk/apps/tools/lighter2/light.h =================================================================== --- CS/trunk/apps/tools/lighter2/light.h 2008-07-20 06:17:08 UTC (rev 30465) +++ CS/trunk/apps/tools/lighter2/light.h 2008-07-20 07:25:54 UTC (rev 30466) @@ -44,8 +44,10 @@ occlUnoccluded, occlPartial }; - OcclusionState Occlusion (const Primitive* ignorePrim = 0); - OcclusionState Occlusion (HitIgnoreCallback* ignoreCB); + OcclusionState Occlusion (const Object* ignoreObject, + const Primitive* ignorePrim = 0); + OcclusionState Occlusion (const Object* ignoreObject, + HitIgnoreCallback* ignoreCB); csColor GetFilterColor (); Modified: CS/trunk/apps/tools/lighter2/object.cpp =================================================================== --- CS/trunk/apps/tools/lighter2/object.cpp 2008-07-20 06:17:08 UTC (rev 30465) +++ CS/trunk/apps/tools/lighter2/object.cpp 2008-07-20 07:25:54 UTC (rev 30466) @@ -49,6 +49,7 @@ ObjectFactory::ObjectFactory (const Configuration& config) : lightPerVertex (false), noModify (false), hasTangents (false), + noSelfShadow (false), lmScale (config.GetLMProperties ().lmDensity), factoryWrapper (0) { @@ -123,6 +124,12 @@ if (vVertexlight != 0) lightPerVertex = (strcmp (vVertexlight, "yes") == 0); + const char* vNoSelfShadow = kvp->GetValue ("noselfshadow"); + if (vNoSelfShadow != 0) + { + noSelfShadow = (strcmp (vNoSelfShadow, "yes") == 0); + } + const char* vLMScale = kvp->GetValue ("lmscale"); if (vLMScale) { @@ -203,6 +210,8 @@ : lightPerVertex (fact->lightPerVertex), sector (0), litColors (0), litColorsPD (0), factory (fact) { + if (factory->noSelfShadow) + objFlags.Set (OBJECT_FLAG_NOSELFSHADOW); } Object::~Object () @@ -374,6 +383,13 @@ scfQueryInterface<iKeyValuePair> (obj); if (kvp.IsValid() && (strcmp (kvp->GetKey(), "lighter2") == 0)) { + const char* vNoSelfShadow = kvp->GetValue ("noselfshadow"); + if (vNoSelfShadow != 0) + { + objFlags.SetBool (OBJECT_FLAG_NOSELFSHADOW, + strcmp (vNoSelfShadow, "yes") == 0); + } + if (!factory->lightPerVertex) { /* Disallow "disabling" of per-vertex lighting in an object when Modified: CS/trunk/apps/tools/lighter2/object.h =================================================================== --- CS/trunk/apps/tools/lighter2/object.h 2008-07-20 06:17:08 UTC (rev 30465) +++ CS/trunk/apps/tools/lighter2/object.h 2008-07-20 07:25:54 UTC (rev 30466) @@ -49,7 +49,9 @@ // Include in occlusion debugging OBJECT_FLAG_RAYDEBUG = 4, // Tangent space is available - OBJECT_FLAG_TANGENTS = 8 + OBJECT_FLAG_TANGENTS = 8, + // Don't cast shadows on itself + OBJECT_FLAG_NOSELFSHADOW = 16 }; /** @@ -94,6 +96,12 @@ /// Whether tangent space data is available bool hasTangents : 1; + + /** + * Whether meshes of this factory should not cast shadows + * on themselves + */ + bool noSelfShadow : 1; protected: // Begin remapping of submeshes Modified: CS/trunk/apps/tools/lighter2/raytracer.cpp =================================================================== --- CS/trunk/apps/tools/lighter2/raytracer.cpp 2008-07-20 06:17:08 UTC (rev 30465) +++ CS/trunk/apps/tools/lighter2/raytracer.cpp 2008-07-20 07:25:54 UTC (rev 30466) @@ -132,6 +132,10 @@ ray.ignorePrimitive->GetPlane () == prim->primPointer->GetPlane ()) continue; + if ((ray.ignoreObject != 0) + && prim->primPointer->GetObject() == ray.ignoreObject) + continue; + haveHit = IntersectPrimitiveRay (*prim, ray, thisHit); if (haveHit) { Modified: CS/trunk/apps/tools/lighter2/raytracer.h =================================================================== --- CS/trunk/apps/tools/lighter2/raytracer.h 2008-07-20 06:17:08 UTC (rev 30465) +++ CS/trunk/apps/tools/lighter2/raytracer.h 2008-07-20 07:25:54 UTC (rev 30466) @@ -54,9 +54,12 @@ // Specific primitive to ignore const Primitive* ignorePrimitive; + // Also ignore all primitives from this object + const Object* ignoreObject; + Ray () : origin (0,0,0), direction (1,0,0), minLength (0), maxLength (FLT_MAX*0.9f), - rayID (0), ignoreFlags (0), ignorePrimitive (0) + rayID (0), ignoreFlags (0), ignorePrimitive (0), ignoreObject (0) {} // Clip to box. Returns if ray touch box at all Modified: CS/trunk/docs/texinfo/content/lighter2/developers.txi =================================================================== --- CS/trunk/docs/texinfo/content/lighter2/developers.txi 2008-07-20 06:17:08 UTC (rev 30465) +++ CS/trunk/docs/texinfo/content/lighter2/developers.txi 2008-07-20 07:25:54 UTC (rev 30466) @@ -24,7 +24,7 @@ Here, @samp{name="lighter2"} is used by @code{lighter2} to identify keys containing options. @samp{editoronly="yes"} instructs the engine to discard -the key-value-pait during normal execution in order to conserve memory (since +the key-value-pair during normal execution in order to conserve memory (since the @code{lighter2}-specific settings are simply not needed). The actual options are specified by a number of @samp{@emph{option}=@emph{value}} pairs. @@ -40,4 +40,11 @@ Values: floating point values Control lightmap density. + +@table @code +@item noselfshadow +Values: @samp{yes}, @samp{no} + +Disables casting of shadows from an object onto itself. + @end table Modified: CS/trunk/docs/texinfo/content/lighter2/users.txi =================================================================== --- CS/trunk/docs/texinfo/content/lighter2/users.txi 2008-07-20 06:17:08 UTC (rev 30465) +++ CS/trunk/docs/texinfo/content/lighter2/users.txi 2008-07-20 07:25:54 UTC (rev 30466) @@ -164,6 +164,15 @@ enabled for a factory it can't be disabled for objects of that factory. @end itemize +@subheading Disable self shadows + +Disables casting of shadows from an object onto itself. + +@itemize @bullet +@item Can be set on mesh factories. +@item Can be set on mesh objects. +@end itemize + @subheading Advanced Options @subsubheading Black Threshold This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-07-21 14:33:40
|
Revision: 30473 http://crystal.svn.sourceforge.net/crystal/?rev=30473&view=rev Author: mgist Date: 2008-07-21 14:33:28 +0000 (Mon, 21 Jul 2008) Log Message: ----------- Merged revisions 30471 via svnmerge from https://crystal.svn.sourceforge.net/svnroot/crystal/CS/branches/soc2008/threadcomm ........ r30471 | mgist | 2008-07-21 14:57:31 +0100 (Mon, 21 Jul 2008) | 1 line - Fixed a crash when lighting with directional lightmaps enabled. ........ Modified Paths: -------------- CS/trunk/apps/tools/lighter2/object_genmesh.cpp Property Changed: ---------------- CS/trunk/ Property changes on: CS/trunk ___________________________________________________________________ Modified: svnmerge-integrated - /CS/branches/feature/newanim:1-30040 /CS/branches/feature/rendermanager:1-29759,29761-29886 /CS/branches/release/V1.4:1-29935,30181,30333,30463 /CS/branches/soc2008/threadcomm:1-29721 + /CS/branches/feature/newanim:1-30040 /CS/branches/feature/rendermanager:1-29759,29761-29886 /CS/branches/release/V1.4:1-29935,30181,30333,30463 /CS/branches/soc2008/threadcomm:1-29721,30471 Modified: svn:mergeinfo - /CS/branches/release/V1.4:30463 + /CS/branches/release/V1.4:30463 /CS/branches/soc2008/threadcomm:30471 Modified: CS/trunk/apps/tools/lighter2/object_genmesh.cpp =================================================================== --- CS/trunk/apps/tools/lighter2/object_genmesh.cpp 2008-07-21 14:31:42 UTC (rev 30472) +++ CS/trunk/apps/tools/lighter2/object_genmesh.cpp 2008-07-21 14:33:28 UTC (rev 30473) @@ -232,6 +232,10 @@ vertexData.positions.GetSize(), CS_BUF_STATIC, CS_BUFCOMP_FLOAT, 3); csRef<iRenderBuffer> bitangentBuf = csRenderBuffer::CreateRenderBuffer ( vertexData.positions.GetSize(), CS_BUF_STATIC, CS_BUFCOMP_FLOAT, 3); + + tangentBuf = WrapBuffer (tangentBuf, "tng"); + bitangentBuf = WrapBuffer (bitangentBuf, "btg"); + csRenderBufferLock<csVector3> tangents (tangentBuf); csRenderBufferLock<csVector3> bitangents (bitangentBuf); for (size_t v = 0; v < vertCount; v++) @@ -243,9 +247,6 @@ *((csVector3*)vertexData.GetCustomData (v, vdataBitangents)); *bitangents++ = b; } - - tangentBuf = WrapBuffer (tangentBuf, "tng"); - bitangentBuf = WrapBuffer (tangentBuf, "btg"); genFact->RemoveRenderBuffer ("tangent"); genFact->AddRenderBuffer ("tangent", tangentBuf); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-07-23 10:18:25
|
Revision: 30487 http://crystal.svn.sourceforge.net/crystal/?rev=30487&view=rev Author: mgist Date: 2008-07-23 10:18:22 +0000 (Wed, 23 Jul 2008) Log Message: ----------- Merged revisions 30486 via svnmerge from https://crystal.svn.sourceforge.net/svnroot/crystal/CS/branches/soc2008/threadcomm ........ r30486 | mgist | 2008-07-23 11:03:05 +0100 (Wed, 23 Jul 2008) | 1 line - Added a missing dupe check in LoadLibrary. ........ Modified Paths: -------------- CS/trunk/plugins/csparser/csloader.cpp Property Changed: ---------------- CS/trunk/ Property changes on: CS/trunk ___________________________________________________________________ Modified: svnmerge-integrated - /CS/branches/feature/newanim:1-30040 /CS/branches/feature/rendermanager:1-29759,29761-29886 /CS/branches/release/V1.4:1-29935,30181,30333,30463 /CS/branches/soc2008/threadcomm:1-29721,30471 + /CS/branches/feature/newanim:1-30040 /CS/branches/feature/rendermanager:1-29759,29761-29886 /CS/branches/release/V1.4:1-29935,30181,30333,30463 /CS/branches/soc2008/threadcomm:1-29721,30471,30486 Modified: svn:mergeinfo - /CS/branches/release/V1.4:30463 /CS/branches/soc2008/threadcomm:30471 + /CS/branches/release/V1.4:30463 /CS/branches/soc2008/threadcomm:30471,30486 Modified: CS/trunk/plugins/csparser/csloader.cpp =================================================================== --- CS/trunk/plugins/csparser/csloader.cpp 2008-07-23 10:03:05 UTC (rev 30486) +++ CS/trunk/plugins/csparser/csloader.cpp 2008-07-23 10:18:22 UTC (rev 30487) @@ -1483,22 +1483,32 @@ break; case XMLTOKEN_MESHFACT: { - csRef<iMeshFactoryWrapper> t = Engine->CreateMeshFactory ( - child->GetAttributeValue ("name")); - if (t) - { - if (!LoadMeshObjectFactory (ldr_context, t, 0, child, 0, ssource)) - { - // Error is already reported. - return false; - } - else - { - AddToCollection (ldr_context, t->QueryObject ()); - } - } - } - break; + const char* meshfactname = child->GetAttributeValue ("name"); + if(ldr_context->CheckDupes ()) + { + iMeshFactoryWrapper* mfw = Engine->FindMeshFactory (meshfactname); + if(mfw) + { + AddToCollection (ldr_context, mfw->QueryObject ()); + break; + } + } + + csRef<iMeshFactoryWrapper> t = Engine->CreateMeshFactory (meshfactname); + if (t) + { + if (!LoadMeshObjectFactory (ldr_context, t, 0, child, 0, ssource)) + { + // Error is already reported. + return false; + } + else + { + AddToCollection (ldr_context, t->QueryObject ()); + } + } + } + break; case XMLTOKEN_PLUGINS: if (!LoadPlugins (child)) return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sun...@us...> - 2008-07-23 12:24:00
|
Revision: 30491 http://crystal.svn.sourceforge.net/crystal/?rev=30491&view=rev Author: sunshine Date: 2008-07-23 12:23:55 +0000 (Wed, 23 Jul 2008) Log Message: ----------- Eric Sunshine made the following changes: Added a check to configure.ac for GCC's __attribute__((init_priority(X))), which is used by csutil/ptmalloc_wrap.cpp, and which is not universally available (for instance, gcc 3.4.3 on OpenSolaris lacks it). Added preprocessor macro CS_ATTRIBUTE_INIT_PRIORITY(), which is defined appropriately for compilers which support the attribute, else is a no-op for those which do not. Slightly simplified __attribute__((malloc)) check in configure.ac. Augmented CS_SYMBOL_QUALIFIER() in qualify.m4 so that it appends the attribute to SYMBOL rather than prepending it. In addition to being a more canonical arrangement, this makes it possible to supply complex SYMBOL definitions, such as the one for __attribute__((init_priority(X))) which must define a class and top-level variable for attribute testing (a requirement of this particular attribute) rather than the simple 'void f()' used for most tests. Modified Paths: -------------- CS/trunk/configure.ac CS/trunk/include/cssysdef.h CS/trunk/libs/csutil/ptmalloc_wrap.cpp CS/trunk/mk/autoconf/qualify.m4 Modified: CS/trunk/configure.ac =================================================================== --- CS/trunk/configure.ac 2008-07-23 11:34:47 UTC (rev 30490) +++ CS/trunk/configure.ac 2008-07-23 12:23:55 UTC (rev 30491) @@ -2188,19 +2188,33 @@ [CS_HEADER_PROPERTY([CS_ATTRIBUTE_DEPRECATED], [$cs_cv_prog_cxx_declare_deprecated])]) + + #------------------------------------------------------------------------------ # Check if the "malloc" attribute is available. #------------------------------------------------------------------------------ CS_SYMBOL_QUALIFIER([how to declare allocation function], [cs_cv_prog_c_attr_malloc], - [__attribute__((malloc))], [], [C]) -AS_IF([test $cs_cv_prog_c_attr_malloc != no], + [__attribute__((malloc))], [], [C], [CS_HEADER_PROPERTY([CS_ATTRIBUTE_MALLOC], [$cs_cv_prog_c_attr_malloc])]) #------------------------------------------------------------------------------ +# Check if the "init_priority" attribute is available. +#------------------------------------------------------------------------------ +CS_SYMBOL_QUALIFIER([how to declare object initialization priority], + [cs_cv_prog_cxx_attr_init_priority], + [__attribute__((init_priority(PRI)))], + [[#define PRI 1010 + class X{}; X x]], [C++], + [CS_HEADER_PROPERTY([CS_ATTRIBUTE_INIT_PRIORITY(PRI)], + [$cs_cv_prog_cxx_attr_init_priority])]) + + + +#------------------------------------------------------------------------------ # CS_CHECK_QSQRT # Check if compiler is able to understand the assembly code in csqsqrt.h. # The MacOS/X PowerPC version of csQsqrt() requires the Modified: CS/trunk/include/cssysdef.h =================================================================== --- CS/trunk/include/cssysdef.h 2008-07-23 11:34:47 UTC (rev 30490) +++ CS/trunk/include/cssysdef.h 2008-07-23 12:23:55 UTC (rev 30491) @@ -1,5 +1,5 @@ /* - Copyright (C) 1998-2001 by Jorrit Tyberghein + Copyright (C) 1998-2008 by Jorrit Tyberghein Written by Andrew Zabolotny <bi...@el...> This library is free software; you can redistribute it and/or @@ -92,6 +92,13 @@ # define CS_ATTRIBUTE_MALLOC #endif +/**\def CS_ATTRIBUTE_INIT_PRIORITY() + * Namespace-level object initialization priority attribute. + */ +#ifndef CS_ATTRIBUTE_INIT_PRIORITY +# define CS_ATTRIBUTE_INIT_PRIORITY(PRI) +#endif + // Set up deprecation macros #ifdef CS_COMPILER_GCC # define CS_DEPRECATED_METHOD CS_ATTRIBUTE_DEPRECATED Modified: CS/trunk/libs/csutil/ptmalloc_wrap.cpp =================================================================== --- CS/trunk/libs/csutil/ptmalloc_wrap.cpp 2008-07-23 11:34:47 UTC (rev 30490) +++ CS/trunk/libs/csutil/ptmalloc_wrap.cpp 2008-07-23 12:23:55 UTC (rev 30491) @@ -680,11 +680,7 @@ this->func = func; } }; - static AtexitHandler atexitHandler -#if defined(CS_COMPILER_GCC) - __attribute__ ((init_priority (101))) -#endif - ; + static AtexitHandler atexitHandler CS_ATTRIBUTE_INIT_PRIORITY(101); } } Modified: CS/trunk/mk/autoconf/qualify.m4 =================================================================== --- CS/trunk/mk/autoconf/qualify.m4 2008-07-23 11:34:47 UTC (rev 30490) +++ CS/trunk/mk/autoconf/qualify.m4 2008-07-23 12:23:55 UTC (rev 30491) @@ -1,6 +1,6 @@ # qualify.m4 -*- Autoconf -*- #============================================================================== -# Copyright (C)2005 by Eric Sunshine <sun...@su...> +# Copyright (C)2005,2008 by Eric Sunshine <sun...@su...> # # This library is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published by @@ -40,7 +40,7 @@ [AS_IF([test "$$2" = no], [CS_BUILD_IFELSE( [AC_LANG_PROGRAM( - [cs_symbol_qualifier m4_default([$4],[void f()]);], + [m4_default([$4],[void f()]) cs_symbol_qualifier;], [])], [], [$5], [$2='cs_symbol_qualifier'], [$2='no'])])])]) AS_IF([test $$2 != no], [$6], [$7])]) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2008-07-23 13:01:01
|
Revision: 30493 http://crystal.svn.sourceforge.net/crystal/?rev=30493&view=rev Author: res2002 Date: 2008-07-23 13:00:51 +0000 (Wed, 23 Jul 2008) Log Message: ----------- Made cached Cg programs 'paired' in the sense that now programs are cached for a combination of VP and FP limits, making sure they match to each other Modified Paths: -------------- CS/trunk/data/config-plugins/shadermgr.cfg CS/trunk/include/csplugincommon/shader/shaderplugin.h CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/cpi/condeval.cpp CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shader.cpp CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.cpp CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_afp.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_afp.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_arb.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_avp.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_avp.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon_parse.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgfp.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgfp.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgvp.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgvp.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/profile_limits.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/profile_limits.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_fixed/glshader_ffp.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_fixed/glshader_ffp.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_fixed/glshader_fixed.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_fixed/glshader_fvp.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_fixed/glshader_fvp.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_ps1/glshader_ps1.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_ps1/ps1_emu_common.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_ps1/ps1_emu_common.h CS/trunk/plugins/video/render3d/shader/shaderplugins/softshader/softshader.h CS/trunk/plugins/video/render3d/shader/shaderplugins/softshader/softshader_fp.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/softshader/softshader_fp.h CS/trunk/plugins/video/render3d/shader/shaderplugins/softshader/softshader_vp.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/softshader/softshader_vp.h CS/trunk/plugins/video/render3d/shader/shaderplugins/vproc_std/vproc_program.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/vproc_std/vproc_program.h CS/trunk/plugins/video/render3d/shader/shaderplugins/vproc_std/vproc_std.h Modified: CS/trunk/data/config-plugins/shadermgr.cfg =================================================================== --- CS/trunk/data/config-plugins/shadermgr.cfg 2008-07-23 12:24:21 UTC (rev 30492) +++ CS/trunk/data/config-plugins/shadermgr.cfg 2008-07-23 13:00:51 UTC (rev 30493) @@ -67,95 +67,120 @@ ; NumTexInstructionSlots (arbfp1) ; Minimal limits as dictated by ARB_v_p spec -Video.OpenGL.Shader.Cg.Precache.Vertex.minimalavp1.Profile = arbvp1 -Video.OpenGL.Shader.Cg.Precache.Vertex.minimalavp1.MaxAddressRegs = 1 -Video.OpenGL.Shader.Cg.Precache.Vertex.minimalavp1.MaxInstructions = 128 -Video.OpenGL.Shader.Cg.Precache.Vertex.minimalavp1.MaxLocalParams = 96 -Video.OpenGL.Shader.Cg.Precache.Vertex.minimalavp1.NumTemps = 12 +Video.OpenGL.Shader.Cg.Precache.minimal.Vertex.Profile = arbvp1 +Video.OpenGL.Shader.Cg.Precache.minimal.Vertex.MaxAddressRegs = 1 +Video.OpenGL.Shader.Cg.Precache.minimal.Vertex.MaxInstructions = 128 +Video.OpenGL.Shader.Cg.Precache.minimal.Vertex.MaxLocalParams = 96 +Video.OpenGL.Shader.Cg.Precache.minimal.Vertex.NumTemps = 12 ; Minimal limits as dictated by ARB_f_p spec -Video.OpenGL.Shader.Cg.Precache.Fragment.minimalafp1.Profile = arbfp1 -Video.OpenGL.Shader.Cg.Precache.Fragment.minimalafp1.MaxLocalParams = 24 -Video.OpenGL.Shader.Cg.Precache.Fragment.minimalafp1.MaxTexIndirections = 4 -Video.OpenGL.Shader.Cg.Precache.Fragment.minimalafp1.NumInstructionSlots = 72 -Video.OpenGL.Shader.Cg.Precache.Fragment.minimalafp1.NumMathInstructionSlots = 48 -Video.OpenGL.Shader.Cg.Precache.Fragment.minimalafp1.NumTemps = 16 -Video.OpenGL.Shader.Cg.Precache.Fragment.minimalafp1.NumTexInstructionSlots = 24 +Video.OpenGL.Shader.Cg.Precache.minimal.Fragment.Profile = arbfp1 +Video.OpenGL.Shader.Cg.Precache.minimal.Fragment.MaxLocalParams = 24 +Video.OpenGL.Shader.Cg.Precache.minimal.Fragment.MaxTexIndirections = 4 +Video.OpenGL.Shader.Cg.Precache.minimal.Fragment.NumInstructionSlots = 72 +Video.OpenGL.Shader.Cg.Precache.minimal.Fragment.NumMathInstructionSlots = 48 +Video.OpenGL.Shader.Cg.Precache.minimal.Fragment.NumTemps = 16 +Video.OpenGL.Shader.Cg.Precache.minimal.Fragment.NumTexInstructionSlots = 24 ; GF 3/4 -; Use ps_* profiles instead of fp20 to allow reuse on old Radeons. -Video.OpenGL.Shader.Cg.Precache.Fragment.gf3.Profile = ps_1_1 -Video.OpenGL.Shader.Cg.Precache.Fragment.gf4.Profile = ps_1_3 +Video.OpenGL.Shader.Cg.Precache.gf3.Fragment.Profile = fp20 +Video.OpenGL.Shader.Cg.Precache.gf3.Fragment.Vendor = nvidia +Video.OpenGL.Shader.Cg.Precache.gf3.Vertex.Profile = arbvp1 +Video.OpenGL.Shader.Cg.Precache.gf3.Vertex.Vendor = nvidia +Video.OpenGL.Shader.Cg.Precache.gf3.Vertex.MaxAddressRegs = 1 +Video.OpenGL.Shader.Cg.Precache.gf3.Vertex.MaxInstructions = 128 +Video.OpenGL.Shader.Cg.Precache.gf3.Vertex.MaxLocalParams = 96 +Video.OpenGL.Shader.Cg.Precache.gf3.Vertex.NumTemps = 12 ; GeForce FX limits ; see eg http://delphi3d.net/hardware/viewreport.php?report=1583 -Video.OpenGL.Shader.Cg.Precache.Vertex.gffx.Profile = vp30 -Video.OpenGL.Shader.Cg.Precache.Vertex.gffx.MaxLocalParams = 256 -Video.OpenGL.Shader.Cg.Precache.Fragment.gffx.Profile = fp30 +Video.OpenGL.Shader.Cg.Precache.gffx.Vertex.Profile = vp30 +Video.OpenGL.Shader.Cg.Precache.gffx.Vertex.Vendor = nvidia +Video.OpenGL.Shader.Cg.Precache.gffx.Vertex.MaxLocalParams = 256 +Video.OpenGL.Shader.Cg.Precache.gffx.Fragment.Profile = fp30 +Video.OpenGL.Shader.Cg.Precache.gffx.Fragment.Vendor = nvidia ; @@@ Correct? Cg defaults to 256 here -Video.OpenGL.Shader.Cg.Precache.Fragment.gffx.NumInstructionSlots = 1024 -Video.OpenGL.Shader.Cg.Precache.Fragment.gffx.NumTemps = 32 +Video.OpenGL.Shader.Cg.Precache.gffx.Fragment.NumInstructionSlots = 1024 +Video.OpenGL.Shader.Cg.Precache.gffx.Fragment.NumTemps = 32 ; GeForce 6 limits ; see eg http://delphi3d.net/hardware/viewreport.php?report=1613 -Video.OpenGL.Shader.Cg.Precache.Vertex.gf6.Profile = vp40 -Video.OpenGL.Shader.Cg.Precache.Vertex.gf6.MaxAddressRegs = 2 -Video.OpenGL.Shader.Cg.Precache.Vertex.gf6.MaxLocalParams = 256 -Video.OpenGL.Shader.Cg.Precache.Vertex.gf6.MaxInstructions = 512 -Video.OpenGL.Shader.Cg.Precache.Vertex.gf6.NumTemps = 48 -Video.OpenGL.Shader.Cg.Precache.Fragment.gf6.Profile = fp40 -Video.OpenGL.Shader.Cg.Precache.Fragment.gf6.MaxLocalParams = 512 -Video.OpenGL.Shader.Cg.Precache.Fragment.gf6.NumInstructionSlots = 4096 -Video.OpenGL.Shader.Cg.Precache.Fragment.gf6.NumTemps = 32 +Video.OpenGL.Shader.Cg.Precache.gf6.Vertex.Profile = vp40 +Video.OpenGL.Shader.Cg.Precache.gf6.Vertex.Vendor = nvidia +Video.OpenGL.Shader.Cg.Precache.gf6.Vertex.MaxAddressRegs = 2 +Video.OpenGL.Shader.Cg.Precache.gf6.Vertex.MaxLocalParams = 256 +Video.OpenGL.Shader.Cg.Precache.gf6.Vertex.MaxInstructions = 512 +Video.OpenGL.Shader.Cg.Precache.gf6.Vertex.NumTemps = 48 +Video.OpenGL.Shader.Cg.Precache.gf6.Fragment.Profile = fp40 +Video.OpenGL.Shader.Cg.Precache.gf6.Fragment.Vendor = nvidia +Video.OpenGL.Shader.Cg.Precache.gf6.Fragment.MaxLocalParams = 512 +Video.OpenGL.Shader.Cg.Precache.gf6.Fragment.NumInstructionSlots = 4096 +Video.OpenGL.Shader.Cg.Precache.gf6.Fragment.NumTemps = 32 ; GeForce 7 limits - are pretty much the same as GF6 ones ; GeForce 8 limits -Video.OpenGL.Shader.Cg.Precache.Vertex.gf8.Profile = gp4vp -Video.OpenGL.Shader.Cg.Precache.Fragment.gf8.Profile = gp4fp +Video.OpenGL.Shader.Cg.Precache.gf8.Vertex.Profile = gp4vp +Video.OpenGL.Shader.Cg.Precache.gf8.Vertex.Vendor = nvidia +Video.OpenGL.Shader.Cg.Precache.gf8.Fragment.Profile = gp4fp +Video.OpenGL.Shader.Cg.Precache.gf8.Fragment.Vendor = nvidia +; Radeon 8500 limits +Video.OpenGL.Shader.Cg.Precache.radeon8500.Vertex.Profile = arbvp1 +Video.OpenGL.Shader.Cg.Precache.radeon8500.Vertex.MaxAddressRegs = 1 +Video.OpenGL.Shader.Cg.Precache.radeon8500.Vertex.MaxInstructions = 128 +Video.OpenGL.Shader.Cg.Precache.radeon8500.Vertex.MaxLocalParams = 96 +Video.OpenGL.Shader.Cg.Precache.radeon8500.Vertex.NumTemps = 12 +Video.OpenGL.Shader.Cg.Precache.radeon8500.Fragment.Profile = ps_1_3 + ; Radeon 9500 limits ; see eg http://delphi3d.net/hardware/viewreport.php?report=762 -Video.OpenGL.Shader.Cg.Precache.Vertex.r300.Profile = arbvp1 -Video.OpenGL.Shader.Cg.Precache.Vertex.r300.MaxAddressRegs = 1 -Video.OpenGL.Shader.Cg.Precache.Vertex.r300.MaxInstructions = 256 -Video.OpenGL.Shader.Cg.Precache.Vertex.r300.MaxLocalParams = 256 -Video.OpenGL.Shader.Cg.Precache.Vertex.r300.NumTemps = 32 -Video.OpenGL.Shader.Cg.Precache.Fragment.r300.Profile = arbfp1 -Video.OpenGL.Shader.Cg.Precache.Fragment.r300.MaxLocalParams = 32 -Video.OpenGL.Shader.Cg.Precache.Fragment.r300.MaxTexIndirections = 4 -Video.OpenGL.Shader.Cg.Precache.Fragment.r300.NumInstructionSlots = 96 -Video.OpenGL.Shader.Cg.Precache.Fragment.r300.NumMathInstructionSlots = 64 -Video.OpenGL.Shader.Cg.Precache.Fragment.r300.NumTemps = 32 -Video.OpenGL.Shader.Cg.Precache.Fragment.r300.NumTexInstructionSlots = 32 +Video.OpenGL.Shader.Cg.Precache.r300.Vertex.Profile = arbvp1 +Video.OpenGL.Shader.Cg.Precache.r300.Vertex.Vendor = ati +Video.OpenGL.Shader.Cg.Precache.r300.Vertex.MaxAddressRegs = 1 +Video.OpenGL.Shader.Cg.Precache.r300.Vertex.MaxInstructions = 256 +Video.OpenGL.Shader.Cg.Precache.r300.Vertex.MaxLocalParams = 256 +Video.OpenGL.Shader.Cg.Precache.r300.Vertex.NumTemps = 32 +Video.OpenGL.Shader.Cg.Precache.r300.Fragment.Profile = arbfp1 +Video.OpenGL.Shader.Cg.Precache.r300.Fragment.Vendor = ati +Video.OpenGL.Shader.Cg.Precache.r300.Fragment.MaxLocalParams = 32 +Video.OpenGL.Shader.Cg.Precache.r300.Fragment.MaxTexIndirections = 4 +Video.OpenGL.Shader.Cg.Precache.r300.Fragment.NumInstructionSlots = 96 +Video.OpenGL.Shader.Cg.Precache.r300.Fragment.NumMathInstructionSlots = 64 +Video.OpenGL.Shader.Cg.Precache.r300.Fragment.NumTemps = 32 +Video.OpenGL.Shader.Cg.Precache.r300.Fragment.NumTexInstructionSlots = 32 ; Radeon X800 limits ; see eg http://delphi3d.net/hardware/viewreport.php?report=1485 -Video.OpenGL.Shader.Cg.Precache.Vertex.r420.Profile = arbvp1 -Video.OpenGL.Shader.Cg.Precache.Vertex.r420.MaxAddressRegs = 1 -Video.OpenGL.Shader.Cg.Precache.Vertex.r420.MaxInstructions = 256 -Video.OpenGL.Shader.Cg.Precache.Vertex.r420.MaxLocalParams = 256 -Video.OpenGL.Shader.Cg.Precache.Vertex.r420.NumTemps = 32 -Video.OpenGL.Shader.Cg.Precache.Fragment.r420.Profile = arbfp1 -Video.OpenGL.Shader.Cg.Precache.Fragment.r420.MaxLocalParams = 64 -Video.OpenGL.Shader.Cg.Precache.Fragment.r420.MaxTexIndirections = 4 -Video.OpenGL.Shader.Cg.Precache.Fragment.r420.NumInstructionSlots = 1024 -Video.OpenGL.Shader.Cg.Precache.Fragment.r420.NumMathInstructionSlots = 512 -Video.OpenGL.Shader.Cg.Precache.Fragment.r420.NumTemps = 64 -Video.OpenGL.Shader.Cg.Precache.Fragment.r420.NumTexInstructionSlots = 512 +Video.OpenGL.Shader.Cg.Precache.r420.Vertex.Profile = arbvp1 +Video.OpenGL.Shader.Cg.Precache.r420.Vertex.Vendor = ati +Video.OpenGL.Shader.Cg.Precache.r420.Vertex.MaxAddressRegs = 1 +Video.OpenGL.Shader.Cg.Precache.r420.Vertex.MaxInstructions = 256 +Video.OpenGL.Shader.Cg.Precache.r420.Vertex.MaxLocalParams = 256 +Video.OpenGL.Shader.Cg.Precache.r420.Vertex.NumTemps = 32 +Video.OpenGL.Shader.Cg.Precache.r420.Fragment.Profile = arbfp1 +Video.OpenGL.Shader.Cg.Precache.r420.Fragment.Vendor = ati +Video.OpenGL.Shader.Cg.Precache.r420.Fragment.MaxLocalParams = 64 +Video.OpenGL.Shader.Cg.Precache.r420.Fragment.MaxTexIndirections = 4 +Video.OpenGL.Shader.Cg.Precache.r420.Fragment.NumInstructionSlots = 1024 +Video.OpenGL.Shader.Cg.Precache.r420.Fragment.NumMathInstructionSlots = 512 +Video.OpenGL.Shader.Cg.Precache.r420.Fragment.NumTemps = 64 +Video.OpenGL.Shader.Cg.Precache.r420.Fragment.NumTexInstructionSlots = 512 ; Radeon X1650 limits ; see eg http://delphi3d.net/hardware/viewreport.php?report=1485 -Video.OpenGL.Shader.Cg.Precache.Vertex.r520.Profile = arbvp1 -Video.OpenGL.Shader.Cg.Precache.Vertex.r520.MaxAddressRegs = 1 -Video.OpenGL.Shader.Cg.Precache.Vertex.r520.MaxInstructions = 256 -Video.OpenGL.Shader.Cg.Precache.Vertex.r520.MaxLocalParams = 256 -Video.OpenGL.Shader.Cg.Precache.Vertex.r520.NumTemps = 32 -Video.OpenGL.Shader.Cg.Precache.Fragment.r520.Profile = arbfp1 -Video.OpenGL.Shader.Cg.Precache.Fragment.r520.MaxLocalParams = 64 -Video.OpenGL.Shader.Cg.Precache.Fragment.r520.MaxTexIndirections = 512 -Video.OpenGL.Shader.Cg.Precache.Fragment.r520.NumInstructionSlots = 1024 -Video.OpenGL.Shader.Cg.Precache.Fragment.r520.NumMathInstructionSlots = 512 -Video.OpenGL.Shader.Cg.Precache.Fragment.r520.NumTemps = 64 -Video.OpenGL.Shader.Cg.Precache.Fragment.r520.NumTexInstructionSlots = 512 +Video.OpenGL.Shader.Cg.Precache.r520.Vertex.Profile = arbvp1 +Video.OpenGL.Shader.Cg.Precache.r520.Vertex.Vendor = ati +Video.OpenGL.Shader.Cg.Precache.r520.Vertex.MaxAddressRegs = 1 +Video.OpenGL.Shader.Cg.Precache.r520.Vertex.MaxInstructions = 256 +Video.OpenGL.Shader.Cg.Precache.r520.Vertex.MaxLocalParams = 256 +Video.OpenGL.Shader.Cg.Precache.r520.Vertex.NumTemps = 32 +Video.OpenGL.Shader.Cg.Precache.r520.Fragment.Profile = arbfp1 +Video.OpenGL.Shader.Cg.Precache.r520.Fragment.Vendor = ati +Video.OpenGL.Shader.Cg.Precache.r520.Fragment.MaxLocalParams = 64 +Video.OpenGL.Shader.Cg.Precache.r520.Fragment.MaxTexIndirections = 512 +Video.OpenGL.Shader.Cg.Precache.r520.Fragment.NumInstructionSlots = 1024 +Video.OpenGL.Shader.Cg.Precache.r520.Fragment.NumMathInstructionSlots = 512 +Video.OpenGL.Shader.Cg.Precache.r520.Fragment.NumTemps = 64 +Video.OpenGL.Shader.Cg.Precache.r520.Fragment.NumTexInstructionSlots = 512 Modified: CS/trunk/include/csplugincommon/shader/shaderplugin.h =================================================================== --- CS/trunk/include/csplugincommon/shader/shaderplugin.h 2008-07-23 12:24:21 UTC (rev 30492) +++ CS/trunk/include/csplugincommon/shader/shaderplugin.h 2008-07-23 13:00:51 UTC (rev 30493) @@ -67,7 +67,7 @@ */ struct iShaderProgram : public virtual iBase { - SCF_INTERFACE(iShaderProgram, 4, 0, 0); + SCF_INTERFACE(iShaderProgram, 5, 0, 0); /// Sets this program to be the one used when rendering virtual void Activate() = 0; @@ -97,7 +97,8 @@ * \remark A program can expect that Compile() is only called once, and * all calls after the first can fail. */ - virtual bool Compile (iHierarchicalCache* cacheTo) = 0; + virtual bool Compile (iHierarchicalCache* cacheTo, + csRef<iString>* cacheTag = 0) = 0; /** * Request all shader variables used by a certain shader ticket. @@ -121,7 +122,7 @@ }; /// Loads from a cache virtual CacheLoadResult LoadFromCache (iHierarchicalCache* cache, - csRef<iString>* failReason = 0) = 0; + csRef<iString>* failReason = 0, csRef<iString>* cacheTag = 0) = 0; }; /** @@ -130,17 +131,18 @@ */ struct iShaderProgramPlugin : public virtual iBase { - SCF_INTERFACE(iShaderProgramPlugin,2,0,1); + SCF_INTERFACE(iShaderProgramPlugin,3,0,0); virtual csPtr<iShaderProgram> CreateProgram (const char* type) = 0; virtual bool SupportType (const char* type) = 0; + virtual csPtr<iStringArray> QueryPrecacheTags (const char* type) = 0; /** * Warm the given cache with the program specified in \a node. * \a outObj can return an object which exposes iShaderDestinationResolver. */ - virtual bool Precache (const char* type, - iShaderDestinationResolver* resolve, iDocumentNode* node, - iHierarchicalCache* cacheTo,csRef<iBase>* outObj = 0) = 0; + virtual bool Precache (const char* type, const char* tag, + iBase* previous, iDocumentNode* node, + iHierarchicalCache* cacheTo, csRef<iBase>* outObj = 0) = 0; }; /** @} */ Modified: CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/cpi/condeval.cpp =================================================================== --- CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/cpi/condeval.cpp 2008-07-23 12:24:21 UTC (rev 30492) +++ CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/cpi/condeval.cpp 2008-07-23 13:00:51 UTC (rev 30493) @@ -1767,7 +1767,8 @@ savedConds.SetPos (savedConds.GetSize() - sizeof (uint32)); uint32 numCondsLE; - savedConds.Read ((char*)&numCondsLE, sizeof (numCondsLE)); + if (savedConds.Read ((char*)&numCondsLE, sizeof (numCondsLE)) + != sizeof (sizeof (numCondsLE))) return; numCondsLE = csLittleEndian::UInt32 (numCondsLE); savedConds.SetPos (0); @@ -1777,7 +1778,8 @@ for (uint32 currentID = 0; currentID < numCondsLE; currentID++) { CondOperation newCond; - ReadCondition (&savedConds, stringStore, newCond); + if (!ReadCondition (&savedConds, stringStore, newCond)) + return; diskIDToCond.Put (currentID, evaluator.FindOptimizedCondition (newCond)); } @@ -1906,7 +1908,7 @@ csConditionID ConditionsReader::GetConditionID (uint32 diskID) const { const csConditionID* cond = diskIDToCond.GetElementPointer (diskID); - CS_ASSERT(cond != 0); + if (cond == 0) return (csConditionID)~0; return *cond; } Modified: CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shader.cpp =================================================================== --- CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shader.cpp 2008-07-23 12:24:21 UTC (rev 30492) +++ CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shader.cpp 2008-07-23 13:00:51 UTC (rev 30493) @@ -518,7 +518,6 @@ csRef<iFile> cacheFile; if (cacheValid) { - readFromCache = false; csRef<iDataBuffer> cacheData; if (readFromCache) cacheData = shaderCache->ReadCache (csString().Format ("/%s", cacheID_header.GetData())); @@ -526,6 +525,8 @@ { cacheFile.AttachNew (new csMemFile (cacheData, true)); } + else + readFromCache = false; if (cacheFile.IsValid()) { do @@ -563,7 +564,7 @@ cacheFile, hashStream)) cacheFile.Invalidate(); } - } + } ConditionsReader* condReader = 0; if (readFromCache) Modified: CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.cpp =================================================================== --- CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.cpp 2008-07-23 12:24:21 UTC (rev 30492) +++ CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.cpp 2008-07-23 13:00:51 UTC (rev 30493) @@ -24,6 +24,7 @@ #include "iutil/hiercache.h" #include "iutil/plugin.h" #include "iutil/string.h" +#include "iutil/stringarray.h" #include "ivaria/reporter.h" #include "ivideo/rendermesh.h" #include "ivideo/material.h" @@ -31,6 +32,7 @@ #include "csgfx/renderbuffer.h" #include "csutil/csendian.h" #include "csutil/documenthelper.h" +#include "csutil/stringarray.h" #include "shader.h" #include "shadertech.h" @@ -54,6 +56,9 @@ csString pluginID; csString progType; + csRef<iShaderProgramPlugin> programPlugin; + csRef<iDocumentNode> programNode; + CachedPlugin() : available (false) {} }; @@ -99,31 +104,31 @@ CachedPlugins cachedPlugins; - csRef<iDocumentNode> programNode; + GetProgramPlugins (node, cachedPlugins, variant); + csRef<iShaderProgram> program; // load fp /* This is done before VP loading b/c the VP could query for TU bindings - * which are currently handled by the FP. */ - programNode = node->GetNode (xmltokens.Request ( - csXMLShaderCompiler::XMLTOKEN_FP)); - + * which are currently handled by the FP. */ bool result = true; bool setFailReason = true; - if (programNode) + csString tagFP, tagVP, tagVPr; + + if (cachedPlugins.fp.programNode) { csRef<iHierarchicalCache> fpCache; if (cacheTo) fpCache = cacheTo->GetRootedCache (csString().Format ( "/pass%dfp", GetPassNumber (pass))); - program = LoadProgram (0, programNode, pass, variant, fpCache, - cachedPlugins.fp); + program = LoadProgram (0, cachedPlugins.fp.programNode, pass, + variant, fpCache, cachedPlugins.fp, tagFP); if (program) pass->fp = program; else { if (do_verbose && setFailReason) { - SetFailReason ("fragment program failed to load"); + SetFailReason ("fragment program failed to load"); setFailReason = false; } result = false; @@ -135,16 +140,13 @@ resolveFP = scfQueryInterface<iShaderDestinationResolver> (pass->fp); //load vp - programNode = node->GetNode(xmltokens.Request ( - csXMLShaderCompiler::XMLTOKEN_VP)); - - if (programNode) + if (cachedPlugins.vp.programNode) { csRef<iHierarchicalCache> vpCache; if (cacheTo) vpCache = cacheTo->GetRootedCache (csString().Format ( "/pass%dvp", GetPassNumber (pass))); - program = LoadProgram (resolveFP, programNode, pass, variant, vpCache, - cachedPlugins.vp); + program = LoadProgram (resolveFP, cachedPlugins.vp.programNode, + pass, variant, vpCache, cachedPlugins.vp, tagVP); if (program) { pass->vp = program; @@ -153,7 +155,7 @@ { if (do_verbose && setFailReason) { - SetFailReason ("vertex program failed to load"); + SetFailReason ("vertex program failed to load"); setFailReason = false; } result = false; @@ -165,16 +167,13 @@ resolveVP = scfQueryInterface<iShaderDestinationResolver> (pass->vp); //load vproc - programNode = node->GetNode(xmltokens.Request ( - csXMLShaderCompiler::XMLTOKEN_VPROC)); - - if (programNode) + if (cachedPlugins.vproc.programNode) { csRef<iHierarchicalCache> vprCache; if (cacheTo) vprCache = cacheTo->GetRootedCache (csString().Format ( "/pass%dvpr", GetPassNumber (pass))); - program = LoadProgram (resolveFP, programNode, pass, variant, vprCache, - cachedPlugins.vproc); + program = LoadProgram (resolveFP, cachedPlugins.vproc.programNode, + pass, variant, vprCache, cachedPlugins.vproc, tagVPr); if (program) { pass->vproc = program; @@ -183,7 +182,7 @@ { if (do_verbose && setFailReason) { - SetFailReason ("vertex preprocessor failed to load"); + SetFailReason ("vertex preprocessor failed to load"); setFailReason = false; } result = false; @@ -198,22 +197,145 @@ if (IsDestalphaMixmode (pass->mixMode) && !caps->DestinationAlpha) { if (do_verbose) - SetFailReason ("destination alpha not supported by renderer"); + SetFailReason ("destination alpha not supported by renderer"); return false; } } + WritePass (pass, cachedPlugins, cacheFile); + //if we got this far, load buffermappings - if (result && !ParseBuffers (pass, node, hlp, resolveFP, resolveVP)) result = false; + if (result && !ParseBuffers (*pass, GetPassNumber (pass), + node, hlp, resolveFP, resolveVP)) result = false; //get texturemappings - if (result && !ParseTextures (pass, node, hlp, resolveFP)) result = false; + if (result && !ParseTextures (*pass, node, hlp, resolveFP)) result = false; - WritePass (pass, cachedPlugins, cacheFile); - + csMemFile perTagFile; + WritePassPerTag (*pass, &perTagFile); + cacheTo->CacheData (perTagFile.GetData(), perTagFile.GetSize(), + csString().Format ("/pass%ddata/%s_%s_%s", GetPassNumber (pass), + tagFP.GetDataSafe(), tagVP.GetDataSafe(), tagVPr.GetDataSafe())); + return result; } +struct PassActionPrecache +{ + PassActionPrecache (int passIndex, csXMLShaderTech* tech, size_t variant, + iHierarchicalCache* cacheTo, iDocumentNode* node, + csXMLShaderTech::LoadHelpers hlp) : passIndex (passIndex), + tech (tech), variant (variant), cacheTo (cacheTo), node (node), + hlp (hlp) {} + + bool Perform (const csStringArray& tags, + CachedPlugins& cachedPlugins) + { + csRef<iShaderProgram> program; + // load fp + /* This is done before VP loading b/c the VP could query for TU bindings + * which are currently handled by the FP. */ + bool result = true; + bool setFailReason = true; + + csRef<iBase> fp; + if (cachedPlugins.fp.programNode) + { + csRef<iHierarchicalCache> fpCache; + if (cacheTo) fpCache = cacheTo->GetRootedCache (csString().Format ( + "/pass%dfp", passIndex)); + if (!tech->PrecacheProgram (0, cachedPlugins.fp.programNode, variant, + fpCache, cachedPlugins.fp, fp, tags[0])) + { + if (tech->do_verbose && setFailReason) + { + tech->SetFailReason ("fragment program failed to precache"); + setFailReason = false; + } + result = false; + } + } + + csRef<iBase> vp; + //load vp + if (cachedPlugins.vp.programNode) + { + csRef<iHierarchicalCache> vpCache; + if (cacheTo) vpCache = cacheTo->GetRootedCache (csString().Format ( + "/pass%dvp", passIndex)); + if (!tech->PrecacheProgram (fp, cachedPlugins.vp.programNode, variant, + vpCache, cachedPlugins.vp, vp, tags[1])) + { + if (tech->do_verbose && setFailReason) + { + tech->SetFailReason ("vertex program failed to precache"); + setFailReason = false; + } + result = false; + } + } + + csRef<iBase> vpr; + //load vproc + if (cachedPlugins.vproc.programNode) + { + csRef<iHierarchicalCache> vprCache; + if (cacheTo) vprCache = cacheTo->GetRootedCache (csString().Format ( + "/pass%dvpr", passIndex)); + if (!tech->PrecacheProgram (vp, cachedPlugins.vproc.programNode, variant, + vprCache, cachedPlugins.vproc, vpr, tags[2])) + { + if (tech->do_verbose && setFailReason) + { + tech->SetFailReason ("vertex preprocessor failed to precache"); + setFailReason = false; + } + result = false; + } + } + + csRef<iShaderDestinationResolver> resolveFP; + if (fp) resolveFP = scfQueryInterface<iShaderDestinationResolver> (fp); + csRef<iShaderDestinationResolver> resolveVP; + if (vp) resolveVP = scfQueryInterface<iShaderDestinationResolver> (vp); + + csXMLShaderTech::ShaderPassPerTag passPerTag; + + //if we got this far, load buffermappings + if (result && !tech->ParseBuffers (passPerTag, passIndex, + node, hlp, resolveFP, resolveVP)) result = false; + + //get texturemappings + if (result && !tech->ParseTextures (passPerTag, node, hlp, resolveFP)) + result = false; + + if (result) + { + csMemFile perTagFile; + tech->WritePassPerTag (passPerTag, &perTagFile); + cacheTo->CacheData (perTagFile.GetData(), perTagFile.GetSize(), + csString().Format ("/pass%ddata/%s_%s_%s", passIndex, + tags[0] ? tags[0] : "", + tags[1] ? tags[1] : "", + tags[2] ? tags[2] : "")); + } + + oneComboWorked |= result; + + return false; + } + + bool oneComboWorked; +private: + int passIndex; + csXMLShaderTech* tech; + size_t variant; + iHierarchicalCache* cacheTo; + iDocumentNode* node; + + csXMLShaderTech::LoadHelpers hlp; +}; + bool csXMLShaderTech::PrecachePass (iDocumentNode *node, ShaderPass* pass, size_t variant, iFile* cacheFile, iHierarchicalCache* cacheTo) @@ -225,84 +347,70 @@ CachedPlugins cachedPlugins; - csRef<iDocumentNode> programNode; - csRef<iShaderProgram> program; - // load fp - /* This is done before VP loading b/c the VP could query for TU bindings - * which are currently handled by the FP. */ - programNode = node->GetNode (xmltokens.Request ( - csXMLShaderCompiler::XMLTOKEN_FP)); + GetProgramPlugins (node, cachedPlugins, variant); - csRef<iBase> fp; - if (programNode) + if (!ParseModes (pass, node, hlp)) return false; + + WritePass (pass, cachedPlugins, cacheFile); + + PassActionPrecache passAction (GetPassNumber (pass), this, variant, + cacheTo, node, hlp); + LoadPassPrograms (node, passAction, variant, cachedPlugins); + + return passAction.oneComboWorked; +} + +template<typename PassAction> +bool csXMLShaderTech::LoadPassPrograms (iDocumentNode* passNode, + PassAction& action, + size_t variant, + CachedPlugins& cachedPlugins) +{ + csArray<csStringArray> tuples; + tuples.Push (csStringArray ()); + + for (size_t i = 0; i < 3; i++) { - csRef<iHierarchicalCache> fpCache; - fpCache = cacheTo->GetRootedCache (csString().Format ( - "/pass%dfp", GetPassNumber (pass))); - if (!PrecacheProgram (0, programNode, pass, variant, fpCache, - cachedPlugins.fp, fp)) + CachedPlugin plugin; + switch (i) { - if (do_verbose) - SetFailReason ("fragment program failed to precache"); - return false; + case 0: plugin = cachedPlugins.fp; break; + case 1: plugin = cachedPlugins.vp; break; + case 2: plugin = cachedPlugins.vproc; break; } - } - - csRef<iShaderDestinationResolver> resolveFP ( - scfQueryInterfaceSafe<iShaderDestinationResolver> (fp)); - - //load vp - programNode = node->GetNode(xmltokens.Request ( - csXMLShaderCompiler::XMLTOKEN_VP)); - - csRef<iBase> vp; - if (programNode) - { - csRef<iHierarchicalCache> vpCache; - vpCache = cacheTo->GetRootedCache (csString().Format ( - "/pass%dvp", GetPassNumber (pass))); - if (!PrecacheProgram (resolveFP, programNode, pass, variant, vpCache, - cachedPlugins.vp, vp)) + if (plugin.programNode == 0) { - if (do_verbose) - SetFailReason ("vertex program failed to precache"); - return false; + for (size_t j = 0; j < tuples.GetSize(); j++) + { + tuples[j].Push (""); + } + continue; } - } - - csRef<iShaderDestinationResolver> resolveVP ( - scfQueryInterfaceSafe<iShaderDestinationResolver> (vp)); - - //load vproc - programNode = node->GetNode(xmltokens.Request ( - csXMLShaderCompiler::XMLTOKEN_VPROC)); - - if (programNode) - { - csRef<iBase> vpr; - csRef<iHierarchicalCache> vprCache; - vprCache = cacheTo->GetRootedCache (csString().Format ( - "/pass%dvpr", GetPassNumber (pass))); - if (!PrecacheProgram (resolveFP, programNode, pass, variant, vprCache, - cachedPlugins.vproc, vpr)) + + csArray<csStringArray> newTuples; + + csRef<iStringArray> tags = plugin.programPlugin->QueryPrecacheTags ( + plugin.progType); + for (size_t j = 0; j < tuples.GetSize(); j++) { - if (do_verbose) - SetFailReason ("vertex preprocessor failed to precache"); - return false; + csStringArray tupleStrs (tuples[j]); + for (size_t t = 0; t < tags->GetSize(); t++) + { + csStringArray newTupleStrs (tupleStrs); + newTupleStrs.Push (tags->Get (t)); + newTuples.Push (newTupleStrs); + } } + tuples = newTuples; } - - if (!ParseModes (pass, node, hlp)) return false; - - //if we got this far, load buffermappings - if (!ParseBuffers (pass, node, hlp, resolveFP, resolveVP)) return false; - - //get texturemappings - if (!ParseTextures (pass, node, hlp, resolveFP)) return false; - WritePass (pass, cachedPlugins, cacheFile); - - return true; + for (size_t j = 0; j < tuples.GetSize(); j++) + { + const csStringArray& tupleStrs (tuples[j]); + + if (action.Perform (tupleStrs, cachedPlugins)) return true; + } + return false; } bool csXMLShaderTech::ParseModes (ShaderPass* pass, @@ -384,7 +492,7 @@ return true; } -bool csXMLShaderTech::ParseBuffers (ShaderPass* pass, +bool csXMLShaderTech::ParseBuffers (ShaderPassPerTag& pass, int passNum, iDocumentNode* node, LoadHelpers& h, iShaderDestinationResolver* resolveFP, @@ -498,11 +606,11 @@ cname = source; CS::ShaderVarStringID varID = h.stringsSvName->Request (cname); - pass->custommapping_id.Push (varID); + pass.custommapping_id.Push (varID); //pass->bufferGeneric[pass->bufferCount] = CS_VATTRIB_IS_GENERIC (attrib); - pass->custommapping_attrib.Push (attrib); - pass->custommapping_buffer.Push (CS_BUFFER_NONE); + pass.custommapping_attrib.Push (attrib); + pass.custommapping_buffer.Push (CS_BUFFER_NONE); } else { @@ -516,17 +624,17 @@ if ((attrib >= CS_VATTRIB_SPECIFIC_FIRST) && (attrib <= CS_VATTRIB_SPECIFIC_LAST)) - pass->defaultMappings[attrib] = sourceName; + pass.defaultMappings[attrib] = sourceName; else { - pass->custommapping_attrib.Push (attrib); - pass->custommapping_buffer.Push (sourceName); - pass->custommapping_id.Push (CS::InvalidShaderVarStringID); + pass.custommapping_attrib.Push (attrib); + pass.custommapping_buffer.Push (sourceName); + pass.custommapping_id.Push (CS::InvalidShaderVarStringID); /* Those buffers are mapped by default to some specific vattribs; * since they are now to be mapped to some generic vattrib, * turn off the default map. */ if (sourceName == CS_BUFFER_POSITION) - pass->defaultMappings[CS_VATTRIB_POSITION] = CS_BUFFER_NONE; + pass.defaultMappings[CS_VATTRIB_POSITION] = CS_BUFFER_NONE; } } } @@ -537,14 +645,14 @@ { parent->compiler->Report (CS_REPORTER_SEVERITY_WARNING, "Shader '%s', pass %d: invalid buffer destination '%s'", - parent->GetName (), GetPassNumber (pass), dest); + parent->GetName (), passNum, dest); } } } return true; } -bool csXMLShaderTech::ParseTextures (ShaderPass* pass, +bool csXMLShaderTech::ParseTextures (ShaderPassPerTag& pass, iDocumentNode* node, LoadHelpers& h, iShaderDestinationResolver* resolveFP) @@ -607,7 +715,7 @@ texMap.id = h.stringsSvName->Request (parser.GetShaderVarName ()); parser.FillArrayWithIndices (texMap.indices); texMap.textureUnit = texUnit; - pass->textures.Push (texMap); + pass.textures.Push (texMap); } } return true; @@ -640,6 +748,7 @@ { uint32 cacheFlags = 0; + if (plugins.fp.available) cacheFlags |= 1 << cacheFlagHasFP; if (plugins.vp.available) cacheFlags |= 1 << cacheFlagHasVP; if (plugins.vproc.available) cacheFlags |= 1 << cacheFlagHasVProc; @@ -705,71 +814,83 @@ if (cacheFile->Write ((char*)&diskZ, sizeof (diskZ)) != sizeof (diskZ)) return false; } + + return true; +} + +bool csXMLShaderTech::WritePassPerTag (const ShaderPassPerTag& pass, + iFile* cacheFile) +{ + if (!cacheFile) return false; + + uint32 diskMagic = csLittleEndian::UInt32 (cacheFileMagic); + if (cacheFile->Write ((char*)&diskMagic, sizeof (diskMagic)) + != sizeof (diskMagic)) return false; + for (int i = 0; i < CS_VATTRIB_SPECIFIC_NUM; i++) { - int32 diskMapping = csLittleEndian::Int32 (pass->defaultMappings[i]); + int32 diskMapping = csLittleEndian::Int32 (pass.defaultMappings[i]); if (cacheFile->Write ((char*)&diskMapping, sizeof (diskMapping)) != sizeof (diskMapping)) return false; } - { uint32 diskNumBuffers = csLittleEndian::UInt32 ( - (uint)pass->custommapping_buffer.GetSize()); + (uint)pass.custommapping_buffer.GetSize()); if (cacheFile->Write ((char*)&diskNumBuffers, sizeof (diskNumBuffers)) != sizeof (diskNumBuffers)) return false; } - for (size_t i = 0; i < pass->custommapping_buffer.GetSize(); i++) + for (size_t i = 0; i < pass.custommapping_buffer.GetSize(); i++) { - int32 diskMapping = csLittleEndian::Int32 (pass->custommapping_buffer[i]); + int32 diskMapping = csLittleEndian::Int32 (pass.custommapping_buffer[i]); if (cacheFile->Write ((char*)&diskMapping, sizeof (diskMapping)) != sizeof (diskMapping)) return false; - int32 diskAttr = csLittleEndian::Int32 (pass->custommapping_attrib[i]); + int32 diskAttr = csLittleEndian::Int32 (pass.custommapping_attrib[i]); if (cacheFile->Write ((char*)&diskAttr, sizeof (diskAttr)) != sizeof (diskAttr)) return false; const char* svStr = parent->compiler->stringsSvName->Request ( - pass->custommapping_id[i]); + pass.custommapping_id[i]); if (!CS::PluginCommon::ShaderCacheHelper::WriteString (cacheFile, svStr)) return false; } { uint32 diskNumTextures = csLittleEndian::UInt32 ( - (uint)pass->textures.GetSize()); + (uint)pass.textures.GetSize()); if (cacheFile->Write ((char*)&diskNumTextures, sizeof (diskNumTextures)) != sizeof (diskNumTextures)) return false; } - for (size_t i = 0; i < pass->textures.GetSize(); i++) + for (size_t i = 0; i < pass.textures.GetSize(); i++) { const char* svStr = parent->compiler->stringsSvName->Request ( - pass->textures[i].id); + pass.textures[i].id); if (!CS::PluginCommon::ShaderCacheHelper::WriteString (cacheFile, svStr)) return false; uint32 diskNumIndices = csLittleEndian::UInt32 ( - (uint)pass->textures[i].indices.GetSize()); + (uint)pass.textures[i].indices.GetSize()); if (cacheFile->Write ((char*)&diskNumIndices, sizeof (diskNumIndices)) != sizeof (diskNumIndices)) return false; - for (size_t n = 0; n < pass->textures[i].indices.GetSize(); n++) + for (size_t n = 0; n < pass.textures[i].indices.GetSize(); n++) { uint32 diskIndex = csLittleEndian::UInt32 ( - (uint)pass->textures[i].indices[n]); + (uint)pass.textures[i].indices[n]); if (cacheFile->Write ((char*)&diskIndex, sizeof (diskIndex)) != sizeof (diskIndex)) return false; } - int32 diskTU = csLittleEndian::Int32 (pass->textures[i].textureUnit); + int32 diskTU = csLittleEndian::Int32 (pass.textures[i].textureUnit); if (cacheFile->Write ((char*)&diskTU, sizeof (diskTU)) != sizeof (diskTU)) return false; int16 diskCompareFunc = csLittleEndian::Int16 ( - pass->textures[i].texCompare.function); + pass.textures[i].texCompare.function); if (cacheFile->Write ((char*)&diskCompareFunc, sizeof (diskCompareFunc)) != sizeof (diskCompareFunc)) return false; int16 diskCompareMode = csLittleEndian::Int16 ( - pass->textures[i].texCompare.mode); + pass.textures[i].texCompare.mode); if (cacheFile->Write ((char*)&diskCompareMode, sizeof (diskCompareMode)) != sizeof (diskCompareMode)) return false; } @@ -786,13 +907,16 @@ CachedPlugins plugins; if (!ReadPass (pass, cacheFile, plugins)) return iShaderProgram::loadFail; + csString tagFP, tagVP, tagVPr; + iShaderProgram::CacheLoadResult loadRes; if (plugins.fp.available) { csRef<iHierarchicalCache> fpCache; if (cache) fpCache = cache->GetRootedCache (csString().Format ( "/pass%dfp", GetPassNumber (pass))); - loadRes = LoadProgramFromCache (pass, variant, fpCache, plugins.fp, pass->fp); + loadRes = LoadProgramFromCache (0, variant, fpCache, plugins.fp, + pass->fp, tagFP); if (loadRes != iShaderProgram::loadSuccessShaderValid) return loadRes; } @@ -801,7 +925,8 @@ csRef<iHierarchicalCache> vpCache; if (cache) vpCache = cache->GetRootedCache (csString().Format ( "/pass%dvp", GetPassNumber (pass))); - loadRes = LoadProgramFromCache (pass, variant, vpCache, plugins.vp, pass->vp); + loadRes = LoadProgramFromCache (pass->fp, variant, vpCache, plugins.vp, pass->vp, + tagVP); if (loadRes != iShaderProgram::loadSuccessShaderValid) return loadRes; } @@ -810,16 +935,25 @@ csRef<iHierarchicalCache> vprCache; if (cache) vprCache = cache->GetRootedCache (csString().Format ( "/pass%dvpr", GetPassNumber (pass))); - loadRes = LoadProgramFromCache (pass, variant, vprCache, plugins.vproc, pass->vproc); + loadRes = LoadProgramFromCache (pass->vp, variant, vprCache, plugins.vproc, + pass->vproc, tagVPr); if (loadRes != iShaderProgram::loadSuccessShaderValid) return loadRes; } + csRef<iDataBuffer> perTagData = cache->ReadCache ( + csString().Format ("/pass%ddata/%s_%s_%s", GetPassNumber (pass), + tagFP.GetDataSafe(), tagVP.GetDataSafe(), tagVPr.GetDataSafe())); + if (!perTagData.IsValid()) return iShaderProgram::loadFail; + csMemFile perTagCacheFile (perTagData, true); + if (!ReadPassPerTag (*pass, &perTagCacheFile)) + return iShaderProgram::loadFail; + return iShaderProgram::loadSuccessShaderValid; } bool csXMLShaderTech::ReadPass (ShaderPass* pass, - iFile* cacheFile, - CachedPlugins& plugins) + iFile* cacheFile, + CachedPlugins& plugins) { if (!cacheFile) return false; @@ -869,8 +1003,11 @@ if (pass->alphaMode.autoAlphaMode) { + const char* svName = + CS::PluginCommon::ShaderCacheHelper::ReadString (cacheFile); + if (!svName) return false; pass->alphaMode.autoModeTexture = parent->compiler->stringsSvName->Request ( - CS::PluginCommon::ShaderCacheHelper::ReadString (cacheFile)); + svName); } else { @@ -886,12 +1023,26 @@ != sizeof (diskZ)) return false; pass->zMode = (csZBufMode)csLittleEndian::UInt32 (diskZ); } + return true; +} + +bool csXMLShaderTech::ReadPassPerTag (ShaderPassPerTag& pass, + iFile* cacheFile) +{ + if (!cacheFile) return false; + + uint32 diskMagic; + if (cacheFile->Read ((char*)&diskMagic, sizeof (diskMagic)) + != sizeof (diskMagic)) return false; + if (csLittleEndian::UInt32 (diskMagic) != cacheFileMagic) + return false; + for (int i = 0; i < CS_VATTRIB_SPECIFIC_NUM; i++) { int32 diskMapping; if (cacheFile->Read ((char*)&diskMapping, sizeof (diskMapping)) != sizeof (diskMapping)) return false; - pass->defaultMappings[i] = + pass.defaultMappings[i] = (csRenderBufferName)csLittleEndian::Int32 (diskMapping); } @@ -906,22 +1057,22 @@ int32 diskMapping; if (cacheFile->Read ((char*)&diskMapping, sizeof (diskMapping)) != sizeof (diskMapping)) return false; - pass->custommapping_buffer.Push ( + pass.custommapping_buffer.Push ( (csRenderBufferName)csLittleEndian::Int32 (diskMapping)); int32 diskAttr; if (cacheFile->Read ((char*)&diskAttr, sizeof (diskAttr)) != sizeof (diskAttr)) return false; - pass->custommapping_attrib.Push ( + pass.custommapping_attrib.Push ( (csVertexAttrib)csLittleEndian::Int32 (diskAttr)); const char* mappingStr = CS::PluginCommon::ShaderCacheHelper::ReadString (cacheFile); if (mappingStr != 0) - pass->custommapping_id.Push ( + pass.custommapping_id.Push ( parent->compiler->stringsSvName->Request (mappingStr)); else - pass->custommapping_id.Push (CS::InvalidShaderVarStringID); + pass.custommapping_id.Push (CS::InvalidShaderVarStringID); } } @@ -967,7 +1118,7 @@ mapping.texCompare.mode = (CS::Graphics::TextureComparisonMode::Mode) csLittleEndian::Int16 (diskCompareMode); - pass->textures.Push (mapping); + pass.textures.Push (mapping); } } return true; @@ -993,7 +1144,8 @@ csPtr<iShaderProgram> csXMLShaderTech::LoadProgram ( iShaderDestinationResolver* resolve, iDocumentNode* node, ShaderPass* /*pass*/, - size_t variant, iHierarchicalCache* cacheTo, CachedPlugin& cacheInfo) + size_t variant, iHierarchicalCache* cacheTo, CachedPlugin& cacheInfo, + csString& tag) { if (node->GetAttributeValue("plugin") == 0) { @@ -1005,55 +1157,29 @@ csRef<iShaderProgram> program; - csStringFast<256> plugin ("crystalspace.graphics3d.shader."); - plugin.Append (node->GetAttributeValue("plugin")); - // @@@ Also check if 'plugin' is a full class ID - - //load the plugin - csRef<iShaderProgramPlugin> plg; - plg = csLoadPluginCheck<iShaderProgramPlugin> (parent->compiler->objectreg, - plugin, false); - if(!plg) - { - if (parent->compiler->do_verbose) - parent->compiler->Report (CS_REPORTER_SEVERITY_WARNING, - "Couldn't retrieve shader plugin '%s' for <%s> in shader '%s'", - plugin.GetData(), node->GetValue (), parent->GetName ()); - return 0; - } - - const char* programType = node->GetAttributeValue("type"); - if (programType == 0) - programType = node->GetValue (); - program = plg->CreateProgram (programType); + program = cacheInfo.programPlugin->CreateProgram (cacheInfo.progType); if (program == 0) return 0; - csRef<iDocumentNode> programNode; - if (node->GetAttributeValue ("file") != 0) - programNode = parent->LoadProgramFile (node->GetAttributeValue ("file"), - variant); - else - programNode = node; - if (!program->Load (resolve, programNode)) + if (!program->Load (resolve, cacheInfo.programNode)) return 0; /* Even if compilation fails, for since we need to handle the case where a program is valid but not supported on the current HW in caching, flag program as available */ cacheInfo.available = true; - cacheInfo.pluginID = plugin; - cacheInfo.progType = programType; - if (!program->Compile (cacheTo)) + csRef<iString> progTag; + if (!program->Compile (cacheTo, &progTag)) return 0; + if (!progTag.IsValid()) return 0; + tag = progTag->GetData(); return csPtr<iShaderProgram> (program); } iShaderProgram::CacheLoadResult csXMLShaderTech::LoadProgramFromCache ( - ShaderPass* /*pass*/, - size_t variant, iHierarchicalCache* cache, const CachedPlugin& cacheInfo, - csRef<iShaderProgram>& prog) + iBase* previous, size_t variant, iHierarchicalCache* cache, + const CachedPlugin& cacheInfo, csRef<iShaderProgram>& prog, csString& tag) { //load the plugin csRef<iShaderProgramPlugin> plg; @@ -1070,8 +1196,11 @@ } prog = plg->CreateProgram (cacheInfo.progType); + csRef<iString> progTag; csRef<iString> failReason; - iShaderProgram::CacheLoadResult loadRes = prog->LoadFromCache (cache, &failReason); + iShaderProgram::CacheLoadResult loadRes = prog->LoadFromCache (cache, &failReason, + &progTag); + if (!progTag.IsValid()) return iShaderProgram::loadFail; if (loadRes == iShaderProgram::loadFail) { if (parent->compiler->do_verbose) @@ -1081,21 +1210,63 @@ failReason.IsValid() ? failReason->GetData() : "no reason given"); return iShaderProgram::loadFail; } + + tag = progTag->GetData(); return loadRes; } + +bool csXMLShaderTech::PrecacheProgram (iBase* previous, iDocumentNode* node, + size_t variant, iHierarchicalCache* cacheTo, + CachedPlugin& cacheInfo, csRef<iBase>& object, const char* tag) +{ + return cacheInfo.programPlugin->Precache (cacheInfo.progType, tag, previous, + cacheInfo.programNode, cacheTo, &object); +} + +void csXMLShaderTech::GetProgramPlugins (iDocumentNode *node, + CachedPlugins& cacheInfo, + size_t variant) +{ + { + csRef<iDocumentNode> programNodeFP; + programNodeFP = node->GetNode (xmltokens.Request ( + csXMLShaderCompiler::XMLTOKEN_FP)); + + if (programNodeFP) + GetProgramPlugin (programNodeFP, cacheInfo.fp, variant); + } -bool csXMLShaderTech::PrecacheProgram ( - iShaderDestinationResolver* resolve, iDocumentNode* node, ShaderPass* /*pass*/, - size_t variant, iHierarchicalCache* cacheTo, CachedPlugin& cacheInfo, - csRef<iBase>& object) + { + csRef<iDocumentNode> programNodeVP; + programNodeVP = node->GetNode(xmltokens.Request ( + csXMLShaderCompiler::XMLTOKEN_VP)); + + if (programNodeVP) + GetProgramPlugin (programNodeVP, cacheInfo.vp, variant); + } + + { + csRef<iDocumentNode> programNodeVPr; + programNodeVPr = node->GetNode(xmltokens.Request ( + csXMLShaderCompiler::XMLTOKEN_VPROC)); + + if (programNodeVPr) + GetProgramPlugin (programNodeVPr, cacheInfo.vproc, variant); + } + +} + +void csXMLShaderTech::GetProgramPlugin (iDocumentNode *node, + CachedPlugin& cacheInfo, + size_t variant) { if (node->GetAttributeValue("plugin") == 0) { parent->compiler->Report (CS_REPORTER_SEVERITY_ERROR, "No shader program plugin specified for <%s> in shader '%s'", node->GetValue (), parent->GetName ()); - return false; + return; } csStringFast<256> plugin ("crystalspace.graphics3d.shader."); @@ -1105,14 +1276,14 @@ //load the plugin csRef<iShaderProgramPlugin> plg; plg = csLoadPluginCheck<iShaderProgramPlugin> (parent->compiler->objectreg, - plugin, false); + plugin, false); if(!plg) { if (parent->compiler->do_verbose) parent->compiler->Report (CS_REPORTER_SEVERITY_WARNING, "Couldn't retrieve shader plugin '%s' for <%s> in shader '%s'", plugin.GetData(), node->GetValue (), parent->GetName ()); - return false; + return; } const char* programType = node->GetAttributeValue("type"); @@ -1124,18 +1295,17 @@ variant); else programNode = node; - - if (!plg->Precache (programType, resolve, programNode, cacheTo, - &object)) - return false; - + + /* Even if compilation fails, for since we need to handle the case where a + program is valid but not supported on the current HW in caching, + flag program as available */ cacheInfo.available = true; cacheInfo.pluginID = plugin; cacheInfo.progType = programType; + cacheInfo.programPlugin = plg; + cacheInfo.programNode = programNode; +} - return true; -} - bool csXMLShaderTech::LoadBoilerplate (iLoaderContext* ldr_context, iDocumentNode* node, iDocumentNode* parentSV) Modified: CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.h 2008-07-23 12:24:21 UTC (rev 30492) +++ CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.h 2008-07-23 13:00:51 UTC (rev 30493) @@ -34,34 +34,25 @@ struct CachedPlugin; struct CachedPlugins; +struct PassActionPrecache; class csXMLShaderTech { private: friend class csXMLShader; - - struct ShaderPass : public CS::Memory::CustomAllocated + friend class PassActionPrecache; + + struct ShaderPassPerTag : public CS::Memory::CustomAllocated { - //mix and alpha mode - uint mixMode; - csAlphaMode alphaMode; - csZBufMode zMode; - bool overrideZmode; - bool flipCulling; - bool zoffset; - - ShaderPass () : zoffset (false) + ShaderPassPerTag () { - mixMode = CS_FX_MESH; - overrideZmode = false; - flipCulling = false; //setup default mappings for (unsigned int i=0; i < CS_VATTRIB_SPECIFIC_NUM; i++) defaultMappings[i] = CS_BUFFER_NONE; defaultMappings[CS_VATTRIB_POSITION] = CS_BUFFER_POSITION; } - + // buffer mappings // default mapping, index is csVertexAttrib (16 first), value is // csRenderBufferName @@ -87,6 +78,25 @@ csRef<iShaderProgram> fp; csRef<iShaderProgram> vproc; + }; + + struct ShaderPass : public ShaderPassPerTag + { + //mix and alpha mode + uint mixMode; + csAlphaMode alphaMode; + csZBufMode zMode; + bool overrideZmode; + bool flipCulling; + bool zoffset; + + ShaderPass () : zoffset (false) + { + mixMode = CS_FX_MESH; + overrideZmode = false; + flipCulling = false; + } + // writemasks bool wmRed, wmGreen, wmBlue, wmAlpha; @@ -116,18 +126,29 @@ iFile* cacheFile, iHierarchicalCache* cacheTo); bool PrecachePass (iDocumentNode *node, ShaderPass* pass, size_t variant, iFile* cacheFile, iHierarchicalCache* cacheTo); + + template<typename PassAction> + bool LoadPassPrograms (iDocumentNode* passNode, PassAction& action, + size_t variant, CachedPlugins& cachedPlugins); + struct LoadHelpers; bool ParseModes (ShaderPass* pass, iDocumentNode* node, LoadHelpers& helpers); - bool ParseBuffers (ShaderPass* pass, iDocumentNode* node, LoadHelpers& helpers, - iShaderDestinationResolver* resolveFP, + bool ParseBuffers (ShaderPassPerTag& pass, int passNum, iDocumentNode* node, + LoadHelpers& helpers, iShaderDestinationResolver* resolveFP, iShaderDestinationResolver* resolveVP); - bool ParseTextures (ShaderPass* pass, iDocumentNode* node, LoadHelpers& helpers, - iShaderDestinationResolver* resolveFP); - bool WritePass (ShaderPass* pass, const CachedPlugins& plugins, iFile* cacheFile); + bool ParseTextures (ShaderPassPerTag& pass, + iDocumentNode* node, LoadHelpers& helpers, iShaderDestinationResolver* resolveFP); + + bool WritePass (ShaderPass* pass, const CachedPlugins& plugins, + iFile* cacheFile); iShaderProgram::CacheLoadResult LoadPassFromCache (ShaderPass* pass, size_t variant, iFile* cacheFile, iHierarchicalCache* cache); bool ReadPass (ShaderPass* pass, iFile* cacheFile, CachedPlugins& plugins); + + bool WritePassPerTag (const ShaderPassPerTag& pass, + iFile* cacheFile); + bool ReadPassPerTag (ShaderPassPerTag& pass, iFile* cacheFile); bool LoadBoilerplate (iLoaderContext* ldr_context, iDocumentNode* node, iDocumentNode* parentSV); @@ -137,14 +158,20 @@ // load a shaderprogram csPtr<iShaderProgram> LoadProgram (iShaderDestinationResolver* resolve, iDocumentNode *node, ShaderPass* pass, size_t variant, - iHierarchicalCache* cacheTo, CachedPlugin& cacheInfo); - bool PrecacheProgram (iShaderDestinationResolver* resolve, - iDocumentNode *node, ShaderPass* pass, size_t variant, iHierarchicalCache* cacheTo, CachedPlugin& cacheInfo, - csRef<iBase>& progObj); - iShaderProgram::CacheLoadResult LoadProgramFromCache (ShaderPass* pass, size_t variant, - iHierarchicalCache* cache, const CachedPlugin& cacheInfo, - csRef<iShaderProgram>& prog); + csString& tag); + bool PrecacheProgram (iBase* previous, + iDocumentNode *node, size_t variant, + iHierarchicalCache* cacheTo, CachedPlugin& cacheInfo, + csRef<iBase>& progObj, const char* tag); + void GetProgramPlugins (iDocumentNode *node, CachedPlugins& cacheInfo, + size_t variant); + void GetProgramPlugin (iDocumentNode *node, CachedPlugin& cacheInfo, + size_t variant); + + iShaderProgram::CacheLoadResult LoadProgramFromCache (iBase* previous, + size_t variant, iHierarchicalCache* cache, const CachedPlugin& cacheInfo, + csRef<iShaderProgram>& prog, csString& tag); // Set reason for failure. void SetFailReason (const char* reason, ...) CS_GNUC_PRINTF (2, 3); Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_afp.cpp =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_afp.cpp 2008-07-23 12:24:21 UTC (rev 30492) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_afp.cpp 2008-07-23 13:00:51 UTC (rev 30493) @@ -307,7 +307,7 @@ return true; } -bool csShaderGLAFP::Compile (iHierarchicalCache*) +bool csShaderGLAFP::Compile (iHierarchicalCache*, csRef<iString>* tag) { shaderPlug->Open (); @@ -328,6 +328,7 @@ } variablemap.ShrinkBestFit(); + tag->AttachNew (new scfString ("default")); return LoadProgramStringToGL (); } Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_afp.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_afp.h 2008-07-23 12:24:21 UTC (rev 30492) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_afp.h 2008-07-23 13:00:51 UTC (rev 30493) @@ -88,10 +88,11 @@ { return false; } /// Compile a program - virtual bool Compile (iHierarchicalCache*); + virtual bool Compile (iHierarchicalCache*, csRef<iString>*); virtual iShaderProgram::CacheLoadResult LoadFromCache ( - iHierarchicalCache* cache, csRef<iString>* failReason = 0) + iHierarchicalCache* cache, csRef<iString>* failReason = 0, + csRef<iString>* = 0) { return iShaderProgram::loadFail; } }; Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_arb.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_arb.h 2008-07-23 12:24:21 UTC (rev 30492) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_arb.h 2008-07-23 13:00:51 UTC (rev 30493) @@ -24,6 +24,8 @@ #include "csplugincommon/shader/shaderplugin.h" #include "ivideo/shader/shader.h" #include "csutil/leakguard.h" +#include "csutil/scfstr.h" +#include "csutil/scfstringarray.h" class csGLShader_ARB : public scfImplementation2<csGLShader_ARB, iShaderProgramPlugin, @@ -44,11 +46,18 @@ /**\name iShaderProgramPlugin implementation * @{ */ - virtual csPtr<iShaderProgram> CreateProgram(const char* type) ; + virtual csPtr<iShaderProgram> CreateProgram (const char* type); virtual bool SupportType(const char* type); - bool Precache (const char* type, iShaderDestinationResolver* resolve, + csPtr<iStringArray> QueryPrecacheTags (const char* type) + { + scfStringArray* tags = new scfStringArray; + tags->Push ("default"); + return csPtr<iStringArray> (tags); + } + bool Precache (const char* type, const char* tag, + iBase* previous, iDocumentNode* node, iHierarchicalCache* cacheTo, csRef<iBase>* outObj = 0) { return false; } Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_avp.cpp =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_avp.cpp 2008-07-23 12:24:21 UTC (rev 30492) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_avp.cpp 2008-07-23 13:00:51 UTC (rev 30493) @@ -337,7 +337,7 @@ return true; } -bool csShaderGLAVP::Compile (iHierarchicalCache*) +bool csShaderGLAVP::Compile (iHierarchicalCache*, csRef<iString>* tag) { shaderPlug->Open (); @@ -358,6 +358,7 @@ } variablemap.ShrinkBestFit(); + tag->AttachNew (new scfString ("default")); return LoadProgramStringToGL (); } Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_avp.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_avp.h 2008-07-23 12:24:21 UTC (rev 30492) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_avp.h 2008-07-23 13:00:51 UTC (rev 30493) @@ -88,10 +88,11 @@ csArray<csShaderVarMapping> &); /// Compile a program - virtual bool Compile (iHierarchicalCache*); + virtual bool Compile (iHierarchicalCache*, csRef<iString>*); virtual iShaderProgram::CacheLoadResult LoadFromCac... [truncated message content] |
From: <re...@us...> - 2008-07-23 15:13:00
|
Revision: 30497 http://crystal.svn.sourceforge.net/crystal/?rev=30497&view=rev Author: res2002 Date: 2008-07-23 15:12:53 +0000 (Wed, 23 Jul 2008) Log Message: ----------- Store HW vendor in cached profile as well Modified Paths: -------------- CS/trunk/include/csplugincommon/opengl/shaderplugin.h CS/trunk/libs/csplugincommon/opengl/shaderplugin.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgfp.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgvp.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/profile_limits.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/profile_limits.h Modified: CS/trunk/include/csplugincommon/opengl/shaderplugin.h =================================================================== --- CS/trunk/include/csplugincommon/opengl/shaderplugin.h 2008-07-23 14:45:30 UTC (rev 30496) +++ CS/trunk/include/csplugincommon/opengl/shaderplugin.h 2008-07-23 15:12:53 UTC (rev 30497) @@ -48,13 +48,17 @@ { /// No vendor identified yet Invalid = -1, + /// Other vendor + Other = 0, /// ATI/AMD - ATI = 0, + ATI = 1, /// NVidia - NVIDIA = 1, - /// Other vendor - Other = 2 + NVIDIA = 2 }; + /// Give a string representation from a vendor value + static const char* VendorToString (HardwareVendor vendor); + /// Convert a to a vendor value + static HardwareVendor VendorFromString (const char* vendorStr); protected: /** * Vendor of the current graphics hardware/driver. Modified: CS/trunk/libs/csplugincommon/opengl/shaderplugin.cpp =================================================================== --- CS/trunk/libs/csplugincommon/opengl/shaderplugin.cpp 2008-07-23 14:45:30 UTC (rev 30496) +++ CS/trunk/libs/csplugincommon/opengl/shaderplugin.cpp 2008-07-23 15:12:53 UTC (rev 30497) @@ -108,6 +108,43 @@ isOpen = false; } + const char* ShaderProgramPluginGL::VendorToString (HardwareVendor vendor) + { + switch (vendor) + { + case Invalid: return 0; + case Other: return "other"; + case ATI: return "ati"; + case NVIDIA: return "nv"; + } + CS_ASSERT_MSG("Forgot to add vendor string when adding vendor enum?", + false); + return 0; + } + + ShaderProgramPluginGL::HardwareVendor ShaderProgramPluginGL::VendorFromString ( + const char* vendorStr) + { + if (vendorStr == 0) return Invalid; + + csString str (vendorStr); + str.Downcase(); + + if (str == "ati") + { + return ATI; + } + else if ((str == "nvidia") || (str == "nv")) + { + return NVIDIA; + } + else if (str == "other") + { + return Other; + } + return Invalid; + } + uint ShaderProgramPluginGL::ParseVendorMask (const char* maskStr) { uint mask = 0; @@ -131,18 +168,12 @@ uint thisMask = 0; if (str == "*") thisMask = ~0; - else if (str == "ati") + else { - thisMask = 1 << ATI; + HardwareVendor thisVendor = VendorFromString (str); + if (thisVendor != Invalid) + thisMask = 1 << thisVendor; } - else if ((str == "nvidia") || (str == "nv")) - { - thisMask = 1 << NVIDIA; - } - else if (str == "other") - { - thisMask = 1 << Other; - } if (doNegate) mask &= ~thisMask; else Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.cpp =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.cpp 2008-07-23 14:45:30 UTC (rev 30496) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.cpp 2008-07-23 15:12:53 UTC (rev 30497) @@ -223,6 +223,7 @@ void csGLShader_CG::GetProfileCompilerArgs (const char* type, CGprofile profile, + HardwareVendor vendor, bool noConfigArgs, ArgumentArray& args) { @@ -357,7 +358,8 @@ CGprofile profile_cg = cgGetProfile (profile); if (profile_cg != CG_PROFILE_UNKNOWN) { - newPair.vp = ProfileLimits (profile_cg); + newPair.vp = ProfileLimits ( + Other, profile_cg); newPair.vp.GetCgDefaults(); newPair.vp.ReadFromConfig (config, csString().Format ("Video.OpenGL.Shader.Cg.Precache.%s.Vertex", @@ -372,7 +374,7 @@ CGprofile profile_cg = cgGetProfile (profile); if (profile_cg != CG_PROFILE_UNKNOWN) { - newPair.fp = ProfileLimits (profile_cg); + newPair.fp = ProfileLimits (Other, profile_cg); newPair.fp.GetCgDefaults(); newPair.fp.ReadFromConfig (config, csString().Format ("Video.OpenGL.Shader.Cg.Precache.%s.Fragment", Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.h 2008-07-23 14:45:30 UTC (rev 30496) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cg.h 2008-07-23 15:12:53 UTC (rev 30497) @@ -110,6 +110,7 @@ void SplitArgsString (const char* str, ArgumentArray& args); void GetProfileCompilerArgs (const char* type, CGprofile profile, + HardwareVendor vendor, bool noConfigArgs, ArgumentArray& args); static bool ProfileNeedsRouting (CGprofile profile) { Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.cpp =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.cpp 2008-07-23 14:45:30 UTC (rev 30496) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.cpp 2008-07-23 15:12:53 UTC (rev 30497) @@ -258,10 +258,12 @@ augmentedProgramStr.Append (programStr); programStr = augmentedProgramStr; CGprofile profile = CG_PROFILE_UNKNOWN; + CS::PluginCommon::ShaderProgramPluginGL::HardwareVendor vendor; if (customLimits != 0) { profile = customLimits->profile; + vendor = customLimits->vendor; } else { @@ -273,6 +275,8 @@ if (maxProfile != CG_PROFILE_UNKNOWN) profile = csMin (profile, maxProfile); + + vendor = shaderPlug->vendor; } if (shaderPlug->doVerbose || shaderPlug->doVerbosePrecache) @@ -284,7 +288,7 @@ ArgumentArray args; shaderPlug->GetProfileCompilerArgs (GetProgramType(), profile, - flags & loadIgnoreConfigProgramOpts, args); + vendor, flags & loadIgnoreConfigProgramOpts, args); for (i = 0; i < compilerArgs.GetSize(); i++) args.Push (compilerArgs[i]); /* Work around Cg 2.0 bug: it emits "OPTION ARB_position_invariant;" @@ -826,8 +830,18 @@ continue; } - ProfileLimits currentLimits (limits.profile); + ProfileLimits currentLimits (shaderPlug->vendor, + limits.profile); currentLimits.GetCurrentLimits (shaderPlug->ext); + + if ((limits.vendor != currentLimits.vendor) + && (limits.vendor != CS::PluginCommon::ShaderProgramPluginGL::Other)) + { + allReasons += wrapper.name; + allReasons += ": vendor mismatch; "; + continue; + } + bool limitsSupported = currentLimits >= limits; if (!limitsSupported) { @@ -1244,7 +1258,7 @@ ArgumentArray args; shaderPlug->GetProfileCompilerArgs (GetProgramType(), - limits.profile, false, args); + limits.profile, limits.vendor, false, args); for (size_t i = 0; i < compilerArgs.GetSize(); i++) args.Push (compilerArgs[i]); Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgfp.cpp =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgfp.cpp 2008-07-23 14:45:30 UTC (rev 30496) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgfp.cpp 2008-07-23 15:12:53 UTC (rev 30497) @@ -104,7 +104,7 @@ ArgumentArray args; shaderPlug->GetProfileCompilerArgs ("fragment", shaderPlug->psProfile, - false, args); + CS::PluginCommon::ShaderProgramPluginGL::Other, false, args); for (i = 0; i < compilerArgs.GetSize(); i++) args.Push (compilerArgs[i]); args.Push (0); @@ -172,8 +172,8 @@ vpProf = shaderPlug->maxProfileVertex; ProfileLimitsPair limits; - limits.fp = ProfileLimits (programProfile); - limits.vp = ProfileLimits (vpProf); + limits.fp = ProfileLimits (shaderPlug->vendor, programProfile); + limits.vp = ProfileLimits (shaderPlug->vendor, vpProf); limits.GetCurrentLimits (shaderPlug->ext); cacheLimits = limits; WriteToCache (cache, limits.fp, limits.ToString()); @@ -202,7 +202,7 @@ ArgumentArray args; shaderPlug->GetProfileCompilerArgs (GetProgramType(), - limits.profile, true, args); + limits.profile, limits.vendor, true, args); for (size_t i = 0; i < compilerArgs.GetSize(); i++) args.Push (compilerArgs[i]); Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgvp.cpp =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgvp.cpp 2008-07-23 14:45:30 UTC (rev 30496) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgvp.cpp 2008-07-23 15:12:53 UTC (rev 30497) @@ -76,7 +76,7 @@ csShaderGLCGFP* prevFP = static_cast<csShaderGLCGFP*> ( (iShaderProgramCG*)cgResolve); - ProfileLimits limits (programProfile); + ProfileLimits limits (shaderPlug->vendor, programProfile); limits.GetCurrentLimits (shaderPlug->ext); WriteToCache (cache, limits, prevFP->cacheLimits.ToString() /* Inaccurate when VP has custom profile set */ @@ -85,7 +85,7 @@ } else { - ProfileLimits limits (programProfile); + ProfileLimits limits (shaderPlug->vendor, programProfile); limits.GetCurrentLimits (shaderPlug->ext); tag->AttachNew (new scfString (limits.ToString())); } @@ -114,7 +114,7 @@ ArgumentArray args; shaderPlug->GetProfileCompilerArgs (GetProgramType(), - limits.profile, true, args); + limits.profile, limits.vendor, true, args); for (size_t i = 0; i < compilerArgs.GetSize(); i++) args.Push (compilerArgs[i]); Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/profile_limits.cpp =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/profile_limits.cpp 2008-07-23 14:45:30 UTC (rev 30496) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/profile_limits.cpp 2008-07-23 15:12:53 UTC (rev 30497) @@ -73,8 +73,10 @@ LIMIT(NumTemps, MAX_PROGRAM_TEMPORARIES_ARB, 32) \ PROFILE_END(FP40) - ProfileLimits::ProfileLimits (CGprofile profile) - : profile (profile), + ProfileLimits::ProfileLimits ( + CS::PluginCommon::ShaderProgramPluginGL::HardwareVendor vendor, + CGprofile profile) + : vendor (vendor), profile (profile), MaxAddressRegs (0), MaxInstructions (0), MaxLocalParams (0), @@ -139,6 +141,8 @@ void ProfileLimits::ReadFromConfig (iConfigFile* cfg, const char* _prefix) { csString prefix (_prefix); + vendor = CS::PluginCommon::ShaderProgramPluginGL::VendorFromString ( + cfg->GetStr (prefix + ".Vendor", "other")); #define READ(Limit) \ Limit = cfg->GetInt (prefix + "." #Limit, 0) READ (MaxAddressRegs); @@ -197,6 +201,12 @@ profile = cgGetProfile (components[i++]); if (profile == CG_PROFILE_UNKNOWN) return false; + if (i >= components.GetSize()) return false; + vendor = CS::PluginCommon::ShaderProgramPluginGL::VendorFromString ( + components[i++]); + if (vendor == CS::PluginCommon::ShaderProgramPluginGL::Invalid) + return false; + uint usedLimits = 0; #define PROFILE_BEGIN(PROFILE) \ @@ -265,6 +275,8 @@ #undef LIMIT csString ret (cgGetProfileString (profile)); + ret.AppendFmt (".%s", + CS::PluginCommon::ShaderProgramPluginGL::VendorToString (vendor)); #define EMIT(Limit) if (usedLimits & (1 << lim ## Limit)) ret.AppendFmt (".%u", Limit); EMIT (MaxInstructions); EMIT (NumInstructionSlots); @@ -304,6 +316,11 @@ bool ProfileLimits::Write (iFile* file) const { + { + int32 diskVal = csLittleEndian::Int32 (vendor); + if (file->Write ((char*)&diskVal, sizeof (diskVal)) != sizeof (diskVal)) + return false; + } #define WRITE(Limit) \ { \ uint32 diskVal = csLittleEndian::UInt32 (Limit); \ @@ -325,6 +342,13 @@ bool ProfileLimits::Read (iFile* file) { + { + int32 diskVal; + if (file->Read ((char*)&diskVal, sizeof (diskVal)) != sizeof (diskVal)) + return false; + vendor = (CS::PluginCommon::ShaderProgramPluginGL::HardwareVendor) + csLittleEndian::Int32 (diskVal); + } #define READ(Limit) \ { \ uint32 diskVal; \ @@ -373,6 +397,9 @@ int p2 = GetProfileOrdering (other.profile); if (p1 < p2) return true; if (p1 > p2) return false; + + if (vendor < other.vendor) return true; + if (vendor > other.vendor) return false; #define COMPARE(Limit) \ if (Limit < other.Limit) return true; \ @@ -396,6 +423,9 @@ if (p1 > p2) return true; if (p1 < p2) return false; + if (vendor > other.vendor) return true; + if (vendor < other.vendor) return false; + #define COMPARE(Limit) \ if (Limit > other.Limit) return true; \ if (Limit < other.Limit) return false; @@ -416,6 +446,8 @@ int p1 = GetProfileOrdering (profile); int p2 = GetProfileOrdering (other.profile); if (p1 != p2) return false; + + if (vendor != other.vendor) return false; #define COMPARE(Limit) \ if (Limit != other.Limit) return false; Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/profile_limits.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/profile_limits.h 2008-07-23 14:45:30 UTC (rev 30496) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/profile_limits.h 2008-07-23 15:12:53 UTC (rev 30497) @@ -21,6 +21,8 @@ #include "cg_common.h" +#include "csplugincommon/opengl/shaderplugin.h" + struct csGLExtensionManager; struct iFile; @@ -29,6 +31,7 @@ struct ProfileLimits { + CS::PluginCommon::ShaderProgramPluginGL::HardwareVendor vendor; CGprofile profile; uint MaxAddressRegs; uint MaxInstructions; @@ -39,7 +42,9 @@ uint NumTemps; uint NumTexInstructionSlots; - ProfileLimits (CGprofile profile); + ProfileLimits ( + CS::PluginCommon::ShaderProgramPluginGL::HardwareVendor vendor, + CGprofile profile); void GetCurrentLimits (csGLExtensionManager* ext); void ReadFromConfig (iConfigFile* cfg, const char* prefix); @@ -67,9 +72,17 @@ ProfileLimits vp; ProfileLimits fp; - ProfileLimitsPair() : vp (CG_PROFILE_UNKNOWN), fp (CG_PROFILE_UNKNOWN) {} - ProfileLimitsPair (CGprofile profileVP, - CGprofile profileFP) : vp (profileVP), fp (profileFP) {} + ProfileLimitsPair() : + vp (CS::PluginCommon::ShaderProgramPluginGL::Other, + CG_PROFILE_UNKNOWN), + fp (CS::PluginCommon::ShaderProgramPluginGL::Other, + CG_PROFILE_UNKNOWN) {} + ProfileLimitsPair ( + CS::PluginCommon::ShaderProgramPluginGL::HardwareVendor vendorVP, + CGprofile profileVP, + CS::PluginCommon::ShaderProgramPluginGL::HardwareVendor vendorFP, + CGprofile profileFP) : vp (vendorVP, profileVP), + fp (vendorFP, profileFP) {} void GetCurrentLimits (csGLExtensionManager* ext) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2008-07-23 18:59:33
|
Revision: 30503 http://crystal.svn.sourceforge.net/crystal/?rev=30503&view=rev Author: res2002 Date: 2008-07-23 18:59:30 +0000 (Wed, 23 Jul 2008) Log Message: ----------- Change handling of errors in the conversion from Unicode to the display character set on OS/X Modified Paths: -------------- CS/trunk/configure.ac CS/trunk/libs/csutil/generic/printf.cpp Modified: CS/trunk/configure.ac =================================================================== --- CS/trunk/configure.ac 2008-07-23 18:57:26 UTC (rev 30502) +++ CS/trunk/configure.ac 2008-07-23 18:59:30 UTC (rev 30503) @@ -2068,7 +2068,7 @@ AC_CHECK_FUNC([wcslen], [CS_HEADER_PROPERTY([CS_HAVE_WCSLEN])]) AC_CHECK_FUNC([fputws], [CS_HEADER_PROPERTY([CS_HAVE_FPUTWS])]) AC_CHECK_FUNC([fwide], [CS_HEADER_PROPERTY([CS_HAVE_FWIDE])]) - AC_CHECK_FUNC([wcsrtombs], [CS_HEADER_PROPERTY([CS_HAVE_WCSRTOMBS])]) + AC_CHECK_FUNC([wcsnrtombs], [CS_HEADER_PROPERTY([CS_HAVE_WCSNRTOMBS])]) AC_CHECK_SIZEOF([wchar_t], [] [[#if HAVE_WCHAR_H #include <wchar.h> Modified: CS/trunk/libs/csutil/generic/printf.cpp =================================================================== --- CS/trunk/libs/csutil/generic/printf.cpp 2008-07-23 18:57:26 UTC (rev 30502) +++ CS/trunk/libs/csutil/generic/printf.cpp 2008-07-23 18:59:30 UTC (rev 30503) @@ -21,6 +21,7 @@ #include <stdarg.h> #include <stdio.h> #include "cssysdef.h" +#include "csgeom/math.h" #include "csutil/ansiparse.h" #include "csutil/csstring.h" #include "csutil/csuctransform.h" @@ -46,43 +47,61 @@ int n = 0; const wchar_t* wcsPtr = wstr; #if defined(CS_HAVE_FPUTWS) && defined(CS_HAVE_FWIDE) \ - && defined(CS_HAVE_WCSRTOMBS) + && defined(CS_HAVE_WCSNRTOMBS) if (fwide (file, 0) > 0) { return fputws (wstr, file); } else { - mbstate_t mbs; + size_t numwcs = wcslen (wstr); + const wchar_t* wcsEnd = wcsPtr + numwcs; + mbstate_t oldstate, mbs; memset (&mbs, 0, sizeof (mbs)); char mbstr[64]; size_t mbslen; - while (wcsPtr != 0) + while (numwcs > 0) { memset (mbstr, 0, sizeof (mbstr)); - mbslen = wcsrtombs (mbstr, &wcsPtr, sizeof (mbstr) - 1, &mbs); + memcpy (&oldstate, &mbs, sizeof (mbs)); + mbslen = wcsnrtombs (mbstr, &wcsPtr, numwcs, sizeof (mbstr) - 1, &mbs); if (mbslen == (size_t)-1) { if (errno == EILSEQ) { - // Catch char that couldn't be encoded, print ? instead - if (fputs (mbstr, file) == EOF) return EOF; - if (fputc ('?', file) == EOF) return EOF; - if (CS_UC_IS_HIGH_SURROGATE (*wcsPtr)) - { - wcsPtr++; - if (CS_UC_IS_LOW_SURROGATE (*wcsPtr)) + /* At least on OS/X wcsPtr is not updated in case of a conversion + error, so kludge around it */ + if (mbstr[0] == 0) + { + // Catch char that couldn't be encoded, print ? instead + if (fputc ('?', file) == EOF) return EOF; + if (CS_UC_IS_HIGH_SURROGATE (*wcsPtr)) + { wcsPtr++; + if (CS_UC_IS_LOW_SURROGATE (*wcsPtr)) + wcsPtr++; + } + else + wcsPtr++; + numwcs = wcsEnd - wcsPtr; + } + else + { + // Try converting only a substring + numwcs = csMin (numwcs-1, strlen (mbstr)); + memcpy (&mbs, &oldstate, sizeof (mbs)); } - else - wcsPtr++; continue; } break; } - if (fputs (mbstr, file) == EOF) return EOF; + else + { + if (fputs (mbstr, file) == EOF) return EOF; + numwcs = (wcsPtr == 0) ? 0 : wcsEnd - wcsPtr; + } } - if (wcsPtr == 0) return (int)len; + return (int)len; } #endif // Use a cheap Wide-to-ASCII conversion. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sun...@us...> - 2008-07-24 10:33:40
|
Revision: 30514 http://crystal.svn.sourceforge.net/crystal/?rev=30514&view=rev Author: sunshine Date: 2008-07-24 10:33:38 +0000 (Thu, 24 Jul 2008) Log Message: ----------- Eric Sunshine augmented the sysinfo() check in configure.ac to test also for presence of <sys/sysinfo.h> and #defines CS_HAVE_SYS_SYSINFO_H if found. Furthermore, configure.ac now additionally checks for structure member sysinfo.totalram and #defines CS_HAVE_STRUCT_SYSINFO_TOTALRAM if found. This is needed since there are platforms, such as OpenSolaris, which supply <sys/sysinfo.h>, sysinfo(), and 'struct sysinfo' but which do not necessarily publish 'struct sysinfo.totalram'. Resolves issue mentioned in ticket #511. Modified Paths: -------------- CS/trunk/configure.ac CS/trunk/libs/csutil/unix/memutil_impl.cpp Modified: CS/trunk/configure.ac =================================================================== --- CS/trunk/configure.ac 2008-07-24 09:05:15 UTC (rev 30513) +++ CS/trunk/configure.ac 2008-07-24 10:33:38 UTC (rev 30514) @@ -1824,12 +1824,17 @@ [], [], [CS_HEADER_PROPERTY([CS_HAVE__ALIGNED_MALLOC])]) -CS_CHECK_BUILD([for sysinfo()], [cs_cv_sysinfo], - [AC_LANG_PROGRAM( - [[#include <sys/sysinfo.h>]], - [struct sysinfo x; sysinfo(&x);])], - [],[], - [CS_HEADER_PROPERTY([CS_HAVE_SYSINFO])]) +AC_CHECK_HEADERS([sys/sysinfo.h], + [CS_HEADER_PROPERTY([CS_HAVE_SYS_SYSINFO_H]) + CS_CHECK_BUILD([for sysinfo()], [cs_cv_sysinfo], + [AC_LANG_PROGRAM( + [[#include <sys/sysinfo.h>]], + [struct sysinfo x; sysinfo(&x);])], + [],[], + [CS_HEADER_PROPERTY([CS_HAVE_SYSINFO])]) + AC_CHECK_MEMBERS([struct sysinfo.totalram], + [CS_HEADER_PROPERTY([CS_HAVE_STRUCT_SYSINFO_TOTALRAM])], [], + [#include <sys/sysinfo.h>])]) Modified: CS/trunk/libs/csutil/unix/memutil_impl.cpp =================================================================== --- CS/trunk/libs/csutil/unix/memutil_impl.cpp 2008-07-24 09:05:15 UTC (rev 30513) +++ CS/trunk/libs/csutil/unix/memutil_impl.cpp 2008-07-24 10:33:38 UTC (rev 30514) @@ -20,7 +20,7 @@ #include "csutil/csstring.h" #include "csutil/sysfunc.h" #include "../memutil.h" -#if defined(CS_HAVE_SYSINFO) +#if defined(CS_HAVE_SYS_SYSINFO_H) #include <sys/sysinfo.h> #endif @@ -28,7 +28,7 @@ static size_t query_sysinfo() { size_t n = 0; -#if defined(CS_HAVE_SYSINFO) +#if defined(CS_HAVE_SYSINFO) && defined(CS_HAVE_STRUCT_SYSINFO_TOTALRAM) struct sysinfo x; if (sysinfo(&x) == 0) n = x.totalram / 1024; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2008-07-24 16:11:57
|
Revision: 30522 http://crystal.svn.sourceforge.net/crystal/?rev=30522&view=rev Author: res2002 Date: 2008-07-24 16:11:51 +0000 (Thu, 24 Jul 2008) Log Message: ----------- Change light attenuation vector to contain the inverse radius for the linear attenuation in the last component (not the plain radius) Modified Paths: -------------- CS/trunk/data/shader/snippets/lighting/lightfuncs.cginc CS/trunk/data/shader-old/parallaxAtt/parallaxAtt.cgvp CS/trunk/plugins/engine/3d/light.cpp Modified: CS/trunk/data/shader/snippets/lighting/lightfuncs.cginc =================================================================== --- CS/trunk/data/shader/snippets/lighting/lightfuncs.cginc 2008-07-24 15:42:04 UTC (rev 30521) +++ CS/trunk/data/shader/snippets/lighting/lightfuncs.cginc 2008-07-24 16:11:51 UTC (rev 30522) @@ -264,9 +264,9 @@ float lightDist = lightSpace.GetLightDistance(); half attn; - float attnRadius = lightAttenuationVec.w; - if (attnRadius > 0) - attn = Attenuation_Linear (lightDist, 1 / attnRadius); + float invAttnRadius = lightAttenuationVec.w; + if (invAttnRadius > 0) + attn = Attenuation_Linear (lightDist, invAttnRadius); else attn = Attenuation_CLQ (lightDist, lightAttenuationVec.xyz); Modified: CS/trunk/data/shader-old/parallaxAtt/parallaxAtt.cgvp =================================================================== --- CS/trunk/data/shader-old/parallaxAtt/parallaxAtt.cgvp 2008-07-24 15:42:04 UTC (rev 30521) +++ CS/trunk/data/shader-old/parallaxAtt/parallaxAtt.cgvp 2008-07-24 16:11:51 UTC (rev 30522) @@ -59,7 +59,7 @@ OUT.oLightDir = normalize(tangLight.xyz); OUT.oEyeVec = normalize(tangEyeVec.xyz); if (Attenuation.w > 0) - Attenuation.xy = float2 (Attenuation.w, 1/Attenuation.w); + Attenuation.xy = float2 (1.0f/Attenuation.w, Attenuation.w); OUT.Attenuation = -objLight*Attenuation.y*0.4 + 0.5; OUT.Attenuation.w = 0.5; Modified: CS/trunk/plugins/engine/3d/light.cpp =================================================================== --- CS/trunk/plugins/engine/3d/light.cpp 2008-07-24 15:42:04 UTC (rev 30521) +++ CS/trunk/plugins/engine/3d/light.cpp 2008-07-24 16:11:51 UTC (rev 30522) @@ -245,7 +245,7 @@ break; case CS_ATTN_LINEAR: // @@@ FIXME: cutoff distance != radius, really - attenuationConstants.Set (0, 0, 0, cutoffDistance); + attenuationConstants.Set (0, 0, 0, 1.0f/cutoffDistance); break; case CS_ATTN_INVERSE: attenuationConstants.Set (0, 1, 0, 0); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cry...@us...> - 2008-07-25 02:52:57
|
Revision: 30527 http://crystal.svn.sourceforge.net/crystal/?rev=30527&view=rev Author: crystal-manage Date: 2008-07-25 02:52:54 +0000 (Fri, 25 Jul 2008) Log Message: ----------- master header files: Automated master header file repair. Visual-C++ project files: Automated Visual-C++ project file repair. Texinfo files: Automated Texinfo @node and @menu repair. Swig Python files: Automated Swig Python file repair. Swig Perl5 files: Automated Swig Perl5 file repair. User's Manual: Automated Texinfo to HTML conversion. Modified Paths: -------------- CS/trunk/plugins/cscript/pycore/cs_core.cpp CS/trunk/scripts/python/frozen/cspace/core.py Modified: CS/trunk/plugins/cscript/pycore/cs_core.cpp =================================================================== --- CS/trunk/plugins/cscript/pycore/cs_core.cpp 2008-07-24 23:55:58 UTC (rev 30526) +++ CS/trunk/plugins/cscript/pycore/cs_core.cpp 2008-07-25 02:52:54 UTC (rev 30527) @@ -26763,59 +26763,6 @@ return SWIG_Py_Void(); } -SWIGINTERN PyObject *_wrap_iEvent_Name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - iEvent *arg1 = (iEvent *) 0 ; - csEventID *arg2 = (csEventID *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if(!PyArg_UnpackTuple(args,(char *)"iEvent_Name_set",2,2,&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_iEvent, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "iEvent_Name_set" "', argument " "1"" of type '" "iEvent *""'"); - } - arg1 = reinterpret_cast< iEvent * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_CS__StringIDTCS__StringSetTag__General_t, 0 | 0 ); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "iEvent_Name_set" "', argument " "2"" of type '" "csEventID *""'"); - } - arg2 = reinterpret_cast< csEventID * >(argp2); - if (arg1) (arg1)->Name = *arg2; - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_iEvent_Name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - iEvent *arg1 = (iEvent *) 0 ; - csEventID *result = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if(!PyArg_UnpackTuple(args,(char *)"iEvent_Name_get",1,1,&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_iEvent, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "iEvent_Name_get" "', argument " "1"" of type '" "iEvent *""'"); - } - arg1 = reinterpret_cast< iEvent * >(argp1); - result = (csEventID *)& ((arg1)->Name); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CS__StringIDTCS__StringSetTag__General_t, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - SWIGINTERN PyObject *_wrap_iEvent_GetName(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; iEvent *arg1 = (iEvent *) 0 ; @@ -58434,8 +58381,6 @@ { (char *)"new_csCommandEventData", _wrap_new_csCommandEventData, METH_VARARGS, NULL}, { (char *)"delete_csCommandEventData", _wrap_delete_csCommandEventData, METH_VARARGS, NULL}, { (char *)"csCommandEventData_swigregister", csCommandEventData_swigregister, METH_VARARGS, NULL}, - { (char *)"iEvent_Name_set", _wrap_iEvent_Name_set, METH_VARARGS, NULL}, - { (char *)"iEvent_Name_get", _wrap_iEvent_Name_get, METH_VARARGS, NULL}, { (char *)"iEvent_GetName", _wrap_iEvent_GetName, METH_VARARGS, NULL}, { (char *)"iEvent_Time_set", _wrap_iEvent_Time_set, METH_VARARGS, NULL}, { (char *)"iEvent_Time_get", _wrap_iEvent_Time_get, METH_VARARGS, NULL}, Modified: CS/trunk/scripts/python/frozen/cspace/core.py =================================================================== --- CS/trunk/scripts/python/frozen/cspace/core.py 2008-07-24 23:55:58 UTC (rev 30526) +++ CS/trunk/scripts/python/frozen/cspace/core.py 2008-07-25 02:52:54 UTC (rev 30527) @@ -1159,7 +1159,6 @@ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') def __init__(self): raise AttributeError, "No constructor defined" __repr__ = _swig_repr - Name = _swig_property(_core.iEvent_Name_get, _core.iEvent_Name_set) def GetName(*args): return _core.iEvent_GetName(*args) Time = _swig_property(_core.iEvent_Time_get, _core.iEvent_Time_set) Broadcast = _swig_property(_core.iEvent_Broadcast_get, _core.iEvent_Broadcast_set) @@ -1195,6 +1194,8 @@ scfGetVersion = staticmethod(_core.iEvent_scfGetVersion) __swig_destroy__ = _core.delete_iEvent __del__ = lambda self : None; + Name = property(GetName) + iEvent_swigregister = _core.iEvent_swigregister iEvent_swigregister(iEvent) iEvent_scfGetVersion = _core.iEvent_scfGetVersion This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2008-07-25 15:36:15
|
Revision: 30534 http://crystal.svn.sourceforge.net/crystal/?rev=30534&view=rev Author: res2002 Date: 2008-07-25 15:35:57 +0000 (Fri, 25 Jul 2008) Log Message: ----------- Also pass program source node also when loading a shader program from cache; save source node hash when caching Cg programs (and recompile a program when the source changes) Modified Paths: -------------- CS/trunk/include/csplugincommon/shader/shaderplugin.h CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shader.cpp CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.cpp CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_afp.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_avp.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon_parse.cpp CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_fixed/glshader_ffp.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_fixed/glshader_fvp.h CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_ps1/ps1_emu_common.h CS/trunk/plugins/video/render3d/shader/shaderplugins/softshader/softshader_fp.h CS/trunk/plugins/video/render3d/shader/shaderplugins/softshader/softshader_vp.h CS/trunk/plugins/video/render3d/shader/shaderplugins/vproc_std/vproc_program.h Modified: CS/trunk/include/csplugincommon/shader/shaderplugin.h =================================================================== --- CS/trunk/include/csplugincommon/shader/shaderplugin.h 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/include/csplugincommon/shader/shaderplugin.h 2008-07-25 15:35:57 UTC (rev 30534) @@ -67,7 +67,7 @@ */ struct iShaderProgram : public virtual iBase { - SCF_INTERFACE(iShaderProgram, 5, 0, 0); + SCF_INTERFACE(iShaderProgram, 6, 0, 0); /// Sets this program to be the one used when rendering virtual void Activate() = 0; @@ -122,6 +122,7 @@ }; /// Loads from a cache virtual CacheLoadResult LoadFromCache (iHierarchicalCache* cache, + iDocumentNode* programNode, csRef<iString>* failReason = 0, csRef<iString>* cacheTag = 0) = 0; }; Modified: CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shader.cpp =================================================================== --- CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shader.cpp 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shader.cpp 2008-07-25 15:35:57 UTC (rev 30534) @@ -1026,7 +1026,8 @@ if (techCache.IsValid()) { var.tech = new csXMLShaderTech (this); - loadResult = var.tech->LoadFromCache (ldr_context, varCache, shaderRoot, ticket); + loadResult = var.tech->LoadFromCache (ldr_context, tech.techNode, + varCache, shaderRoot, ticket); if (compiler->do_verbose) { switch (loadResult) Modified: CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.cpp =================================================================== --- CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.cpp 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.cpp 2008-07-25 15:35:57 UTC (rev 30534) @@ -46,7 +46,7 @@ /* Magic value for tech + pass cache files. * The most significant byte serves as a "version", increase when the * cache file format changes. */ -static const uint32 cacheFileMagic = 0x02747863; +static const uint32 cacheFileMagic = 0x03747863; //--------------------------------------------------------------------------- @@ -726,10 +726,6 @@ // Used to generate data written on disk! enum { - cacheFlagHasFP, - cacheFlagHasVP, - cacheFlagHasVProc, - cacheFlagWMR = 4, cacheFlagWMG, cacheFlagWMB, @@ -751,10 +747,6 @@ { uint32 cacheFlags = 0; - if (plugins.fp.available) cacheFlags |= 1 << cacheFlagHasFP; - if (plugins.vp.available) cacheFlags |= 1 << cacheFlagHasVP; - if (plugins.vproc.available) cacheFlags |= 1 << cacheFlagHasVProc; - if (pass->wmRed) cacheFlags |= 1 << cacheFlagWMR; if (pass->wmGreen) cacheFlags |= 1 << cacheFlagWMG; if (pass->wmBlue) cacheFlags |= 1 << cacheFlagWMB; @@ -771,27 +763,6 @@ != sizeof (diskFlags)) return false; } - if (!CS::PluginCommon::ShaderCacheHelper::WriteString (cacheFile, - plugins.fp.progType)) - return false; - if (!CS::PluginCommon::ShaderCacheHelper::WriteString (cacheFile, - plugins.fp.pluginID)) - return false; - - if (!CS::PluginCommon::ShaderCacheHelper::WriteString (cacheFile, - plugins.vp.progType)) - return false; - if (!CS::PluginCommon::ShaderCacheHelper::WriteString (cacheFile, - plugins.vp.pluginID)) - return false; - - if (!CS::PluginCommon::ShaderCacheHelper::WriteString (cacheFile, - plugins.vproc.progType)) - return false; - if (!CS::PluginCommon::ShaderCacheHelper::WriteString (cacheFile, - plugins.vproc.pluginID)) - return false; - { uint32 diskMM = csLittleEndian::UInt32 (pass->mixMode); if (cacheFile->Write ((char*)&diskMM, sizeof (diskMM)) @@ -905,12 +876,14 @@ } iShaderProgram::CacheLoadResult csXMLShaderTech::LoadPassFromCache ( - ShaderPass* pass, size_t variant, iFile* cacheFile, + ShaderPass* pass, iDocumentNode* node, size_t variant, iFile* cacheFile, iHierarchicalCache* cache) { if (!cacheFile) return iShaderProgram::loadFail; CachedPlugins plugins; + GetProgramPlugins (node, plugins, variant); + if (!ReadPass (pass, cacheFile, plugins)) return iShaderProgram::loadFail; csString tagFP, tagVP, tagVPr; @@ -969,10 +942,6 @@ != sizeof (diskFlags)) return false; uint32 cacheFlags = csLittleEndian::UInt32 (diskFlags); - plugins.fp.available = cacheFlags & (1 << cacheFlagHasFP); - plugins.vp.available = cacheFlags & (1 << cacheFlagHasVP); - plugins.vproc.available = cacheFlags & (1 << cacheFlagHasVProc); - pass->wmRed = cacheFlags & (1 << cacheFlagWMR); pass->wmGreen = cacheFlags & (1 << cacheFlagWMG); pass->wmBlue = cacheFlags & (1 << cacheFlagWMB); @@ -985,21 +954,6 @@ pass->alphaMode.autoAlphaMode = cacheFlags & (1 << cacheFlagAlphaAuto); } - plugins.fp.progType = CS::PluginCommon::ShaderCacheHelper::ReadString ( - cacheFile); - plugins.fp.pluginID = CS::PluginCommon::ShaderCacheHelper::ReadString ( - cacheFile); - - plugins.vp.progType = CS::PluginCommon::ShaderCacheHelper::ReadString ( - cacheFile); - plugins.vp.pluginID = CS::PluginCommon::ShaderCacheHelper::ReadString ( - cacheFile); - - plugins.vproc.progType = CS::PluginCommon::ShaderCacheHelper::ReadString ( - cacheFile); - plugins.vproc.pluginID = CS::PluginCommon::ShaderCacheHelper::ReadString ( - cacheFile); - { uint32 diskMM; if (cacheFile->Read ((char*)&diskMM, sizeof (diskMM)) @@ -1202,8 +1156,8 @@ prog = plg->CreateProgram (cacheInfo.progType); csRef<iString> progTag; csRef<iString> failReason; - iShaderProgram::CacheLoadResult loadRes = prog->LoadFromCache (cache, &failReason, - &progTag); + iShaderProgram::CacheLoadResult loadRes = prog->LoadFromCache (cache, + cacheInfo.programNode, &failReason, &progTag); if (loadRes == iShaderProgram::loadFail) { if (parent->compiler->do_verbose) @@ -1552,8 +1506,8 @@ } iShaderProgram::CacheLoadResult csXMLShaderTech::LoadFromCache ( - iLoaderContext* ldr_context, iHierarchicalCache* cache, - iDocumentNode* parentSV, size_t variant) + iLoaderContext* ldr_context, iDocumentNode* node, + iHierarchicalCache* cache, iDocumentNode* parentSV, size_t variant) { csRef<iDataBuffer> cacheData (cache->ReadCache ("/passes")); if (!cacheData.IsValid()) return iShaderProgram::loadFail; @@ -1582,12 +1536,24 @@ if (read != sizeof (diskPassNum)) return iShaderProgram::loadFail; + size_t nodePassesCount = 0; + csRef<iDocumentNodeIterator> it = node->GetNodes (xmltokens.Request ( + csXMLShaderCompiler::XMLTOKEN_PASS)); + while(it->HasNext ()) + { + it->Next (); + nodePassesCount++; + } + passesCount = csLittleEndian::Int32 (diskPassNum); + if (passesCount != nodePassesCount) return iShaderProgram::loadFail; passes = new ShaderPass[passesCount]; + it = node->GetNodes (xmltokens.Request (csXMLShaderCompiler::XMLTOKEN_PASS)); for (uint p = 0; p < passesCount; p++) { + csRef<iDocumentNode> child = it->Next (); iShaderProgram::CacheLoadResult loadRes = - LoadPassFromCache (&passes[p], variant, &cacheFile, cache); + LoadPassFromCache (&passes[p], child, variant, &cacheFile, cache); if (loadRes != iShaderProgram::loadSuccessShaderValid) return loadRes; } Modified: CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.h 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/plugins/video/render3d/shader/shadercompiler/xmlshader/shadertech.h 2008-07-25 15:35:57 UTC (rev 30534) @@ -143,7 +143,8 @@ bool WritePass (ShaderPass* pass, const CachedPlugins& plugins, iFile* cacheFile); iShaderProgram::CacheLoadResult LoadPassFromCache (ShaderPass* pass, - size_t variant, iFile* cacheFile, iHierarchicalCache* cache); + iDocumentNode* node, size_t variant, iFile* cacheFile, + iHierarchicalCache* cache); bool ReadPass (ShaderPass* pass, iFile* cacheFile, CachedPlugins& plugins); @@ -196,7 +197,8 @@ bool Load (iLoaderContext* ldr_context, iDocumentNode* node, iDocumentNode* parentSV, size_t variant, iHierarchicalCache* cacheTo); iShaderProgram::CacheLoadResult LoadFromCache (iLoaderContext* ldr_context, - iHierarchicalCache* cache, iDocumentNode* parentSV, size_t variant); + iDocumentNode* node, iHierarchicalCache* cache, iDocumentNode* parentSV, + size_t variant); bool Precache (iDocumentNode* node, size_t variant, iHierarchicalCache* cacheTo); Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_afp.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_afp.h 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_afp.h 2008-07-25 15:35:57 UTC (rev 30534) @@ -91,8 +91,8 @@ virtual bool Compile (iHierarchicalCache*, csRef<iString>*); virtual iShaderProgram::CacheLoadResult LoadFromCache ( - iHierarchicalCache* cache, csRef<iString>* failReason = 0, - csRef<iString>* = 0) + iHierarchicalCache* cache, iDocumentNode* programNode, + csRef<iString>* failReason = 0, csRef<iString>* = 0) { return iShaderProgram::loadFail; } }; Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_avp.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_avp.h 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_arb/glshader_avp.h 2008-07-25 15:35:57 UTC (rev 30534) @@ -91,8 +91,8 @@ virtual bool Compile (iHierarchicalCache*, csRef<iString>*); virtual iShaderProgram::CacheLoadResult LoadFromCache ( - iHierarchicalCache* cache, csRef<iString>* failReason = 0, - csRef<iString>* = 0) + iHierarchicalCache* cache, iDocumentNode* programNode, + csRef<iString>* failReason = 0, csRef<iString>* = 0) { return iShaderProgram::loadFail; } }; Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.cpp =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.cpp 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.cpp 2008-07-25 15:35:57 UTC (rev 30534) @@ -705,6 +705,11 @@ if (cacheFile.Write ((char*)&diskMagic, sizeof (diskMagic)) != sizeof (diskMagic)) return false; + csMD5::Digest nodeHash = csMD5::Encode ( + CS::DocSystem::FlattenNode (programNode)); + if (cacheFile.Write ((char*)&nodeHash, sizeof (nodeHash)) + != sizeof (nodeHash)) return false; + csString objectCode (this->objectCode); if ((program != 0) && objectCode.IsEmpty()) objectCode = cgGetProgramString (program, CG_COMPILED_PROGRAM); @@ -784,8 +789,8 @@ }; iShaderProgram::CacheLoadResult csShaderGLCGCommon::LoadFromCache ( - iHierarchicalCache* cache, csRef<iString>* failReason, - csRef<iString>* tag) + iHierarchicalCache* cache, iDocumentNode* node, + csRef<iString>* failReason, csRef<iString>* tag) { if (!cache) return iShaderProgram::loadFail; @@ -797,6 +802,10 @@ return iShaderProgram::loadFail; } + if (!GetProgramNode (node)) return iShaderProgram::loadFail; + csMD5::Digest nodeHash = csMD5::Encode ( + CS::DocSystem::FlattenNode (programNode)); + csArray<CachedShaderWrapper> cachedProgWrappers; for (size_t i = 0; i < allCachedPrograms->GetSize(); i++) { @@ -819,6 +828,11 @@ wrapper.name = allCachedPrograms->Get (i); if (!wrapper.limits.FromString (wrapper.name)) continue; + csMD5::Digest diskHash; + if (cacheFile->Read ((char*)&diskHash, sizeof (diskHash)) + != sizeof (diskHash)) continue; + if (diskHash != nodeHash) continue; + cachedProgWrappers.Push (wrapper); } @@ -1017,7 +1031,7 @@ return oneReadCorrectly ? iShaderProgram::loadSuccessShaderInvalid : iShaderProgram::loadFail; } -static const uint32 cacheFileMagicCC = 0x02637063; +static const uint32 cacheFileMagicCC = 0x03637063; bool csShaderGLCGCommon::TryLoadFromCompileCache (const char* source, const ProfileLimits& limits, Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.h 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon.h 2008-07-25 15:35:57 UTC (rev 30534) @@ -185,6 +185,8 @@ iHierarchicalCache* cache); bool WriteToCompileCache (const ProfileLimits& limits, iHierarchicalCache* cache); + + bool GetProgramNode (iDocumentNode* passProgNode); public: CS_LEAKGUARD_DECLARE (csShaderGLCGCommon); @@ -231,8 +233,8 @@ { return unusedParams; } virtual iShaderProgram::CacheLoadResult LoadFromCache ( - iHierarchicalCache* cache, csRef<iString>* failReason = 0, - csRef<iString>* = 0); + iHierarchicalCache* cache, iDocumentNode* programNode, + csRef<iString>* failReason = 0, csRef<iString>* = 0); }; } Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon_parse.cpp =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon_parse.cpp 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_cg/glshader_cgcommon_parse.cpp 2008-07-25 15:35:57 UTC (rev 30534) @@ -222,5 +222,58 @@ return true; } +bool csShaderGLCGCommon::GetProgramNode (iDocumentNode* passProgNode) +{ + if(!passProgNode) + return false; + + const char* progTypeNode = 0; + switch (programType) + { + case progVP: progTypeNode = "cgvp"; break; + case progFP: progTypeNode = "cgfp"; break; + } + csRef<iDocumentNode> variablesnode = passProgNode->GetNode (progTypeNode); + if(variablesnode) + { + csRef<iDocumentNodeIterator> it = variablesnode->GetNodes (); + while(it->HasNext()) + { + csRef<iDocumentNode> child = it->Next(); + if(child->GetType() != CS_NODE_ELEMENT) continue; + const char* value = child->GetValue (); + csStringID id = commonTokens.Request (value); + switch(id) + { + case XMLTOKEN_PROGRAM: + { + const char* filename = child->GetAttributeValue ("file"); + if (filename != 0) + { + programFileName = filename; + + csRef<iVFS> vfs = csQueryRegistry<iVFS> (objectReg); + csRef<iFile> file = vfs->Open (filename, VFS_FILE_READ); + if (!file.IsValid()) + { + synsrv->Report ("crystalspace.graphics3d.shader.common", + CS_REPORTER_SEVERITY_WARNING, child, + "Could not open '%s'", filename); + return false; + } + + programFile = file; + } + else + programNode = child; + } + break; + } + } + } + + return programNode.IsValid(); } + +} CS_PLUGIN_NAMESPACE_END(GLShaderCg) Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_fixed/glshader_ffp.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_fixed/glshader_ffp.h 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_fixed/glshader_ffp.h 2008-07-25 15:35:57 UTC (rev 30534) @@ -169,8 +169,8 @@ virtual void GetUsedShaderVars (csBitArray& bits) const; virtual iShaderProgram::CacheLoadResult LoadFromCache ( - iHierarchicalCache* cache, csRef<iString>* failReason = 0, - csRef<iString>* = 0) + iHierarchicalCache* cache, iDocumentNode* programNode, + csRef<iString>* failReason = 0, csRef<iString>* = 0) { return iShaderProgram::loadFail; } }; Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_fixed/glshader_fvp.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_fixed/glshader_fvp.h 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_fixed/glshader_fvp.h 2008-07-25 15:35:57 UTC (rev 30534) @@ -175,8 +175,8 @@ virtual void GetUsedShaderVars (csBitArray& bits) const; virtual iShaderProgram::CacheLoadResult LoadFromCache ( - iHierarchicalCache* cache, csRef<iString>* failReason = 0, - csRef<iString>* = 0) + iHierarchicalCache* cache, iDocumentNode* programNode, + csRef<iString>* failReason = 0, csRef<iString>* = 0) { return iShaderProgram::loadFail; } }; Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_ps1/ps1_emu_common.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_ps1/ps1_emu_common.h 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/glshader_ps1/ps1_emu_common.h 2008-07-25 15:35:57 UTC (rev 30534) @@ -83,8 +83,8 @@ virtual void GetUsedShaderVars (csBitArray& bits) const; virtual iShaderProgram::CacheLoadResult LoadFromCache ( - iHierarchicalCache* cache, csRef<iString>* failReason = 0, - csRef<iString>* = 0) + iHierarchicalCache* cache, iDocumentNode* programNode, + csRef<iString>* failReason = 0, csRef<iString>* = 0) { return iShaderProgram::loadFail; } }; Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/softshader/softshader_fp.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/softshader/softshader_fp.h 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/softshader/softshader_fp.h 2008-07-25 15:35:57 UTC (rev 30534) @@ -89,8 +89,8 @@ virtual void GetUsedShaderVars (csBitArray& bits) const; virtual iShaderProgram::CacheLoadResult LoadFromCache ( - iHierarchicalCache* cache, csRef<iString>* failReason = 0, - csRef<iString>* = 0) + iHierarchicalCache* cache, iDocumentNode* programNode, + csRef<iString>* failReason = 0, csRef<iString>* = 0) { return iShaderProgram::loadFail; } csPtr<iString> GetCacheTag () { return 0; } Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/softshader/softshader_vp.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/softshader/softshader_vp.h 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/softshader/softshader_vp.h 2008-07-25 15:35:57 UTC (rev 30534) @@ -68,8 +68,8 @@ virtual bool Compile (iHierarchicalCache*, csRef<iString>*); virtual iShaderProgram::CacheLoadResult LoadFromCache ( - iHierarchicalCache* cache, csRef<iString>* failReason = 0, - csRef<iString>* = 0) + iHierarchicalCache* cache, iDocumentNode* programNode, + csRef<iString>* failReason = 0, csRef<iString>* = 0) { return iShaderProgram::loadFail; } csPtr<iString> GetCacheTag () { return 0; } Modified: CS/trunk/plugins/video/render3d/shader/shaderplugins/vproc_std/vproc_program.h =================================================================== --- CS/trunk/plugins/video/render3d/shader/shaderplugins/vproc_std/vproc_program.h 2008-07-25 15:33:36 UTC (rev 30533) +++ CS/trunk/plugins/video/render3d/shader/shaderplugins/vproc_std/vproc_program.h 2008-07-25 15:35:57 UTC (rev 30534) @@ -72,8 +72,8 @@ virtual void GetUsedShaderVars (csBitArray& bits) const; virtual iShaderProgram::CacheLoadResult LoadFromCache ( - iHierarchicalCache* cache, csRef<iString>* failReason = 0, - csRef<iString>* = 0) + iHierarchicalCache* cache, iDocumentNode* programNode, + csRef<iString>* failReason = 0, csRef<iString>* = 0) { return iShaderProgram::loadFail; } csPtr<iString> GetCacheTag () { return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sun...@us...> - 2008-07-25 23:51:44
|
Revision: 30539 http://crystal.svn.sourceforge.net/crystal/?rev=30539&view=rev Author: sunshine Date: 2008-07-25 23:51:41 +0000 (Fri, 25 Jul 2008) Log Message: ----------- Eric Sunshine made the following changes: For consistency with other CS_CHECK_COMMON_FOO() macros in checkcommon.m4, CS_CHECK_COMMON_LIBS() now also emits build configuration (via CS_EMIT_BUILD_PROPERTY()) rather than requiring the client to do so. All CS_CHECK_COMMON_FOO() macros in checkcommon.m4 now accept an optional EMITTER argument which allows the client to control the emission of build configuration, rather than unconditionally emitting results to Jamconfig. (The client nwo can even suppress emission via CS_NULL_EMITTER.) Modified Paths: -------------- CS/trunk/configure.ac CS/trunk/mk/autoconf/checkcommon.m4 Modified: CS/trunk/configure.ac =================================================================== --- CS/trunk/configure.ac 2008-07-25 23:20:19 UTC (rev 30538) +++ CS/trunk/configure.ac 2008-07-25 23:51:41 UTC (rev 30539) @@ -157,15 +157,8 @@ CS_CHECK_COMMON_LIBS -AS_IF([test $ac_cv_lib_m_pow = yes || test $ac_cv_lib_m_cosf = yes], - [CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [-lm], [+])]) -AS_IF([test $ac_cv_lib_mx_cosf = yes], - [CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [-lmx], [+])]) AS_IF([test $ac_cv_lib_dl_dlopen = yes], - [CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [-ldl], [+]) - AC_CHECK_LIB([dl], [dladdr], [CS_HEADER_PROPERTY([CS_HAVE_DLADDR])])]) -AS_IF([test $ac_cv_lib_nsl_gethostbyname = yes], - [CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [-lnsl], [+])]) + [AC_CHECK_LIB([dl], [dladdr], [CS_HEADER_PROPERTY([CS_HAVE_DLADDR])])]) AS_IF([test $ac_cv_lib_m_cosf != no || test $ac_cv_lib_mx_cosf != no], [CS_HEADER_PROPERTY([CS_HAVE_MATH_H_FLOAT_FUNCS])]) Modified: CS/trunk/mk/autoconf/checkcommon.m4 =================================================================== --- CS/trunk/mk/autoconf/checkcommon.m4 2008-07-25 23:20:19 UTC (rev 30538) +++ CS/trunk/mk/autoconf/checkcommon.m4 2008-07-25 23:51:41 UTC (rev 30539) @@ -1,5 +1,5 @@ #============================================================================== -# Copyright (C)2003-2006 by Eric Sunshine <sun...@su...> +# Copyright (C)2003-2008 by Eric Sunshine <sun...@su...> # # This library is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published by @@ -19,116 +19,146 @@ AC_PREREQ([2.56]) #------------------------------------------------------------------------------ -# CS_CHECK_COMMON_TOOLS_LINK -# Checks for common tools related to linking. +# CS_CHECK_COMMON_TOOLS_LINK([EMITTER]) +# Checks for common tools related to linking. Results of the checks are +# recorded with CS_EMIT_BUILD_PROPERTY() via the optional EMITTER. If +# EMITTER is omitted, then CS_EMIT_BUILD_PROPERTY()'s default emitter is +# employed. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_COMMON_TOOLS_LINK], - [ - # The default RANLIB in Jambase is wrong on some platforms, and is also - # unsuitable during cross-compilation, so we set the value unconditionally - # (sixth argument of CS_EMIT_BUILD_PROPERTY). + [# The default RANLIB in Jambase is wrong on some platforms, and is also + # unsuitable during cross-compilation, so value is set unconditionally. AC_PROG_RANLIB - CS_EMIT_BUILD_PROPERTY([RANLIB], [$RANLIB], [], [], [], [Y]) + CS_EMIT_BUILD_PROPERTY([RANLIB], [$RANLIB], [unconditional], [], [$1]) CS_CHECK_TOOLS([DLLTOOL], [dlltool]) - CS_EMIT_BUILD_PROPERTY([CMD.DLLTOOL], [$DLLTOOL]) + CS_EMIT_BUILD_PROPERTY([CMD.DLLTOOL], [$DLLTOOL], [], [], [$1]) CS_CHECK_TOOLS([DLLWRAP], [dllwrap]) AS_IF([test "$cs_mno_cygwin" = "yes"], [DLLWRAP="$DLLWRAP --target i386-mingw32"]) - CS_EMIT_BUILD_PROPERTY([CMD.DLLWRAP], [$DLLWRAP]) + CS_EMIT_BUILD_PROPERTY([CMD.DLLWRAP], [$DLLWRAP], [], [], [$1]) CS_CHECK_TOOLS([WINDRES], [windres]) - CS_EMIT_BUILD_PROPERTY([CMD.WINDRES], [$WINDRES]) + CS_EMIT_BUILD_PROPERTY([CMD.WINDRES], [$WINDRES], [], [], [$1]) CS_CHECK_TOOLS([STRINGS], [strings]) - CS_EMIT_BUILD_PROPERTY([CMD.STRINGS], [$STRINGS]) + CS_EMIT_BUILD_PROPERTY([CMD.STRINGS], [$STRINGS], [], [], [$1]) CS_CHECK_TOOLS([OBJCOPY], [objcopy]) - CS_EMIT_BUILD_PROPERTY([CMD.OBJCOPY], [$OBJCOPY]) + CS_EMIT_BUILD_PROPERTY([CMD.OBJCOPY], [$OBJCOPY], [], [], [$1]) CS_CHECK_LIBTOOL - CS_EMIT_BUILD_PROPERTY([LIBTOOL], [$LIBTOOL]) - CS_EMIT_BUILD_PROPERTY([APPLE_LIBTOOL], [$APPLE_LIBTOOL]) - ]) + CS_EMIT_BUILD_PROPERTY([LIBTOOL], [$LIBTOOL], [], [], [$1]) + CS_EMIT_BUILD_PROPERTY([APPLE_LIBTOOL], [$APPLE_LIBTOOL], [], [], [$1])]) #------------------------------------------------------------------------------ -# CS_CHECK_COMMON_TOOLS_BASIC -# Checks for basic tools for building things. +# CS_CHECK_COMMON_TOOLS_BASIC([EMITTER]) +# Checks for basic tools for building things. Results of the checks are +# recorded with CS_EMIT_BUILD_PROPERTY() via the optional EMITTER. If +# EMITTER is omitted, then CS_EMIT_BUILD_PROPERTY()'s default emitter is +# employed. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_COMMON_TOOLS_BASIC], [CS_CHECK_MKDIR - CS_EMIT_BUILD_PROPERTY([CMD.MKDIR], [$MKDIR]) - CS_EMIT_BUILD_PROPERTY([CMD.MKDIRS], [$MKDIRS]) + CS_EMIT_BUILD_PROPERTY([CMD.MKDIR], [$MKDIR], [], [], [$1]) + CS_EMIT_BUILD_PROPERTY([CMD.MKDIRS], [$MKDIRS], [], [], [$1]) - CS_CHECK_PROGS([INSTALL], [install]) - CS_EMIT_BUILD_PROPERTY([INSTALL], [$INSTALL]) + CS_CHECK_PROGS([INSTALL], [install], [], [], [$1]) + CS_EMIT_BUILD_PROPERTY([INSTALL], [$INSTALL], [], [], [$1]) AC_PROG_LN_S - CS_EMIT_BUILD_PROPERTY([LN_S], [$LN_S])]) + CS_EMIT_BUILD_PROPERTY([LN_S], [$LN_S], [], [], [$1])]) #------------------------------------------------------------------------------ -# CS_CHECK_COMMON_TOOLS_DOC_TEXINFO -# Checks for tools to generate documentation from texinfo files. +# CS_CHECK_COMMON_TOOLS_DOC_TEXINFO([EMITTER]) +# Checks for tools to generate documentation from texinfo files. Results +# of the checks are recorded with CS_EMIT_BUILD_PROPERTY() via the +# optional EMITTER. If EMITTER is omitted, then +# CS_EMIT_BUILD_PROPERTY()'s default emitter is employed. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_COMMON_TOOLS_DOC_TEXINFO], [CS_CHECK_PROGS([TEXI2DVI], [texi2dvi]) - CS_EMIT_BUILD_PROPERTY([CMD.TEXI2DVI], [$TEXI2DVI]) + CS_EMIT_BUILD_PROPERTY([CMD.TEXI2DVI], [$TEXI2DVI], [], [], [$1]) CS_CHECK_PROGS([TEXI2PDF], [texi2pdf]) - CS_EMIT_BUILD_PROPERTY([CMD.TEXI2PDF], [$TEXI2PDF]) + CS_EMIT_BUILD_PROPERTY([CMD.TEXI2PDF], [$TEXI2PDF], [], [], [$1]) CS_CHECK_PROGS([DVIPS], [dvips]) - CS_EMIT_BUILD_PROPERTY([CMD.DVIPS], [$DVIPS]) + CS_EMIT_BUILD_PROPERTY([CMD.DVIPS], [$DVIPS], [], [], [$1]) CS_CHECK_PROGS([DVIPDF], [dvipdf]) - CS_EMIT_BUILD_PROPERTY([CMD.DVIPDF], [$DVIPDF]) + CS_EMIT_BUILD_PROPERTY([CMD.DVIPDF], [$DVIPDF], [], [], [$1]) CS_CHECK_PROGS([MAKEINFO], [makeinfo]) - CS_EMIT_BUILD_PROPERTY([CMD.MAKEINFO], [$MAKEINFO])]) + CS_EMIT_BUILD_PROPERTY([CMD.MAKEINFO], [$MAKEINFO], [], [], [$1])]) #------------------------------------------------------------------------------ -# CS_CHECK_COMMON_TOOLS_DOC_DOXYGEN -# Checks for tools to generate source documentation via doxygen. +# CS_CHECK_COMMON_TOOLS_DOC_DOXYGEN([EMITTER]) +# Checks for tools to generate source documentation via doxygen. Results +# of the checks are recorded with CS_EMIT_BUILD_PROPERTY() via the +# optional EMITTER. If EMITTER is omitted, then +# CS_EMIT_BUILD_PROPERTY()'s default emitter is employed. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_COMMON_TOOLS_DOC_DOXYGEN], [CS_CHECK_PROGS([DOXYGEN], [doxygen]) - CS_EMIT_BUILD_PROPERTY([CMD.DOXYGEN], [$DOXYGEN]) + CS_EMIT_BUILD_PROPERTY([CMD.DOXYGEN], [$DOXYGEN], [], [], [$1]) CS_CHECK_TOOLS([DOT], [dot]) - CS_EMIT_BUILD_PROPERTY([CMD.DOT], [$DOT])]) + CS_EMIT_BUILD_PROPERTY([CMD.DOT], [$DOT], [], [], [$1])]) #------------------------------------------------------------------------------ -# CS_CHECK_COMMON_TOOLS_ICONS -# Checks for tools required by the icon generation rules from icons.jam. +# CS_CHECK_COMMON_TOOLS_ICONS([EMITTER]) +# Checks for tools required by the icon generation rules from +# icons.jam. Results of the checks are recorded with +# CS_EMIT_BUILD_PROPERTY() via the optional EMITTER. If EMITTER is +# omitted, then CS_EMIT_BUILD_PROPERTY()'s default emitter is employed. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_COMMON_TOOLS_ICONS], [# rsvg: for svg to png conversion CS_CHECK_PROGS([RSVG], [rsvg]) - CS_EMIT_BUILD_PROPERTY([CMD.RSVG], [$RSVG]) + CS_EMIT_BUILD_PROPERTY([CMD.RSVG], [$RSVG], [], [], [$1]) # icotool: for creating Win32 ICO files CS_CHECK_PROGS([ICOTOOL], [icotool]) - CS_EMIT_BUILD_PROPERTY([CMD.ICOTOOL], [$ICOTOOL]) + CS_EMIT_BUILD_PROPERTY([CMD.ICOTOOL], [$ICOTOOL], [], [], [$1]) # convert: for various image manipulations from both the svg conversion and # ICO creation. CS_CHECK_PROGS([CONVERT], [convert]) - CS_EMIT_BUILD_PROPERTY([CMD.CONVERT], [$CONVERT])]) + CS_EMIT_BUILD_PROPERTY([CMD.CONVERT], [$CONVERT], [], [], [$1])]) #------------------------------------------------------------------------------ -# CS_CHECK_COMMON_LIBS -# Check for typical required libraries (libm, libmx, libdl, libnsl). +# CS_CHECK_COMMON_LIBS([EMITTER]) +# Check for typical required libraries (libm, libmx, libdl, +# libnsl). Results of the checks are recorded under build key +# "COMPILER.LFLAGS" via CS_EMIT_BUILD_PROPERTY() using the optional +# EMITTER. If EMITTER is omitted, then CS_EMIT_BUILD_PROPERTY()'s default +# emitter is employed. #------------------------------------------------------------------------------ AC_DEFUN([CS_CHECK_COMMON_LIBS], [AC_LANG_PUSH([C]) + AC_CHECK_LIB([m], [pow], [cs_cv_libm_libs=-lm], [cs_cv_libm_libs=]) AC_CHECK_LIB([m], [cosf], [cs_cv_libm_libs=-lm]) + AS_IF([test $ac_cv_lib_m_pow = yes || test $ac_cv_lib_m_cosf = yes], + [CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [-lm], [append],[],[$1])]) + AC_CHECK_LIB([mx], [cosf]) + AS_IF([test $ac_cv_lib_mx_cosf = yes], + [CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [-lmx], [append],[],[$1])]) + AC_CHECK_LIB([dl], [dlopen], [cs_cv_libdl_libs=-ldl], [cs_cv_libdl_libs=]) + AS_IF([test $ac_cv_lib_dl_dlopen = yes], + [CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [-ldl], [append],[],[$1])]) + AC_CHECK_LIB([nsl], [gethostbyname]) - AC_LANG_POP([C])]) + AS_IF([test $ac_cv_lib_nsl_gethostbyname = yes], + [CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [-lnsl], [append],[],[$1])]) + + AC_LANG_POP([C]) +]) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sun...@us...> - 2008-07-26 00:50:06
|
Revision: 30549 http://crystal.svn.sourceforge.net/crystal/?rev=30549&view=rev Author: sunshine Date: 2008-07-26 00:50:04 +0000 (Sat, 26 Jul 2008) Log Message: ----------- Eric Sunshine added 'libc' check to configure script. If found, it is added to "COMPILER.LFLAGS" build property. This is needed by OpenSolaris which does not link dynamic (plugin) modules against libc by default (unlike other platforms). Resolves remaining ticket #511 issue. Modified Paths: -------------- CS/trunk/configure.ac CS/trunk/mk/autoconf/checkcommon.m4 Modified: CS/trunk/configure.ac =================================================================== --- CS/trunk/configure.ac 2008-07-26 00:44:45 UTC (rev 30548) +++ CS/trunk/configure.ac 2008-07-26 00:50:04 UTC (rev 30549) @@ -147,7 +147,7 @@ #------------------------------------------------------------------------------ -# Check for typical required libraries (libm, libmx, libdl, libnsl). +# Check for typical required libraries (libc, libm, libmx, libdl, libnsl). #------------------------------------------------------------------------------ AC_LANG_PUSH([C++]) AC_CHECK_HEADERS([cmath], [CS_HEADER_PROPERTY([CS_HAVE_CMATH_H])]) Modified: CS/trunk/mk/autoconf/checkcommon.m4 =================================================================== --- CS/trunk/mk/autoconf/checkcommon.m4 2008-07-26 00:44:45 UTC (rev 30548) +++ CS/trunk/mk/autoconf/checkcommon.m4 2008-07-26 00:50:04 UTC (rev 30549) @@ -134,7 +134,7 @@ #------------------------------------------------------------------------------ # CS_CHECK_COMMON_LIBS([EMITTER]) -# Check for typical required libraries (libm, libmx, libdl, +# Check for typical required libraries (libc, libm, libmx, libdl, # libnsl). Results of the checks are recorded under build key # "COMPILER.LFLAGS" via CS_EMIT_BUILD_PROPERTY() using the optional # EMITTER. If EMITTER is omitted, then CS_EMIT_BUILD_PROPERTY()'s default @@ -143,6 +143,10 @@ AC_DEFUN([CS_CHECK_COMMON_LIBS], [AC_LANG_PUSH([C]) + AC_CHECK_LIB([c], [fopen]) + AS_IF([test $ac_cv_lib_c_fopen = yes], + [CS_EMIT_BUILD_PROPERTY([COMPILER.LFLAGS], [-lc], [append],[],[$1])]) + AC_CHECK_LIB([m], [pow], [cs_cv_libm_libs=-lm], [cs_cv_libm_libs=]) AC_CHECK_LIB([m], [cosf], [cs_cv_libm_libs=-lm]) AS_IF([test $ac_cv_lib_m_pow = yes || test $ac_cv_lib_m_cosf = yes], This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cry...@us...> - 2008-07-28 02:52:46
|
Revision: 30577 http://crystal.svn.sourceforge.net/crystal/?rev=30577&view=rev Author: crystal-manage Date: 2008-07-28 02:52:39 +0000 (Mon, 28 Jul 2008) Log Message: ----------- master header files: Automated master header file repair. Visual-C++ project files: Automated Visual-C++ project file repair. Texinfo files: Automated Texinfo @node and @menu repair. Swig Python files: Automated Swig Python file repair. Swig Perl5 files: Automated Swig Perl5 file repair. User's Manual: Automated Texinfo to HTML conversion. Modified Paths: -------------- CS/trunk/plugins/cscript/pyimesh/cs_imesh.cpp CS/trunk/scripts/perl5/cspace.pm CS/trunk/scripts/perl5/cswigpl5.inc CS/trunk/scripts/python/frozen/cspace/imesh.py Modified: CS/trunk/plugins/cscript/pyimesh/cs_imesh.cpp =================================================================== --- CS/trunk/plugins/cscript/pyimesh/cs_imesh.cpp 2008-07-27 22:21:33 UTC (rev 30576) +++ CS/trunk/plugins/cscript/pyimesh/cs_imesh.cpp 2008-07-28 02:52:39 UTC (rev 30577) @@ -39646,6 +39646,58 @@ } +SWIGINTERN PyObject *_wrap_iTerrainCellFeederProperties_SetHeightmapSmooth(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + iTerrainCellFeederProperties *arg1 = (iTerrainCellFeederProperties *) 0 ; + bool arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + bool val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if(!PyArg_UnpackTuple(args,(char *)"iTerrainCellFeederProperties_SetHeightmapSmooth",2,2,&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_iTerrainCellFeederProperties, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "iTerrainCellFeederProperties_SetHeightmapSmooth" "', argument " "1"" of type '" "iTerrainCellFeederProperties *""'"); + } + arg1 = reinterpret_cast< iTerrainCellFeederProperties * >(argp1); + ecode2 = SWIG_AsVal_bool(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "iTerrainCellFeederProperties_SetHeightmapSmooth" "', argument " "2"" of type '" "bool""'"); + } + arg2 = static_cast< bool >(val2); + (arg1)->SetHeightmapSmooth(arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_iTerrainCellFeederProperties_GetHeightmapSmooth(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + iTerrainCellFeederProperties *arg1 = (iTerrainCellFeederProperties *) 0 ; + bool result; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if(!PyArg_UnpackTuple(args,(char *)"iTerrainCellFeederProperties_GetHeightmapSmooth",1,1,&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_iTerrainCellFeederProperties, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "iTerrainCellFeederProperties_GetHeightmapSmooth" "', argument " "1"" of type '" "iTerrainCellFeederProperties const *""'"); + } + arg1 = reinterpret_cast< iTerrainCellFeederProperties * >(argp1); + result = (bool)((iTerrainCellFeederProperties const *)arg1)->GetHeightmapSmooth(); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + SWIGINTERN PyObject *_wrap_iTerrainCellFeederProperties_scfGetVersion(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; int result; @@ -51216,6 +51268,8 @@ { (char *)"iTerrainCellFeederProperties_GetAlphaMapCount", _wrap_iTerrainCellFeederProperties_GetAlphaMapCount, METH_VARARGS, NULL}, { (char *)"iTerrainCellFeederProperties_GetAlphaMapMaterial", _wrap_iTerrainCellFeederProperties_GetAlphaMapMaterial, METH_VARARGS, NULL}, { (char *)"iTerrainCellFeederProperties_GetAlphaMapSource", _wrap_iTerrainCellFeederProperties_GetAlphaMapSource, METH_VARARGS, NULL}, + { (char *)"iTerrainCellFeederProperties_SetHeightmapSmooth", _wrap_iTerrainCellFeederProperties_SetHeightmapSmooth, METH_VARARGS, NULL}, + { (char *)"iTerrainCellFeederProperties_GetHeightmapSmooth", _wrap_iTerrainCellFeederProperties_GetHeightmapSmooth, METH_VARARGS, NULL}, { (char *)"iTerrainCellFeederProperties_scfGetVersion", _wrap_iTerrainCellFeederProperties_scfGetVersion, METH_VARARGS, NULL}, { (char *)"delete_iTerrainCellFeederProperties", _wrap_delete_iTerrainCellFeederProperties, METH_VARARGS, NULL}, { (char *)"iTerrainCellFeederProperties_swigregister", iTerrainCellFeederProperties_swigregister, METH_VARARGS, NULL}, Modified: CS/trunk/scripts/perl5/cspace.pm =================================================================== --- CS/trunk/scripts/perl5/cspace.pm 2008-07-27 22:21:33 UTC (rev 30576) +++ CS/trunk/scripts/perl5/cspace.pm 2008-07-28 02:52:39 UTC (rev 30577) @@ -17396,6 +17396,8 @@ *GetAlphaMapCount = *cspacec::iTerrainCellFeederProperties_GetAlphaMapCount; *GetAlphaMapMaterial = *cspacec::iTerrainCellFeederProperties_GetAlphaMapMaterial; *GetAlphaMapSource = *cspacec::iTerrainCellFeederProperties_GetAlphaMapSource; +*SetHeightmapSmooth = *cspacec::iTerrainCellFeederProperties_SetHeightmapSmooth; +*GetHeightmapSmooth = *cspacec::iTerrainCellFeederProperties_GetHeightmapSmooth; *scfGetVersion = *cspacec::iTerrainCellFeederProperties_scfGetVersion; sub DESTROY { return unless $_[0]->isa('HASH'); Modified: CS/trunk/scripts/perl5/cswigpl5.inc =================================================================== --- CS/trunk/scripts/perl5/cswigpl5.inc 2008-07-27 22:21:33 UTC (rev 30576) +++ CS/trunk/scripts/perl5/cswigpl5.inc 2008-07-28 02:52:39 UTC (rev 30577) @@ -275628,6 +275628,71 @@ } +XS(_wrap_iTerrainCellFeederProperties_SetHeightmapSmooth) { + { + iTerrainCellFeederProperties *arg1 = (iTerrainCellFeederProperties *) 0 ; + bool arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + bool val2 ; + int ecode2 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 2) || (items > 2)) { + SWIG_croak("Usage: iTerrainCellFeederProperties_SetHeightmapSmooth(self,doSmooth);"); + } + res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iTerrainCellFeederProperties, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "iTerrainCellFeederProperties_SetHeightmapSmooth" "', argument " "1"" of type '" "iTerrainCellFeederProperties *""'"); + } + arg1 = reinterpret_cast< iTerrainCellFeederProperties * >(argp1); + ecode2 = SWIG_AsVal_bool SWIG_PERL_CALL_ARGS_2(ST(1), &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "iTerrainCellFeederProperties_SetHeightmapSmooth" "', argument " "2"" of type '" "bool""'"); + } + arg2 = static_cast< bool >(val2); + (arg1)->SetHeightmapSmooth(arg2); + + + + XSRETURN(argvi); + fail: + + + SWIG_croak_null(); + } +} + + +XS(_wrap_iTerrainCellFeederProperties_GetHeightmapSmooth) { + { + iTerrainCellFeederProperties *arg1 = (iTerrainCellFeederProperties *) 0 ; + bool result; + void *argp1 = 0 ; + int res1 = 0 ; + int argvi = 0; + dXSARGS; + + if ((items < 1) || (items > 1)) { + SWIG_croak("Usage: iTerrainCellFeederProperties_GetHeightmapSmooth(self);"); + } + res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_iTerrainCellFeederProperties, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "iTerrainCellFeederProperties_GetHeightmapSmooth" "', argument " "1"" of type '" "iTerrainCellFeederProperties const *""'"); + } + arg1 = reinterpret_cast< iTerrainCellFeederProperties * >(argp1); + result = (bool)((iTerrainCellFeederProperties const *)arg1)->GetHeightmapSmooth(); + ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ; + + XSRETURN(argvi); + fail: + + SWIG_croak_null(); + } +} + + XS(_wrap_iTerrainCellFeederProperties_scfGetVersion) { { int result; @@ -358983,6 +359048,8 @@ {"cspacec::iTerrainCellFeederProperties_GetAlphaMapCount", _wrap_iTerrainCellFeederProperties_GetAlphaMapCount}, {"cspacec::iTerrainCellFeederProperties_GetAlphaMapMaterial", _wrap_iTerrainCellFeederProperties_GetAlphaMapMaterial}, {"cspacec::iTerrainCellFeederProperties_GetAlphaMapSource", _wrap_iTerrainCellFeederProperties_GetAlphaMapSource}, +{"cspacec::iTerrainCellFeederProperties_SetHeightmapSmooth", _wrap_iTerrainCellFeederProperties_SetHeightmapSmooth}, +{"cspacec::iTerrainCellFeederProperties_GetHeightmapSmooth", _wrap_iTerrainCellFeederProperties_GetHeightmapSmooth}, {"cspacec::iTerrainCellFeederProperties_scfGetVersion", _wrap_iTerrainCellFeederProperties_scfGetVersion}, {"cspacec::delete_iTerrainCellFeederProperties", _wrap_delete_iTerrainCellFeederProperties}, {"cspacec::iTerrainDataFeeder_CreateProperties", _wrap_iTerrainDataFeeder_CreateProperties}, Modified: CS/trunk/scripts/python/frozen/cspace/imesh.py =================================================================== --- CS/trunk/scripts/python/frozen/cspace/imesh.py 2008-07-27 22:21:33 UTC (rev 30576) +++ CS/trunk/scripts/python/frozen/cspace/imesh.py 2008-07-28 02:52:39 UTC (rev 30577) @@ -1913,6 +1913,8 @@ def GetAlphaMapCount(*args): return _imesh.iTerrainCellFeederProperties_GetAlphaMapCount(*args) def GetAlphaMapMaterial(*args): return _imesh.iTerrainCellFeederProperties_GetAlphaMapMaterial(*args) def GetAlphaMapSource(*args): return _imesh.iTerrainCellFeederProperties_GetAlphaMapSource(*args) + def SetHeightmapSmooth(*args): return _imesh.iTerrainCellFeederProperties_SetHeightmapSmooth(*args) + def GetHeightmapSmooth(*args): return _imesh.iTerrainCellFeederProperties_GetHeightmapSmooth(*args) scfGetVersion = staticmethod(_imesh.iTerrainCellFeederProperties_scfGetVersion) __swig_destroy__ = _imesh.delete_iTerrainCellFeederProperties __del__ = lambda self : None; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <re...@us...> - 2008-07-28 12:52:27
|
Revision: 30581 http://crystal.svn.sourceforge.net/crystal/?rev=30581&view=rev Author: res2002 Date: 2008-07-28 12:52:22 +0000 (Mon, 28 Jul 2008) Log Message: ----------- Add some matrix ops for shader var expressions Modified Paths: -------------- CS/trunk/include/csgfx/shaderexp.h CS/trunk/libs/csgfx/shaderexp.cpp Modified: CS/trunk/include/csgfx/shaderexp.h =================================================================== --- CS/trunk/include/csgfx/shaderexp.h 2008-07-28 12:47:09 UTC (rev 30580) +++ CS/trunk/include/csgfx/shaderexp.h 2008-07-28 12:52:22 UTC (rev 30581) @@ -70,6 +70,7 @@ }; csVector4 vec4; + CS::Math::Matrix4 matrix; }; struct oper @@ -186,6 +187,11 @@ /// Frame function bool eval_frame(oper_arg & output) const; + bool eval_matrix_column (const oper_arg & arg1, const oper_arg & arg2, + oper_arg & output) const; + bool eval_matrix_row (const oper_arg & arg1, const oper_arg & arg2, + oper_arg & output) const; + /// Internal set vector element 1 and 2 bool eval_selt12(const oper_arg & arg1, const oper_arg & arg2, oper_arg & output) const; Modified: CS/trunk/libs/csgfx/shaderexp.cpp =================================================================== --- CS/trunk/libs/csgfx/shaderexp.cpp 2008-07-28 12:47:09 UTC (rev 30580) +++ CS/trunk/libs/csgfx/shaderexp.cpp 2008-07-28 12:52:22 UTC (rev 30581) @@ -84,7 +84,10 @@ OP_FUNC_TIME, OP_FUNC_FRAME, - + + OP_FUNC_MATRIX_COLUMN, + OP_FUNC_MATRIX_ROW, + // Pseudo-ops, special case weird stuff OP_PS_MAKE_VECTOR, @@ -129,6 +132,8 @@ "MAX", "TIME", "FRAME", + "MATRIXCOLUMN", + "MATRIXROW", "!MAKEVECTOR", "!LIMIT", "!ATOM", @@ -147,6 +152,7 @@ TYPE_VECTOR3, TYPE_VECTOR4, TYPE_VARIABLE, // a shader variable + TYPE_MATRIX, TYPE_LIMIT, @@ -167,6 +173,7 @@ "vec3", "vec4", "var", + "matrix", "!limit", "!oper", "!cons", @@ -232,6 +239,9 @@ { 0, 0, false }, // OP_FUNC_TIME { 0, 0, false }, // OP_FUNC_FRAME + + { 2, 2, false }, // OP_FUNC_MATRIX_COLUMN + { 2, 2, false }, // OP_FUNC_MATRIX_ROW { 2, 4, false }, // OP_PS_MAKE_VECTOR @@ -768,6 +778,12 @@ out.type = TYPE_VECTOR4; var->GetValue(out.vec4); break; + + case csShaderVariable::TRANSFORM: + case csShaderVariable::MATRIX: + out.type = TYPE_MATRIX; + var->GetValue(out.matrix); + break; default: EvalError ("Unknown type %d in shader variable, not usable in an expression.", @@ -873,6 +889,8 @@ case OP_FUNC_POW: return eval_pow(arg1, arg2, output); case OP_FUNC_MIN: return eval_min(arg1, arg2, output); case OP_FUNC_MAX: return eval_max(arg1, arg2, output); + case OP_FUNC_MATRIX_COLUMN: return eval_matrix_column(arg1, arg2, output); + case OP_FUNC_MATRIX_ROW: return eval_matrix_row(arg1, arg2, output); case OP_INT_SELT12: return eval_selt12(arg1, arg2, output); case OP_INT_SELT34: return eval_selt34(arg1, arg2, output); @@ -1404,6 +1422,72 @@ return true; } +bool csShaderExpression::eval_matrix_column(const oper_arg & arg1, + const oper_arg & arg2, + oper_arg & output) const +{ + if (arg1.type != TYPE_MATRIX) + { + EvalError ("Argument 1 to matrix-column is not a matrix."); + + return false; + } + + if (arg2.type != TYPE_NUMBER) + { + EvalError ("Argument 2 to matrix-column is not a number."); + + return false; + } + + int colIndex = int (arg2.num); + if ((colIndex < 0) || (colIndex > 3)) + { + EvalError ("Argument 2 to matrix-column is not between 0 and 3 inclusive."); + + return false; + } + + output.type = TYPE_VECTOR4; + output.vec4 = arg1.matrix.Col (colIndex); + + return true; + +} + +bool csShaderExpression::eval_matrix_row (const oper_arg & arg1, + const oper_arg & arg2, + oper_arg & output) const +{ + if (arg1.type != TYPE_MATRIX) + { + EvalError ("Argument 1 to matrix-row is not a matrix."); + + return false; + } + + if (arg2.type != TYPE_NUMBER) + { + EvalError ("Argument 2 to matrix-row is not a number."); + + return false; + } + + int rowIndex = int (arg2.num); + if ((rowIndex < 0) || (rowIndex > 3)) + { + EvalError ("Argument 2 to matrix-row is not between 0 and 3 inclusive."); + + return false; + } + + output.type = TYPE_VECTOR4; + output.vec4 = arg1.matrix.Row (rowIndex); + + return true; + +} + bool csShaderExpression::eval_selt12(const oper_arg & arg1, const oper_arg & arg2, oper_arg & output) const { if (arg1.type != TYPE_NUMBER || arg2.type != TYPE_NUMBER) @@ -2312,6 +2396,8 @@ {"floor", 5, OP_FUNC_FLOOR}, {"frame", 5, OP_FUNC_FRAME}, {"make-vector", 11, OP_PS_MAKE_VECTOR}, + {"matrix-column", 13, OP_FUNC_MATRIX_COLUMN}, + {"matrix-row", 10, OP_FUNC_MATRIX_ROW}, {"max", 3, OP_FUNC_MAX}, {"min", 3, OP_FUNC_MIN}, {"norm", 4, OP_FUNC_NORMAL}, @@ -2361,6 +2447,7 @@ } static const TokenTabEntry xmlTypeTokens[] = { + {"matrix", 6, TYPE_MATRIX}, {"num", 3, TYPE_NUMBER}, {"var", 3, TYPE_VARIABLE}, {"vec2", 4, TYPE_VECTOR2}, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-07-28 14:52:12
|
Revision: 30586 http://crystal.svn.sourceforge.net/crystal/?rev=30586&view=rev Author: mgist Date: 2008-07-28 14:52:08 +0000 (Mon, 28 Jul 2008) Log Message: ----------- - Added collada2cs app. - Made Collada converter see .DAE as a Collada file extension. - Changed the Collada converter to support different outputFileTypes given multiple input files. - Fixed a bug in the Collada converter causing the output document to not be initialised unless warnings were turned on. Modified Paths: -------------- CS/trunk/apps/import/Jamfile CS/trunk/plugins/utilities/colladaconvertor/csColladaConvertor.cpp CS/trunk/plugins/utilities/colladaconvertor/csColladaConvertor.h Added Paths: ----------- CS/trunk/apps/import/collada2cs/ CS/trunk/apps/import/collada2cs/Jamfile CS/trunk/apps/import/collada2cs/collada2cs.cpp Modified: CS/trunk/apps/import/Jamfile =================================================================== --- CS/trunk/apps/import/Jamfile 2008-07-28 14:21:58 UTC (rev 30585) +++ CS/trunk/apps/import/Jamfile 2008-07-28 14:52:08 UTC (rev 30586) @@ -1,6 +1,7 @@ SubDir TOP apps import ; SubInclude TOP apps import 3ds2lev ; +SubInclude TOP apps import collada2cs ; SubInclude TOP apps import maya2spr ; SubInclude TOP apps import md32spr ; SubInclude TOP apps import md22spr ; Added: CS/trunk/apps/import/collada2cs/Jamfile =================================================================== --- CS/trunk/apps/import/collada2cs/Jamfile (rev 0) +++ CS/trunk/apps/import/collada2cs/Jamfile 2008-07-28 14:52:08 UTC (rev 30586) @@ -0,0 +1,9 @@ +SubDir TOP apps import collada2cs ; + +Description collada2cs : "Collada to CS importer" ; + +Application collada2cs + : [ Wildcard *.cpp *.h ] + : console +; +LinkWith collada2cs : crystalspace ; Property changes on: CS/trunk/apps/import/collada2cs/Jamfile ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Added: CS/trunk/apps/import/collada2cs/collada2cs.cpp =================================================================== --- CS/trunk/apps/import/collada2cs/collada2cs.cpp (rev 0) +++ CS/trunk/apps/import/collada2cs/collada2cs.cpp 2008-07-28 14:52:08 UTC (rev 30586) @@ -0,0 +1,96 @@ +/* + Copyright (C) 2008 by Mike Gist + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this application; if not, write to the Free + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include <cssysdef.h> + +#include "cstool/initapp.h" + +#include "ivaria/collada.h" + +#define CS_REQUEST_COLLADA CS_REQUEST_PLUGIN("crystalspace.utilities.colladaconvertor", \ + iColladaConvertor) +#define COLLADA_VERSION "1.4" + +CS_IMPLEMENT_APPLICATION + +int main(int argc, char** argv) +{ + iObjectRegistry* object_reg = csInitializer::CreateEnvironment (argc, argv); + if(!object_reg) + { + printf("Object Reg failed to Init!\n"); + return 1; + } + + csInitializer::RequestPlugins(object_reg, CS_REQUEST_COLLADA, CS_REQUEST_END); + + csRef<iColladaConvertor> collada = csQueryRegistry<iColladaConvertor>(object_reg); + if(!collada) + { + printf("Collada plugin failed to load!\n"); + return 1; + } + +#ifdef CS_DEBUG + collada->SetWarnings(true); +#endif + + // Default to library. + collada->SetOutputFiletype(CS_LIBRARY_FILE); + + csArray<csString> args; + for(int i=1; i<argc; i++) + { + args.Push(argv[i]); + } + + printf("Collada %s to Crystal Space Convertor\n\n", COLLADA_VERSION); + + for(size_t i=0; i<args.GetSize(); i++) + { + if(args[i].Compare("-library")) + { + collada->SetOutputFiletype(CS_LIBRARY_FILE); + } + else if(args[i].Compare("-map")) + { + collada->SetOutputFiletype(CS_MAP_FILE); + } + else + { + printf("File %u of %u:\n", i+1, args.GetSize()); + csString fileIn = "/this/"; + fileIn.Append(args[i]); + csString fileOut = fileIn; + + fileOut.Truncate(fileOut.FindLast('.')); + fileOut.Append(".xml"); + + printf("- Loading file: %s\n", args[i].GetData()); + collada->Load(fileIn); + + printf("- Converting\n"); + collada->Convert(); + + printf("- Writing file: %s\n\n", fileOut.GetData()); + collada->Write(fileOut); + } + } + + return 0; +} Property changes on: CS/trunk/apps/import/collada2cs/collada2cs.cpp ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Modified: CS/trunk/plugins/utilities/colladaconvertor/csColladaConvertor.cpp =================================================================== --- CS/trunk/plugins/utilities/colladaconvertor/csColladaConvertor.cpp 2008-07-28 14:21:58 UTC (rev 30585) +++ CS/trunk/plugins/utilities/colladaconvertor/csColladaConvertor.cpp 2008-07-28 14:52:08 UTC (rev 30586) @@ -71,17 +71,16 @@ { std::string filePath = str; size_t index = filePath.find(".", 0); + if (index == std::string::npos) { Report(CS_REPORTER_SEVERITY_WARNING, "Warning: No file extension detected on filename. File is possibly not a COLLADA file."); } - else { std::string ext = filePath.substr(index); - std::string expectedExt = ".dae"; - if (!(ext == expectedExt)) + if (ext != ".dae" && ext != ".DAE") { std::string warningMsg = "Warning: File extension \'"; warningMsg.append(ext); @@ -105,7 +104,7 @@ warningsOn(false), obj_reg(0), lastEffectId(-1), - csReady(false), + csOutputReady(false), outputFileType(CS_NO_FILE), colladaReady(false) { @@ -220,6 +219,7 @@ } colladaElement = rootNode; + csOutputReady = false; colladaReady = true; return 0; @@ -239,6 +239,7 @@ } colladaElement = rootNode; + csOutputReady = false; colladaReady = true; return 0; @@ -249,12 +250,12 @@ const char* csColladaConvertor::Write(const char* filepath) { // sanity check - if (!csReady) + if (!csOutputReady) { if (warningsOn) { Report(CS_REPORTER_SEVERITY_WARNING, - "Warning: Crystal Space document not ready for writing."); + "Warning: Crystal Space document not ready for writing."); } return "Crystal Space document not ready for writing"; @@ -396,7 +397,7 @@ csTopNode = csFile->GetRoot()->GetNode("library"); } - csReady = true; + csOutputReady = true; return true; } @@ -412,17 +413,19 @@ const char* csColladaConvertor::Convert() { - if (!csReady) + if (!csOutputReady) { - if (warningsOn) + if (!InitializeCrystalSpaceDocument()) { - Report(CS_REPORTER_SEVERITY_NOTIFY, "Crystal Space document not yet initialized. Attempting to initialize..."); - if (!InitializeCrystalSpaceDocument()) + if (warningsOn) { Report(CS_REPORTER_SEVERITY_ERROR, "Error: Unable to initialize output document."); - return "Unable to initialize output document"; } - else + return "Unable to initialize output document"; + } + else + { + if (warningsOn) { Report(CS_REPORTER_SEVERITY_NOTIFY, "Success."); } Modified: CS/trunk/plugins/utilities/colladaconvertor/csColladaConvertor.h =================================================================== --- CS/trunk/plugins/utilities/colladaconvertor/csColladaConvertor.h 2008-07-28 14:21:58 UTC (rev 30585) +++ CS/trunk/plugins/utilities/colladaconvertor/csColladaConvertor.h 2008-07-28 14:52:08 UTC (rev 30586) @@ -86,7 +86,7 @@ csRef<iDocumentNode> csTopNode; /// Whether or not the Crystal Space file has been loaded and is ready - bool csReady; + bool csOutputReady; /// The output file type. Initially, this is set to CS_FILE_NONE. csColladaFileType outputFileType; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-07-28 16:16:19
|
Revision: 30588 http://crystal.svn.sourceforge.net/crystal/?rev=30588&view=rev Author: mgist Date: 2008-07-28 16:16:16 +0000 (Mon, 28 Jul 2008) Log Message: ----------- - Some enhancements to collada2cs. - Removed colladatest. Modified Paths: -------------- CS/trunk/apps/import/collada2cs/collada2cs.cpp CS/trunk/apps/tests/Jamfile CS/trunk/plugins/utilities/colladaconvertor/csColladaConvertor.cpp Removed Paths: ------------- CS/trunk/apps/tests/colladatest/ Modified: CS/trunk/apps/import/collada2cs/collada2cs.cpp =================================================================== --- CS/trunk/apps/import/collada2cs/collada2cs.cpp 2008-07-28 15:00:29 UTC (rev 30587) +++ CS/trunk/apps/import/collada2cs/collada2cs.cpp 2008-07-28 16:16:16 UTC (rev 30588) @@ -19,11 +19,8 @@ #include <cssysdef.h> #include "cstool/initapp.h" - #include "ivaria/collada.h" -#define CS_REQUEST_COLLADA CS_REQUEST_PLUGIN("crystalspace.utilities.colladaconvertor", \ - iColladaConvertor) #define COLLADA_VERSION "1.4" CS_IMPLEMENT_APPLICATION @@ -37,9 +34,8 @@ return 1; } - csInitializer::RequestPlugins(object_reg, CS_REQUEST_COLLADA, CS_REQUEST_END); - - csRef<iColladaConvertor> collada = csQueryRegistry<iColladaConvertor>(object_reg); + csRef<iColladaConvertor> collada = csQueryRegistryOrLoad<iColladaConvertor>(object_reg, + "crystalspace.utilities.colladaconvertor"); if(!collada) { printf("Collada plugin failed to load!\n"); @@ -61,34 +57,44 @@ printf("Collada %s to Crystal Space Convertor\n\n", COLLADA_VERSION); - for(size_t i=0; i<args.GetSize(); i++) + if(args[0].Compare("--help") || args[0].Compare("-help")) { - if(args[i].Compare("-library")) + printf("Options:\n"); + printf("-library Export the following files as library files.\n"); + printf("-map Export the following files as world files.\n\n"); + printf("Usage: collada2cs(.exe) -map file1.dae file2.dae -library file3.dae file4.dae\n"); + } + else + { + for(size_t i=0; i<args.GetSize(); i++) { - collada->SetOutputFiletype(CS_LIBRARY_FILE); - } - else if(args[i].Compare("-map")) - { - collada->SetOutputFiletype(CS_MAP_FILE); - } - else - { - printf("File %u of %u:\n", i+1, args.GetSize()); - csString fileIn = "/this/"; - fileIn.Append(args[i]); - csString fileOut = fileIn; + if(args[i].Compare("-library")) + { + collada->SetOutputFiletype(CS_LIBRARY_FILE); + } + else if(args[i].Compare("-map")) + { + collada->SetOutputFiletype(CS_MAP_FILE); + } + else + { + printf("File %u of %u:\n", i+1, args.GetSize()); + csString fileIn = "/this/"; + fileIn.Append(args[i]); + csString fileOut = fileIn; - fileOut.Truncate(fileOut.FindLast('.')); - fileOut.Append(".xml"); + fileOut.Truncate(fileOut.FindLast('.')); + fileOut.Append(".xml"); - printf("- Loading file: %s\n", args[i].GetData()); - collada->Load(fileIn); + printf("- Loading file: %s\n", args[i].GetData()); + collada->Load(fileIn); - printf("- Converting\n"); - collada->Convert(); + printf("- Converting\n"); + collada->Convert(); - printf("- Writing file: %s\n\n", fileOut.GetData()); - collada->Write(fileOut); + printf("- Writing file: %s\n\n", fileOut.GetData()); + collada->Write(fileOut); + } } } Modified: CS/trunk/apps/tests/Jamfile =================================================================== --- CS/trunk/apps/tests/Jamfile 2008-07-28 15:00:29 UTC (rev 30587) +++ CS/trunk/apps/tests/Jamfile 2008-07-28 16:16:16 UTC (rev 30588) @@ -2,7 +2,6 @@ SubInclude TOP apps tests asndtest ; SubInclude TOP apps tests ceguitest ; -SubInclude TOP apps tests colladatest ; SubInclude TOP apps tests consoletest ; SubInclude TOP apps tests csbench ; SubInclude TOP apps tests eventtest ; Modified: CS/trunk/plugins/utilities/colladaconvertor/csColladaConvertor.cpp =================================================================== --- CS/trunk/plugins/utilities/colladaconvertor/csColladaConvertor.cpp 2008-07-28 15:00:29 UTC (rev 30587) +++ CS/trunk/plugins/utilities/colladaconvertor/csColladaConvertor.cpp 2008-07-28 16:16:16 UTC (rev 30588) @@ -126,15 +126,14 @@ { obj_reg = reg; - // create our own document system, since we will be reading and // writing to the XML files docSys = new csTinyDocumentSystem(); // get a pointer to the virtual file system - fileSys = csQueryRegistry<iVFS>(obj_reg); + fileSys = csQueryRegistryOrLoad<iVFS>(obj_reg, "crystalspace.kernel.vfs"); - return true; + return fileSys.IsValid(); } // =============== File Loading =============== @@ -143,13 +142,6 @@ { csRef<iFile> filePtr; - if (!fileSys.IsValid()) - { - Report(CS_REPORTER_SEVERITY_WARNING, - "Unable to access file system. File not loaded."); - return "Unable to access file system"; - } - // only do a consistency check for collada filename if warnings are on if (warningsOn) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cry...@us...> - 2008-07-28 18:39:10
|
Revision: 30591 http://crystal.svn.sourceforge.net/crystal/?rev=30591&view=rev Author: crystal-manage Date: 2008-07-28 18:38:57 +0000 (Mon, 28 Jul 2008) Log Message: ----------- master header files: Automated master header file repair. Visual-C++ project files: Automated Visual-C++ project file repair. Texinfo files: Automated Texinfo @node and @menu repair. Swig Python files: Automated Swig Python file repair. Swig Perl5 files: Automated Swig Perl5 file repair. User's Manual: Automated Texinfo to HTML conversion. Modified Paths: -------------- CS/trunk/docs/html/manual/Binary-XML.html CS/trunk/docs/html/manual/Feature-List.html CS/trunk/docs/html/manual/HOWTO-Level-Loading.html CS/trunk/docs/html/manual/Map-Loader.html CS/trunk/docs/html/manual/Model-Loading.html CS/trunk/docs/html/manual/World-Components.html CS/trunk/docs/html/manual/XML-Syntax-Services.html CS/trunk/docs/html/manual/XMLServices-Intro.html CS/trunk/docs/html/manual/XMLServices-Mixmode.html CS/trunk/docs/html/manual/cs_Index.html CS/trunk/docs/html/manual/cs_ovr.html CS/trunk/docs/html/manual/cs_toc.html CS/trunk/docs/texinfo/usingcs/loader/binload.txi CS/trunk/docs/texinfo/usingcs/loader/chapter.txi CS/trunk/docs/texinfo/usingcs/loader/levload.txi CS/trunk/docs/texinfo/usingcs/loader/services.txi CS/trunk/mk/msvc7/wkspytypical.sln CS/trunk/mk/msvc7/wkstypical.sln CS/trunk/mk/msvc7/wkswxtypical.sln CS/trunk/mk/msvc71/wkspytypical.sln CS/trunk/mk/msvc71/wkstypical.sln CS/trunk/mk/msvc71/wkswxtypical.sln CS/trunk/mk/msvc8/wkspytypical.sln CS/trunk/mk/msvc8/wkstypical.sln CS/trunk/mk/msvc8/wkswxtypical.sln CS/trunk/mk/msvc9/wkspytypical.sln CS/trunk/mk/msvc9/wkstypical.sln CS/trunk/mk/msvc9/wkswxtypical.sln CS/trunk/plugins/cscript/pycsgfx/cs_csgfx.cpp CS/trunk/scripts/perl5/cswigpl5.inc Added Paths: ----------- CS/trunk/docs/html/manual/cs_315.html CS/trunk/docs/html/manual/cs_316.html CS/trunk/docs/html/manual/cs_317.html CS/trunk/docs/html/manual/cs_318.html CS/trunk/docs/html/manual/cs_319.html CS/trunk/mk/msvc/appcollada2cs.manifest CS/trunk/mk/msvc/appcollada2cs.rc CS/trunk/mk/msvc7/appcollada2cs.vcproj CS/trunk/mk/msvc71/appcollada2cs.vcproj CS/trunk/mk/msvc8/appcollada2cs.vcproj CS/trunk/mk/msvc9/appcollada2cs.vcproj Removed Paths: ------------- CS/trunk/docs/html/manual/Map-File-Grammar.html CS/trunk/docs/html/manual/Map-File-Hints.html CS/trunk/docs/html/manual/Map-File-Syntax.html CS/trunk/docs/html/manual/Old-Map-File-Format.html CS/trunk/docs/html/manual/XML-Action-Section.html CS/trunk/docs/html/manual/XML-File-Format.html CS/trunk/docs/html/manual/XML-Init-Section.html CS/trunk/docs/html/manual/XML-World-Definition-Section.html CS/trunk/docs/html/manual/XML-World-Element-Section.html CS/trunk/docs/html/manual/cs_324.html CS/trunk/docs/html/manual/cs_325.html CS/trunk/docs/html/manual/cs_326.html CS/trunk/docs/html/manual/cs_327.html CS/trunk/docs/html/manual/cs_328.html CS/trunk/mk/msvc/appcolladatest.manifest CS/trunk/mk/msvc/appcolladatest.rc CS/trunk/mk/msvc7/appcolladatest.vcproj CS/trunk/mk/msvc71/appcolladatest.vcproj CS/trunk/mk/msvc8/appcolladatest.vcproj CS/trunk/mk/msvc9/appcolladatest.vcproj Modified: CS/trunk/docs/html/manual/Binary-XML.html =================================================================== --- CS/trunk/docs/html/manual/Binary-XML.html 2008-07-28 18:13:53 UTC (rev 30590) +++ CS/trunk/docs/html/manual/Binary-XML.html 2008-07-28 18:38:57 UTC (rev 30591) @@ -11,10 +11,10 @@ --> <head> -<title>Crystal Space 1.9.0: 4.16.5 Binary XML</title> +<title>Crystal Space 1.9.0: 4.16.3 Binary XML</title> -<meta name="description" content="Crystal Space 1.9.0: 4.16.5 Binary XML"> -<meta name="keywords" content="Crystal Space 1.9.0: 4.16.5 Binary XML"> +<meta name="description" content="Crystal Space 1.9.0: 4.16.3 Binary XML"> +<meta name="keywords" content="Crystal Space 1.9.0: 4.16.3 Binary XML"> <meta name="resource-type" content="document"> <meta name="distribution" content="global"> <meta name="Generator" content="texi2html 1.76"> @@ -43,7 +43,7 @@ <a name="Binary-XML"></a> <a name="0"></a> <table cellpadding="1" cellspacing="1" border="0"> -<tr><td valign="middle" align="left">[<a href="Map-File-Hints.html#0" title="Previous section in reading order"> < </a>]</td> +<tr><td valign="middle" align="left">[<a href="XMLServices-Mixmode.html#0" title="Previous section in reading order"> < </a>]</td> <td valign="middle" align="left">[<a href="Model-Loading.html#0" title="Next section in reading order"> > </a>]</td> <td valign="middle" align="left"> </td> <td valign="middle" align="left">[<a href="Using-Crystal-Space.html#0" title="Beginning of this chapter or previous chapter"> << </a>]</td> @@ -59,7 +59,7 @@ <td valign="middle" align="left">[<a href="cs_abt.html#SEC_About" title="About (help)"> ? </a>]</td> </tr></table> <hr size="1"> -<h3 class="subsection"> 4.16.5 Binary <small>XML</small> </h3> +<h3 class="subsection"> 4.16.3 Binary <small>XML</small> </h3> <p>Crystal Space supports various <small>XML</small> loading plugins. One of those plugins is the binary <small>XML</small> plugin which encodes <small>XML</small> in a binary format that @@ -114,7 +114,7 @@ <hr size="1"> <table cellpadding="1" cellspacing="1" border="0"> -<tr><td valign="middle" align="left">[<a href="Map-File-Hints.html#0" title="Previous section in reading order"> < </a>]</td> +<tr><td valign="middle" align="left">[<a href="XMLServices-Mixmode.html#0" title="Previous section in reading order"> < </a>]</td> <td valign="middle" align="left">[<a href="Model-Loading.html#0" title="Next section in reading order"> > </a>]</td> <td valign="middle" align="left"> </td> <td valign="middle" align="left">[<a href="Using-Crystal-Space.html#0" title="Beginning of this chapter or previous chapter"> << </a>]</td> Modified: CS/trunk/docs/html/manual/Feature-List.html =================================================================== --- CS/trunk/docs/html/manual/Feature-List.html 2008-07-28 18:13:53 UTC (rev 30590) +++ CS/trunk/docs/html/manual/Feature-List.html 2008-07-28 18:38:57 UTC (rev 30591) @@ -223,8 +223,8 @@ Unicode text output. </li><li> -<small>XML</small>-based map format. See section <a href="XML-File-Format.html#0">Format of Map File (<small>XML</small>)</a>, -See section <a href="Tutorial-Simple-Map.html#0">Simple Tutorial 3: Map Loading, Collision Detection</a>. See section <a href="Old-Map-File-Format.html#0">Old Format of Map File</a>. +<small>XML</small>-based map format. @xref{XML File Format}, +See section <a href="Tutorial-Simple-Map.html#0">Simple Tutorial 3: Map Loading, Collision Detection</a>. @xref{Old Map File Format}. </li><li> Scripting bindings (Python, Perl, Java). See section <a href="Scripting-Languages.html#0">Scripting Languages</a>. Modified: CS/trunk/docs/html/manual/HOWTO-Level-Loading.html =================================================================== --- CS/trunk/docs/html/manual/HOWTO-Level-Loading.html 2008-07-28 18:13:53 UTC (rev 30590) +++ CS/trunk/docs/html/manual/HOWTO-Level-Loading.html 2008-07-28 18:38:57 UTC (rev 30591) @@ -44,7 +44,7 @@ <a name="0"></a> <table cellpadding="1" cellspacing="1" border="0"> <tr><td valign="middle" align="left">[<a href="Map-Loader.html#0" title="Previous section in reading order"> < </a>]</td> -<td valign="middle" align="left">[<a href="XML-File-Format.html#0" title="Next section in reading order"> > </a>]</td> +<td valign="middle" align="left">[<a href="XML-Syntax-Services.html#0" title="Next section in reading order"> > </a>]</td> <td valign="middle" align="left"> </td> <td valign="middle" align="left">[<a href="Using-Crystal-Space.html#0" title="Beginning of this chapter or previous chapter"> << </a>]</td> <td valign="middle" align="left">[<a href="Map-Loader.html#0" title="Up section"> Up </a>]</td> Deleted: CS/trunk/docs/html/manual/Map-File-Grammar.html =================================================================== --- CS/trunk/docs/html/manual/Map-File-Grammar.html 2008-07-28 18:13:53 UTC (rev 30590) +++ CS/trunk/docs/html/manual/Map-File-Grammar.html 2008-07-28 18:38:57 UTC (rev 30591) @@ -1,112 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd"> -<html> -<!-- Created by texi2html 1.76 --> -<!-- -Written by: Lionel Cons <Lio...@ce...> (original author) - Karl Berry <ka...@fr...> - Olaf Bachmann <oba...@ma...> - and many others. -Maintained by: Many creative people <de...@te...> -Send bugs and suggestions to <us...@te...> - ---> -<head> -<title>Crystal Space 1.9.0: 4.16.4.1 Grammar</title> - -<meta name="description" content="Crystal Space 1.9.0: 4.16.4.1 Grammar"> -<meta name="keywords" content="Crystal Space 1.9.0: 4.16.4.1 Grammar"> -<meta name="resource-type" content="document"> -<meta name="distribution" content="global"> -<meta name="Generator" content="texi2html 1.76"> -<meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> -<style type="text/css"> -<!-- -a.summary-letter {text-decoration: none} -pre.display {font-family: serif} -pre.format {font-family: serif} -pre.menu-comment {font-family: serif} -pre.menu-preformatted {font-family: serif} -pre.smalldisplay {font-family: serif; font-size: smaller} -pre.smallexample {font-size: smaller} -pre.smallformat {font-family: serif; font-size: smaller} -pre.smalllisp {font-size: smaller} -span.sansserif {font-family:sans-serif; font-weight:normal;} -ul.toc {list-style: none} ---> -</style> - - -</head> - -<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> - -<a name="Map-File-Grammar"></a> -<a name="0"></a> -<table cellpadding="1" cellspacing="1" border="0"> -<tr><td valign="middle" align="left">[<a href="Old-Map-File-Format.html#0" title="Previous section in reading order"> < </a>]</td> -<td valign="middle" align="left">[<a href="Map-File-Syntax.html#0" title="Next section in reading order"> > </a>]</td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left">[<a href="Using-Crystal-Space.html#0" title="Beginning of this chapter or previous chapter"> << </a>]</td> -<td valign="middle" align="left">[<a href="Old-Map-File-Format.html#0" title="Up section"> Up </a>]</td> -<td valign="middle" align="left">[<a href="Working-with-Engine-Content.html#0" title="Next chapter"> >> </a>]</td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left">[<a href="index.html#SEC_Top" title="Cover (top) of document">Top</a>]</td> -<td valign="middle" align="left">[<a href="cs_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td> -<td valign="middle" align="left">[<a href="cs_Index.html#0" title="Index">Index</a>]</td> -<td valign="middle" align="left">[<a href="cs_abt.html#SEC_About" title="About (help)"> ? </a>]</td> -</tr></table> -<hr size="1"> -<h4 class="subsubsection"> 4.16.4.1 Grammar </h4> - - -<p><em>Written by Eric Sunshine, <a href="mailto:sun...@su...">sun...@su...</a>.</em> -</p> -<p>The syntax for the standard Crystal Space map file is specified using a -context-free grammar using a modified <small>BNF</small> (<em>Backus-Naur Form</em>) -notation. -</p> -<p><em>Terminal</em> symbols (also known as <em>tokens</em>) are denoted like this, -`<code>VERTEX</code>'. <em>Non-terminal</em> symbols are denoted in this fashion, -<em>vector</em>. Expressions enclosed within `[' and `]' are optional. When -an expression is followed by the notation `<small class="dots">...</small>', then the expression may -appear zero or more times. Finally, the symbol '|' appearing between -expressions indicates selection. Either the expression to the left may be -utilized, or the one to the right, but not both. An example follows. -</p> - -<p><em>flip</em> => `<code>HEAD</code>' | `<code>TAIL</code>'<br> - -<em>wager</em> => `<code>WAGER</code>' <em>flip</em> - `<code>(</code>' <em>money</em> [ `<code>,</code>' <em>money</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<p>In this example, a <samp>‘WAGER’</samp> may be followed by either <samp>‘HEAD’</samp> or -<samp>‘TAIL’</samp>, and then by a parenthesized list of monetary values separated by -commas. At least one monetary value must be specified. All subsequent values -(including the comma) are optional, as denoted by `[' and `]'. Here are a -couple of valid expressions which satisfy the <em>wager</em> production: -</p> -<table><tr><td> </td><td><pre class="example">WAGER HEAD (44) -WAGER TAIL (5, 39, 2) -</pre></td></tr></table> - -<p>And here are a few invalid expressions which do not: -</p> -<table><tr><td> </td><td><pre class="example">WAGER HEAD (44,) -WAGER TAIL (,23) -WAGER TAIL () -WAGER EITHER (81, 15) -WAGER (72, 91) -</pre></td></tr></table> -<hr size="1"> -<p> - <font size="-1"> - This document was generated using <a href="http://texi2html.cvshome.org/"><em>texi2html 1.76</em></a>. - </font> - <br> - -</p> -</body> -</html> Deleted: CS/trunk/docs/html/manual/Map-File-Hints.html =================================================================== --- CS/trunk/docs/html/manual/Map-File-Hints.html 2008-07-28 18:13:53 UTC (rev 30590) +++ CS/trunk/docs/html/manual/Map-File-Hints.html 2008-07-28 18:38:57 UTC (rev 30591) @@ -1,200 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd"> -<html> -<!-- Created by texi2html 1.76 --> -<!-- -Written by: Lionel Cons <Lio...@ce...> (original author) - Karl Berry <ka...@fr...> - Olaf Bachmann <oba...@ma...> - and many others. -Maintained by: Many creative people <de...@te...> -Send bugs and suggestions to <us...@te...> - ---> -<head> -<title>Crystal Space 1.9.0: 4.16.4.3 Hints</title> - -<meta name="description" content="Crystal Space 1.9.0: 4.16.4.3 Hints"> -<meta name="keywords" content="Crystal Space 1.9.0: 4.16.4.3 Hints"> -<meta name="resource-type" content="document"> -<meta name="distribution" content="global"> -<meta name="Generator" content="texi2html 1.76"> -<meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> -<style type="text/css"> -<!-- -a.summary-letter {text-decoration: none} -pre.display {font-family: serif} -pre.format {font-family: serif} -pre.menu-comment {font-family: serif} -pre.menu-preformatted {font-family: serif} -pre.smalldisplay {font-family: serif; font-size: smaller} -pre.smallexample {font-size: smaller} -pre.smallformat {font-family: serif; font-size: smaller} -pre.smalllisp {font-size: smaller} -span.sansserif {font-family:sans-serif; font-weight:normal;} -ul.toc {list-style: none} ---> -</style> - - -</head> - -<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> - -<a name="Map-File-Hints"></a> -<a name="0"></a> -<table cellpadding="1" cellspacing="1" border="0"> -<tr><td valign="middle" align="left">[<a href="Map-File-Syntax.html#0" title="Previous section in reading order"> < </a>]</td> -<td valign="middle" align="left">[<a href="Binary-XML.html#0" title="Next section in reading order"> > </a>]</td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left">[<a href="Using-Crystal-Space.html#0" title="Beginning of this chapter or previous chapter"> << </a>]</td> -<td valign="middle" align="left">[<a href="Old-Map-File-Format.html#0" title="Up section"> Up </a>]</td> -<td valign="middle" align="left">[<a href="Working-with-Engine-Content.html#0" title="Next chapter"> >> </a>]</td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left">[<a href="index.html#SEC_Top" title="Cover (top) of document">Top</a>]</td> -<td valign="middle" align="left">[<a href="cs_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td> -<td valign="middle" align="left">[<a href="cs_Index.html#0" title="Index">Index</a>]</td> -<td valign="middle" align="left">[<a href="cs_abt.html#SEC_About" title="About (help)"> ? </a>]</td> -</tr></table> -<hr size="1"> -<h4 class="subsubsection"> 4.16.4.3 Hints </h4> - - -<p><em>Written by Jorrit Tyberghein, -<a href="mailto:jor...@gm...">jor...@gm...</a>. Mathematical typesetting for -TeX performed by Eric Sunshine, <a href="mailto:sun...@su...">sun...@su...</a>.</em> -</p> -<p>This section contains extra discussions and hints regarding the map file and -the objects contained within it (this documentation is a little bit outdated -but still useful for the general idea. However it should be moved to the -thing mesh object description). -</p> -<p>First, a little explanation about <samp>‘LEN’</samp> and <samp>‘TEXLEN’</samp>. With these -you can specify the size of the texture on the polygon. For example, let's -say that you have a rectangular polygon which is 4 units wide and 6 units -tall. A texture with <samp>‘LEN’</samp> set to 2 will be tiled 2 times horizontally -and 3 times vertically. If this texture is 128x128 (for example) then the -final texture on the polygon will be 256x384. -</p> -<p>Using a <samp>‘TEXTURE’</samp> statement inside a <samp>‘POLYGON’</samp> or with a -<samp>‘PLANE’</samp> statement you can obtain even more control over how the texture -should be scaled across the polygon. This is most easily explained with an -example. Say that you have a polygon like this: -</p> -<table><tr><td> </td><td><pre class="example">VERTEX (0,2,3) VERTEX (2,2,3) VERTEX (2,0,3) VERTEX (0,0,3) -POLYGON 'poly' (VERTICES (0,1,2,3)) -</pre></td></tr></table> -<p>Let's say that you want to align the texture so that its origin is at (2,2,3). -You can do this as follows: -</p> -<table><tr><td> </td><td><pre class="example">POLYGON 'poly' ( - VERTICES (0,1,2,3) - TEXTURE ( - ORIG (2,2,3) - FIRST (0,2,3) - SECOND (2,0,3) - FIRST_LEN (1) - SECOND_LEN (1))) -</pre></td></tr></table> -<p>With <samp>‘ORIG’</samp>, <samp>‘FIRST’</samp>, and <samp>‘SECOND’</samp> you specify how the u/v -coordinate system is located. The origin of u/v is at <samp>‘ORIG’</samp>; the u-axis -is at <samp>‘FIRST-ORIG’</samp>; and the v-axis is at <samp>‘SECOND-ORIG’</samp>. -<samp>‘FIRST_LEN’</samp> and <samp>‘SECOND_LEN’</samp> are similar to <samp>‘LEN’</samp> and -<samp>‘TEXLEN’</samp> except that you can control the u and v scaling separately here. -Note that <samp>‘ORIG’</samp>, <samp>‘FIRST’</samp>, and <samp>‘SECOND’</samp> need not coincide with -vertices of the polygon. They should just be on the same plane as the -polygon. That way you can also create slanted textures. -</p> -<p><samp>‘TEXLEN’</samp> in a <samp>‘THING’</samp> or <samp>‘SECTOR’</samp> is the default <samp>‘LEN’</samp> for -all polygons following the <samp>‘TEXLEN’</samp> declaration. <samp>‘TEXNR’</samp> in a -<samp>‘THING’</samp> or <samp>‘SECTOR’</samp> is the default <samp>‘TEXNR’</samp> for all following -polygons. <em>Note, however, that <samp>‘TEXNR’</samp> is considered obsolete and -its use is deprecated.</em> -</p> -<p>Use of planes is recommended. A <samp>‘PLANE’</samp> provides a way to assign a name -to a texture orientation. All polygons sharing the same <samp>‘PLANE’</samp> will -have textures that fit perfectly at the borders. Crystal Space will also be -able to do some optimizations on polygons that share the same plane (like -backface culling an entire set of polygons in one operation). Note that even -if a <samp>‘PLANE’</samp> is only used by one polygon it does not hurt. If you do not -specify the <samp>‘PLANE’</samp>, Crystal Space will create one anyway. -</p> -<p>Currently Crystal Space assumes that there is a sector called <samp>‘room’</samp>. It -will use that as a starting place, and will always start at location (0,0,0) -unless you use an <samp>‘ORIGIN’</samp> directive to instruct it otherwise. -</p> -<p>Note that Sectors must be convex (unless you add a <small>BSP</small> tree). Things -need not be convex. -</p> -<p>Vertices in a <samp>‘THING’</samp> are specified in local object space. You can -translate this object space to world space with the <samp>‘MOVE’</samp> directive. -</p> -<p>When a <samp>‘THING’</samp> or <samp>‘SPRITE’</samp> is defined in the <samp>‘WORLD’</samp> statement -and not in a <samp>‘SECTOR’</samp> or <samp>‘ROOM’</samp> then it defines a template. This -template can then be used inside a <samp>‘SECTOR’</samp> or <samp>‘ROOM’</samp> by providing -another <samp>‘THING’</samp> or <samp>‘SPRITE’</samp> statement and using the <samp>‘TEMPLATE’</samp> -statement there. It is also possible to define the <samp>‘THING’</samp> or -<samp>‘SPRITE’</samp> inside a <samp>‘SECTOR’</samp> or <samp>‘ROOM’</samp> directly, but using -templates is preferable. -</p> -<p>With <samp>‘WARP’</samp> you provide a matrix which will mirror or warp space. For -example, when you want to make a mirroring floor the warping matrix should -invert the Y-axis and leave the others intact. So the <samp>‘WARP’</samp> matrix -would be: -</p> -<table><tr><td> </td><td><pre class="example">/ 1 0 0 \ -| 0 -1 0 | -\ 0 0 1 / -</pre></td></tr></table> -<p>The vector should be a vector on the plane of the mirror. It is used to -determine exactly where mirroring should start. For example, if the floor is -at height -1, then (0,-1,0) is a good spot. -</p> -<p><samp>‘MATRIX (.5)’</samp> is a shorthand for: -</p> -<table><tr><td> </td><td><pre class="example">/ .5 0 0 \ -| 0 .5 0 | -\ 0 0 .5 / -</pre></td></tr></table> -<p>Portals are unidirectional. If you need a <samp>‘PORTAL’</samp> that works in two -directions (so that you can go back) then you'll also have to specify a -<samp>‘PORTAL’</samp> in the other sector pointing back. -</p> -<p>Note that even though a <samp>‘PORTAL’</samp> does not require a texture (unless it -has alpha transparency) you still need to specify one, since Crystal Space -currently assumes that every polygon has a texture. -</p> -<p>The <samp>‘ROOM’</samp> and <samp>‘SIXFACE’</samp> interfaces are good for human editors but -it not suited for computer generated output. Ignore <samp>‘ROOM’</samp> and -<samp>‘SIXFACE’</samp> if you want to write an editor or converter and concentrate on -<samp>‘SECTOR’</samp> and <samp>‘THING’</samp> instead. -</p> - -<hr size="1"> -<table cellpadding="1" cellspacing="1" border="0"> -<tr><td valign="middle" align="left">[<a href="Map-File-Syntax.html#0" title="Previous section in reading order"> < </a>]</td> -<td valign="middle" align="left">[<a href="Binary-XML.html#0" title="Next section in reading order"> > </a>]</td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left">[<a href="Using-Crystal-Space.html#0" title="Beginning of this chapter or previous chapter"> << </a>]</td> -<td valign="middle" align="left">[<a href="Old-Map-File-Format.html#0" title="Up section"> Up </a>]</td> -<td valign="middle" align="left">[<a href="Working-with-Engine-Content.html#0" title="Next chapter"> >> </a>]</td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left">[<a href="index.html#SEC_Top" title="Cover (top) of document">Top</a>]</td> -<td valign="middle" align="left">[<a href="cs_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td> -<td valign="middle" align="left">[<a href="cs_Index.html#0" title="Index">Index</a>]</td> -<td valign="middle" align="left">[<a href="cs_abt.html#SEC_About" title="About (help)"> ? </a>]</td> -</tr></table> -<p> - <font size="-1"> - This document was generated using <a href="http://texi2html.cvshome.org/"><em>texi2html 1.76</em></a>. - </font> - <br> - -</p> -</body> -</html> Deleted: CS/trunk/docs/html/manual/Map-File-Syntax.html =================================================================== --- CS/trunk/docs/html/manual/Map-File-Syntax.html 2008-07-28 18:13:53 UTC (rev 30590) +++ CS/trunk/docs/html/manual/Map-File-Syntax.html 2008-07-28 18:38:57 UTC (rev 30591) @@ -1,961 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd"> -<html> -<!-- Created by texi2html 1.76 --> -<!-- -Written by: Lionel Cons <Lio...@ce...> (original author) - Karl Berry <ka...@fr...> - Olaf Bachmann <oba...@ma...> - and many others. -Maintained by: Many creative people <de...@te...> -Send bugs and suggestions to <us...@te...> - ---> -<head> -<title>Crystal Space 1.9.0: 4.16.4.2 Syntax</title> - -<meta name="description" content="Crystal Space 1.9.0: 4.16.4.2 Syntax"> -<meta name="keywords" content="Crystal Space 1.9.0: 4.16.4.2 Syntax"> -<meta name="resource-type" content="document"> -<meta name="distribution" content="global"> -<meta name="Generator" content="texi2html 1.76"> -<meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> -<style type="text/css"> -<!-- -a.summary-letter {text-decoration: none} -pre.display {font-family: serif} -pre.format {font-family: serif} -pre.menu-comment {font-family: serif} -pre.menu-preformatted {font-family: serif} -pre.smalldisplay {font-family: serif; font-size: smaller} -pre.smallexample {font-size: smaller} -pre.smallformat {font-family: serif; font-size: smaller} -pre.smalllisp {font-size: smaller} -span.sansserif {font-family:sans-serif; font-weight:normal;} -ul.toc {list-style: none} ---> -</style> - - -</head> - -<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> - -<a name="Map-File-Syntax"></a> -<a name="0"></a> -<table cellpadding="1" cellspacing="1" border="0"> -<tr><td valign="middle" align="left">[<a href="Map-File-Grammar.html#0" title="Previous section in reading order"> < </a>]</td> -<td valign="middle" align="left">[<a href="Map-File-Hints.html#0" title="Next section in reading order"> > </a>]</td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left">[<a href="Using-Crystal-Space.html#0" title="Beginning of this chapter or previous chapter"> << </a>]</td> -<td valign="middle" align="left">[<a href="Old-Map-File-Format.html#0" title="Up section"> Up </a>]</td> -<td valign="middle" align="left">[<a href="Working-with-Engine-Content.html#0" title="Next chapter"> >> </a>]</td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left">[<a href="index.html#SEC_Top" title="Cover (top) of document">Top</a>]</td> -<td valign="middle" align="left">[<a href="cs_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td> -<td valign="middle" align="left">[<a href="cs_Index.html#0" title="Index">Index</a>]</td> -<td valign="middle" align="left">[<a href="cs_abt.html#SEC_About" title="About (help)"> ? </a>]</td> -</tr></table> -<hr size="1"> -<h4 class="subsubsection"> 4.16.4.2 Syntax </h4> - - -<p><em>Written by numerous Crystal Space developers. Extensive Texinfo -typesetting performed by Eric Sunshine, <a href="mailto:sun...@su...">sun...@su...</a>.</em> -</p> -<a name="1"></a> -<h4 class="subsubheading"> Basic Syntax Elements </h4> - - -<p><em>number</em> -</p> -<p>A general number. -</p> - -<p><em>pos-number</em> -</p> -<p>A general positive number. -</p> - -<p><em>integer</em> -</p> -<p>A general integer. -</p> - -<p><em>pos-integer</em> -</p> -<p>A positive integer (> 0). -</p> - -<p><em>number..number</em> -</p> -<p>A numeric range. For example, `0..1' represents a number between 0 and 1. -</p> - -<p><em>name</em> -</p> -<p>A name identifier. An unquoted string provided that it contains no -punctuation or whitespace; otherwise delimited by double quotes. -</p> - -<p><em>string</em> -</p> -<p>A string delimited by double quotes. Special characters are escaped with a -backslash. -</p> -<a name="2"></a> -<h4 class="subsubheading"> Number List </h4> - -<p><em>number-list</em> => <em>number</em> [ `<code>,</code>' <em>number</em> ] <small class="dots">...</small> -</p> -<a name="3"></a> -<h4 class="subsubheading"> Boolean Value </h4> - -<p><em>yes</em> => `<code>yes</code>' | `<code>true</code>' | `<code>on</code>' | `<code>1</code>'<br> - -<em>no</em> => `<code>no</code>' | `<code>false</code>' | `<code>off</code>' | `<code></code>'<br> - -<em>yes-no</em> => <em>yes</em> | <em>no</em> -</p> -<a name="4"></a> -<h4 class="subsubheading"> Color Description </h4> - -<p><em>red</em> => 0..1<br> - -<em>green</em> => 0..1<br> - -<em>blue</em> => 0..1<br> - -<em>gray</em> => 0..1<br> - -<em>color-grayscale</em> => <em>gray</em><br> - -<em>color-general</em> => <em>red</em> `<code>,</code>' <em>green</em> `<code>,</code>' <em>blue</em><br> - -<em>color</em> => <em>color-grayscale</em> | <em>color-general</em> -</p> -<a name="5"></a> -<h4 class="subsubheading"> Vectors and Coordinates </h4> - -<p>Note that the x-axis points to the right, the y-axis points up, and the z-axis -points forward. -</p> - -<p><em>x</em> => <em>number</em><br> - -<em>y</em> => <em>number</em><br> - -<em>z</em> => <em>number</em><br> - -<em>u</em> => <em>number</em><br> - -<em>v</em> => <em>number</em><br> - -<em>vector-2d</em> => <em>x</em> `<code>,</code>' <em>z</em><br> - -<em>vector-3d</em> => <em>x</em> `<code>,</code>' <em>y</em> `<code>,</code>' <em>z</em><br> - -<em>vector-4d</em> => <em>x</em> `<code>,</code>' <em>y</em> `<code>,</code>' - <em>z</em> `<code>,</code>' <em>r</em> <br> - -<em>vertex-idx</em> => <em>integer</em><br> - -<em>coordinate</em> => <em>vector-3d</em><br> - -<em>coordinate-2d</em> => <em>vector-2d</em><br> - -<em>texture-coordinate</em> => <em>u</em> `<code>,</code>' <em>v</em> -</p> -<a name="6"></a> -<h4 class="subsubheading"> Object Names </h4> - - -<p><em>sector-name</em> => <em>name</em><br> - -<em>light-name</em> => <em>name</em><br> - -<em>col-name</em> => <em>name</em><br> - -<em>texture-name</em> => <em>name</em><br> - -<em>material-name</em> => <em>name</em><br> - -<em>mesh-name</em> => <em>name</em><br> - -<em>meshfact-name</em> => <em>name</em><br> - -<em>library-name</em> => <em>name</em><br> - -<em>file-name</em> => <em>name</em><br> - -<em>plugin-name</em> => <em>name</em><br> - -<em>plugin-shortname</em> => <em>name</em><br> - -<em>cache-name</em> => <em>name</em><br> - -<em>priority-name</em> => <em>name</em> -</p> -<a name="7"></a> -<h4 class="subsubheading"> Attributes and Numbers </h4> - -<p><em>radius</em> => <em>pos-number</em><br> - -<em>angle</em> => <em>number</em><br> - -<em>keyname</em> => <em>string</em><br> - -<em>keyvalue</em> => <em>string</em> -</p> -<a name="8"></a> -<h4 class="subsubheading"> Visibility Culling </h4> -<p>Sidenote: the <samp>‘CULLER’</samp> statement is going to be obsolete in the future. -</p> - -<p><em>culler</em> => `<code>CULLER</code>' `<code>(</code>' <em>mesh-name</em> `<code>)</code>' - -<em>cullerp</em> => `<code>CULLERP</code>' `<code>(</code>' <em>plugin-name</em> `<code>)</code>' -</p> -<a name="9"></a> -<h4 class="subsubheading"> Key </h4> -<p>Use the <samp>‘KEY’</samp> feature to attach arbitrary game data to any Crystal -Space object. Crystal Space will only store these key/value pairs with -objects but doesn't otherwise use them. You can iterate over these -keys in the code. -</p> - -<p><em>key</em> => `<code>KEY</code>' `<code>(</code>' <em>keyname</em> `<code>,</code>' <em>keyvalue</em> `<code>)</code>' -</p> -<a name="10"></a> -<h4 class="subsubheading"> Fog </h4> - -<p><em>density</em> => <em>number</em><br> - -<em>fog-desc</em> => `<code>FOG</code>' `<code>(</code>' <em>color</em> `<code>,</code>' <em>density</em> `<code>)</code>'<br> - -<em>alpha-nr</em> => `<code></code>' | `<code>25</code>' | `<code>50</code>' | `<code>75</code>'<br> - -<em>alpha</em> => `<code>ALPHA</code>' `<code>(</code>' <em>alpha-nr</em> `<code>)</code>' -</p> -<a name="11"></a> -<h4 class="subsubheading"> Matrices, Vectors, Scalers, and Angles </h4> - -<p><em>vector</em> => `<code>V</code>' `<code>(</code>' <em>vector-3d</em> `<code>)</code>'<br> - -<em>matrix-scaler</em> => <em>number</em><br> - -<em>matrix-x-scaler</em> => <em>matrix-scaler</em><br> - -<em>matrix-y-scaler</em> => <em>matrix-scaler</em><br> - -<em>matrix-z-scaler</em> => <em>matrix-scaler</em><br> - -<em>stated-matrix-x-scaler</em> => `<code>SCALE_X</code>' `<code>(</code>' <em>matrix-x-scaler</em> `<code>)</code>'<br> - -<em>stated-matrix-y-scaler</em> => `<code>SCALE_Y</code>' `<code>(</code>' <em>matrix-y-scaler</em> `<code>)</code>'<br> - -<em>stated-matrix-z-scaler</em> => `<code>SCALE_Z</code>' `<code>(</code>' <em>matrix-z-scaler</em> `<code>)</code>'<br> - -<em>complex-matrix-scaler</em> => <em>stated-matrix-x-scaler</em><br> - - - | <em>stated-matrix-y-scaler</em><br> - - - | <em>stated-matrix-z-scaler</em><br> - -<em>full-matrix-scaler</em> => <em>matrix-x-scaler</em> `<code>,</code>' - <em>matrix-y-scaler</em> `<code>,</code>' <em>matrix-z-scaler</em><br> - -<em>uniform-matrix-scaler</em> => <em>matrix-scaler</em><br> - -<em>simple-matrix-scaler</em> => `<code>SCALE</code>' `<code>(</code>' - <em>uniform-matrix-scaler</em> | <em>full-matrix-scaler</em> `<code>)</code>'<br> - -<em>compound-matrix-scaler</em> => <em>simple-matrix-scaler</em> | <em>complex-matrix-scaler</em> -</p> - -<p><em>rotation-x-angle</em> => <em>angle</em><br> - -<em>rotation-y-angle</em> => <em>angle</em><br> - -<em>rotation-z-angle</em> => <em>angle</em><br> - -<em>rotation-x-matrix</em> => `<code>ROT_X</code>' `<code>(</code>' <em>rotation-x-angle</em> `<code>)</code>'<br> - -<em>rotation-y-matrix</em> => `<code>ROT_Y</code>' `<code>(</code>' <em>rotation-y-angle</em> `<code>)</code>'<br> - -<em>rotation-z-matrix</em> => `<code>ROT_Z</code>' `<code>(</code>' <em>rotation-z-angle</em> `<code>)</code>'<br> - -<em>complex-rotation-matrix</em> => <em>rotation-x-matrix</em> | - <em>rotation-y-matrix</em> | <em>rotation-z-matrix</em><br> - -<em>rotation-angles</em> => <em>rotation-x-angle</em> `<code>,</code>' - <em>rotation-y-angle</em> `<code>,</code>' <em>rotation-z-angle</em><br> - -<em>simple-rotation-matrix</em> => `<code>ROT</code>' `<code>(</code>' <em>rotation-angles</em> `<code>)</code>' -</p> - -<p><em>rotation-matrix</em> => <em>simple-rotation-matrix</em> | <em>complex-rotation-matrix</em><br> - -<em>complex-matrix</em> => <em>rotation-matrix</em> | <em>compound-matrix-scaler</em><br> - -<em>simple-scaled-matrix</em> => <em>uniform-matrix-scaler</em><br> - -<em>normal-matrix</em> => <em>vector-3d</em> `<code>,</code>' <em>vector-3d</em> - `<code>,</code>' <em>vector-3d</em><br> - -<em>identity-matrix</em> => `<code>IDENTITY</code>'<br> - -<em>matrix-type</em> => <em>identity-matrix</em><br> - - - | <em>normal-matrix</em><br> - - - | <em>simple-scaled-matrix</em><br> - - - | <em>complex-matrix</em><br> - -<em>matrix</em> => `<code>MATRIX</code>' `<code>(</code>' [ <em>matrix-type</em> <small class="dots">...</small> ] `<code>)</code>' -</p> - -<p><em>move-comp</em> => <em>matrix</em> | <em>vector</em><br> - -<em>move</em> => `<code>MOVE</code>' `<code>(</code>' [ <em>move-comp</em> <small class="dots">...</small> ] `<code>)</code>'<br> - -<em>hardmove</em> => `<code>HARDMOVE</code>' `<code>(</code>' [ <em>move-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="12"></a> -<h4 class="subsubheading"> Lights </h4> -<p>It is recommended to use the new syntax for lights. -</p> - -<p><em>dynamic-flag</em> => `<code></code>' | `<code>1</code>'<br> - -<em>light-oldsyntax</em> => <em>coordinate</em> `<code>:</code>' <em>radius</em> - `<code>,</code>' <em>color-general</em> `<code>,</code>' <em>dynamic-flag</em> -</p> - -<p><em>light-center</em> => `<code>CENTER</code>' `<code>(</code>' <em>coordinate</em> `<code>)</code>'<br> - -<em>light-radius</em> => `<code>RADIUS</code>' `<code>(</code>' <em>radius</em> `<code>)</code>'<br> - -<em>light-color</em> => `<code>COLOR</code>' `<code>(</code>' <em>color</em> `<code>)</code>'<br> - -<em>light-dynamic</em> => `<code>DYNAMIC</code>' `<code>(</code>' `<code>)</code>'<br> - -<em>light-halo</em> => `<code>HALO</code>' `<code>(</code>' `<code>)</code>'<br> - -<em>light-comp</em> => <em>light-center</em><br> - - - | <em>light-radius</em><br> - - - | <em>light-dynamic</em><br> - - - | <em>light-color</em><br> - - - | <em>light-halo</em><br> - -<em>light-newsyntax</em> => [ <em>light-comp</em> <small class="dots">...</small> ] -</p> - -<p><em>light</em> => `<code>LIGHT</code>' <em>light-name</em> - `<code>(</code>' <em>light-oldsyntax</em> | <em>light-newsyntax</em> `<code>)</code>' -</p> -<a name="13"></a> -<h4 class="subsubheading"> Collection Objects </h4> -<p>Note that collection objects are NOT hierarchical objects. A collection -object is just one object that represents a group of other objects. -</p> - -<p><em>col-mesh</em> => `<code>MESH</code>' `<code>(</code>' <em>mesh-name</em> `<code>)</code>'<br> - -<em>col-collection</em> => `<code>COLLECTION</code>' `<code>(</code>' <em>col-name</em> `<code>)</code>'<br> - -<em>col-light</em> => `<code>LIGHT</code>' `<code>(</code>' <em>light-name</em> `<code>)</code>'<br> - -<em>col-sector</em> => `<code>SECTOR</code>' `<code>(</code>' <em>sector-name</em> `<code>)</code>'<br> - -<em>collection-comp</em> => <em>col-collection</em><br> - - - | <em>col-light</em><br> - - - | <em>col-sector</em><br> - - - | <em>col-mesh</em><br> - -<em>collection</em> => `<code>COLLECTION</code>' <em>col-name</em> - `<code>(</code>' [ <em>collection-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="14"></a> -<h4 class="subsubheading"> Materials and Textures </h4> - -<p><em>material</em> => `<code>MATERIAL</code>' `<code>(</code>' <em>material-name</em> `<code>)</code>'<br> - -<em>texture</em> => `<code>TEXTURE</code>' `<code>(</code>' <em>texture-name</em> `<code>)</code>'<br> -</p> -<a name="15"></a> -<h4 class="subsubheading"> Material and Texture Description </h4> - -<p><em>transparent</em> => `<code>TRANSPARENT</code>' `<code>(</code>' <em>color</em> `<code>)</code>'<br> - -<em>procedural</em> => `<code>PROCEDURAL</code>' `<code>(</code>' `<code>)</code>'<br> - -<em>tex2d</em> => `<code>FOR_2D</code>' `<code>(</code>' <em>yes-no</em> `<code>)</code>'<br> - -<em>tex3d</em> => `<code>FOR_3D</code>' `<code>(</code>' <em>yes-no</em> `<code>)</code>'<br> - -<em>persistent</em> => `<code>PERSISTENT</code>' `<code>(</code>' `<code>)</code>'<br> - -<em>filter</em> => `<code>FILTER</code>' `<code>(</code>' <small class="dots">...</small> `<code>)</code>'<br> - -<em>mipmap</em> => `<code>MIPMAP</code>' `<code>(</code>' <em>yes-no</em> `<code>)</code>'<br> - -<em>dither</em> => `<code>DITHER</code>' `<code>(</code>' <em>yes-no</em> `<code>)</code>'<br> - -<em>texture-file</em> => `<code>FILE</code>' `<code>(</code>' <em>file-name</em> `<code>)</code>' -</p> - -<p><em>texture-desc-comp</em> => <em>transparent</em><br> - - - | <em>filter</em><br> - - - | <em>mipmap</em><br> - - - | <em>dither</em><br> - - - | <em>file</em><br> - - - | <em>procedural</em><br> - - - | <em>tex2d</em><br> - - - | <em>tex3d</em><br> - - - | <em>persistent</em><br> - -<em>texture-desc</em> => `<code>TEXTURE</code>' <em>texture-name</em> - `<code>(</code>' [ <em>texture-desc-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> - -<p><em>material-desc-comp</em> => <em>texture</em><br> - - - | `<code>COLOR</code>' `<code>(</code>' <em>color</em> `<code>)</code>'<br> - - - | `<code>DIFFUSE</code>' `<code>(</code>' <em>number</em> `<code>)</code>'<br> - - - | `<code>AMBIENT</code>' `<code>(</code>' <em>number</em> `<code>)</code>'<br> - - - | `<code>REFLECTION</code>' `<code>(</code>' <em>number</em> `<code>)</code>'<br> - -<em>material-desc</em> => `<code>MATERIAL</code>' <em>material-name</em> - `<code>(</code>' [ <em>material-desc-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="16"></a> -<h4 class="subsubheading"> LOD </h4> - -<p><em>lod-level</em> => `<code>LEVEL</code>' `<code>(</code>' <em>number</em> `<code>)</code>'<br> - -<em>lod-comp</em> => <em>lod-level</em><br> - -<em>lod</em> => `<code>LOD</code>' `<code>(</code>' [ <em>lod-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="17"></a> -<h4 class="subsubheading"> Mesh Objects </h4> -<p>Important note! This documentation explains ONLY the basic mesh object -and factory parsing. It does NOT describe the parsing that is done by -the loader plugin itself. So this means that everything inside the -<samp>‘PARAMS’</samp> blocks is not documented in this document. Documentation -for this will follow later in the mesh object plugin documentation. -</p> - -<p><em>plugin</em> => `<code>PLUGIN</code>' `<code>(</code>' <em>string</em> `<code>)</code>'<br> - -<em>params</em> => `<code>PARAMS</code>' `<code>(</code>' <em>string</em> `<code>)</code>' - -<em>paramsfile</em> => `<code>PARAMSFILE</code>' `<code>(</code>' <em>file-name</em> `<code>)</code>' - -<em>mesh-nolighting</em> => `<code>NOLIGHTING</code>' `<code>(</code>' `<code>)</code>'<br> - -<em>mesh-noshadows</em> => `<code>NOSHADOWS</code>' `<code>(</code>' `<code>)</code>'<br> - -<em>mesh-invisible</em> => `<code>INVISIBLE</code>' `<code>(</code>' `<code>)</code>'<br> - -<em>mesh-detail</em> => `<code>DETAIL</code>' `<code>(</code>' `<code>)</code>'<br> - -<em>mesh-zfill</em> => `<code>ZFILL</code>' `<code>(</code>' `<code>)</code>'<br> - -<em>mesh-znone</em> => `<code>ZNONE</code>' `<code>(</code>' `<code>)</code>'<br> - -<em>mesh-zuse</em> => `<code>ZUSE</code>' `<code>(</code>' `<code>)</code>'<br> - -<em>mesh-ztest</em> => `<code>ZTEST</code>' `<code>(</code>' `<code>)</code>'<br> - -<em>mesh-camera</em> => `<code>CAMERA</code>' `<code>(</code>' `<code>)</code>'<br> - -<em>mesh-convex</em> => `<code>CONVEX</code>' `<code>(</code>' `<code>)</code>'<br> - -<em>mesh-priority</em> => `<code>PRIORITY</code>' `<code>(</code>' <em>priority-name</em> `<code>)</code>'<br> - -<em>mesh-lmcache</em> => `<code>LMCACHE</code>' `<code>(</code>' <em>cache-name</em> `<code>)</code>'<br> -</p> - -<p><em>mesh-comp</em> => <em>plugin</em><br> - - - | <em>addon</em><br> - - - | <em>key</em><br> - - - | <em>params</em><br> - - - | <em>paramsfile</em><br> - - - | <em>mesh</em><br> - - - | <em>move</em><br> - - - | <em>hardmove</em><br> - - - | <em>lod</em><br> - - - | <em>mesh</em><br> - - - | <em>meshref</em><br> - - - | <em>mesh-nolighting</em><br> - - - | <em>mesh-noshadows</em><br> - - - | <em>mesh-invisible</em><br> - - - | <em>mesh-detail</em><br> - - - | <em>mesh-zfill</em><br> - - - | <em>mesh-znone</em><br> - - - | <em>mesh-zuse</em><br> - - - | <em>mesh-ztest</em><br> - - - | <em>mesh-camera</em><br> - - - | <em>mesh-convex</em><br> - - - | <em>mesh-priority</em><br> - - - | <em>mesh-lmcache</em><br> - -<em>mesh</em> => `<code>MESHOBJ</code>' <em>mesh-name</em> - `<code>(</code>' [ <em>mesh-comp</em> <small class="dots">...</small> ] `<code>)</code>'<br> - -<em>meshlib</em> => `<code>MESHLIB</code>' <em>mesh-name</em> - `<code>(</code>' [ <em>mesh-comp</em> <small class="dots">...</small> `<code>)</code>' -</p> - -<p><em>meshref-factory</em> => `<code>FACTORY</code>' `<code>(</code>' <em>meshfact-name</em> `<code>)</code>'<br> - -<em>meshref-comp</em> => <em>meshref-factory</em><br> - - - | <em>addon</em><br> - - - | <em>key</em><br> - - - | <em>move</em><br> - - - | <em>hardmove</em><br> - - - | <em>lod</em><br> - - - | <em>mesh-nolighting</em><br> - - - | <em>mesh-noshadows</em><br> - - - | <em>mesh-invisible</em><br> - - - | <em>mesh-detail</em><br> - - - | <em>mesh-zfill</em><br> - - - | <em>mesh-znone</em><br> - - - | <em>mesh-zuse</em><br> - - - | <em>mesh-ztest</em><br> - - - | <em>mesh-camera</em><br> - - - | <em>mesh-convex</em><br> - - - | <em>mesh-priority</em><br> - -<em>meshref</em> => `<code>MESHREF</code>' <em>mesh-name</em> - `<code>(</code>' [ <em>meshref-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="18"></a> -<h4 class="subsubheading"> Mesh Object Factories </h4> - -<p><em>meshfact-file</em> => `<code>FILE</code>' `<code>(</code>' <em>file-name</em> `<code>)</code>'<br> - -<em>meshfact-comp</em> => <em>plugin</em><br> - - - | <em>addon</em><br> - - - | <em>params</em><br> - - - | <em>paramsfile</em><br> - - - | <em>meshfact-file</em><br> - - - | <em>meshfact</em><br> - - - | <em>move</em><br> - - - | <em>hardmove</em><br> - - - | <em>lod</em><br> - - - | <em>material</em><br> - -<em>meshfact</em> => `<code>MESHFACT</code>' <em>meshfact-name</em> - `<code>(</code>' [ <em>meshfact-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="19"></a> -<h4 class="subsubheading"> Nodes </h4> - -<p><em>position</em> => `<code>POSITION</code>' `<code>(</code>' <em>coordinate</em> `<code>)</code>'<br> - -<em>node-comp</em> => <em>position</em> | <em>key</em><br> - -<em>node</em> => `<code>NODE</code>' `<code>(</code>' [ <em>node-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="20"></a> -<h4 class="subsubheading"> Sectors </h4> - - -<p><em>sector-comp</em> => <em>addon</em><br> - - - | <em>culler</em><br> - - - | <em>cullerp</em><br> - - - | <em>light</em><br> - - - | <em>mesh</em><br> - - - | <em>meshref</em><br> - - - | <em>meshlib</em><br> - - - | <em>fog-desc</em><br> - - - | <em>key</em><br> - - - | <em>node</em><br> - -<em>sector</em> => `<code>SECTOR</code>' <em>sector-name</em> - `<code>(</code>' [ <em>sector-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="21"></a> -<h4 class="subsubheading"> Texture List </h4> - -<p><em>textures-comp</em> => <em>texture-desc</em><br> - -<em>textures</em> => `<code>TEXTURES</code>' `<code>(</code>' [ <em>textures-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="22"></a> -<h4 class="subsubheading"> Material List </h4> - -<p><em>materials-comp</em> => <em>material-desc</em><br> - -<em>materials</em> => `<code>MATERIALS</code>' `<code>(</code>' [ <em>materials-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="23"></a> -<h4 class="subsubheading"> Material Groupings </h4> -<p>Sometimes you want things of the same type but with different materials on it. -This is where material groupings come in handy. The final name of a texture -in a <samp>‘MAT_SET’</samp> expression will be `<var>mat-set-name_texture-name</var>'. The -materials will be merged into the global texture list. You should define a -<samp>‘MAT_SET’</samp> after <samp>‘TEXTURES’</samp> since the latter command clears the -internal list first. -</p> - -<p><em>mat-set-name</em> => <em>name</em><br> - -<em>material-set</em> => `<code>MAT_SET</code>' <em>mat-set-name</em> `<code>(</code>' <em>materials</em> `<code>)</code>' -</p> -<a name="24"></a> -<h4 class="subsubheading"> Library </h4> - -<p><em>library</em> => `<code>LIBRARY</code>' <em>library-name</em> `<code>(</code>' <em>file-name</em> `<code>)</code>' -</p> -<a name="25"></a> -<h4 class="subsubheading"> Starting Position </h4> - -<p><em>start-sector</em> => `<code>SECTOR</code>' `<code>(</code>' <em>sector-name</em> `<code>)</code>'<br> - -<em>start-position</em> => `<code>POSITION</code>' `<code>(</code>' <em>coordinate</em> `<code>)</code>'<br> - -<em>start-up</em> => `<code>UP</code>' `<code>(</code>' <em>vector-3d</em> `<code>)</code>'<br> - -<em>start-forward</em> => `<code>FORWARD</code>' `<code>(</code>' <em>vector-3d</em> `<code>)</code>'<br> - -<em>start-comp</em> => <em>start-sector</em><br> - - - | <em>start-position</em><br> - - - | <em>start-up</em><br> - - - | <em>start-forward</em><br> - -<em>start-newsyntax</em> => [ <em>start-comp</em> <small class="dots">...</small> ]<br> - -<em>start-oldsyntax</em> => <em>sector-name</em> `<code>,</code>' - <em>coordinate</em><br> - -<em>start</em> => `<code>START</code>' - `<code>(</code>' <em>start-oldsyntax</em> | <em>start-newsyntax</em> `<code>)</code>' -</p> -<a name="26"></a> -<h4 class="subsubheading"> For Loader Plug-Ins </h4> - -<p><em>plugin-id</em> => <em>plugin-name</em> | <em>plugin-shortname</em><br> - -<em>plugin-spec</em> => `<code>PLUGIN</code>' `<code>(</code>' <em>plugin-id</em> `<code>)</code>'<br> - -<em>plugin-params</em> => `<code>PARAMS</code>' `<code>(</code>' <small class="dots">...</small> `<code>)</code>'<br> - -<em>plugin-comp</em> => `<code>PLUGIN</code>' <em>plugin-shortname</em> - `<code>(</code>' <em>plugin-name</em> `<code>)</code>'<br> - -<em>plugins</em> => `<code>PLUGINS</code>' - `<code>(</code>' [ <em>plugin-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="27"></a> -<h4 class="subsubheading"> Add-ons </h4> -<p>Same remark as for mesh objects: the stuff that is inside the -<samp>‘PARAMS’</samp> block is not documented here. -</p> - -<p><em>addon-comp</em> => <em>plugin-spec</em> | <em>plugin-params</em><br> - -<em>addon</em> => `<code>ADDON</code>' `<code>(</code>' [ <em>addon-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="28"></a> -<h4 class="subsubheading"> Sounds </h4> - -<p><em>sound-file</em> => `<code>FILE</code>' `<code>(</code>' <em>file-name</em> `<code>)</code>'<br> - -<em>sound</em> => `<code>SOUND</code>' [ <em>file-name</em> ] - `<code>(</code>' [ <em>sound-file</em> ] `<code>)</code>'<br> - -<em>sounds</em> => `<code>SOUNDS</code>' `<code>(</code>' [ <em>sound</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="29"></a> -<h4 class="subsubheading"> Settings </h4> - -<p><em>setting-ambient</em> => `<code>AMBIENT</code>' `<code>(</code>' <em>color</em> `<code>)</code>'<br> - -<em>setting-clearzbuf</em> => `<code>CLEARZBUF</code>' `<code>(</code>' <em>yes-no</em> `<code>)</code>'<br> - -<em>setting-clearscreen</em> => `<code>CLEARSCREEN</code>' `<code>(</code>' <em>yes-no</em> `<code>)</code>'<br> - -<em>setting-lightmapcellsize</em> => `<code>LIGHTMAPCELLSIZE</code>' `<code>(</code>' <em>pos-integer</em> `<code>)</code>'<br> - -<em>setting-maxlightmapsize</em> => `<code>MAXLIGHTMAPSIZE</code>' `<code>(</code>' <em>pos-integer</em> `<code>,</code>' <em>pos-integer</em> `<code>)</code>'<br> - -<em>settings-comp</em> => <em>setting-ambient</em><br> - - - | <em>setting-clearzbuf</em><br> - - - | <em>setting-clearscreen</em><br> - - - | <em>setting-lightmapcellsize</em><br> - - - | <em>setting-maxlightmapsize</em><br> - -<em>settings</em> => `<code>SETTINGS</code>' `<code>(</code>' [ <em>settings-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="30"></a> -<h4 class="subsubheading"> World </h4> - -<p><em>world-comp</em> => <em>textures</em><br> - - - | <em>materials</em><br> - - - | <em>library</em><br> - - - | <em>addon</em><br> - - - | <em>material-set</em><br> - - - | <em>sounds</em><br> - - - | <em>plugins</em><br> - - - | <em>sector</em><br> - - - | <em>meshfact</em><br> - - - | <em>collection</em><br> - - - | <em>start</em><br> - - - | <em>key</em><br> - - - | <em>settings</em><br> - -<em>world</em> => `<code>WORLD</code>' `<code>(</code>' [ <em>world-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<a name="31"></a> -<h4 class="subsubheading"> Library File </h4> - -<p><em>library-comp</em> => <em>textures</em><br> - - - | <em>materials</em><br> - - - | <em>meshfact</em><br> - - - | <em>addon</em><br> - - - | <em>meshobj</em><br> - - - | <em>meshref</em><br> - - - | <em>sounds</em><br> - - - | <em>plugins</em><br> - -<em>library</em> => `<code>LIBRARY</code>' `<code>(</code>' [ <em>library-comp</em> <small class="dots">...</small> ] `<code>)</code>' -</p> -<hr size="1"> -<table cellpadding="1" cellspacing="1" border="0"> -<tr><td valign="middle" align="left">[<a href="Map-File-Grammar.html#0" title="Previous section in reading order"> < </a>]</td> -<td valign="middle" align="left">[<a href="Map-File-Hints.html#0" title="Next section in reading order"> > </a>]</td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left">[<a href="Using-Crystal-Space.html#0" title="Beginning of this chapter or previous chapter"> << </a>]</td> -<td valign="middle" align="left">[<a href="Old-Map-File-Format.html#0" title="Up section"> Up </a>]</td> -<td valign="middle" align="left">[<a href="Working-with-Engine-Content.html#0" title="Next chapter"> >> </a>]</td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left"> </td> -<td valign="middle" align="left">[<a href="index.html#SEC_Top" title="Cover (top) of document">Top</a>]</td> -<td valign="middle" align="left">[<a href="cs_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td> -<td valign="middle" align="left">[<a hr... [truncated message content] |