#include <driver_opengl_vertex_buffer_hard.h>
Inheritance diagram for NL3D::CVertexArrayRangeATI:

Definition at line 250 of file driver_opengl_vertex_buffer_hard.h.
Public Member Functions | |
| CVertexArrayRangeATI (CDriverGL *drv) | |
| void | disable () |
| void | enable () |
| void | freeVB (void *ptr) |
| free a VB allocated with allocateVB. No-op if NULL. | |
| uint | getATIVertexObjectId () const |
| get Handle of the ATI buffer. | |
Implementation | |
| virtual bool | allocate (uint32 size, IDriver::TVBHardType vbType) |
| allocate a vertex array sapce. false if error. must free before re-allocate. | |
| virtual IVertexBufferHardGL * | createVBHardGL (uint16 vertexFormat, const uint8 *typeArray, uint32 numVertices, const uint8 *uvRouting) |
| create a IVertexBufferHardGL | |
| virtual void | free () |
| free this space. | |
| virtual uint | sizeAllocated () const |
| return the size allocated. 0 if not allocated or failure | |
Protected Attributes | |
| CDriverGL * | _Driver |
Private Member Functions | |
| void * | allocateVB (uint32 size) |
| Allocate a small subset of the memory. NULL if not enough mem. | |
Private Attributes | |
| bool | _Allocated |
| NLMISC::CHeapMemory | _HeapMemory |
| uint32 | _VertexArraySize |
| uint | _VertexObjectId |
|
|
Definition at line 434 of file driver_opengl_vertex_buffer_hard.cpp. References _Allocated, and _VertexObjectId.
00434 : IVertexArrayRange(drv) 00435 { 00436 _Allocated= false; 00437 _VertexObjectId= 0; 00438 _VertexArraySize= 0; 00439 } |
|
||||||||||||
|
allocate a vertex array sapce. false if error. must free before re-allocate.
Implements NL3D::IVertexArrayRange. Definition at line 441 of file driver_opengl_vertex_buffer_hard.cpp. References _Allocated, _VertexObjectId, GL_DYNAMIC_ATI, GL_STATIC_ATI, NLMISC::CHeapMemory::initHeap(), nglIsObjectBufferATI, nglNewObjectBufferATI, NL3D_DRV_ATI_FAKE_MEM_START, nlassert, size, and uint32.
00442 {
00443 nlassert(!_Allocated);
00444
00445 // try to allocate AGP (suppose mean ATI dynamic) or VRAM (suppose mean ATI static) data.
00446 switch(vbType)
00447 {
00448 case IDriver::VBHardAGP:
00449 _VertexObjectId= nglNewObjectBufferATI(size, NULL, GL_DYNAMIC_ATI);
00450 break;
00451 case IDriver::VBHardVRAM:
00452 _VertexObjectId= nglNewObjectBufferATI(size, NULL, GL_STATIC_ATI);
00453 break;
00454 };
00455
00456
00457 // init the allocator, if success
00458 if( nglIsObjectBufferATI(_VertexObjectId) )
00459 {
00460 _Allocated= true;
00461 /* Init with an alignment of 8. Not sure if it is usefull.
00462 Init With a FAKE memory starting at NL3D_DRV_ATI_FAKE_MEM_START
00463 */
00464 _HeapMemory.initHeap((void*)NL3D_DRV_ATI_FAKE_MEM_START, size, 8);
00465
00466 // set the size
00467 _VertexArraySize= size;
00468
00469 // Ok!
00470 return true;
00471 }
00472 else
00473 {
00474 // failure.
00475 return false;
00476 }
00477 }
|
|
|
Allocate a small subset of the memory. NULL if not enough mem.
Definition at line 555 of file driver_opengl_vertex_buffer_hard.cpp. References NLMISC::CHeapMemory::allocate(), size, and uint32. Referenced by createVBHardGL().
00556 {
00557 return _HeapMemory.allocate(size);
00558 }
|
|
||||||||||||||||||||
|
create a IVertexBufferHardGL
Implements NL3D::IVertexArrayRange. Definition at line 500 of file driver_opengl_vertex_buffer_hard.cpp. References _Allocated, allocateVB(), NL3D::CVertexBufferHardGLATI::createRAMMirror(), NL3D::IVertexBufferHard::getNumVertices(), NL3D::IVertexBufferHard::getVertexSize(), NL3D::IVertexBufferHardGL::initFormat(), NL3D::CVertexBufferHardGLATI::initGL(), size, uint16, uint32, and uint8.
00501 {
00502 // create a ATI VBHard
00503 CVertexBufferHardGLATI *newVbHard= new CVertexBufferHardGLATI(_Driver);
00504
00505 // Init the format of the VB.
00506 newVbHard->initFormat(vertexFormat, typeArray, numVertices, uvRouting);
00507
00508 // compute size to allocate.
00509 uint32 size= newVbHard->getVertexSize() * newVbHard->getNumVertices();
00510
00511 // try to allocate
00512 void *vertexPtr =NULL;
00513 if( _Allocated )
00514 {
00515 vertexPtr= allocateVB(size);
00516 }
00517
00518 // If allocation fails.
00519 if( !vertexPtr )
00520 {
00521 // just destroy this object (no free()).
00522 delete newVbHard;
00523 return NULL;
00524 }
00525 else
00526 {
00527 // Then try to create a RAM mirror in the VB.
00528 if( newVbHard->createRAMMirror(size) )
00529 {
00530 // Ok, setup
00531 newVbHard->initGL(this, vertexPtr);
00532 return newVbHard;
00533 }
00534 else
00535 {
00536 // Discard the VB.
00537 delete newVbHard;
00538 return NULL;
00539 }
00540 }
00541 }
|
|
|
disable this VertexArrayRange. _Driver->_CurrentVertexArrayRange= NULL; NB: no-op for ATI, but ensure correct _Driver->_CurrentVertexArrayRange value. Definition at line 549 of file driver_opengl_vertex_buffer_hard.cpp. References NL3D::CDriverGL::_CurrentVertexArrayRange. Referenced by NL3D::CVertexBufferHardGLATI::disable().
00550 {
00551 // No-op for ATI !!!
00552 _Driver->_CurrentVertexArrayRange= NULL;
00553 }
|
|
|
active this VertexArrayRange as the current vertex array range used. no-op if already setup. NB: no-op for ATI, but ensure correct _Driver->_CurrentVertexArrayRange value. Definition at line 543 of file driver_opengl_vertex_buffer_hard.cpp. References NL3D::CDriverGL::_CurrentVertexArrayRange. Referenced by NL3D::CVertexBufferHardGLATI::enable().
00544 {
00545 // No-op for ATI !!!
00546 _Driver->_CurrentVertexArrayRange= this;
00547 }
|
|
|
free this space.
Implements NL3D::IVertexArrayRange. Definition at line 484 of file driver_opengl_vertex_buffer_hard.cpp. References _Allocated, _VertexObjectId, nglDeleteObjectBufferATI, and NLMISC::CHeapMemory::reset().
00485 {
00486 // release the ptr.
00487 if(_Allocated)
00488 {
00489 // reset the allocator.
00490 _HeapMemory.reset();
00491
00492 // Free special memory.
00493 nglDeleteObjectBufferATI(_VertexObjectId);
00494
00495 _Allocated= false;
00496 _VertexArraySize= 0;
00497 }
00498 }
|
|
|
free a VB allocated with allocateVB. No-op if NULL.
Definition at line 560 of file driver_opengl_vertex_buffer_hard.cpp. References NLMISC::CHeapMemory::free(). Referenced by NL3D::CVertexBufferHardGLATI::~CVertexBufferHardGLATI().
00561 {
00562 _HeapMemory.free(ptr);
00563 }
|
|
|
get Handle of the ATI buffer.
Definition at line 284 of file driver_opengl_vertex_buffer_hard.h. References _VertexObjectId, and uint. Referenced by NL3D::CVertexBufferHardGLATI::getATIVertexObjectId().
00284 {return _VertexObjectId;}
|
|
|
return the size allocated. 0 if not allocated or failure
Implements NL3D::IVertexArrayRange. Definition at line 479 of file driver_opengl_vertex_buffer_hard.cpp. References uint.
00480 {
00481 return _VertexArraySize;
00482 }
|
|
|
Definition at line 289 of file driver_opengl_vertex_buffer_hard.h. Referenced by allocate(), createVBHardGL(), CVertexArrayRangeATI(), and free(). |
|
|
Definition at line 69 of file driver_opengl_vertex_buffer_hard.h. |
|
|
Definition at line 293 of file driver_opengl_vertex_buffer_hard.h. |
|
|
Definition at line 290 of file driver_opengl_vertex_buffer_hard.h. |
|
|
Definition at line 288 of file driver_opengl_vertex_buffer_hard.h. Referenced by allocate(), CVertexArrayRangeATI(), free(), and getATIVertexObjectId(). |
1.3.6