Refactoring of streamer code to integrate texture and vbo memory management in progress.
This commit is contained in:
@@ -333,7 +333,7 @@ void KRMesh::renderSubmesh(int iSubmesh, KRNode::RenderPass renderPass, const st
|
|||||||
if(m_submeshes[iSubmesh]->vertex_data_blocks.size() <= vbo_index) {
|
if(m_submeshes[iSubmesh]->vertex_data_blocks.size() <= vbo_index) {
|
||||||
KRDataBlock *vertex_data_block = m_pData->getSubBlock(vertex_data_offset + start_vertex_offset * m_vertex_size, vertex_count * m_vertex_size);
|
KRDataBlock *vertex_data_block = m_pData->getSubBlock(vertex_data_offset + start_vertex_offset * m_vertex_size, vertex_count * m_vertex_size);
|
||||||
KRDataBlock *index_data_block = m_pData->getSubBlock(index_data_offset + start_index_offset * 2, index_count * 2);
|
KRDataBlock *index_data_block = m_pData->getSubBlock(index_data_offset + start_index_offset * 2, index_count * 2);
|
||||||
vbo_data_block = new KRMeshManager::KRVBOData(*vertex_data_block, *index_data_block, vertex_attrib_flags, true, false);
|
vbo_data_block = new KRMeshManager::KRVBOData(getContext().getMeshManager(), *vertex_data_block, *index_data_block, vertex_attrib_flags, true, false);
|
||||||
m_submeshes[iSubmesh]->vertex_data_blocks.push_back(vertex_data_block);
|
m_submeshes[iSubmesh]->vertex_data_blocks.push_back(vertex_data_block);
|
||||||
m_submeshes[iSubmesh]->index_data_blocks.push_back(index_data_block);
|
m_submeshes[iSubmesh]->index_data_blocks.push_back(index_data_block);
|
||||||
m_submeshes[iSubmesh]->vbo_data_blocks.push_back(vbo_data_block);
|
m_submeshes[iSubmesh]->vbo_data_blocks.push_back(vbo_data_block);
|
||||||
@@ -368,7 +368,7 @@ void KRMesh::renderSubmesh(int iSubmesh, KRNode::RenderPass renderPass, const st
|
|||||||
if(m_submeshes[iSubmesh]->vertex_data_blocks.size() <= vbo_index) {
|
if(m_submeshes[iSubmesh]->vertex_data_blocks.size() <= vbo_index) {
|
||||||
KRDataBlock *index_data_block = NULL;
|
KRDataBlock *index_data_block = NULL;
|
||||||
KRDataBlock *vertex_data_block = m_pData->getSubBlock(vertex_data_offset + iBuffer * MAX_VBO_SIZE * vertex_size, vertex_size * cBufferVertexes);
|
KRDataBlock *vertex_data_block = m_pData->getSubBlock(vertex_data_offset + iBuffer * MAX_VBO_SIZE * vertex_size, vertex_size * cBufferVertexes);
|
||||||
vbo_data_block = new KRMeshManager::KRVBOData(*vertex_data_block, *index_data_block, vertex_attrib_flags, true, false);
|
vbo_data_block = new KRMeshManager::KRVBOData(getContext().getMeshManager(), *vertex_data_block, *index_data_block, vertex_attrib_flags, true, false);
|
||||||
m_submeshes[iSubmesh]->vertex_data_blocks.push_back(vertex_data_block);
|
m_submeshes[iSubmesh]->vertex_data_blocks.push_back(vertex_data_block);
|
||||||
m_submeshes[iSubmesh]->vbo_data_blocks.push_back(vbo_data_block);
|
m_submeshes[iSubmesh]->vbo_data_blocks.push_back(vbo_data_block);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ KRMeshManager::KRMeshManager(KRContext &context) : KRContextObject(context) {
|
|||||||
memcpy(KRENGINE_VBO_3D_CUBE_VERTICES.getStart(), _KRENGINE_VBO_3D_CUBE_VERTEX_DATA, sizeof(GLfloat) * 3 * 14);
|
memcpy(KRENGINE_VBO_3D_CUBE_VERTICES.getStart(), _KRENGINE_VBO_3D_CUBE_VERTEX_DATA, sizeof(GLfloat) * 3 * 14);
|
||||||
KRENGINE_VBO_3D_CUBE_VERTICES.unlock();
|
KRENGINE_VBO_3D_CUBE_VERTICES.unlock();
|
||||||
|
|
||||||
KRENGINE_VBO_DATA_3D_CUBE_VERTICES.init(KRENGINE_VBO_3D_CUBE_VERTICES, KRENGINE_VBO_3D_CUBE_INDEXES, KRENGINE_VBO_3D_CUBE_ATTRIBS, false, false);
|
KRENGINE_VBO_DATA_3D_CUBE_VERTICES.init(this, KRENGINE_VBO_3D_CUBE_VERTICES, KRENGINE_VBO_3D_CUBE_INDEXES, KRENGINE_VBO_3D_CUBE_ATTRIBS, false, false);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ KRMeshManager::KRMeshManager(KRContext &context) : KRContextObject(context) {
|
|||||||
memcpy(KRENGINE_VBO_2D_SQUARE_VERTICES.getStart(), _KRENGINE_VBO_2D_SQUARE_VERTEX_DATA, sizeof(GLfloat) * 5 * 4);
|
memcpy(KRENGINE_VBO_2D_SQUARE_VERTICES.getStart(), _KRENGINE_VBO_2D_SQUARE_VERTEX_DATA, sizeof(GLfloat) * 5 * 4);
|
||||||
KRENGINE_VBO_2D_SQUARE_VERTICES.unlock();
|
KRENGINE_VBO_2D_SQUARE_VERTICES.unlock();
|
||||||
|
|
||||||
KRENGINE_VBO_DATA_2D_SQUARE_VERTICES.init(KRENGINE_VBO_2D_SQUARE_VERTICES, KRENGINE_VBO_2D_SQUARE_INDEXES, KRENGINE_VBO_2D_SQUARE_ATTRIBS, false, false);
|
KRENGINE_VBO_DATA_2D_SQUARE_VERTICES.init(this, KRENGINE_VBO_2D_SQUARE_VERTICES, KRENGINE_VBO_2D_SQUARE_INDEXES, KRENGINE_VBO_2D_SQUARE_ATTRIBS, false, false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,7 +247,7 @@ void KRMeshManager::bindVBO(KRVBOData *vbo_data)
|
|||||||
|
|
||||||
void KRMeshManager::bindVBO(KRDataBlock &data, KRDataBlock &index_data, int vertex_attrib_flags, bool static_vbo)
|
void KRMeshManager::bindVBO(KRDataBlock &data, KRDataBlock &index_data, int vertex_attrib_flags, bool static_vbo)
|
||||||
{
|
{
|
||||||
KRVBOData *vbo_data = new KRVBOData(data, index_data, vertex_attrib_flags, static_vbo, true);
|
KRVBOData *vbo_data = new KRVBOData(this, data, index_data, vertex_attrib_flags, static_vbo, true);
|
||||||
bindVBO(vbo_data);
|
bindVBO(vbo_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -487,6 +487,7 @@ void KRMeshManager::doStreaming(long &memoryRemaining, long &memoryRemainingThis
|
|||||||
|
|
||||||
KRMeshManager::KRVBOData::KRVBOData()
|
KRMeshManager::KRVBOData::KRVBOData()
|
||||||
{
|
{
|
||||||
|
m_manager = NULL;
|
||||||
m_temp_vbo = false;
|
m_temp_vbo = false;
|
||||||
m_static_vbo = false;
|
m_static_vbo = false;
|
||||||
m_data = NULL;
|
m_data = NULL;
|
||||||
@@ -496,15 +497,19 @@ KRMeshManager::KRVBOData::KRVBOData()
|
|||||||
m_vbo_handle_indexes = -1;
|
m_vbo_handle_indexes = -1;
|
||||||
m_vao_handle = -1;
|
m_vao_handle = -1;
|
||||||
m_size = 0;
|
m_size = 0;
|
||||||
|
|
||||||
|
m_last_frame_used = 0;
|
||||||
|
m_last_frame_max_lod_coverage = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
KRMeshManager::KRVBOData::KRVBOData(KRDataBlock &data, KRDataBlock &index_data, int vertex_attrib_flags, bool static_vbo, bool temp_vbo)
|
KRMeshManager::KRVBOData::KRVBOData(KRMeshManager *manager, KRDataBlock &data, KRDataBlock &index_data, int vertex_attrib_flags, bool static_vbo, bool temp_vbo)
|
||||||
{
|
{
|
||||||
init(data,index_data,vertex_attrib_flags, static_vbo, temp_vbo);
|
init(manager, data,index_data,vertex_attrib_flags, static_vbo, temp_vbo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void KRMeshManager::KRVBOData::init(KRDataBlock &data, KRDataBlock &index_data, int vertex_attrib_flags, bool static_vbo, bool temp_vbo)
|
void KRMeshManager::KRVBOData::init(KRMeshManager *manager, KRDataBlock &data, KRDataBlock &index_data, int vertex_attrib_flags, bool static_vbo, bool temp_vbo)
|
||||||
{
|
{
|
||||||
|
m_manager = manager;
|
||||||
m_temp_vbo = temp_vbo;
|
m_temp_vbo = temp_vbo;
|
||||||
m_static_vbo = static_vbo;
|
m_static_vbo = static_vbo;
|
||||||
m_data = &data;
|
m_data = &data;
|
||||||
@@ -616,3 +621,13 @@ void KRMeshManager::KRVBOData::bind()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KRMeshManager::KRVBOData::resetPoolExpiry(float lodCoverage)
|
||||||
|
{
|
||||||
|
long current_frame = m_manager->getContext().getCurrentFrame();
|
||||||
|
if(current_frame != m_last_frame_used) {
|
||||||
|
m_last_frame_used = current_frame;
|
||||||
|
m_last_frame_max_lod_coverage = 0.0f;
|
||||||
|
}
|
||||||
|
m_last_frame_max_lod_coverage = KRMAX(lodCoverage, m_last_frame_max_lod_coverage);
|
||||||
|
}
|
||||||
@@ -64,8 +64,8 @@ public:
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
KRVBOData();
|
KRVBOData();
|
||||||
KRVBOData(KRDataBlock &data, KRDataBlock &index_data, int vertex_attrib_flags, bool static_vbo, bool temp_vbo);
|
KRVBOData(KRMeshManager *manager, KRDataBlock &data, KRDataBlock &index_data, int vertex_attrib_flags, bool static_vbo, bool temp_vbo);
|
||||||
void init(KRDataBlock &data, KRDataBlock &index_data, int vertex_attrib_flags, bool static_vbo, bool temp_vbo);
|
void init(KRMeshManager *manager, KRDataBlock &data, KRDataBlock &index_data, int vertex_attrib_flags, bool static_vbo, bool temp_vbo);
|
||||||
~KRVBOData();
|
~KRVBOData();
|
||||||
|
|
||||||
|
|
||||||
@@ -84,7 +84,10 @@ public:
|
|||||||
bool isTemporary() { return m_temp_vbo; }
|
bool isTemporary() { return m_temp_vbo; }
|
||||||
bool getSize() { return m_size; }
|
bool getSize() { return m_size; }
|
||||||
|
|
||||||
|
void resetPoolExpiry(float lodCoverage);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
KRMeshManager *m_manager;
|
||||||
int m_vertex_attrib_flags;
|
int m_vertex_attrib_flags;
|
||||||
GLuint m_vbo_handle;
|
GLuint m_vbo_handle;
|
||||||
GLuint m_vbo_handle_indexes;
|
GLuint m_vbo_handle_indexes;
|
||||||
@@ -92,6 +95,9 @@ public:
|
|||||||
bool m_static_vbo;
|
bool m_static_vbo;
|
||||||
bool m_temp_vbo;
|
bool m_temp_vbo;
|
||||||
GLsizeiptr m_size;
|
GLsizeiptr m_size;
|
||||||
|
|
||||||
|
long m_last_frame_used;
|
||||||
|
float m_last_frame_max_lod_coverage;
|
||||||
};
|
};
|
||||||
|
|
||||||
void bindVBO(KRVBOData *vbo_data);
|
void bindVBO(KRVBOData *vbo_data);
|
||||||
|
|||||||
Reference in New Issue
Block a user