ivideo/rndbuf.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_RNDBUF_H__ 00021 #define __CS_IVIDEO_RNDBUF_H__ 00022 00027 #include "csutil/scf.h" 00028 #include "csutil/strset.h" 00029 #include "csutil/refcount.h" 00030 00035 class csVector3; 00036 class csVector2; 00037 class csColor; 00038 class csReversibleTransform; 00039 struct iTextureHandle; 00040 struct iMaterialWrapper; 00041 class csRenderBufferHolder; 00042 00048 enum csRenderBufferType 00049 { 00051 CS_BUF_DYNAMIC, 00053 CS_BUF_STATIC, 00055 CS_BUF_STREAM 00056 }; 00057 00059 // NOTE: this is stored on disk by cssynldr! *Modify with care!* 00060 enum csRenderBufferComponentType 00061 { 00063 CS_BUFCOMP_BYTE = 0, 00065 CS_BUFCOMP_UNSIGNED_BYTE, 00067 CS_BUFCOMP_SHORT, 00069 CS_BUFCOMP_UNSIGNED_SHORT, 00071 CS_BUFCOMP_INT, 00073 CS_BUFCOMP_UNSIGNED_INT, 00075 CS_BUFCOMP_FLOAT, 00077 CS_BUFCOMP_DOUBLE, 00078 00080 CS_BUFCOMP_NORMALIZED = 8, 00081 00083 CS_BUFCOMP_BYTE_NORM = CS_BUFCOMP_BYTE | CS_BUFCOMP_NORMALIZED, 00085 CS_BUFCOMP_UNSIGNED_BYTE_NORM = 00086 CS_BUFCOMP_UNSIGNED_BYTE | CS_BUFCOMP_NORMALIZED, 00088 CS_BUFCOMP_SHORT_NORM = 00089 CS_BUFCOMP_SHORT | CS_BUFCOMP_NORMALIZED, 00091 CS_BUFCOMP_UNSIGNED_SHORT_NORM = 00092 CS_BUFCOMP_UNSIGNED_SHORT | CS_BUFCOMP_NORMALIZED, 00094 CS_BUFCOMP_INT_NORM = CS_BUFCOMP_INT | CS_BUFCOMP_NORMALIZED, 00096 CS_BUFCOMP_UNSIGNED_INT_NORM = 00097 CS_BUFCOMP_UNSIGNED_INT | CS_BUFCOMP_NORMALIZED, 00098 00099 CS_BUFCOMP_TYPECOUNT 00100 }; 00101 00105 enum csRenderBufferLockType 00106 { 00108 CS_BUF_LOCK_READ = 1, 00110 CS_BUF_LOCK_NORMAL 00111 }; 00112 00113 #include "csutil/deprecated_warn_off.h" 00114 00115 namespace CS 00116 { 00117 namespace Deprecated 00118 { 00119 struct CS_DEPRECATED_TYPE_MSG("You shouldn't use CS_BUF_LOCK_NOLOCK in " 00120 "the first place") 00121 CS_BUF_LOCK_NOLOCK 00122 { 00123 static const uint value = 0; 00124 }; 00125 } 00126 } 00127 00128 #include "csutil/deprecated_warn_on.h" 00129 00130 #define CS_BUF_LOCK_NOLOCK CS::Deprecated::CS_BUF_LOCK_NOLOCK::value 00131 00135 static const size_t csRenderBufferComponentSizes[CS_BUFCOMP_TYPECOUNT] = 00136 { 00137 sizeof (char), sizeof (unsigned char), 00138 sizeof (short), sizeof (unsigned short), 00139 sizeof (int), sizeof (unsigned int), 00140 sizeof (float), 00141 sizeof (double), 00142 00143 sizeof (char), sizeof (unsigned char), 00144 sizeof (short), sizeof (unsigned short), 00145 sizeof (int), sizeof (unsigned int) 00146 }; 00147 00148 struct iRenderBuffer; 00149 00154 struct iRenderBufferCallback : public virtual iBase 00155 { 00156 SCF_INTERFACE (iRenderBufferCallback, 1,0,0); 00160 virtual void RenderBufferDestroyed (iRenderBuffer* buffer) = 0; 00161 }; 00162 00173 struct iRenderBuffer : public virtual iBase 00174 { 00175 SCF_INTERFACE (iRenderBuffer, 2, 1, 1); 00176 00184 virtual void* Lock(csRenderBufferLockType lockType) = 0; 00185 00190 virtual void Release() = 0; 00191 00198 virtual void CopyInto (const void *data, size_t elementCount, 00199 size_t elemOffset = 0) = 0; 00200 00202 virtual int GetComponentCount () const = 0; 00203 00205 virtual csRenderBufferComponentType GetComponentType () const = 0; 00206 00208 virtual csRenderBufferType GetBufferType() const = 0; 00209 00211 virtual size_t GetSize() const = 0; 00212 00214 virtual size_t GetStride() const = 0; 00215 00217 virtual size_t GetElementDistance() const = 0; 00218 00220 virtual size_t GetOffset() const = 0; 00221 00223 virtual uint GetVersion () = 0; 00224 00231 virtual iRenderBuffer* GetMasterBuffer () const = 0; 00232 00234 virtual bool IsIndexBuffer() const = 0; 00236 virtual size_t GetRangeStart() const = 0; 00238 virtual size_t GetRangeEnd() const = 0; 00239 00241 virtual size_t GetElementCount() const = 0; 00242 00244 virtual void SetCallback (iRenderBufferCallback* cb) = 0; 00245 00256 virtual void SetData (const void *data) = 0; 00257 }; 00258 00266 enum csRenderBufferName 00267 { 00268 CS_BUFFER_NONE = -1, 00270 CS_BUFFER_INDEX, 00272 CS_BUFFER_POSITION, 00274 CS_BUFFER_NORMAL, 00276 CS_BUFFER_COLOR, 00278 CS_BUFFER_COLOR_UNLIT, 00280 CS_BUFFER_TEXCOORD0, 00282 CS_BUFFER_TEXCOORD1, 00284 CS_BUFFER_TEXCOORD2, 00286 CS_BUFFER_TEXCOORD3, 00288 CS_BUFFER_TEXCOORD_LIGHTMAP, 00290 CS_BUFFER_GENERIC0, 00292 CS_BUFFER_GENERIC1, 00294 CS_BUFFER_GENERIC2, 00296 CS_BUFFER_GENERIC3, 00298 CS_BUFFER_TANGENT, 00300 CS_BUFFER_BINORMAL, 00301 00306 CS_BUFFER_COUNT 00307 }; 00308 00309 #define CS_BUFFER_MAKE_MASKABLE(x) (1<<(x)) 00310 00312 enum csRenderBufferNameMask 00313 { 00315 CS_BUFFER_INDEX_MASK = 1 << CS_BUFFER_INDEX, 00317 CS_BUFFER_POSITION_MASK = 1 << CS_BUFFER_POSITION, 00319 CS_BUFFER_NORMAL_MASK = 1 << CS_BUFFER_NORMAL, 00321 CS_BUFFER_COLOR_MASK = 1 << CS_BUFFER_COLOR, 00323 CS_BUFFER_COLOR_LIGHTING_MASK = 1 << CS_BUFFER_COLOR_UNLIT, 00325 CS_BUFFER_TEXCOORD0_MASK = 1 << CS_BUFFER_TEXCOORD0, 00327 CS_BUFFER_TEXCOORD1_MASK = 1 << CS_BUFFER_TEXCOORD1, 00329 CS_BUFFER_TEXCOORD2_MASK = 1 << CS_BUFFER_TEXCOORD2, 00331 CS_BUFFER_TEXCOORD3_MASK = 1 << CS_BUFFER_TEXCOORD3, 00333 CS_BUFFER_TEXCOORD_LIGHTMAP_MASK = 1 << CS_BUFFER_TEXCOORD_LIGHTMAP, 00335 CS_BUFFER_GENERIC0_MASK = 1 << CS_BUFFER_GENERIC0, 00337 CS_BUFFER_GENERIC1_MASK = 1 << CS_BUFFER_GENERIC1, 00339 CS_BUFFER_GENERIC2_MASK = 1 << CS_BUFFER_GENERIC2, 00341 CS_BUFFER_GENERIC3_MASK = 1 << CS_BUFFER_GENERIC3, 00343 CS_BUFFER_TANGENT_MASK = 1 << CS_BUFFER_TANGENT, 00345 CS_BUFFER_BINORMAL_MASK = 1 << CS_BUFFER_BINORMAL, 00347 CS_BUFFER_ALL_MASK = ~0 00348 }; 00349 00350 00356 struct iRenderBufferAccessor : public virtual iBase 00357 { 00358 SCF_INTERFACE (iRenderBufferAccessor,0,0,1); 00360 virtual void PreGetBuffer (csRenderBufferHolder* holder, 00361 csRenderBufferName buffer) = 0; 00362 }; 00363 00368 class csRenderBufferHolder : public csRefCount 00369 { 00370 public: 00372 csRenderBufferHolder () 00373 : accessorMask (0) 00374 { 00375 } 00376 00377 csRenderBufferHolder (const csRenderBufferHolder& other) 00378 : csRefCount (), accessorMask (other.accessorMask), 00379 accessor (other.accessor) 00380 { 00381 for (size_t i = 0; i < CS_BUFFER_COUNT; ++i) 00382 { 00383 buffers[i] = other.buffers[i]; 00384 } 00385 } 00386 00387 csRenderBufferHolder& operator= (const csRenderBufferHolder& other) 00388 { 00389 accessorMask = other.accessorMask; 00390 accessor = other.accessor; 00391 00392 for (size_t i = 0; i < CS_BUFFER_COUNT; ++i) 00393 { 00394 buffers[i] = other.buffers[i]; 00395 } 00396 00397 return *this; 00398 } 00399 00405 iRenderBuffer* GetRenderBuffer (csRenderBufferName bufferName) 00406 { 00407 if (bufferName < CS_BUFFER_INDEX) return 0; 00408 if (accessor && 00409 accessorMask & CS_BUFFER_MAKE_MASKABLE(bufferName)) 00410 accessor->PreGetBuffer (this, bufferName); 00411 00412 return buffers[bufferName]; 00413 } 00414 00419 iRenderBuffer* GetRenderBufferNoAccessor (csRenderBufferName bufferName) 00420 { 00421 if (bufferName < CS_BUFFER_INDEX) return 0; 00422 00423 return buffers[bufferName]; 00424 } 00425 00429 void SetRenderBuffer (csRenderBufferName bufferName, iRenderBuffer* buffer) 00430 { 00431 CS_ASSERT(bufferName >= 0 && bufferName < CS_BUFFER_COUNT); 00432 buffers[bufferName] = buffer; 00433 } 00434 00438 void SetAccessor (iRenderBufferAccessor* a, uint32 mask) 00439 { 00440 accessorMask = mask; 00441 accessor = a; 00442 } 00444 uint GetAccessorMask() const { return accessorMask; } 00446 iRenderBufferAccessor* GetAccessor() const { return accessor; } 00447 protected: 00448 uint32 accessorMask; 00449 csRef<iRenderBufferAccessor> accessor; 00450 csRef<iRenderBuffer> buffers[CS_BUFFER_COUNT]; 00451 }; 00452 00455 #endif // __CS_IVIDEO_RNDBUF_H__
Generated for Crystal Space 1.4.1 by doxygen 1.7.1