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 #include <stdarg.h> 00042 00043 struct iClipper2D; 00044 struct iGraphics2D; 00045 struct iHalo; 00046 struct iRenderBuffer; 00047 struct iShader; 00048 struct iShaderVariableContext; 00049 struct iTextureHandle; 00050 struct iTextureManager; 00051 00052 class csRect; 00053 class csPlane3; 00054 class csShaderVariable; 00055 class csVector2; 00056 class csVector3; 00057 class csVector4; 00058 00059 namespace CS 00060 { 00061 namespace Graphics 00062 { 00063 struct CoreRenderMesh; 00064 struct RenderMeshModes; 00065 } // namespace Graphics 00066 } // namespace CS 00067 class csRenderBufferHolder; 00068 class csShaderVariableStack; 00069 00070 00073 00074 #define CSDRAW_2DGRAPHICS 0x00000001 00076 #define CSDRAW_3DGRAPHICS 0x00000002 00078 #define CSDRAW_CLEARZBUFFER 0x00000010 00080 #define CSDRAW_CLEARSCREEN 0x00000020 00082 #define CSDRAW_NOCLIPCLEAR 0x00000040 00083 00088 #define CSDRAW_READBACK 0x00000080 00089 00096 #define CS_CLIPPER_NONE -1 00097 00100 #define CS_CLIPPER_OPTIONAL 0 00101 00104 #define CS_CLIPPER_TOPLEVEL 1 00105 00108 #define CS_CLIPPER_REQUIRED 2 00109 00117 #define CS_CLIP_NOT 0 00118 00123 #define CS_CLIP_NEEDED 1 00124 00126 00127 enum csZBufMode 00128 { 00130 CS_ZBUF_NONE = 0x00000000, 00132 CS_ZBUF_FILL = 0x00000001, 00134 CS_ZBUF_TEST = 0x00000002, 00136 CS_ZBUF_USE = 0x00000003, 00138 CS_ZBUF_EQUAL = 0x00000004, 00140 CS_ZBUF_INVERT = 0x00000005, 00141 00143 CS_ZBUF_MESH = 0x80000000, 00152 CS_ZBUF_MESH2 = 0x80000001 00153 }; 00154 00155 // @@@ Keep in sync with values below 00156 // \todo Document me! 00157 #define CS_VATTRIB_SPECIFIC_FIRST 0 00158 #define CS_VATTRIB_SPECIFIC_LAST 15 00159 #define CS_VATTRIB_SPECIFIC_NUM \ 00160 (CS_VATTRIB_SPECIFIC_LAST - CS_VATTRIB_SPECIFIC_FIRST + 1) 00161 #define CS_VATTRIB_GENERIC_FIRST 100 00162 #define CS_VATTRIB_GENERIC_LAST (CS_VATTRIB_GENERIC_FIRST + 15) 00163 #define CS_VATTRIB_GENERIC_NUM \ 00164 (CS_VATTRIB_GENERIC_LAST - CS_VATTRIB_GENERIC_FIRST + 1) 00165 #define CS_IATTRIB_FIRST 200 00166 #define CS_IATTRIB_LAST (CS_IATTRIB_FIRST + 0) 00167 #define CS_IATTRIB_NUM \ 00168 (CS_IATTRIB_LAST - CS_IATTRIB_FIRST + 1) 00169 00170 00171 #define CS_VATTRIB_IS_GENERIC(va) \ 00172 ((va >= CS_VATTRIB_GENERIC_FIRST) && (va <=CS_VATTRIB_GENERIC_LAST)) 00173 #define CS_VATTRIB_IS_SPECIFIC(va) \ 00174 ((va >= CS_VATTRIB_SPECIFIC_FIRST) && (va <=CS_VATTRIB_SPECIFIC_LAST)) 00175 00179 enum csVertexAttrib 00180 { 00184 CS_VATTRIB_UNUSED = -2, 00186 CS_VATTRIB_INVALID = -1, 00188 CS_VATTRIB_POSITION = CS_VATTRIB_SPECIFIC_FIRST + 0, 00190 CS_VATTRIB_WEIGHT = CS_VATTRIB_SPECIFIC_FIRST + 1, 00192 CS_VATTRIB_NORMAL = CS_VATTRIB_SPECIFIC_FIRST + 2, 00194 CS_VATTRIB_COLOR = CS_VATTRIB_SPECIFIC_FIRST + 3, 00196 CS_VATTRIB_PRIMARY_COLOR = CS_VATTRIB_SPECIFIC_FIRST + 3, 00198 CS_VATTRIB_SECONDARY_COLOR = CS_VATTRIB_SPECIFIC_FIRST + 4, 00200 CS_VATTRIB_FOGCOORD = CS_VATTRIB_SPECIFIC_FIRST + 5, 00202 CS_VATTRIB_TEXCOORD = CS_VATTRIB_SPECIFIC_FIRST + 8, 00204 CS_VATTRIB_TEXCOORD0 = CS_VATTRIB_SPECIFIC_FIRST + 8, 00206 CS_VATTRIB_TEXCOORD1 = CS_VATTRIB_SPECIFIC_FIRST + 9, 00208 CS_VATTRIB_TEXCOORD2 = CS_VATTRIB_SPECIFIC_FIRST + 10, 00210 CS_VATTRIB_TEXCOORD3 = CS_VATTRIB_SPECIFIC_FIRST + 11, 00212 CS_VATTRIB_TEXCOORD4 = CS_VATTRIB_SPECIFIC_FIRST + 12, 00214 CS_VATTRIB_TEXCOORD5 = CS_VATTRIB_SPECIFIC_FIRST + 13, 00216 CS_VATTRIB_TEXCOORD6 = CS_VATTRIB_SPECIFIC_FIRST + 14, 00218 CS_VATTRIB_TEXCOORD7 = CS_VATTRIB_SPECIFIC_FIRST + 15, 00220 00223 CS_VATTRIB_0 = CS_VATTRIB_GENERIC_FIRST + 0, 00224 CS_VATTRIB_1 = CS_VATTRIB_GENERIC_FIRST + 1, 00225 CS_VATTRIB_2 = CS_VATTRIB_GENERIC_FIRST + 2, 00226 CS_VATTRIB_3 = CS_VATTRIB_GENERIC_FIRST + 3, 00227 CS_VATTRIB_4 = CS_VATTRIB_GENERIC_FIRST + 4, 00228 CS_VATTRIB_5 = CS_VATTRIB_GENERIC_FIRST + 5, 00229 CS_VATTRIB_6 = CS_VATTRIB_GENERIC_FIRST + 6, 00230 CS_VATTRIB_7 = CS_VATTRIB_GENERIC_FIRST + 7, 00231 CS_VATTRIB_8 = CS_VATTRIB_GENERIC_FIRST + 8, 00232 CS_VATTRIB_9 = CS_VATTRIB_GENERIC_FIRST + 9, 00233 CS_VATTRIB_10 = CS_VATTRIB_GENERIC_FIRST + 10, 00234 CS_VATTRIB_11 = CS_VATTRIB_GENERIC_FIRST + 11, 00235 CS_VATTRIB_12 = CS_VATTRIB_GENERIC_FIRST + 12, 00236 CS_VATTRIB_13 = CS_VATTRIB_GENERIC_FIRST + 13, 00237 CS_VATTRIB_14 = CS_VATTRIB_GENERIC_FIRST + 14, 00238 CS_VATTRIB_15 = CS_VATTRIB_GENERIC_FIRST + 15, 00240 00242 CS_IATTRIB_OBJECT2WORLD = CS_IATTRIB_FIRST + 0 00243 }; 00244 00254 #define CS_MIXMODE_TYPE_AUTO (0x00000000) 00255 00263 #define CS_MIXMODE_TYPE_BLENDOP (0x40000000) 00264 00268 #define CS_MIXMODE_FLAG_BLENDOP_ALPHA (0x08000000) 00269 00273 #define CS_MIXMODE_TYPE_MESH (0x80000000) 00274 00276 #define CS_MIXMODE_TYPE_MASK (0xc0000000) 00277 00279 00280 enum 00281 { 00283 CS_MIXMODE_FACT_ZERO = 0x0, 00285 CS_MIXMODE_FACT_ONE = 0x1, 00287 CS_MIXMODE_FACT_SRCCOLOR = 0x2, 00289 CS_MIXMODE_FACT_SRCCOLOR_INV = 0x3, 00291 CS_MIXMODE_FACT_DSTCOLOR = 0x4, 00293 CS_MIXMODE_FACT_DSTCOLOR_INV = 0x5, 00295 CS_MIXMODE_FACT_SRCALPHA = 0x6, 00297 CS_MIXMODE_FACT_SRCALPHA_INV = 0x7, 00299 CS_MIXMODE_FACT_DSTALPHA = 0x8, 00301 CS_MIXMODE_FACT_DSTALPHA_INV = 0x9, 00302 00304 CS_MIXMODE_FACT_COUNT = 0xa, 00305 00307 CS_MIXMODE_FACT_MASK = 0xf 00308 }; 00309 00320 #define CS_MIXMODE_ALPHATEST_AUTO (0x00000000) 00322 #define CS_MIXMODE_ALPHATEST_ENABLE (0x10000000) 00324 #define CS_MIXMODE_ALPHATEST_DISABLE (0x20000000) 00325 00327 #define CS_MIXMODE_ALPHATEST_MASK (0x30000000) 00328 00342 #define CS_MIXMODE_BLEND(Src, Dst) \ 00343 (CS_MIXMODE_TYPE_BLENDOP \ 00344 | (CS_MIXMODE_FACT_ ## Src << 20) | (CS_MIXMODE_FACT_ ## Dst << 16)) 00346 #define CS_MIXMODE_BLENDOP_SRC(mode) ((mode >> 20) & CS_MIXMODE_FACT_MASK) 00348 #define CS_MIXMODE_BLENDOP_DST(mode) ((mode >> 16) & CS_MIXMODE_FACT_MASK) 00349 00362 #define CS_MIXMODE_BLEND_ALPHA(Src, Dst) \ 00363 (CS_MIXMODE_FLAG_BLENDOP_ALPHA \ 00364 | (CS_MIXMODE_FACT_ ## Src << 12) | (CS_MIXMODE_FACT_ ## Dst << 8)) 00366 #define CS_MIXMODE_BLENDOP_ALPHA_SRC(mode) ((mode >> 12) & CS_MIXMODE_FACT_MASK) 00368 #define CS_MIXMODE_BLENDOP_ALPHA_DST(mode) ((mode >> 8) & CS_MIXMODE_FACT_MASK) 00369 00384 #define CS_FX_COPY (CS_MIXMODE_TYPE_AUTO | CS_MIXMODE_ALPHATEST_AUTO) 00386 #define CS_FX_MULTIPLY \ 00387 (CS_MIXMODE_BLEND(DSTCOLOR, ZERO) | CS_MIXMODE_ALPHATEST_DISABLE) 00389 #define CS_FX_MULTIPLY2 \ 00390 (CS_MIXMODE_BLEND(DSTCOLOR, SRCCOLOR) | CS_MIXMODE_ALPHATEST_DISABLE) 00392 #define CS_FX_ADD \ 00393 (CS_MIXMODE_BLEND(ONE, ONE) | CS_MIXMODE_ALPHATEST_DISABLE) 00394 00399 #define CS_FX_ALPHA \ 00400 (CS_MIXMODE_BLEND(SRCALPHA, SRCALPHA_INV) \ 00401 | CS_MIXMODE_BLEND_ALPHA(ONE, SRCALPHA_INV) | CS_MIXMODE_ALPHATEST_DISABLE) 00402 00407 #define CS_FX_TRANSPARENT \ 00408 (CS_MIXMODE_BLEND(ZERO, ONE) | CS_MIXMODE_ALPHATEST_DISABLE) 00409 00413 #define CS_FX_DESTALPHAADD \ 00414 (CS_MIXMODE_BLEND(DSTALPHA, ONE) | CS_MIXMODE_ALPHATEST_DISABLE) 00415 00419 #define CS_FX_SRCALPHAADD \ 00420 (CS_MIXMODE_BLEND(SRCALPHA, ONE) | CS_MIXMODE_ALPHATEST_DISABLE) 00421 00430 #define CS_FX_PREMULTALPHA \ 00431 (CS_MIXMODE_BLEND(ONE, SRCALPHA_INV) | \ 00432 CS_MIXMODE_BLEND_ALPHA(ONE, SRCALPHA_INV) | CS_MIXMODE_ALPHATEST_DISABLE) 00433 00437 #define CS_FX_MESH (CS_MIXMODE_TYPE_MESH) 00438 00440 #define CS_FX_FLAT (0x04000000) 00441 00450 #define CS_FX_MASK_ALPHA (0x000000FF) 00451 00456 #define CS_FX_MASK_MIXMODE (0xf8ffff00) 00457 00461 00462 #define CS_FX_SETALPHA(alpha) \ 00463 (CS_FX_ALPHA | uint ((alpha) * CS_FX_MASK_ALPHA)) 00465 #define CS_FX_SETALPHA_INT(alpha) \ 00466 (CS_FX_ALPHA | uint ((alpha) & CS_FX_MASK_ALPHA)) 00467 00472 struct csAlphaMode 00473 { 00475 enum AlphaType 00476 { 00478 alphaNone = 1, 00480 alphaBinary, 00482 alphaSmooth 00483 }; 00485 bool autoAlphaMode; 00486 union 00487 { 00489 AlphaType alphaType; 00494 CS::StringIDValue autoModeTexture; 00495 }; 00496 }; 00501 00502 #define CS_SHADOW_VOLUME_BEGIN 1 00504 #define CS_SHADOW_VOLUME_PASS1 2 00506 #define CS_SHADOW_VOLUME_PASS2 3 00508 #define CS_SHADOW_VOLUME_FAIL1 4 00510 #define CS_SHADOW_VOLUME_FAIL2 5 00512 #define CS_SHADOW_VOLUME_USE 6 00514 #define CS_SHADOW_VOLUME_FINISH 7 00515 00517 00518 enum G3D_RENDERSTATEOPTION 00519 { 00521 G3DRENDERSTATE_EDGES 00522 }; 00523 00525 struct csGraphics3DCaps 00526 { 00528 int minTexHeight, minTexWidth; 00530 int maxTexHeight, maxTexWidth; 00535 bool SupportsPointSprites; 00539 bool DestinationAlpha; 00543 bool StencilShadows; 00548 int MaxRTColorAttachments; 00549 }; 00550 00552 enum csRenderMeshType 00553 { 00555 CS_MESHTYPE_TRIANGLES, 00557 CS_MESHTYPE_QUADS, 00567 CS_MESHTYPE_TRIANGLESTRIP, 00573 CS_MESHTYPE_TRIANGLEFAN, 00577 CS_MESHTYPE_POINTS, 00583 CS_MESHTYPE_POINT_SPRITES, 00587 CS_MESHTYPE_LINES, 00592 CS_MESHTYPE_LINESTRIP 00593 }; 00594 00598 enum csSimpleMeshFlags 00599 { 00606 csSimpleMeshScreenspace = 0x01 00607 }; 00608 00613 enum csOpenPortalFlags 00614 { 00623 CS_OPENPORTAL_ZFILL = 0x00000004, 00628 CS_OPENPORTAL_MIRROR = 0x00000010, 00636 CS_OPENPORTAL_FLOAT = 0x00000040 00637 }; 00638 00642 struct csSimpleRenderMesh 00643 { 00645 csRenderMeshType meshtype; 00646 00648 uint indexCount; 00656 const uint* indices; 00658 00663 uint indexStart, indexEnd; 00665 00667 uint vertexCount; 00673 const csVector3* vertices; 00675 const csVector2* texcoords; 00681 const csVector4* colors; 00686 iTextureHandle* texture; 00687 00689 iShader* shader; 00691 iShaderVariableContext* dynDomain; 00693 csAlphaMode alphaType; 00695 csZBufMode z_buf_mode; 00697 uint mixmode; 00708 csReversibleTransform object2world; 00710 csRef<csRenderBufferHolder> renderBuffers; 00711 00712 csSimpleRenderMesh () : indexCount(0), indices(0), indexStart (0), 00713 indexEnd (0), texcoords(0), colors(0), 00714 texture (0), shader (0), dynDomain (0), z_buf_mode (CS_ZBUF_NONE), 00715 mixmode (CS_FX_COPY) 00716 { 00717 alphaType.autoAlphaMode = true; 00718 alphaType.autoModeTexture = csInvalidStringID; 00719 }; 00720 }; 00721 00726 enum csRenderTargetAttachment 00727 { 00729 rtaDepth, 00731 rtaColor0, 00733 rtaColor1, 00735 rtaColor2, 00737 rtaColor3, 00739 rtaColor4, 00741 rtaColor5, 00743 rtaColor6, 00745 rtaColor7, 00747 rtaColor8, 00749 rtaColor9, 00751 rtaColor10, 00753 rtaColor11, 00755 rtaColor12, 00757 rtaColor13, 00759 rtaColor14, 00761 rtaColor15, 00762 00763 /* 00764 * We stop at 16 color buffer attachment points since that is the current limit placed 00765 * on the OpenGL framebuffer extension (as of May 19 2010). 00766 * 00767 * http://www.opengl.org/registry/specs/EXT/framebuffer_object.txt 00768 */ 00769 00771 rtaNumAttachments, 00773 rtaNumColorAttachments = rtaNumAttachments - 1 00774 }; 00775 00776 namespace CS 00777 { 00778 namespace Graphics 00779 { 00780 struct TextureComparisonMode 00781 { 00782 enum Mode 00783 { 00784 compareNone, 00785 compareR 00786 }; 00787 Mode mode; 00788 enum Function 00789 { 00790 funcLEqual, 00791 funcGEqual 00792 }; 00793 Function function; 00794 00795 TextureComparisonMode() : mode (compareNone), function (funcLEqual) {} 00796 }; 00797 } // namespace Graphics 00798 } // namespace CS 00799 00811 struct iGraphics3D : public virtual iBase 00812 { 00813 SCF_INTERFACE(iGraphics3D, 5, 0, 0); 00814 00816 virtual bool Open () = 0; 00818 virtual void Close () = 0; 00819 00827 virtual iGraphics2D *GetDriver2D () = 0; 00828 00835 virtual iTextureManager *GetTextureManager () = 0; 00836 00841 CS_DEPRECATED_METHOD 00842 virtual void SetDimensions (int width, int height) = 0; 00844 virtual int GetWidth () const = 0; 00846 virtual int GetHeight () const = 0; 00847 00852 virtual const csGraphics3DCaps *GetCaps () const = 0; 00853 00861 CS_DEPRECATED_METHOD_MSG("Use explicit projection matrix instead") 00862 virtual void SetPerspectiveCenter (int x, int y) = 0; 00863 00871 CS_DEPRECATED_METHOD_MSG("Use explicit projection matrix instead") 00872 virtual void GetPerspectiveCenter (int& x, int& y) const = 0; 00873 00878 CS_DEPRECATED_METHOD_MSG("Use explicit projection matrix instead") 00879 virtual void SetPerspectiveAspect (float aspect) = 0; 00880 00885 CS_DEPRECATED_METHOD_MSG("Use explicit projection matrix instead") 00886 virtual float GetPerspectiveAspect () const = 0; 00887 00915 virtual bool SetRenderTarget (iTextureHandle* handle, 00916 bool persistent = false, 00917 int subtexture = 0, 00918 csRenderTargetAttachment attachment = rtaColor0) = 0; 00919 00928 virtual bool ValidateRenderTargets () = 0; 00929 00936 virtual bool CanSetRenderTarget (const char* format, 00937 csRenderTargetAttachment attachment = rtaColor0) = 0; 00938 00944 virtual iTextureHandle* GetRenderTarget ( 00945 csRenderTargetAttachment attachment = rtaColor0, 00946 int* subtexture = 0) const = 0; 00947 00949 virtual void UnsetRenderTargets() = 0; 00950 00952 virtual bool BeginDraw (int DrawFlags) = 0; 00953 00955 virtual void FinishDraw () = 0; 00956 00962 virtual void Print (csRect const* area) = 0; 00963 00965 virtual void DrawMesh (const CS::Graphics::CoreRenderMesh* mymesh, 00966 const CS::Graphics::RenderMeshModes& modes, 00967 const csShaderVariableStack& stack) = 0; 00984 virtual void DrawSimpleMesh (const csSimpleRenderMesh& mesh, 00985 uint flags = 0) = 0; 00986 01001 virtual void DrawPixmap (iTextureHandle *hTex, int sx, int sy, 01002 int sw, int sh, int tx, int ty, int tw, int th, uint8 Alpha = 0) = 0; 01003 01009 CS_DEPRECATED_METHOD_MSG("Use iGraphics2D::DrawLineProjected() instead") 01010 virtual void DrawLine (const csVector3& v1, const csVector3& v2, 01011 float fov, int color) = 0; 01012 01016 virtual bool ActivateBuffers (csRenderBufferHolder* holder, 01017 csRenderBufferName mapping[CS_VATTRIB_SPECIFIC_LAST+1]) = 0; 01018 01022 virtual bool ActivateBuffers (csVertexAttrib *attribs, 01023 iRenderBuffer **buffers, unsigned int count) = 0; 01024 01029 virtual void DeactivateBuffers (csVertexAttrib *attribs, unsigned int count) = 0; 01030 01036 virtual void SetTextureState (int* units, iTextureHandle** textures, 01037 int count) = 0; 01038 01039 01045 virtual void SetClipper (iClipper2D* clipper, int cliptype) = 0; 01046 01050 virtual iClipper2D* GetClipper () = 0; 01051 01055 virtual int GetClipType () const = 0; 01056 01061 virtual void SetNearPlane (const csPlane3& pl) = 0; 01062 01066 virtual void ResetNearPlane () = 0; 01067 01071 virtual const csPlane3& GetNearPlane () const = 0; 01072 01076 virtual bool HasNearPlane () const = 0; 01077 01082 CS_DEPRECATED_METHOD_MSG("Use SetEdgeDrawing() for sole supported render state") 01083 virtual bool SetRenderState (G3D_RENDERSTATEOPTION op, long val) = 0; 01084 01089 CS_DEPRECATED_METHOD_MSG("Use GetEdgeDrawing() for sole supported render state") 01090 virtual long GetRenderState (G3D_RENDERSTATEOPTION op) const = 0; 01091 01096 virtual bool SetOption (const char*, const char*) = 0; 01097 01099 virtual void SetWriteMask (bool red, bool green, bool blue, bool alpha) = 0; 01100 01102 virtual void GetWriteMask (bool &red, bool &green, bool &blue, 01103 bool &alpha) const = 0; 01104 01106 virtual void SetZMode (csZBufMode mode) = 0; 01107 01109 virtual csZBufMode GetZMode () = 0; 01110 01114 CS_DEPRECATED_METHOD_MSG("Nonfunctional. Use RenderMeshModes::zoffset instead") 01115 virtual void EnableZOffset () = 0; 01116 01120 CS_DEPRECATED_METHOD_MSG("Nonfunctional. Use RenderMeshModes::zoffset instead") 01121 virtual void DisableZOffset () = 0; 01122 01124 virtual void SetShadowState (int state) = 0; 01125 01127 virtual float GetZBuffValue (int x, int y) = 0; 01128 01139 virtual void OpenPortal (size_t numVertices, const csVector2* vertices, 01140 const csPlane3& normal, csFlags flags) = 0; 01141 01146 virtual void ClosePortal () = 0; 01147 01149 virtual iHalo *CreateHalo (float iR, float iG, float iB, 01150 unsigned char *iAlpha, int iWidth, int iHeight) = 0; 01151 01157 virtual void SetWorldToCamera (const csReversibleTransform& w2c) = 0; 01158 01166 bool PerformExtension (char const* command, ...) 01167 { 01168 va_list args; 01169 va_start(args, command); 01170 bool x = PerformExtensionV(command, args); 01171 va_end(args); 01172 return x; 01173 } 01174 01180 virtual bool PerformExtensionV (char const* command, va_list) = 0; 01181 01186 virtual const csReversibleTransform& GetWorldToCamera () = 0; 01190 virtual int GetCurrentDrawFlags() const = 0; 01191 01192 virtual const CS::Math::Matrix4& GetProjectionMatrix() = 0; 01196 virtual void SetProjectionMatrix (const CS::Math::Matrix4& m) = 0; 01197 01201 virtual void SetTextureComparisonModes (int* units, 01202 CS::Graphics::TextureComparisonMode* texCompare, 01203 int count) = 0; 01204 01215 virtual void CopyFromRenderTargets (size_t num, 01216 csRenderTargetAttachment* attachments, 01217 iTextureHandle** textures, 01218 int* subtextures = 0) = 0; 01219 01224 virtual void DrawSimpleMeshes (const csSimpleRenderMesh* meshes, 01225 size_t numMeshes, uint flags = 0) = 0; 01226 01232 virtual void OQInitQueries (unsigned int* queries, int num_queries) = 0; 01233 01235 virtual void OQDelQueries (unsigned int* queries, int num_queries) = 0; 01236 01240 virtual bool OQueryFinished (unsigned int occlusion_query) = 0; 01241 01245 virtual bool OQIsVisible (unsigned int occlusion_query, unsigned int sampleLimit = 0) = 0; 01246 01248 virtual void OQBeginQuery (unsigned int occlusion_query) = 0; 01250 virtual void OQEndQuery () = 0; 01253 virtual void DrawMeshBasic(const CS::Graphics::CoreRenderMesh* mymesh, 01254 const CS::Graphics::RenderMeshModes& modes) = 0; 01255 01257 virtual void SetEdgeDrawing (bool flag) = 0; 01259 virtual bool GetEdgeDrawing () = 0; 01260 01262 virtual void SetTessellation (bool flag) = 0; 01264 virtual bool GetTessellation () = 0; 01265 }; 01266 01269 #endif // __CS_IVIDEO_GRAPH3D_H__
Generated for Crystal Space 2.1 by doxygen 1.6.1
