|
|
@ -1216,11 +1216,7 @@ IVertexBufferHardGL *CVertexArrayRangeARB::createVBHardGL(uint size, CVertexBuff
|
|
|
|
GLuint vertexBufferID;
|
|
|
|
GLuint vertexBufferID;
|
|
|
|
glGetError();
|
|
|
|
glGetError();
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef USE_OPENGLES
|
|
|
|
|
|
|
|
glGenBuffers(1, &vertexBufferID);
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
nglGenBuffersARB(1, &vertexBufferID);
|
|
|
|
nglGenBuffersARB(1, &vertexBufferID);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (glGetError() != GL_NO_ERROR) return NULL;
|
|
|
|
if (glGetError() != GL_NO_ERROR) return NULL;
|
|
|
|
_Driver->_DriverGLStates.forceBindARBVertexBuffer(vertexBufferID);
|
|
|
|
_Driver->_DriverGLStates.forceBindARBVertexBuffer(vertexBufferID);
|
|
|
@ -1259,11 +1255,7 @@ IVertexBufferHardGL *CVertexArrayRangeARB::createVBHardGL(uint size, CVertexBuff
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (glGetError() != GL_NO_ERROR)
|
|
|
|
if (glGetError() != GL_NO_ERROR)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#ifdef USE_OPENGLES
|
|
|
|
|
|
|
|
glDeleteBuffers(1, &vertexBufferID);
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
nglDeleteBuffersARB(1, &vertexBufferID);
|
|
|
|
nglDeleteBuffersARB(1, &vertexBufferID);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1306,13 +1298,10 @@ void CVertexArrayRangeARB::updateLostBuffers()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
nlassert((*it)->_VertexObjectId);
|
|
|
|
nlassert((*it)->_VertexObjectId);
|
|
|
|
GLuint id = (GLuint) (*it)->_VertexObjectId;
|
|
|
|
GLuint id = (GLuint) (*it)->_VertexObjectId;
|
|
|
|
#ifdef USE_OPENGLES
|
|
|
|
|
|
|
|
nlassert(glIsBuffer(id));
|
|
|
|
|
|
|
|
glDeleteBuffers(1, &id);
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
nlassert(nglIsBufferARB(id));
|
|
|
|
nlassert(nglIsBufferARB(id));
|
|
|
|
nglDeleteBuffersARB(1, &id);
|
|
|
|
nglDeleteBuffersARB(1, &id);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
(*it)->_VertexObjectId = 0;
|
|
|
|
(*it)->_VertexObjectId = 0;
|
|
|
|
(*it)->VB->setLocation(CVertexBuffer::NotResident);
|
|
|
|
(*it)->VB->setLocation(CVertexBuffer::NotResident);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1361,13 +1350,8 @@ CVertexBufferHardARB::~CVertexBufferHardARB()
|
|
|
|
if (_VertexObjectId)
|
|
|
|
if (_VertexObjectId)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
GLuint id = (GLuint) _VertexObjectId;
|
|
|
|
GLuint id = (GLuint) _VertexObjectId;
|
|
|
|
#ifdef USE_OPENGLES
|
|
|
|
|
|
|
|
nlassert(glIsBuffer(id));
|
|
|
|
|
|
|
|
glDeleteBuffers(1, &id);
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
nlassert(nglIsBufferARB(id));
|
|
|
|
nlassert(nglIsBufferARB(id));
|
|
|
|
nglDeleteBuffersARB(1, &id);
|
|
|
|
nglDeleteBuffersARB(1, &id);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (_VertexArrayRange)
|
|
|
|
if (_VertexArrayRange)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -1412,12 +1396,7 @@ void *CVertexBufferHardARB::lock()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// recreate a vb
|
|
|
|
// recreate a vb
|
|
|
|
GLuint vertexBufferID;
|
|
|
|
GLuint vertexBufferID;
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef USE_OPENGLES
|
|
|
|
|
|
|
|
glGenBuffers(1, &vertexBufferID);
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
nglGenBuffersARB(1, &vertexBufferID);
|
|
|
|
nglGenBuffersARB(1, &vertexBufferID);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (glGetError() != GL_NO_ERROR)
|
|
|
|
if (glGetError() != GL_NO_ERROR)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -1436,35 +1415,23 @@ void *CVertexBufferHardARB::lock()
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case CVertexBuffer::StaticPreferred:
|
|
|
|
case CVertexBuffer::StaticPreferred:
|
|
|
|
if (_Driver->getStaticMemoryToVRAM())
|
|
|
|
if (_Driver->getStaticMemoryToVRAM())
|
|
|
|
#ifdef USE_OPENGLES
|
|
|
|
|
|
|
|
glBufferData(GL_ARRAY_BUFFER, size, NULL, GL_STATIC_DRAW);
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
nglBufferDataARB(GL_ARRAY_BUFFER_ARB, size, NULL, GL_STATIC_DRAW_ARB);
|
|
|
|
nglBufferDataARB(GL_ARRAY_BUFFER_ARB, size, NULL, GL_STATIC_DRAW_ARB);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
else
|
|
|
|
else
|
|
|
|
#ifdef USE_OPENGLES
|
|
|
|
|
|
|
|
glBufferData(GL_ARRAY_BUFFER, size, NULL, GL_DYNAMIC_DRAW);
|
|
|
|
glBufferData(GL_ARRAY_BUFFER, size, NULL, GL_DYNAMIC_DRAW);
|
|
|
|
#else
|
|
|
|
|
|
|
|
nglBufferDataARB(GL_ARRAY_BUFFER_ARB, size, NULL, GL_DYNAMIC_DRAW_ARB);
|
|
|
|
nglBufferDataARB(GL_ARRAY_BUFFER_ARB, size, NULL, GL_DYNAMIC_DRAW_ARB);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
// case CVertexBuffer::AGPPreferred:
|
|
|
|
// case CVertexBuffer::AGPPreferred:
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
#ifdef USE_OPENGLES
|
|
|
|
|
|
|
|
glBufferData(GL_ARRAY_BUFFER, size, NULL, GL_DYNAMIC_DRAW);
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
nglBufferDataARB(GL_ARRAY_BUFFER_ARB, size, NULL, GL_DYNAMIC_DRAW_ARB);
|
|
|
|
nglBufferDataARB(GL_ARRAY_BUFFER_ARB, size, NULL, GL_DYNAMIC_DRAW_ARB);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (glGetError() != GL_NO_ERROR)
|
|
|
|
if (glGetError() != GL_NO_ERROR)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
_Driver->incrementResetCounter();
|
|
|
|
_Driver->incrementResetCounter();
|
|
|
|
#ifdef USE_OPENGLES
|
|
|
|
|
|
|
|
glDeleteBuffers(1, &vertexBufferID);
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
nglDeleteBuffersARB(1, &vertexBufferID);
|
|
|
|
nglDeleteBuffersARB(1, &vertexBufferID);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return &_DummyVB[0];;
|
|
|
|
return &_DummyVB[0];;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
_VertexObjectId = vertexBufferID;
|
|
|
|
_VertexObjectId = vertexBufferID;
|
|
|
@ -1567,12 +1534,10 @@ void CVertexBufferHardARB::unlock()
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef USE_OPENGLES
|
|
|
|
#ifdef USE_OPENGLES
|
|
|
|
if (_Driver->_Extensions.OESMapBuffer)
|
|
|
|
if (_Driver->_Extensions.OESMapBuffer)
|
|
|
|
|
|
|
|
#endif
|
|
|
|
{
|
|
|
|
{
|
|
|
|
unmapOk = nglUnmapBufferOES(GL_ARRAY_BUFFER);
|
|
|
|
unmapOk = nglUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
|
|
|
|
unmapOk = nglUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NL_DEBUG
|
|
|
|
#ifdef NL_DEBUG
|
|
|
|
_Unmapping = false;
|
|
|
|
_Unmapping = false;
|
|
|
|