NL3D::CVertexBufferHardGLATI Class Reference

#include <driver_opengl_vertex_buffer_hard.h>

Inheritance diagram for NL3D::CVertexBufferHardGLATI:

NL3D::IVertexBufferHardGL NL3D::IVertexBufferHard NLMISC::CRefCount

Detailed Description

Work only if ARRAY_RANGE_NV is enabled.

Definition at line 305 of file driver_opengl_vertex_buffer_hard.h.

Public Types

enum  TVBType { NVidiaVB, ATIVB, ATIMapObjectVB, UnknownVB }

Public Member Functions

bool createRAMMirror (uint memSize)
 try to create a RAM mirror that 'll contain a copy of the VB.

 CVertexBufferHardGLATI (CDriverGL *drv)
uint getATIValueOffset (uint value)
uint getATIVertexObjectId () const
 get Handle of the ATI buffer.

const sintgetRefCount () const
void initFormat (uint16 vertexFormat, const uint8 *typeArray, uint32 numVertices, const uint8 *uvRouting)
void initGL (CVertexArrayRangeATI *var, void *vertexPtr)
virtual ~CVertexBufferHardGLATI ()
Implementation
virtual void disable ()
virtual void enable ()
virtual void * lock ()
virtual void lockHintStatic (bool staticLock)
virtual void unlock (uint startVert, uint endVert)
virtual void unlock ()

Data Fields

sint crefs
bool GPURenderingAfterFence
CPtrInfo * pinfo
TVBType VBType

Static Public Attributes

CPtrInfo NullPtrInfo

Protected Attributes

CDriverGL_Driver
uint16 _Flags
uint16 _InternalFlags
std::string _Name
uint32 _NbVerts
uint16 _Offset [CVertexBuffer::NumValue]
uint8 _Pad
uint8 _Type [CVertexBuffer::NumValue]
uint8 _UVRouting [CVertexBuffer::MaxStage]
uint16 _VertexSize

Private Attributes

void * _RAMMirrorVertexPtr
uint _RAMMirrorVertexSize
CVertexArrayRangeATI_VertexArrayRange
void * _VertexPtr

Friends

struct CPtrInfo


Member Enumeration Documentation

enum NL3D::IVertexBufferHardGL::TVBType [inherited]
 

Enumeration values:
NVidiaVB 
ATIVB 
ATIMapObjectVB 
UnknownVB 

Definition at line 95 of file driver_opengl_vertex_buffer_hard.h.


Constructor & Destructor Documentation

NL3D::CVertexBufferHardGLATI::CVertexBufferHardGLATI CDriverGL drv  ) 
 

Definition at line 572 of file driver_opengl_vertex_buffer_hard.cpp.

References _RAMMirrorVertexPtr, and _RAMMirrorVertexSize.

00572                                                              : IVertexBufferHardGL(drv)
00573 {
00574         _VertexArrayRange= NULL;
00575         _VertexPtr= NULL;
00576         _RAMMirrorVertexPtr= NULL;
00577         _RAMMirrorVertexSize= 0;
00578 
00579         // Flag our type
00580         VBType = ATIVB; 
00581 }

NL3D::CVertexBufferHardGLATI::~CVertexBufferHardGLATI  )  [virtual]
 

Definition at line 585 of file driver_opengl_vertex_buffer_hard.cpp.

References _RAMMirrorVertexPtr, _RAMMirrorVertexSize, NL3D::CVertexArrayRangeATI::freeVB(), and uint8.

00586 {
00587         if(_VertexArrayRange)
00588         {
00589                 // free the VAR.
00590                 _VertexArrayRange->freeVB(_VertexPtr);
00591                 _VertexPtr= NULL;
00592                 _VertexArrayRange= NULL;
00593         }
00594 
00595         if(_RAMMirrorVertexPtr)
00596         {
00597                 delete [] ((uint8*)_RAMMirrorVertexPtr);
00598                 _RAMMirrorVertexPtr= NULL;
00599                 _RAMMirrorVertexSize= 0;
00600         }
00601 }


Member Function Documentation

bool NL3D::CVertexBufferHardGLATI::createRAMMirror uint  memSize  ) 
 

try to create a RAM mirror that 'll contain a copy of the VB.

Definition at line 605 of file driver_opengl_vertex_buffer_hard.cpp.

References _RAMMirrorVertexPtr, _RAMMirrorVertexSize, uint, and uint8.

Referenced by NL3D::CVertexArrayRangeATI::createVBHardGL().

00606 {
00607         // delete old if any
00608         if(_RAMMirrorVertexPtr)
00609         {
00610                 free(_RAMMirrorVertexPtr);
00611                 _RAMMirrorVertexPtr= NULL;
00612                 _RAMMirrorVertexSize= 0;
00613         }
00614         // create
00615         _RAMMirrorVertexPtr = (void*)new uint8[memSize];
00616         if(_RAMMirrorVertexPtr)
00617         {
00618                 _RAMMirrorVertexSize= memSize;
00619                 return true;
00620         }
00621         else
00622                 return false;
00623 }

void NL3D::CVertexBufferHardGLATI::disable  )  [virtual]
 

Implements NL3D::IVertexBufferHardGL.

Definition at line 685 of file driver_opengl_vertex_buffer_hard.cpp.

References NL3D::CDriverGL::_CurrentVertexBufferHard, NL3D::CVertexArrayRangeATI::disable(), and nlassert.

00686 {
00687         if(_Driver->_CurrentVertexBufferHard != NULL)
00688         {
00689                 nlassert(_VertexArrayRange);
00690                 _VertexArrayRange->disable();
00691                 _Driver->_CurrentVertexBufferHard= NULL;
00692         }
00693 }

void NL3D::CVertexBufferHardGLATI::enable  )  [virtual]
 

Implements NL3D::IVertexBufferHardGL.

Definition at line 673 of file driver_opengl_vertex_buffer_hard.cpp.

References NL3D::CDriverGL::_CurrentVertexBufferHard, NL3D::CVertexArrayRangeATI::enable(), and nlassert.

00674 {
00675         if(_Driver->_CurrentVertexBufferHard != this)
00676         {
00677                 nlassert(_VertexArrayRange);
00678                 _VertexArrayRange->enable();
00679                 _Driver->_CurrentVertexBufferHard= this;
00680         }
00681 }

uint NL3D::CVertexBufferHardGLATI::getATIValueOffset uint  value  )  [inline]
 

Definition at line 333 of file driver_opengl_vertex_buffer_hard.h.

References NL3D::IVertexBufferHard::getValueOff(), NL3D_DRV_ATI_FAKE_MEM_START, nlassert, uint, and value.

Referenced by NL3D::CVertexBufferInfo::setupVertexBufferHard().

00334         {
00335                 nlassert(_VertexPtr);
00336                 // To get the correct offset, remove the dummy MEM offset.
00337                 return ((uint)_VertexPtr + getValueOff (value)) - NL3D_DRV_ATI_FAKE_MEM_START;
00338         }

uint NL3D::CVertexBufferHardGLATI::getATIVertexObjectId  )  const [inline]
 

get Handle of the ATI buffer.

Definition at line 341 of file driver_opengl_vertex_buffer_hard.h.

References NL3D::CVertexArrayRangeATI::getATIVertexObjectId(), and uint.

Referenced by NL3D::CVertexBufferInfo::setupVertexBufferHard(), and unlock().

00341 {return _VertexArrayRange->getATIVertexObjectId();}

const std::string& NL3D::IVertexBufferHard::getName void   )  const [inline, inherited]
 

Definition at line 120 of file vertex_buffer_hard.h.

Referenced by NL3D::CDriverGL::profileVBHardAllocation().

00120 {return _Name;}

uint32 NL3D::IVertexBufferHard::getNumVertices void   )  const [inline, inherited]
 

Definition at line 54 of file vertex_buffer_hard.h.

References uint32.

Referenced by NL3D::CDriverGL::activeVertexBufferHard(), NL3D::CVertexArrayRangeMapObjectATI::createVBHardGL(), NL3D::CVertexArrayRangeATI::createVBHardGL(), NL3D::CVertexArrayRangeNVidia::createVBHardGL(), NL3D::CDriverGL::profileVBHardAllocation(), NL3D::CNearVertexBufferInfo::setupVertexBufferHard(), NL3D::CFarVertexBufferInfo::setupVertexBufferHard(), NL3D::CVertexBufferInfo::setupVertexBufferHard(), and unlock().

00054 {return(_NbVerts);}

uint8 NL3D::IVertexBufferHard::getNumWeight  )  const [inherited]
 

Definition at line 76 of file vertex_buffer_hard.cpp.

References uint8.

Referenced by NL3D::CVertexBufferInfo::setupVertexBufferHard().

00077 {
00078         // Num weight
00079         switch (_Type[CVertexBuffer::Weight])
00080         {
00081         case CVertexBuffer::Float1:
00082                 return 1;
00083         case CVertexBuffer::Float2:
00084                 return 2;
00085         case CVertexBuffer::Float3:
00086                 return 3;
00087         case CVertexBuffer::Float4:
00088                 return 4;
00089         }
00090 
00091         // No weight
00092         return 0;
00093 }

const sint& NLMISC::CRefCount::getRefCount  )  const [inline, inherited]
 

Definition at line 70 of file smart_ptr.h.

References NLMISC::CRefCount::crefs, and sint.

00071         {
00072                 return  crefs;
00073         }

const uint8* NL3D::IVertexBufferHard::getUVRouting  )  const [inline, inherited]
 

Definition at line 57 of file vertex_buffer_hard.h.

References uint8.

Referenced by NL3D::CVertexBufferInfo::setupVertexBufferHard().

00057 { return _UVRouting; }

sint NL3D::IVertexBufferHard::getValueOff uint  value  )  const [inline, inherited]
 

NB: the order of those methods follow the order in memory of the elements:

  • VertexCoord
  • NormalCoord
  • TexCoord
  • Color
  • Specular
  • Weight
  • PaletteSkin NB: same order as in CVertexBuffer.

Definition at line 82 of file vertex_buffer_hard.h.

References nlassert, sint, uint, and value.

Referenced by NL3D::CVertexBufferHardGLMapObjectATI::getATIValueOffset(), getATIValueOffset(), NL3D::CVertexBufferHardGLNVidia::getNVidiaValueEx(), NL3D::CNearVertexBufferInfo::setupVertexBufferHard(), and NL3D::CFarVertexBufferInfo::setupVertexBufferHard().

00082 {nlassert(_Flags & (1<<value)); return _Offset[value];}

CVertexBuffer::TType NL3D::IVertexBufferHard::getValueType uint  value  )  const [inline, inherited]
 

Definition at line 55 of file vertex_buffer_hard.h.

References nlassert, uint, and value.

Referenced by NL3D::CVertexBufferInfo::setupVertexBufferHard().

00055 { nlassert (value<CVertexBuffer::NumValue); return((CVertexBuffer::TType)_Type[value]); }

uint16 NL3D::IVertexBufferHard::getVertexFormat void   )  const [inline, inherited]
 

Definition at line 52 of file vertex_buffer_hard.h.

References uint16.

Referenced by NL3D::CDriverGL::activeVertexBufferHard(), NL3D::CNearVertexBufferInfo::setupVertexBufferHard(), NL3D::CFarVertexBufferInfo::setupVertexBufferHard(), and NL3D::CVertexBufferInfo::setupVertexBufferHard().

00052 { return(_Flags); }

uint16 NL3D::IVertexBufferHard::getVertexSize void   )  const [inline, inherited]
 

Definition at line 53 of file vertex_buffer_hard.h.

References uint16.

Referenced by NL3D::CMeshMRMGeom::applyGeomorph(), NL3D::CVertexArrayRangeMapObjectATI::createVBHardGL(), NL3D::CVertexArrayRangeATI::createVBHardGL(), NL3D::CVertexArrayRangeNVidia::createVBHardGL(), NL3D::CDriverGL::profileVBHardAllocation(), NL3D::CNearVertexBufferInfo::setupVertexBufferHard(), NL3D::CFarVertexBufferInfo::setupVertexBufferHard(), NL3D::CVertexBufferInfo::setupVertexBufferHard(), and unlock().

00053 {return(_VertexSize);}

void NL3D::IVertexBufferHardGL::initFormat uint16  vertexFormat,
const uint8 typeArray,
uint32  numVertices,
const uint8 uvRouting
[inline, inherited]
 

Reimplemented from NL3D::IVertexBufferHard.

Definition at line 104 of file driver_opengl_vertex_buffer_hard.h.

References uint16, uint32, and uint8.

Referenced by NL3D::CVertexArrayRangeMapObjectATI::createVBHardGL(), NL3D::CVertexArrayRangeATI::createVBHardGL(), and NL3D::CVertexArrayRangeNVidia::createVBHardGL().

00105         {
00106                 IVertexBufferHard::initFormat(vertexFormat, typeArray, numVertices, uvRouting);
00107         }

void NL3D::CVertexBufferHardGLATI::initGL CVertexArrayRangeATI var,
void *  vertexPtr
 

setup ptrs allocated by createVBHard()

Definition at line 627 of file driver_opengl_vertex_buffer_hard.cpp.

Referenced by NL3D::CVertexArrayRangeATI::createVBHardGL().

00628 {
00629         _VertexArrayRange= var;
00630         _VertexPtr= vertexPtr;
00631 }

void * NL3D::CVertexBufferHardGLATI::lock  )  [virtual]
 

Lock the entire VertexBuffer. The returned buffer is a write only buffer. (undefined result if you read it). Write note:

  • for VRAM VertexBufferHard, you should write only one time, to init.
  • for AGP VertexBufferHard, you should write sequentially to take full advantage of the write combiners.
    Returns:
    the adress of the vertex 0. Use getVertexSize(), get*Off() ... to access any part of this VertexBuffer.

Implements NL3D::IVertexBufferHard.

Definition at line 635 of file driver_opengl_vertex_buffer_hard.cpp.

References _RAMMirrorVertexPtr.

00636 {
00637         // return directly the mirror one. => client will write into RAM.
00638         return _RAMMirrorVertexPtr;
00639 }

void NL3D::CVertexBufferHardGLATI::lockHintStatic bool  staticLock  )  [virtual]
 

Indicate what kind of lock to be done on this VertexBuffer (whatever AGP or VRAM buffer) User should set to true if the VBHard is static: nevers change or very rarely. NVidia OpenGL implementation: "Static lock" are slower, but no fences are inserted after a render with this VVBHard, hence, no slowdown because 1/ of fence overhead insertion 2/ of NVidia swapBuffers() and fence issues on GeForce2 cards. Default is false

Implements NL3D::IVertexBufferHard.

Definition at line 696 of file driver_opengl_vertex_buffer_hard.cpp.

00697 {
00698         // no op.
00699 }

void NL3D::IVertexBufferHard::setName const std::string &  name  )  [inherited]
 

Definition at line 96 of file vertex_buffer_hard.cpp.

00097 {
00098         _Name= name;
00099 }

void NL3D::CVertexBufferHardGLATI::unlock uint  startVert,
uint  endVert
[virtual]
 

Same as unlock() but give hints to driver on vertices that have changed. Used by ATI-OpenGL drivers. NB: driver may still ignore this information, and so take into acount all vertices

Parameters:
startVert the fisrt vertex to update
endVert the last vertex (not included) to update => numVertices= vertEnd-vertBegin. Hence unlock() as the same effect as unlock(0, getNumVertices());

Implements NL3D::IVertexBufferHard.

Definition at line 652 of file driver_opengl_vertex_buffer_hard.cpp.

References _RAMMirrorVertexPtr, getATIVertexObjectId(), NL3D::IVertexBufferHard::getNumVertices(), NL3D::IVertexBufferHard::getVertexSize(), GL_PRESERVE_ATI, nglUpdateObjectBufferATI, NL3D_DRV_ATI_FAKE_MEM_START, size, uint, and uint8.

00653 {
00654         // clamp endVert.
00655         if(endVert>getNumVertices())
00656                 endVert=getNumVertices();
00657 
00658         // verify bound.
00659         if(startVert>=endVert)
00660                 return;
00661 
00662         // Copy a subset of the mirror into the ATI Vertex Object
00663         uint    size= (endVert-startVert)*getVertexSize();
00664         uint    srcOffStart= startVert*getVertexSize();
00665         uint    dstOffStart= ((uint)_VertexPtr - NL3D_DRV_ATI_FAKE_MEM_START) + srcOffStart;
00666         // copy.
00667         nglUpdateObjectBufferATI(getATIVertexObjectId(), dstOffStart,
00668                 size, (uint8*)_RAMMirrorVertexPtr + srcOffStart, GL_PRESERVE_ATI);
00669 }

void NL3D::CVertexBufferHardGLATI::unlock  )  [virtual]
 

UnLock the VertexBuffer so the Gfx card can now use it.

Implements NL3D::IVertexBufferHard.

Definition at line 643 of file driver_opengl_vertex_buffer_hard.cpp.

References _RAMMirrorVertexPtr, _RAMMirrorVertexSize, getATIVertexObjectId(), GL_PRESERVE_ATI, nglUpdateObjectBufferATI, NL3D_DRV_ATI_FAKE_MEM_START, and uint.

00644 {
00645         // Copy All mirror into the ATI Vertex Object
00646         nglUpdateObjectBufferATI(getATIVertexObjectId(), (uint)_VertexPtr - NL3D_DRV_ATI_FAKE_MEM_START,
00647                 _RAMMirrorVertexSize, _RAMMirrorVertexPtr, GL_PRESERVE_ATI);
00648 }


Friends And Related Function Documentation

friend struct CPtrInfo [friend, inherited]
 

Definition at line 67 of file smart_ptr.h.


Field Documentation

CDriverGL* NL3D::IVertexBufferHardGL::_Driver [protected, inherited]
 

Definition at line 111 of file driver_opengl_vertex_buffer_hard.h.

uint16 NL3D::IVertexBufferHard::_Flags [protected, inherited]
 

Definition at line 134 of file vertex_buffer_hard.h.

uint16 NL3D::IVertexBufferHard::_InternalFlags [protected, inherited]
 

Definition at line 137 of file vertex_buffer_hard.h.

std::string NL3D::IVertexBufferHard::_Name [protected, inherited]
 

Definition at line 146 of file vertex_buffer_hard.h.

uint32 NL3D::IVertexBufferHard::_NbVerts [protected, inherited]
 

Definition at line 140 of file vertex_buffer_hard.h.

uint16 NL3D::IVertexBufferHard::_Offset[CVertexBuffer::NumValue] [protected, inherited]
 

Definition at line 143 of file vertex_buffer_hard.h.

uint8 NL3D::IVertexBufferHard::_Pad [protected, inherited]
 

Definition at line 128 of file vertex_buffer_hard.h.

void* NL3D::CVertexBufferHardGLATI::_RAMMirrorVertexPtr [private]
 

Definition at line 348 of file driver_opengl_vertex_buffer_hard.h.

Referenced by createRAMMirror(), CVertexBufferHardGLATI(), lock(), unlock(), and ~CVertexBufferHardGLATI().

uint NL3D::CVertexBufferHardGLATI::_RAMMirrorVertexSize [private]
 

Definition at line 349 of file driver_opengl_vertex_buffer_hard.h.

Referenced by createRAMMirror(), CVertexBufferHardGLATI(), unlock(), and ~CVertexBufferHardGLATI().

uint8 NL3D::IVertexBufferHard::_Type[CVertexBuffer::NumValue] [protected, inherited]
 

Definition at line 127 of file vertex_buffer_hard.h.

uint8 NL3D::IVertexBufferHard::_UVRouting[CVertexBuffer::MaxStage] [protected, inherited]
 

Definition at line 153 of file vertex_buffer_hard.h.

CVertexArrayRangeATI* NL3D::CVertexBufferHardGLATI::_VertexArrayRange [private]
 

Definition at line 346 of file driver_opengl_vertex_buffer_hard.h.

void* NL3D::CVertexBufferHardGLATI::_VertexPtr [private]
 

Definition at line 347 of file driver_opengl_vertex_buffer_hard.h.

uint16 NL3D::IVertexBufferHard::_VertexSize [protected, inherited]
 

Definition at line 131 of file vertex_buffer_hard.h.

sint NLMISC::CRefCount::crefs [mutable, inherited]
 

Definition at line 79 of file smart_ptr.h.

Referenced by NLMISC::CRefCount::CRefCount(), NLMISC::CRefCount::getRefCount(), and NLMISC::CRefCount::~CRefCount().

bool NL3D::IVertexBufferHardGL::GPURenderingAfterFence [inherited]
 

Definition at line 99 of file driver_opengl_vertex_buffer_hard.h.

Referenced by NL3D::CDriverGL::fenceOnCurVBHardIfNeeded(), NL3D::IVertexBufferHardGL::IVertexBufferHardGL(), NL3D::CDriverGL::render(), NL3D::CDriverGL::renderOrientedQuads(), NL3D::CDriverGL::renderPoints(), NL3D::CDriverGL::renderQuads(), NL3D::CDriverGL::renderSimpleTriangles(), and NL3D::CDriverGL::renderTriangles().

CRefCount::CPtrInfo NLMISC::CRefCount::NullPtrInfo [static, inherited]
 

Referenced by NLMISC::CRefCount::CRefCount().

CPtrInfo* NLMISC::CRefCount::pinfo [mutable, inherited]
 

Definition at line 80 of file smart_ptr.h.

Referenced by NLMISC::CRefCount::CRefCount(), and NLMISC::CRefCount::~CRefCount().

TVBType NL3D::IVertexBufferHardGL::VBType [inherited]
 

Definition at line 97 of file driver_opengl_vertex_buffer_hard.h.

Referenced by NL3D::CDriverGL::fenceOnCurVBHardIfNeeded(), NL3D::IVertexBufferHardGL::IVertexBufferHardGL(), and NL3D::CVertexBufferInfo::setupVertexBufferHard().


The documentation for this class was generated from the following files:
Generated on Tue Mar 16 08:24:46 2004 for NeL by doxygen 1.3.6