Refactoring of streamer code to integrate texture and vbo memory management in progress.
--HG-- branch : nfb
This commit is contained in:
@@ -329,20 +329,20 @@ void KRMesh::renderSubmesh(int iSubmesh, KRNode::RenderPass renderPass, const st
|
|||||||
int start_index_offset, start_vertex_offset, index_count, vertex_count;
|
int start_index_offset, start_vertex_offset, index_count, vertex_count;
|
||||||
getIndexedRange(index_group++, start_index_offset, start_vertex_offset, index_count, vertex_count);
|
getIndexedRange(index_group++, start_index_offset, start_vertex_offset, index_count, vertex_count);
|
||||||
|
|
||||||
KRDataBlock *vertex_data_block = NULL;
|
KRMeshManager::KRVBOData *vbo_data_block = NULL;
|
||||||
KRDataBlock *index_data_block = NULL;
|
|
||||||
if(m_submeshes[iSubmesh]->vertex_data_blocks.size() <= vbo_index) {
|
if(m_submeshes[iSubmesh]->vertex_data_blocks.size() <= vbo_index) {
|
||||||
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);
|
||||||
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);
|
||||||
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);
|
||||||
} else {
|
} else {
|
||||||
vertex_data_block = m_submeshes[iSubmesh]->vertex_data_blocks[vbo_index];
|
vbo_data_block = m_submeshes[iSubmesh]->vbo_data_blocks[vbo_index];
|
||||||
index_data_block = m_submeshes[iSubmesh]->index_data_blocks[vbo_index];
|
|
||||||
}
|
}
|
||||||
vbo_index++;
|
vbo_index++;
|
||||||
|
|
||||||
m_pContext->getMeshManager()->bindVBO(*vertex_data_block, *index_data_block, vertex_attrib_flags, true);
|
m_pContext->getMeshManager()->bindVBO(vbo_data_block);
|
||||||
|
|
||||||
|
|
||||||
int vertex_draw_count = cVertexes;
|
int vertex_draw_count = cVertexes;
|
||||||
@@ -363,18 +363,20 @@ void KRMesh::renderSubmesh(int iSubmesh, KRNode::RenderPass renderPass, const st
|
|||||||
GLsizei cBufferVertexes = iBuffer < cBuffers - 1 ? MAX_VBO_SIZE : vertex_count % MAX_VBO_SIZE;
|
GLsizei cBufferVertexes = iBuffer < cBuffers - 1 ? MAX_VBO_SIZE : vertex_count % MAX_VBO_SIZE;
|
||||||
int vertex_size = m_vertex_size;
|
int vertex_size = m_vertex_size;
|
||||||
|
|
||||||
KRDataBlock *vertex_data_block = NULL;
|
|
||||||
KRDataBlock *index_data_block = NULL;
|
|
||||||
if(m_submeshes[iSubmesh]->vertex_data_blocks.size() <= vbo_index) {
|
|
||||||
vertex_data_block = m_pData->getSubBlock(vertex_data_offset + iBuffer * MAX_VBO_SIZE * vertex_size, vertex_size * cBufferVertexes);
|
|
||||||
|
|
||||||
|
KRMeshManager::KRVBOData *vbo_data_block = NULL;
|
||||||
|
if(m_submeshes[iSubmesh]->vertex_data_blocks.size() <= vbo_index) {
|
||||||
|
KRDataBlock *index_data_block = NULL;
|
||||||
|
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);
|
||||||
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);
|
||||||
} else {
|
} else {
|
||||||
vertex_data_block = m_submeshes[iSubmesh]->vertex_data_blocks[vbo_index];
|
vbo_data_block = m_submeshes[iSubmesh]->vbo_data_blocks[vbo_index];
|
||||||
}
|
}
|
||||||
vbo_index++;
|
vbo_index++;
|
||||||
|
|
||||||
m_pContext->getMeshManager()->bindVBO(*vertex_data_block, *index_data_block, vertex_attrib_flags, true);
|
m_pContext->getMeshManager()->bindVBO(vbo_data_block);
|
||||||
|
|
||||||
|
|
||||||
if(iVertex + cVertexes >= MAX_VBO_SIZE) {
|
if(iVertex + cVertexes >= MAX_VBO_SIZE) {
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
#include "KRMat4.h"
|
#include "KRMat4.h"
|
||||||
#include "KRContext.h"
|
#include "KRContext.h"
|
||||||
#include "KRBone.h"
|
#include "KRBone.h"
|
||||||
|
#include "KRMeshManager.h"
|
||||||
|
|
||||||
#include "KREngine-common.h"
|
#include "KREngine-common.h"
|
||||||
|
|
||||||
@@ -141,10 +142,13 @@ public:
|
|||||||
public:
|
public:
|
||||||
Submesh() {};
|
Submesh() {};
|
||||||
~Submesh() {
|
~Submesh() {
|
||||||
for(std::vector<KRDataBlock *>::iterator itr = vertex_data_blocks.begin(); itr != vertex_data_blocks.end(); itr++) {
|
for(auto itr = vbo_data_blocks.begin(); itr != vbo_data_blocks.end(); itr++) {
|
||||||
delete (*itr);
|
delete (*itr);
|
||||||
}
|
}
|
||||||
for(std::vector<KRDataBlock *>::iterator itr = index_data_blocks.begin(); itr != index_data_blocks.end(); itr++) {
|
for(auto itr = vertex_data_blocks.begin(); itr != vertex_data_blocks.end(); itr++) {
|
||||||
|
delete (*itr);
|
||||||
|
}
|
||||||
|
for(auto itr = index_data_blocks.begin(); itr != index_data_blocks.end(); itr++) {
|
||||||
delete (*itr);
|
delete (*itr);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -154,6 +158,7 @@ public:
|
|||||||
char szMaterialName[KRENGINE_MAX_NAME_LENGTH];
|
char szMaterialName[KRENGINE_MAX_NAME_LENGTH];
|
||||||
vector<KRDataBlock *> vertex_data_blocks;
|
vector<KRDataBlock *> vertex_data_blocks;
|
||||||
vector<KRDataBlock *> index_data_blocks;
|
vector<KRDataBlock *> index_data_blocks;
|
||||||
|
vector<KRMeshManager::KRVBOData *> vbo_data_blocks;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
Reference in New Issue
Block a user