ivideo/graph3d.h
Go to the documentation of this file.00001 /* 00002 Copyright (C) 1998-2001 by Jorrit Tyberghein 00003 2004 by Marten Svanfeldt 00004 Written by Jorrit Tyberghein, Dan Ogles, and Gary Clark. 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Library General Public 00008 License as published by the Free Software Foundation; either 00009 version 2 of the License, or (at your option) any later version. 00010 00011 This library is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 Library General Public License for more details. 00015 00016 You should have received a copy of the GNU Library General Public 00017 License along with this library; if not, write to the Free 00018 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00019 */ 00020 00021 #ifndef __CS_IVIDEO_GRAPH3D_H__ 00022 #define __CS_IVIDEO_GRAPH3D_H__ 00023 00032 #include "csutil/scf.h" 00033 00034 #include "csgeom/matrix4.h" 00035 #include "csgeom/transfrm.h" 00036 #include "csutil/flags.h" 00037 #include "csutil/strset.h" 00038 00039 #include "ivideo/rndbuf.h" 00040 00041 struct iClipper2D; 00042 struct iGraphics2D; 00043 struct iHalo; 00044 struct iRenderBuffer; 00045 struct iShader; 00046 struct iShaderVariableContext; 00047 struct iTextureHandle; 00048 struct iTextureManager; 00049 00050 class csRect; 00051 class csPlane3; 00052 class csShaderVariable; 00053 class csVector2; 00054 class csVector3; 00055 class csVector4; 00056 00057 namespace CS 00058 { 00059 namespace Graphics 00060 { 00061 struct CoreRenderMesh; 00062 struct RenderMeshModes; 00063 } // namespace Graphics 00064 } // namespace CS 00065 class csRenderBufferHolder; 00066 class csShaderVariableStack; 00067 00068 00071 00072 #define CSDRAW_2DGRAPHICS 0x00000001 00074 #define CSDRAW_3DGRAPHICS 0x00000002 00076 #define CSDRAW_CLEARZBUFFER 0x00000010 00078 #define CSDRAW_CLEARSCREEN 0x00000020 00080 #define CSDRAW_NOCLIPCLEAR 0x00000040 00081 00086 #define CSDRAW_READBACK 0x00000080 00087 00094 #define CS_CLIPPER_NONE -1 00095 00098 #define CS_CLIPPER_OPTIONAL 0 00099 00102 #define CS_CLIPPER_TOPLEVEL 1 00103 00106 #define CS_CLIPPER_REQUIRED 2 00107 00115 #define CS_CLIP_NOT 0 00116 00121 #define CS_CLIP_NEEDED 1 00122 00124 00125 enum csZBufMode 00126 { 00128 CS_ZBUF_NONE = 0x00000000, 00130 CS_ZBUF_FILL = 0x00000001, 00132 CS_ZBUF_TEST = 0x00000002, 00134 CS_ZBUF_USE = 0x00000003, 00136 CS_ZBUF_EQUAL = 0x00000004, 00138 CS_ZBUF_INVERT = 0x00000005, 00139 00141 CS_ZBUF_MESH = 0x80000000, 00150 CS_ZBUF_MESH2 = 0x80000001 00151 }; 00152 00153 // @@@ Keep in sync with values below 00154 // \todo Document me! 00155 #define CS_VATTRIB_SPECIFIC_FIRST 0 00156 #define CS_VATTRIB_SPECIFIC_LAST 15 00157 #define CS_VATTRIB_SPECIFIC_NUM \ 00158 (CS_VATTRIB_SPECIFIC_LAST - CS_VATTRIB_SPECIFIC_FIRST + 1) 00159 #define CS_VATTRIB_GENERIC_FIRST 100 00160 #define CS_VATTRIB_GENERIC_LAST (CS_VATTRIB_GENERIC_FIRST + 15) 00161 #define CS_VATTRIB_GENERIC_NUM \ 00162 (CS_VATTRIB_GENERIC_LAST - CS_VATTRIB_GENERIC_FIRST + 1) 00163 #define CS_IATTRIB_FIRST 200 00164 #define CS_IATTRIB_LAST (CS_IATTRIB_FIRST + 0) 00165 #define CS_IATTRIB_NUM \ 00166 (CS_IATTRIB_LAST - CS_IATTRIB_FIRST + 1) 00167 00168 00169 #define CS_VATTRIB_IS_GENERIC(va) \ 00170 ((va >= CS_VATTRIB_GENERIC_FIRST) && (va <=CS_VATTRIB_GENERIC_LAST)) 00171 #define CS_VATTRIB_IS_SPECIFIC(va) \ 00172 ((va >= CS_VATTRIB_SPECIFIC_FIRST) && (va <=CS_VATTRIB_SPECIFIC_LAST)) 00173 00177 enum csVertexAttrib 00178 { 00182 CS_VATTRIB_UNUSED = -2, 00184 CS_VATTRIB_INVALID = -1, 00186 CS_VATTRIB_POSITION = CS_VATTRIB_SPECIFIC_FIRST + 0, 00188 CS_VATTRIB_WEIGHT = CS_VATTRIB_SPECIFIC_FIRST + 1, 00190 CS_VATTRIB_NORMAL = CS_VATTRIB_SPECIFIC_FIRST + 2, 00192 CS_VATTRIB_COLOR = CS_VATTRIB_SPECIFIC_FIRST + 3, 00194 CS_VATTRIB_PRIMARY_COLOR = CS_VATTRIB_SPECIFIC_FIRST + 3, 00196 CS_VATTRIB_SECONDARY_COLOR = CS_VATTRIB_SPECIFIC_FIRST + 4, 00198 CS_VATTRIB_FOGCOORD = CS_VATTRIB_SPECIFIC_FIRST + 5, 00200 CS_VATTRIB_TEXCOORD = CS_VATTRIB_SPECIFIC_FIRST + 8, 00202 CS_VATTRIB_TEXCOORD0 = CS_VATTRIB_SPECIFIC_FIRST + 8, 00204 CS_VATTRIB_TEXCOORD1 = CS_VATTRIB_SPECIFIC_FIRST + 9, 00206 CS_VATTRIB_TEXCOORD2 = CS_VATTRIB_SPECIFIC_FIRST + 10, 00208 CS_VATTRIB_TEXCOORD3 = CS_VATTRIB_SPECIFIC_FIRST + 11, 00210 CS_VATTRIB_TEXCOORD4 = CS_VATTRIB_SPECIFIC_FIRST + 12, 00212 CS_VATTRIB_TEXCOORD5 = CS_VATTRIB_SPECIFIC_FIRST + 13, 00214 CS_VATTRIB_TEXCOORD6 = CS_VATTRIB_SPECIFIC_FIRST + 14, 00216 CS_VATTRIB_TEXCOORD7 = CS_VATTRIB_SPECIFIC_FIRST + 15, 00218 00221 CS_VATTRIB_0 = CS_VATTRIB_GENERIC_FIRST + 0, 00222 CS_VATTRIB_1 = CS_VATTRIB_GENERIC_FIRST + 1, 00223 CS_VATTRIB_2 = CS_VATTRIB_GENERIC_FIRST + 2, 00224 CS_VATTRIB_3 = CS_VATTRIB_GENERIC_FIRST + 3, 00225 CS_VATTRIB_4 = CS_VATTRIB_GENERIC_FIRST + 4, 00226 CS_VATTRIB_5 = CS_VATTRIB_GENERIC_FIRST + 5, 00227 CS_VATTRIB_6 = CS_VATTRIB_GENERIC_FIRST + 6, 00228 CS_VATTRIB_7 = CS_VATTRIB_GENERIC_FIRST + 7, 00229 CS_VATTRIB_8 = CS_VATTRIB_GENERIC_FIRST + 8, 00230 CS_VATTRIB_9 = CS_VATTRIB_GENERIC_FIRST + 9, 00231 CS_VATTRIB_10 = CS_VATTRIB_GENERIC_FIRST + 10, 00232 CS_VATTRIB_11 = CS_VATTRIB_GENERIC_FIRST + 11, 00233 CS_VATTRIB_12 = CS_VATTRIB_GENERIC_FIRST + 12, 00234 CS_VATTRIB_13 = CS_VATTRIB_GENERIC_FIRST + 13, 00235 CS_VATTRIB_14 = CS_VATTRIB_GENERIC_FIRST + 14, 00236 CS_VATTRIB_15 = CS_VATTRIB_GENERIC_FIRST + 15, 00238 00240 CS_IATTRIB_OBJECT2WORLD = CS_IATTRIB_FIRST + 0 00241 }; 00242 00252 #define CS_MIXMODE_TYPE_AUTO (0x00000000) 00253 00261 #define CS_MIXMODE_TYPE_BLENDOP (0x40000000) 00262 00266 #define CS_MIXMODE_FLAG_BLENDOP_ALPHA (0x08000000) 00267 00271 #define CS_MIXMODE_TYPE_MESH (0x80000000) 00272 00274 #define CS_MIXMODE_TYPE_MASK (0xc0000000) 00275 00277 00278 enum 00279 { 00281 CS_MIXMODE_FACT_ZERO = 0x0, 00283 CS_MIXMODE_FACT_ONE = 0x1, 00285 CS_MIXMODE_FACT_SRCCOLOR = 0x2, 00287 CS_MIXMODE_FACT_SRCCOLOR_INV = 0x3, 00289 CS_MIXMODE_FACT_DSTCOLOR = 0x4, 00291 CS_MIXMODE_FACT_DSTCOLOR_INV = 0x5, 00293 CS_MIXMODE_FACT_SRCALPHA = 0x6, 00295 CS_MIXMODE_FACT_SRCALPHA_INV = 0x7, 00297 CS_MIXMODE_FACT_DSTALPHA = 0x8, 00299 CS_MIXMODE_FACT_DSTALPHA_INV = 0x9, 00300 00302 CS_MIXMODE_FACT_COUNT = 0xa, 00303 00305 CS_MIXMODE_FACT_MASK = 0xf 00306 }; 00307 00318 #define CS_MIXMODE_ALPHATEST_AUTO (0x00000000) 00320 #define CS_MIXMODE_ALPHATEST_ENABLE (0x10000000) 00322 #define CS_MIXMODE_ALPHATEST_DISABLE (0x20000000) 00323 00325 #define CS_MIXMODE_ALPHATEST_MASK (0x30000000) 00326 00340 #define CS_MIXMODE_BLEND(Src, Dst) \ 00341 (CS_MIXMODE_TYPE_BLENDOP \ 00342 | (CS_MIXMODE_FACT_ ## Src << 20) | (CS_MIXMODE_FACT_ ## Dst << 16)) 00344 #define CS_MIXMODE_BLENDOP_SRC(mode) ((mode >> 20) & CS_MIXMODE_FACT_MASK) 00346 #define CS_MIXMODE_BLENDOP_DST(mode) ((mode >> 16) & CS_MIXMODE_FACT_MASK) 00347 00360 #define CS_MIXMODE_BLEND_ALPHA(Src, Dst) \ 00361 (CS_MIXMODE_FLAG_BLENDOP_ALPHA \ 00362 | (CS_MIXMODE_FACT_ ## Src << 12) | (CS_MIXMODE_FACT_ ## Dst << 8)) 00364 #define CS_MIXMODE_BLENDOP_ALPHA_SRC(mode) ((mode >> 12) & CS_MIXMODE_FACT_MASK) 00366 #define CS_MIXMODE_BLENDOP_ALPHA_DST(mode) ((mode >> 8) & CS_MIXMODE_FACT_MASK) 00367 00382 #define CS_FX_COPY (CS_MIXMODE_TYPE_AUTO | CS_MIXMODE_ALPHATEST_AUTO) 00384 #define CS_FX_MULTIPLY \ 00385 (CS_MIXMODE_BLEND(DSTCOLOR, ZERO) | CS_MIXMODE_ALPHATEST_DISABLE) 00387 #define CS_FX_MULTIPLY2 \ 00388 (CS_MIXMODE_BLEND(DSTCOLOR, SRCCOLOR) | CS_MIXMODE_ALPHATEST_DISABLE) 00390 #define CS_FX_ADD \ 00391 (CS_MIXMODE_BLEND(ONE, ONE) | CS_MIXMODE_ALPHATEST_DISABLE) 00392 00397 #define CS_FX_ALPHA \ 00398 (CS_MIXMODE_BLEND(SRCALPHA, SRCALPHA_INV) \ 00399 | CS_MIXMODE_BLEND_ALPHA(ONE, SRCALPHA_INV) | CS_MIXMODE_ALPHATEST_DISABLE) 00400 00405 #define CS_FX_TRANSPARENT \ 00406 (CS_MIXMODE_BLEND(ZERO, ONE) | CS_MIXMODE_ALPHATEST_DISABLE) 00407 00411 #define CS_FX_DESTALPHAADD \ 00412 (CS_MIXMODE_BLEND(DSTALPHA, ONE) | CS_MIXMODE_ALPHATEST_DISABLE) 00413 00417 #define CS_FX_SRCALPHAADD \ 00418 (CS_MIXMODE_BLEND(SRCALPHA, ONE) | CS_MIXMODE_ALPHATEST_DISABLE) 00419 00428 #define CS_FX_PREMULTALPHA \ 00429 (CS_MIXMODE_BLEND(ONE, SRCALPHA_INV) | \ 00430 CS_MIXMODE_BLEND_ALPHA(ONE, SRCALPHA_INV) | CS_MIXMODE_ALPHATEST_DISABLE) 00431 00435 #define CS_FX_MESH (CS_MIXMODE_TYPE_MESH) 00436 00438 #define CS_FX_FLAT (0x04000000) 00439 00448 #define CS_FX_MASK_ALPHA (0x000000FF) 00449 00454 #define CS_FX_MASK_MIXMODE (0xf8ffff00) 00455 00459 00460 #define CS_FX_SETALPHA(alpha) \ 00461 (CS_FX_ALPHA | uint ((alpha) * CS_FX_MASK_ALPHA)) 00463 #define CS_FX_SETALPHA_INT(alpha) \ 00464 (CS_FX_ALPHA | uint ((alpha) & CS_FX_MASK_ALPHA)) 00465 00470 struct csAlphaMode 00471 { 00473 enum AlphaType 00474 { 00476 alphaNone = 1, 00478 alphaBinary, 00480 alphaSmooth 00481 }; 00483 bool autoAlphaMode; 00484 union 00485 { 00487 AlphaType alphaType; 00492 CS::StringIDValue autoModeTexture; 00493 }; 00494 }; 00499 00500 #define CS_SHADOW_VOLUME_BEGIN 1 00502 #define CS_SHADOW_VOLUME_PASS1 2 00504 #define CS_SHADOW_VOLUME_PASS2 3 00506 #define CS_SHADOW_VOLUME_FAIL1 4 00508 #define CS_SHADOW_VOLUME_FAIL2 5 00510 #define CS_SHADOW_VOLUME_USE 6 00512 #define CS_SHADOW_VOLUME_FINISH 7 00513 00515 00516 enum G3D_RENDERSTATEOPTION 00517 { 00519 G3DRENDERSTATE_EDGES 00520 }; 00521 00523 struct csGraphics3DCaps 00524 { 00526 int minTexHeight, minTexWidth; 00528 int maxTexHeight, maxTexWidth; 00533 bool SupportsPointSprites; 00537 bool DestinationAlpha; 00541 bool StencilShadows; 00546 int MaxRTColorAttachments; 00547 }; 00548 00550 enum csRenderMeshType 00551 { 00553 CS_MESHTYPE_TRIANGLES, 00555 CS_MESHTYPE_QUADS, 00565 CS_MESHTYPE_TRIANGLESTRIP, 00571 CS_MESHTYPE_TRIANGLEFAN, 00575 CS_MESHTYPE_POINTS, 00581 CS_MESHTYPE_POINT_SPRITES, 00585 CS_MESHTYPE_LINES, 00590 CS_MESHTYPE_LINESTRIP 00591 }; 00592 00596 enum csSimpleMeshFlags 00597 { 00604 csSimpleMeshScreenspace = 0x01 00605 }; 00606 00611 enum csOpenPortalFlags 00612 { 00621 CS_OPENPORTAL_ZFILL = 0x00000004, 00626 CS_OPENPORTAL_MIRROR = 0x00000010, 00634 CS_OPENPORTAL_FLOAT = 0x00000040 00635 }; 00636 00640 struct csSimpleRenderMesh 00641 { 00643 csRenderMeshType meshtype; 00644 00646 uint indexCount; 00654 const uint* indices; 00656 00661 uint indexStart, indexEnd; 00663 00665 uint vertexCount; 00671 const csVector3* vertices; 00673 const csVector2* texcoords; 00679 const csVector4* colors; 00684 iTextureHandle* texture; 00685 00687 iShader* shader; 00689 iShaderVariableContext* dynDomain; 00691 csAlphaMode alphaType; 00693 csZBufMode z_buf_mode; 00695 uint mixmode; 00706 csReversibleTransform object2world; 00708 csRef<csRenderBufferHolder> renderBuffers; 00709 00710 csSimpleRenderMesh () : indexCount(0), indices(0), indexStart (0), 00711 indexEnd (0), texcoords(0), colors(0), 00712 texture (0), shader (0), dynDomain (0), z_buf_mode (CS_ZBUF_NONE), 00713 mixmode (CS_FX_COPY) 00714 { 00715 alphaType.autoAlphaMode = true; 00716 alphaType.autoModeTexture = csInvalidStringID; 00717 }; 00718 }; 00719 00724 enum csRenderTargetAttachment 00725 { 00727 rtaDepth, 00729 rtaColor0, 00731 rtaColor1, 00733 rtaColor2, 00735 rtaColor3, 00737 rtaColor4, 00739 rtaColor5, 00741 rtaColor6, 00743 rtaColor7, 00745 rtaColor8, 00747 rtaColor9, 00749 rtaColor10, 00751 rtaColor11, 00753 rtaColor12, 00755 rtaColor13, 00757 rtaColor14, 00759 rtaColor15, 00760 00761 /* 00762 * We stop at 16 color buffer attachment points since that is the current limit placed 00763 * on the OpenGL framebuffer extension (as of May 19 2010). 00764 * 00765 * http://www.opengl.org/registry/specs/EXT/framebuffer_object.txt 00766 */ 00767 00769 rtaNumAttachments, 00771 rtaNumColorAttachments = rtaNumAttachments - 1 00772 }; 00773 00774 namespace CS 00775 { 00776 namespace Graphics 00777 { 00778 struct TextureComparisonMode 00779 { 00780 enum Mode 00781 { 00782 compareNone, 00783 compareR 00784 }; 00785 Mode mode; 00786 enum Function 00787 { 00788 funcLEqual, 00789 funcGEqual 00790 }; 00791 Function function; 00792 00793 TextureComparisonMode() : mode (compareNone), function (funcLEqual) {} 00794 }; 00795 } // namespace Graphics 00796 } // namespace CS 00797 00809 struct iGraphics3D : public virtual iBase 00810 { 00811 SCF_INTERFACE(iGraphics3D, 4, 0, 3); 00812 00814 virtual bool Open () = 0; 00816 virtual void Close () = 0; 00817 00825 virtual iGraphics2D *GetDriver2D () = 0; 00826 00833 virtual iTextureManager *GetTextureManager () = 0; 00834 00839 CS_DEPRECATED_METHOD 00840 virtual void SetDimensions (int width, int height) = 0; 00842 virtual int GetWidth () const = 0; 00844 virtual int GetHeight () const = 0; 00845 00850 virtual const csGraphics3DCaps *GetCaps () const = 0; 00851 00859 CS_DEPRECATED_METHOD_MSG("Use explicit projection matrix instead") 00860 virtual void SetPerspectiveCenter (int x, int y) = 0; 00861 00869 CS_DEPRECATED_METHOD_MSG("Use explicit projection matrix instead") 00870 virtual void GetPerspectiveCenter (int& x, int& y) const = 0; 00871 00876 CS_DEPRECATED_METHOD_MSG("Use explicit projection matrix instead") 00877 virtual void SetPerspectiveAspect (float aspect) = 0; 00878 00883 CS_DEPRECATED_METHOD_MSG("Use explicit projection matrix instead") 00884 virtual float GetPerspectiveAspect () const = 0; 00885 00913 virtual bool SetRenderTarget (iTextureHandle* handle, 00914 bool persistent = false, 00915 int subtexture = 0, 00916 csRenderTargetAttachment attachment = rtaColor0) = 0; 00917 00926 virtual bool ValidateRenderTargets () = 0; 00927 00934 virtual bool CanSetRenderTarget (const char* format, 00935 csRenderTargetAttachment attachment = rtaColor0) = 0; 00936 00942 virtual iTextureHandle* GetRenderTarget ( 00943 csRenderTargetAttachment attachment = rtaColor0, 00944 int* subtexture = 0) const = 0; 00945 00947 virtual void UnsetRenderTargets() = 0; 00948 00950 virtual bool BeginDraw (int DrawFlags) = 0; 00951 00953 virtual void FinishDraw () = 0; 00954 00960 virtual void Print (csRect const* area) = 0; 00961 00963 virtual void DrawMesh (const CS::Graphics::CoreRenderMesh* mymesh, 00964 const CS::Graphics::RenderMeshModes& modes, 00965 const csShaderVariableStack& stack) = 0; 00982 virtual void DrawSimpleMesh (const csSimpleRenderMesh& mesh, 00983 uint flags = 0) = 0; 00984 00999 virtual void DrawPixmap (iTextureHandle *hTex, int sx, int sy, 01000 int sw, int sh, int tx, int ty, int tw, int th, uint8 Alpha = 0) = 0; 01001 01007 CS_DEPRECATED_METHOD_MSG("Use iGraphics2D::DrawLineProjected() instead") 01008 virtual void DrawLine (const csVector3& v1, const csVector3& v2, 01009 float fov, int color) = 0; 01010 01014 virtual bool ActivateBuffers (csRenderBufferHolder* holder, 01015 csRenderBufferName mapping[CS_VATTRIB_SPECIFIC_LAST+1]) = 0; 01016 01020 virtual bool ActivateBuffers (csVertexAttrib *attribs, 01021 iRenderBuffer **buffers, unsigned int count) = 0; 01022 01027 virtual void DeactivateBuffers (csVertexAttrib *attribs, unsigned int count) = 0; 01028 01034 virtual void SetTextureState (int* units, iTextureHandle** textures, 01035 int count) = 0; 01036 01037 01043 virtual void SetClipper (iClipper2D* clipper, int cliptype) = 0; 01044 01048 virtual iClipper2D* GetClipper () = 0; 01049 01053 virtual int GetClipType () const = 0; 01054 01059 virtual void SetNearPlane (const csPlane3& pl) = 0; 01060 01064 virtual void ResetNearPlane () = 0; 01065 01069 virtual const csPlane3& GetNearPlane () const = 0; 01070 01074 virtual bool HasNearPlane () const = 0; 01075 01080 CS_DEPRECATED_METHOD_MSG("Use SetEdgeDrawing() for sole supported render state") 01081 virtual bool SetRenderState (G3D_RENDERSTATEOPTION op, long val) = 0; 01082 01087 CS_DEPRECATED_METHOD_MSG("Use GetEdgeDrawing() for sole supported render state") 01088 virtual long GetRenderState (G3D_RENDERSTATEOPTION op) const = 0; 01089 01094 virtual bool SetOption (const char*, const char*) = 0; 01095 01097 virtual void SetWriteMask (bool red, bool green, bool blue, bool alpha) = 0; 01098 01100 virtual void GetWriteMask (bool &red, bool &green, bool &blue, 01101 bool &alpha) const = 0; 01102 01104 virtual void SetZMode (csZBufMode mode) = 0; 01105 01107 virtual csZBufMode GetZMode () = 0; 01108 01112 CS_DEPRECATED_METHOD_MSG("Nonfunctional. Use RenderMeshModes::zoffset instead") 01113 virtual void EnableZOffset () = 0; 01114 01118 CS_DEPRECATED_METHOD_MSG("Nonfunctional. Use RenderMeshModes::zoffset instead") 01119 virtual void DisableZOffset () = 0; 01120 01122 virtual void SetShadowState (int state) = 0; 01123 01125 virtual float GetZBuffValue (int x, int y) = 0; 01126 01137 virtual void OpenPortal (size_t numVertices, const csVector2* vertices, 01138 const csPlane3& normal, csFlags flags) = 0; 01139 01144 virtual void ClosePortal () = 0; 01145 01147 virtual iHalo *CreateHalo (float iR, float iG, float iB, 01148 unsigned char *iAlpha, int iWidth, int iHeight) = 0; 01149 01155 virtual void SetWorldToCamera (const csReversibleTransform& w2c) = 0; 01156 01164 virtual bool PerformExtension (char const* command, ...) = 0; 01165 01171 virtual bool PerformExtensionV (char const* command, va_list) = 0; 01172 01177 virtual const csReversibleTransform& GetWorldToCamera () = 0; 01181 virtual int GetCurrentDrawFlags() const = 0; 01182 01183 virtual const CS::Math::Matrix4& GetProjectionMatrix() = 0; 01187 virtual void SetProjectionMatrix (const CS::Math::Matrix4& m) = 0; 01188 01192 virtual void SetTextureComparisonModes (int* units, 01193 CS::Graphics::TextureComparisonMode* texCompare, 01194 int count) = 0; 01195 01206 virtual void CopyFromRenderTargets (size_t num, 01207 csRenderTargetAttachment* attachments, 01208 iTextureHandle** textures, 01209 int* subtextures = 0) = 0; 01210 01215 virtual void DrawSimpleMeshes (const csSimpleRenderMesh* meshes, 01216 size_t numMeshes, uint flags = 0) = 0; 01217 01223 virtual void OQInitQueries (unsigned int* queries, int num_queries) = 0; 01224 01226 virtual void OQDelQueries (unsigned int* queries, int num_queries) = 0; 01227 01231 virtual bool OQueryFinished (unsigned int occlusion_query) = 0; 01232 01236 virtual bool OQIsVisible (unsigned int occlusion_query, unsigned int sampleLimit = 0) = 0; 01237 01239 virtual void OQBeginQuery (unsigned int occlusion_query) = 0; 01241 virtual void OQEndQuery () = 0; 01244 virtual void DrawMeshBasic(const CS::Graphics::CoreRenderMesh* mymesh, 01245 const CS::Graphics::RenderMeshModes& modes) = 0; 01246 01248 virtual void SetEdgeDrawing (bool flag) = 0; 01250 virtual bool GetEdgeDrawing () = 0; 01251 }; 01252 01255 #endif // __CS_IVIDEO_GRAPH3D_H__
Generated for Crystal Space 2.0 by doxygen 1.6.1