ivideo/rendermesh.h Source File (Crystal Space 2.0 Public API Reference)

| ## Public API Reference

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

ivideo/rendermesh.h
Go to the documentation of this file.

    00001 /*
    00002   Copyright (C) 2002 by Marten Svanfeldt
    00003                         Anders Stenberg
    00004
    00005   This library is free software; you can redistribute it and/or
    00006   modify it under the terms of the GNU Library General Public
    00007   License as published by the Free Software Foundation; either
    00008   version 2 of the License, or (at your option) any later version.
    00009
    00010   This library is distributed in the hope that it will be useful,
    00011   but WITHOUT ANY WARRANTY; without even the implied warranty of
    00012   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00013   Library General Public License for more details.
    00014
    00015   You should have received a copy of the GNU Library General Public
    00016   License along with this library; if not, write to the Free
    00017   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    00018 */
    00019
    00020 #ifndef __CS_IVIDEO_RENDERMESH_H__
    00021 #define __CS_IVIDEO_RENDERMESH_H__
    00022
    00031 #include "csgeom/box.h"
    00032 #include "csgeom/transfrm.h"
    00033 #include "csgeom/vector3.h"
    00034
    00035 #include "iengine/material.h"
    00036 #include "ivideo/graph3d.h"
    00037 #include "ivideo/shader/shader.h"
    00038
    00039 struct iPortalContainer;
    00040
    00041 namespace CS
    00042 {
    00043 namespace Graphics
    00044 {
    00046   class RenderPriority
    00047   {
    00048     uint value;
    00049   public:
    00050     RenderPriority () : value (uint (~0)) {}
    00051     explicit RenderPriority (uint value) : value (value) {}
    00052     CS_DEPRECATED_METHOD_MSG("Please use CS::Graphics::RenderPriority to store render priorities")
    00053     RenderPriority (long value) : value (value) {}
    00054     CS_DEPRECATED_METHOD_MSG("Please use CS::Graphics::RenderPriority to store render priorities")
    00055     RenderPriority (int value) : value (value) {}
    00056
    00057     bool IsValid() const { return value != uint (~0); }
    00058     operator uint () const { return value; }
    00059   };
    00060
    00062   enum MeshCullMode
    00063   {
    00064     cullNormal,
    00065     cullFlipped,
    00066     cullDisabled
    00067   };
    00068
    00074   static inline MeshCullMode GetFlippedCullMode (MeshCullMode cullMode)
    00075   {
    00076     switch (cullMode)
    00077     {
    00078       case cullNormal:
    00079         return cullFlipped;
    00080       case cullFlipped:
    00081         return cullNormal;
    00082       case cullDisabled:
    00083         return cullDisabled;
    00084     }
    00085     // Should not happen ...
    00086     return cullNormal;
    00087   }
    00088
    00096   enum AlphaTestFunction
    00097   {
    00102     atfGreaterEqual,
    00107     atfGreater,
    00112     atfLowerEqual,
    00117     atfLower
    00118   };
    00119
    00129   struct AlphaTestOptions
    00130   {
    00135     float threshold;
    00140     AlphaTestFunction func;
    00141
    00142     AlphaTestOptions() : threshold (0.5f), func (atfGreaterEqual) {}
    00143   };
    00144
    00151   struct RenderMeshModes
    00152   {
    00153     RenderMeshModes () : z_buf_mode ((csZBufMode)~0), mixmode (CS_FX_COPY),
    00154       alphaToCoverage (false), atcMixmode (CS_MIXMODE_BLEND (ONE, ZERO)),
    00155       cullMode (cullNormal),
    00156       alphaType (csAlphaMode::alphaNone), zoffset (false), doInstancing (false),
    00157       instParams (nullptr), instParamBuffers (nullptr)
    00158     {
    00159     }
    00160
    00161     RenderMeshModes (RenderMeshModes const& x) :
    00162       z_buf_mode (x.z_buf_mode),
    00163       mixmode (x.mixmode),
    00164       alphaToCoverage (x.alphaToCoverage),
    00165       atcMixmode (x.atcMixmode),
    00166       renderPrio (x.renderPrio),
    00167       cullMode (x.cullMode),
    00168       alphaType (x.alphaType),
    00169       alphaTest (x.alphaTest),
    00170       zoffset (x.zoffset),
    00171       buffers (x.buffers),
    00172       doInstancing (x.doInstancing),
    00173       instParamNum (x.instParamNum),
    00174       instParamsTargets (x.instParamsTargets),
    00175       instanceNum (x.instanceNum),
    00176       instParams (x.instParams),
    00177       instParamBuffers (x.instParamBuffers)
    00178     {
    00179     }
    00180
    00181     ~RenderMeshModes () { }
    00182
    00184     csZBufMode z_buf_mode;
    00185
    00187     uint mixmode;
    00188
    00196     bool alphaToCoverage;
    00198     uint atcMixmode;
    00199
    00201     RenderPriority renderPrio;
    00202
    00204     MeshCullMode cullMode;
    00205
    00215     csAlphaMode::AlphaType alphaType;
    00216
    00218     AlphaTestOptions alphaTest;
    00219
    00221     bool zoffset;
    00222
    00224     csRef<csRenderBufferHolder> buffers;
    00225
    00227     bool doInstancing;
    00229     size_t instParamNum;
    00231     const csVertexAttrib* instParamsTargets;
    00233     size_t instanceNum;
    00241     csShaderVariable** const * instParams;
    00253     iRenderBuffer** instParamBuffers;
    00254   };
    00255
    00261   struct RenderMeshIndexRange
    00262   {
    00264     unsigned int start;
    00266     unsigned int end;
    00267   };
    00268
    00272   struct CoreRenderMesh
    00273   {
    00278     const char* db_mesh_name;
    00279
    00280     CoreRenderMesh () : db_mesh_name ("<unknown>"), clip_portal (0),
    00281       clip_plane (0), clip_z_plane (0), do_mirror (false),
    00282       multiRanges (0), rangesNum (0), indexstart (0), indexend (0)
    00283     {
    00284     }
    00285
    00286     ~CoreRenderMesh () {}
    00287
    00289     int clip_portal;
    00290
    00292     int clip_plane;
    00293
    00295     int clip_z_plane;
    00296
    00297     // @@@ FIXME: should prolly be handled by component managing rendering
    00314     bool do_mirror;
    00315
    00317     csRenderMeshType meshtype;
    00322     RenderMeshIndexRange* multiRanges;
    00324     size_t rangesNum;
    00325
    00332     unsigned int indexstart;
    00333     unsigned int indexend;
    00340     iMaterialWrapper* material;
    00341
    00346     csReversibleTransform object2world;
    00347
    00349     csBox3 bbox;
    00350   };
    00351
    00356   struct RenderMesh : public CoreRenderMesh, public RenderMeshModes
    00357   {
    00358     RenderMesh () : geometryInstance (0), portal (0)
    00359     {
    00360     }
    00361
    00362     ~RenderMesh () {}
    00363
    00369     void *geometryInstance;
    00370
    00372     iPortalContainer* portal;
    00373
    00375     csRef<iShaderVariableContext> variablecontext;
    00376
    00378     csVector3 worldspace_origin;
    00379   };
    00380
    00381 } // namespace Graphics
    00382 } // namespace CS
    00383
    00384 typedef CS::Graphics::RenderMeshModes csRenderMeshModes;
    00385 typedef CS::Graphics::CoreRenderMesh csCoreRenderMesh;
    00386 typedef CS::Graphics::RenderMesh csRenderMesh;
    00387
    00390 #endif // __CS_IVIDEO_RENDERMESH_H__