- cleaned up a little the class function members
- switched from private functions to protected ones
This commit is contained in:
parent
dca2488ac4
commit
8842cea2b3
|
@ -40,7 +40,7 @@
|
||||||
|
|
||||||
namespace vcg
|
namespace vcg
|
||||||
{
|
{
|
||||||
//WARNING: All the classes derived from MemoryInfo has been intended to be instantiated as a singleton in the host application
|
//WARNING: All the classes derived from MemoryInfo has been intended to be instantiated as a singleton in the host application
|
||||||
//(i.e. in every application using it just an instance of a class derived from MemoryInfo should be declared).
|
//(i.e. in every application using it just an instance of a class derived from MemoryInfo should be declared).
|
||||||
|
|
||||||
class MemoryInfo
|
class MemoryInfo
|
||||||
|
@ -168,16 +168,16 @@ namespace vcg
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLMeshAttributesFeeder(/*const*/ MESHTYPE& mesh,MemoryInfo& meminfo, size_t perbatchtriangles)
|
GLMeshAttributesFeeder(/*const*/ MESHTYPE& mesh,MemoryInfo& meminfo, size_t perbatchtriangles)
|
||||||
:_mesh(mesh),_gpumeminfo(meminfo),_bo(8,NULL)/*,vaohandle(0)*/,_lastfeedingusedreplicatedpipeline(false),_perbatchsimplex(perbatchtriangles),_chunkmap(),_borendering(false)
|
:_mesh(mesh),_gpumeminfo(meminfo),_bo(8,NULL)/*,vaohandle(0)*/,_lastfeedingusedreplicatedpipeline(false),_perbatchsimplex(perbatchtriangles),_chunkmap(),_borendering(false)
|
||||||
{
|
{
|
||||||
_bo[VERTPOSITIONBO] = new GLBufferObject(3,GL_FLOAT);
|
_bo[VERTPOSITIONBO] = new GLBufferObject(3,GL_FLOAT,GL_ARRAY_BUFFER);
|
||||||
_bo[VERTNORMALBO] = new GLBufferObject(3,GL_FLOAT);
|
_bo[VERTNORMALBO] = new GLBufferObject(3,GL_FLOAT,GL_ARRAY_BUFFER);
|
||||||
_bo[FACENORMALBO] = new GLBufferObject(3,GL_FLOAT);
|
_bo[FACENORMALBO] = new GLBufferObject(3,GL_FLOAT,GL_ARRAY_BUFFER);
|
||||||
_bo[VERTCOLORBO] = new GLBufferObject(4,GL_UNSIGNED_BYTE);
|
_bo[VERTCOLORBO] = new GLBufferObject(4,GL_UNSIGNED_BYTE,GL_ARRAY_BUFFER);
|
||||||
_bo[FACECOLORBO] = new GLBufferObject(4,GL_UNSIGNED_BYTE);
|
_bo[FACECOLORBO] = new GLBufferObject(4,GL_UNSIGNED_BYTE,GL_ARRAY_BUFFER);
|
||||||
_bo[VERTTEXTUREBO] = new GLBufferObject(2,GL_FLOAT);
|
_bo[VERTTEXTUREBO] = new GLBufferObject(2,GL_FLOAT,GL_ARRAY_BUFFER);
|
||||||
_bo[WEDGETEXTUREBO] = new GLBufferObject(2,GL_FLOAT);
|
_bo[WEDGETEXTUREBO] = new GLBufferObject(2,GL_FLOAT,GL_ARRAY_BUFFER);
|
||||||
_bo[VERTINDEXBO] = new GLBufferObject(3,GL_UNSIGNED_INT);
|
_bo[VERTINDEXBO] = new GLBufferObject(3,GL_UNSIGNED_INT,GL_ELEMENT_ARRAY_BUFFER);
|
||||||
}
|
}
|
||||||
|
|
||||||
~GLMeshAttributesFeeder()
|
~GLMeshAttributesFeeder()
|
||||||
|
@ -244,65 +244,37 @@ namespace vcg
|
||||||
textureindex contained the texture OpenGL ids loaded in the gpu memory by the main application*/
|
textureindex contained the texture OpenGL ids loaded in the gpu memory by the main application*/
|
||||||
void passTrianglesToOpenGL(GLuint& vaohandlespecificperopenglcontext,NORMAL_MODALITY nm,COLOR_MODALITY cm,TEXTURE_MODALITY tm,const std::vector<GLuint>& textureindex = std::vector<GLuint>())
|
void passTrianglesToOpenGL(GLuint& vaohandlespecificperopenglcontext,NORMAL_MODALITY nm,COLOR_MODALITY cm,TEXTURE_MODALITY tm,const std::vector<GLuint>& textureindex = std::vector<GLuint>())
|
||||||
{
|
{
|
||||||
std::vector<bool> importattribute(_bo.size());
|
if (tryToAllocatePerTriangleAttributesInBO(vaohandlespecificperopenglcontext,nm,cm,tm))
|
||||||
std::vector<bool> attributestobeupdated;
|
|
||||||
attributesToBeImportedInTriangleBasedPipeline(importattribute, nm, cm, tm);
|
|
||||||
bool replicated = !importattribute[VERTINDEXBO];
|
|
||||||
bool immediatemode = !(buffersAllocationFunction(vaohandlespecificperopenglcontext,nm,cm,tm,importattribute,attributestobeupdated));
|
|
||||||
if (immediatemode)
|
|
||||||
immediateMode(nm,cm,tm,textureindex);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bool somethingtoupdate = false;
|
|
||||||
for(size_t hh = 0;hh < attributestobeupdated.size();++hh)
|
|
||||||
somethingtoupdate = somethingtoupdate || attributestobeupdated[hh];
|
|
||||||
if (somethingtoupdate)
|
|
||||||
{
|
|
||||||
if (replicated)
|
|
||||||
{
|
|
||||||
//WARNING!In case we have to update the wedgetexture bo maybe (not always!) we must update also the other buffer already in memory
|
|
||||||
//cause the wedgetexture pipeline force a change in the order of the triangles in GPU.
|
|
||||||
//they are now ordered by the texture seam and not more by the triangle index!
|
|
||||||
if (attributestobeupdated[WEDGETEXTUREBO])
|
|
||||||
{
|
|
||||||
for(size_t jj = 0;jj < attributestobeupdated.size();++jj)
|
|
||||||
attributestobeupdated[jj] = importattribute[jj] || attributestobeupdated[jj];
|
|
||||||
}
|
|
||||||
updateBuffersReplicatedPipeline(attributestobeupdated,tm);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
updateBuffersIndexedPipeline(attributestobeupdated);
|
|
||||||
}
|
|
||||||
drawTriangles(vaohandlespecificperopenglcontext,nm,cm,tm,textureindex);
|
drawTriangles(vaohandlespecificperopenglcontext,nm,cm,tm,textureindex);
|
||||||
}
|
else
|
||||||
|
immediateMode(nm,cm,tm,textureindex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void passPointsToOpenGL(GLuint& vaohandlespecificperopenglcontext,NORMAL_MODALITY nm,COLOR_MODALITY cm)
|
void passPointsToOpenGL(GLuint& vaohandlespecificperopenglcontext,NORMAL_MODALITY nm,COLOR_MODALITY cm)
|
||||||
{
|
{
|
||||||
std::vector<bool> importattribute(_bo.size());
|
if (tryToAllocatePerPointAttributesInBO(vaohandlespecificperopenglcontext,nm,cm))
|
||||||
std::vector<bool> attributestobeupdated;
|
|
||||||
attributesToBeImportedInPointBasedPipeline(importattribute, nm, cm);
|
|
||||||
bool immediatemode = !(buffersAllocationFunction(vaohandlespecificperopenglcontext,nm,cm,TX_NONE,importattribute,attributestobeupdated));
|
|
||||||
std::vector<GLuint> textureindex;
|
|
||||||
if (immediatemode)
|
|
||||||
immediateMode(nm,cm,TX_NONE,textureindex);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bool somethingtoupdate = false;
|
|
||||||
for(size_t hh = 0;hh < attributestobeupdated.size();++hh)
|
|
||||||
somethingtoupdate = somethingtoupdate || attributestobeupdated[hh];
|
|
||||||
if (somethingtoupdate)
|
|
||||||
updateBuffersIndexedPipeline(attributestobeupdated);
|
|
||||||
drawPoints(vaohandlespecificperopenglcontext);
|
drawPoints(vaohandlespecificperopenglcontext);
|
||||||
}
|
else
|
||||||
|
immediateMode(nm,cm,TX_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
enum BO_NAMES
|
||||||
|
{
|
||||||
|
VERTPOSITIONBO = 0,
|
||||||
|
VERTNORMALBO = 1,
|
||||||
|
FACENORMALBO = 2,
|
||||||
|
VERTCOLORBO = 3,
|
||||||
|
FACECOLORBO = 4,
|
||||||
|
VERTTEXTUREBO = 5,
|
||||||
|
WEDGETEXTUREBO = 6,
|
||||||
|
VERTINDEXBO = 7
|
||||||
|
};
|
||||||
|
|
||||||
|
protected:
|
||||||
struct GLBufferObject
|
struct GLBufferObject
|
||||||
{
|
{
|
||||||
GLBufferObject(size_t components,GLenum gltype)
|
GLBufferObject(size_t components,GLenum gltype,GLenum target)
|
||||||
:_size(0),_components(components),_isvalid(false),_gltype(gltype),_bohandle(0)
|
:_size(0),_components(components),_isvalid(false),_gltype(gltype),_target(target),_bohandle(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -326,20 +298,14 @@ namespace vcg
|
||||||
const size_t _components;
|
const size_t _components;
|
||||||
bool _isvalid;
|
bool _isvalid;
|
||||||
const GLenum _gltype;
|
const GLenum _gltype;
|
||||||
|
const GLenum _target;
|
||||||
GLuint _bohandle;
|
GLuint _bohandle;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum BO_NAMES
|
const GLBufferObject& getBufferObjectInfo(BO_NAMES boname) const
|
||||||
{
|
{
|
||||||
VERTPOSITIONBO = 0,
|
return _bo[boname];
|
||||||
VERTNORMALBO = 1,
|
}
|
||||||
FACENORMALBO = 2,
|
|
||||||
VERTCOLORBO = 3,
|
|
||||||
FACECOLORBO = 4,
|
|
||||||
VERTTEXTUREBO = 5,
|
|
||||||
WEDGETEXTUREBO = 6,
|
|
||||||
VERTINDEXBO = 7
|
|
||||||
};
|
|
||||||
|
|
||||||
long long unsigned int bufferObjectsMemoryRequired(NORMAL_MODALITY nm,COLOR_MODALITY cm,TEXTURE_MODALITY tm,bool generateindex) const
|
long long unsigned int bufferObjectsMemoryRequired(NORMAL_MODALITY nm,COLOR_MODALITY cm,TEXTURE_MODALITY tm,bool generateindex) const
|
||||||
{
|
{
|
||||||
|
@ -363,7 +329,7 @@ namespace vcg
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void attributesToBeImportedInTriangleBasedPipeline( std::vector<bool> &importattribute, NORMAL_MODALITY nm, COLOR_MODALITY cm, TEXTURE_MODALITY tm )
|
void attributesToBeImportedInTriangleBasedPipeline( std::vector<bool> &importattribute, NORMAL_MODALITY nm, COLOR_MODALITY cm, TEXTURE_MODALITY tm ) const
|
||||||
{
|
{
|
||||||
importattribute[VERTPOSITIONBO] = true;
|
importattribute[VERTPOSITIONBO] = true;
|
||||||
importattribute[VERTNORMALBO] = vcg::tri::HasPerVertexNormal(_mesh) && (nm == NR_PERVERT);
|
importattribute[VERTNORMALBO] = vcg::tri::HasPerVertexNormal(_mesh) && (nm == NR_PERVERT);
|
||||||
|
@ -388,7 +354,7 @@ namespace vcg
|
||||||
importattribute[VERTINDEXBO] = !replicated;
|
importattribute[VERTINDEXBO] = !replicated;
|
||||||
}
|
}
|
||||||
|
|
||||||
void attributesToBeImportedInPointBasedPipeline( std::vector<bool> &importattribute, NORMAL_MODALITY nm, COLOR_MODALITY cm)
|
void attributesToBeImportedInPointBasedPipeline( std::vector<bool> &importattribute, NORMAL_MODALITY nm, COLOR_MODALITY cm) const
|
||||||
{
|
{
|
||||||
importattribute[VERTPOSITIONBO] = true;
|
importattribute[VERTPOSITIONBO] = true;
|
||||||
importattribute[VERTNORMALBO] = vcg::tri::HasPerVertexNormal(_mesh) && (nm == NR_PERVERT);
|
importattribute[VERTNORMALBO] = vcg::tri::HasPerVertexNormal(_mesh) && (nm == NR_PERVERT);
|
||||||
|
@ -402,7 +368,7 @@ namespace vcg
|
||||||
|
|
||||||
bool buffersAllocationFunction(GLuint& vaohandlespecificperopenglcontext,NORMAL_MODALITY nm,COLOR_MODALITY cm,TEXTURE_MODALITY tm,const std::vector<bool>& importattribute,std::vector<bool>& attributestobeupdated)
|
bool buffersAllocationFunction(GLuint& vaohandlespecificperopenglcontext,NORMAL_MODALITY nm,COLOR_MODALITY cm,TEXTURE_MODALITY tm,const std::vector<bool>& importattribute,std::vector<bool>& attributestobeupdated)
|
||||||
{
|
{
|
||||||
if (vaohandlespecificperopenglcontext == 0)
|
if (vaohandlespecificperopenglcontext == 0)
|
||||||
//glGenVertexArrays(1,&vaohandle);
|
//glGenVertexArrays(1,&vaohandle);
|
||||||
return false;
|
return false;
|
||||||
bool replicated = (importattribute[FACENORMALBO] || importattribute[FACECOLORBO] || importattribute[WEDGETEXTUREBO]);
|
bool replicated = (importattribute[FACENORMALBO] || importattribute[FACECOLORBO] || importattribute[WEDGETEXTUREBO]);
|
||||||
|
@ -480,7 +446,7 @@ namespace vcg
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
unsigned int ii = 0;
|
unsigned int ii = 0;
|
||||||
//I have to update the invalid buffers requested to be imported
|
//I have to update the invalid buffers requested to be imported
|
||||||
attributestobeupdated = importattribute;
|
attributestobeupdated = importattribute;
|
||||||
|
@ -489,9 +455,6 @@ namespace vcg
|
||||||
BO_NAMES boname = static_cast<BO_NAMES>(ii);
|
BO_NAMES boname = static_cast<BO_NAMES>(ii);
|
||||||
GLBufferObject* cbo = _bo.at(boname);
|
GLBufferObject* cbo = _bo.at(boname);
|
||||||
bool importatt = importattribute.at(boname);
|
bool importatt = importattribute.at(boname);
|
||||||
GLenum target = GL_ARRAY_BUFFER;
|
|
||||||
if (boname == VERTINDEXBO)
|
|
||||||
target = GL_ELEMENT_ARRAY_BUFFER;
|
|
||||||
glBindVertexArray(vaohandlespecificperopenglcontext);
|
glBindVertexArray(vaohandlespecificperopenglcontext);
|
||||||
bool notvalidbuttoberegenerated = (cbo != NULL) && (!cbo->_isvalid) && (importatt);
|
bool notvalidbuttoberegenerated = (cbo != NULL) && (!cbo->_isvalid) && (importatt);
|
||||||
if (notvalidbuttoberegenerated)
|
if (notvalidbuttoberegenerated)
|
||||||
|
@ -499,11 +462,11 @@ namespace vcg
|
||||||
cbo->_size = boExpectedSize(boname,replicated,importattribute[VERTINDEXBO]);
|
cbo->_size = boExpectedSize(boname,replicated,importattribute[VERTINDEXBO]);
|
||||||
long long unsigned int dim = boExpectedDimension(boname,replicated,importattribute[VERTINDEXBO]);
|
long long unsigned int dim = boExpectedDimension(boname,replicated,importattribute[VERTINDEXBO]);
|
||||||
glGenBuffers(1, &cbo->_bohandle);
|
glGenBuffers(1, &cbo->_bohandle);
|
||||||
glBindBuffer(target, cbo->_bohandle);
|
glBindBuffer(cbo->_target, cbo->_bohandle);
|
||||||
glBufferData(target, dim, NULL, GL_STATIC_DRAW);
|
glBufferData(cbo->_target, dim, NULL, GL_STATIC_DRAW);
|
||||||
setBufferPointerEnableClientState(boname);
|
setBufferPointerEnableClientState(boname);
|
||||||
glBindBuffer(target, 0);
|
glBindBuffer(cbo->_target, 0);
|
||||||
_gpumeminfo.acquiredMemory(dim);
|
_gpumeminfo.acquiredMemory(dim);
|
||||||
attributestobeupdated[boname] = true;
|
attributestobeupdated[boname] = true;
|
||||||
cbo->_isvalid = true;
|
cbo->_isvalid = true;
|
||||||
}
|
}
|
||||||
|
@ -529,6 +492,57 @@ namespace vcg
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool tryToAllocatePerTriangleAttributesInBO(GLuint& vaohandlespecificperopenglcontext,NORMAL_MODALITY nm,COLOR_MODALITY cm,TEXTURE_MODALITY tm)
|
||||||
|
{
|
||||||
|
std::vector<bool> importattribute(_bo.size());
|
||||||
|
std::vector<bool> attributestobeupdated;
|
||||||
|
attributesToBeImportedInTriangleBasedPipeline(importattribute, nm, cm, tm);
|
||||||
|
bool replicated = !importattribute[VERTINDEXBO];
|
||||||
|
bool immediatemode = !(buffersAllocationFunction(vaohandlespecificperopenglcontext,nm,cm,tm,importattribute,attributestobeupdated));
|
||||||
|
|
||||||
|
if (immediatemode)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool somethingtoupdate = false;
|
||||||
|
for(size_t hh = 0;hh < attributestobeupdated.size();++hh)
|
||||||
|
somethingtoupdate = somethingtoupdate || attributestobeupdated[hh];
|
||||||
|
if (somethingtoupdate)
|
||||||
|
{
|
||||||
|
if (replicated)
|
||||||
|
{
|
||||||
|
//WARNING!In case we have to update the wedgetexture bo maybe (not always!) we must update also the other buffer already in memory
|
||||||
|
//cause the wedgetexture pipeline force a change in the order of the triangles in GPU.
|
||||||
|
//they are now ordered by the texture seam and not more by the triangle index!
|
||||||
|
if (attributestobeupdated[WEDGETEXTUREBO])
|
||||||
|
{
|
||||||
|
for(size_t jj = 0;jj < attributestobeupdated.size();++jj)
|
||||||
|
attributestobeupdated[jj] = importattribute[jj] || attributestobeupdated[jj];
|
||||||
|
}
|
||||||
|
updateBuffersReplicatedPipeline(attributestobeupdated,tm);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
updateBuffersIndexedPipeline(attributestobeupdated);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool tryToAllocatePerPointAttributesInBO(GLuint& vaohandlespecificperopenglcontext,NORMAL_MODALITY nm,COLOR_MODALITY cm)
|
||||||
|
{
|
||||||
|
std::vector<bool> importattribute(_bo.size());
|
||||||
|
std::vector<bool> attributestobeupdated;
|
||||||
|
attributesToBeImportedInPointBasedPipeline(importattribute, nm, cm);
|
||||||
|
bool immediatemode = !(buffersAllocationFunction(vaohandlespecificperopenglcontext,nm,cm,TX_NONE,importattribute,attributestobeupdated));
|
||||||
|
if (immediatemode)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool somethingtoupdate = false;
|
||||||
|
for(size_t hh = 0;hh < attributestobeupdated.size();++hh)
|
||||||
|
somethingtoupdate = somethingtoupdate || attributestobeupdated[hh];
|
||||||
|
if (somethingtoupdate)
|
||||||
|
updateBuffersIndexedPipeline(attributestobeupdated);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool updateBuffersIndexedPipeline(const std::vector<bool>& attributestobeupdated)
|
bool updateBuffersIndexedPipeline(const std::vector<bool>& attributestobeupdated)
|
||||||
{
|
{
|
||||||
_chunkmap.clear();
|
_chunkmap.clear();
|
||||||
|
@ -813,7 +827,7 @@ namespace vcg
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool immediateMode(NORMAL_MODALITY nm,COLOR_MODALITY cm,TEXTURE_MODALITY tm,const std::vector<GLuint>& textureindex)
|
bool immediateMode(NORMAL_MODALITY nm,COLOR_MODALITY cm,TEXTURE_MODALITY tm,const std::vector<GLuint>& textureindex = std::vector<GLuint>())
|
||||||
{
|
{
|
||||||
glPushAttrib(GL_ALL_ATTRIB_BITS);
|
glPushAttrib(GL_ALL_ATTRIB_BITS);
|
||||||
if(_mesh.fn==0)
|
if(_mesh.fn==0)
|
||||||
|
@ -912,7 +926,11 @@ namespace vcg
|
||||||
std::vector<bool> att(_bo.size(),false);
|
std::vector<bool> att(_bo.size(),false);
|
||||||
attributesToBeImportedInTriangleBasedPipeline(att,nm,cm,tm);
|
attributesToBeImportedInTriangleBasedPipeline(att,nm,cm,tm);
|
||||||
bool replicated = !att[VERTINDEXBO];
|
bool replicated = !att[VERTINDEXBO];
|
||||||
|
GLenum err = glGetError();
|
||||||
|
assert(err == GL_NO_ERROR);
|
||||||
glBindVertexArray(vaohandlespecificperopenglcontext);
|
glBindVertexArray(vaohandlespecificperopenglcontext);
|
||||||
|
err = glGetError();
|
||||||
|
assert(err == GL_NO_ERROR);
|
||||||
|
|
||||||
if (replicated)
|
if (replicated)
|
||||||
{
|
{
|
||||||
|
@ -956,9 +974,18 @@ namespace vcg
|
||||||
|
|
||||||
if (_bo[VERTINDEXBO]->_isvalid)
|
if (_bo[VERTINDEXBO]->_isvalid)
|
||||||
{
|
{
|
||||||
|
err = glGetError();
|
||||||
|
assert(err == GL_NO_ERROR);
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,_bo[VERTINDEXBO]->_bohandle);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,_bo[VERTINDEXBO]->_bohandle);
|
||||||
glDrawElements( GL_TRIANGLES, _mesh.fn * _bo[VERTINDEXBO]->_components,GL_UNSIGNED_INT ,NULL);
|
err = glGetError();
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
assert(err == GL_NO_ERROR);
|
||||||
|
glDrawElements( GL_TRIANGLES, _mesh.fn * _bo[VERTINDEXBO]->_components,GL_UNSIGNED_INT ,NULL);
|
||||||
|
err = glGetError();
|
||||||
|
printf("errore (%s)\n",gluErrorString(err));
|
||||||
|
assert(err == GL_NO_ERROR);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
|
err = glGetError();
|
||||||
|
assert(err == GL_NO_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D,0);
|
glBindTexture(GL_TEXTURE_2D,0);
|
||||||
|
@ -982,7 +1009,7 @@ namespace vcg
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setBufferPointerEnableClientState( BO_NAMES boname)
|
void setBufferPointerEnableClientState( BO_NAMES boname) const
|
||||||
{
|
{
|
||||||
if ((boname < VERTPOSITIONBO) || (boname > VERTINDEXBO))
|
if ((boname < VERTPOSITIONBO) || (boname > VERTINDEXBO))
|
||||||
return;
|
return;
|
||||||
|
@ -1021,12 +1048,12 @@ namespace vcg
|
||||||
}
|
}
|
||||||
case(VERTINDEXBO):
|
case(VERTINDEXBO):
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void disableClientState( BO_NAMES boname,const std::vector<bool>& importatt)
|
void disableClientState( BO_NAMES boname,const std::vector<bool>& importatt) const
|
||||||
{
|
{
|
||||||
if ((boname < VERTPOSITIONBO) || (boname > VERTINDEXBO))
|
if ((boname < VERTPOSITIONBO) || (boname > VERTINDEXBO))
|
||||||
return;
|
return;
|
||||||
|
@ -1180,7 +1207,7 @@ namespace vcg
|
||||||
|
|
||||||
std::vector<GLBufferObject*> _bo;
|
std::vector<GLBufferObject*> _bo;
|
||||||
//GLuint vaohandle;
|
//GLuint vaohandle;
|
||||||
|
|
||||||
std::vector< std::pair<short,GLuint> > _texindnumtriangles;
|
std::vector< std::pair<short,GLuint> > _texindnumtriangles;
|
||||||
|
|
||||||
bool _lastfeedingusedreplicatedpipeline;
|
bool _lastfeedingusedreplicatedpipeline;
|
||||||
|
|
Loading…
Reference in New Issue