Sped up rendering

This commit is contained in:
andreja6
2019-05-15 12:16:51 -07:00
parent d16bf9e39b
commit 3417a34f37
3 changed files with 31 additions and 13 deletions

View File

@@ -7,6 +7,7 @@
PartInstance::PartInstance(void) : _bevelSize(0.07f), _parseVert(0), _debugTimer(0) PartInstance::PartInstance(void) : _bevelSize(0.07f), _parseVert(0), _debugTimer(0)
{ {
PVInstance::PVInstance(); PVInstance::PVInstance();
glList = glGenLists(1);
name = "Unnamed PVItem"; name = "Unnamed PVItem";
className = "Part"; className = "Part";
canCollide = true; canCollide = true;
@@ -59,6 +60,7 @@ void PartInstance::postRender(RenderDevice *rd)
PartInstance::PartInstance(const PartInstance &oinst) : _bevelSize(0.07f), _parseVert(0), _debugTimer(0) PartInstance::PartInstance(const PartInstance &oinst) : _bevelSize(0.07f), _parseVert(0), _debugTimer(0)
{ {
PVInstance::PVInstance(oinst); PVInstance::PVInstance(oinst);
glList = glGenLists(1);
//name = oinst.name; //name = oinst.name;
//className = "Part"; //className = "Part";
name = oinst.name; name = oinst.name;
@@ -209,13 +211,22 @@ void PartInstance::addVertex(Vector3 vertexPos,Color3 color)
_normals.push_back(normal.y); _normals.push_back(normal.y);
_normals.push_back(normal.z); _normals.push_back(normal.z);
} }
}
void PartInstance::addSingularNormal(Vector3 normal)
{
_normals.push_back(normal.x);
_normals.push_back(normal.y);
_normals.push_back(normal.z);
} }
void PartInstance::addTriangle(Vector3 v1,Vector3 v2,Vector3 v3) void PartInstance::addTriangle(Vector3 v1,Vector3 v2,Vector3 v3)
{ {
addVertex(v1,color); addVertex(v1,color);
addVertex(v2,color); addVertex(v2,color);
addVertex(v3,color); addVertex(v3,color);
addNormals(cross(v2-v1,v3-v1).direction()); //addNormals(cross(v2-v1,v3-v1).direction());
addSingularNormal(cross(v2-v1,v3-v1).direction());
addSingularNormal(cross(v3-v2,v1-v2).direction());
addSingularNormal(cross(v1-v3,v2-v3).direction());
} }
void PartInstance::debugPrintVertexIDs(RenderDevice* rd,GFontRef font,Matrix3 rot) void PartInstance::debugPrintVertexIDs(RenderDevice* rd,GFontRef font,Matrix3 rot)
{ {
@@ -379,10 +390,8 @@ void PartInstance::render(RenderDevice* rd) {
_indices.push_back(i); _indices.push_back(i);
} }
changed=false; changed=false;
}
//rd->setObjectToWorldMatrix(cFrame); glNewList(glList, GL_COMPILE);
CoordinateFrame forDraw = rd->getObjectToWorldMatrix();
rd->setObjectToWorldMatrix(cFrame);
glVertexPointer(3, GL_FLOAT,6 * sizeof(GLfloat), &_vertices[0]); glVertexPointer(3, GL_FLOAT,6 * sizeof(GLfloat), &_vertices[0]);
glColorPointer(3, GL_FLOAT,6 * sizeof(GLfloat), &_vertices[3]); glColorPointer(3, GL_FLOAT,6 * sizeof(GLfloat), &_vertices[3]);
glNormalPointer(GL_FLOAT,3 * sizeof(GLfloat), &_normals[0]); glNormalPointer(GL_FLOAT,3 * sizeof(GLfloat), &_normals[0]);
@@ -390,7 +399,12 @@ void PartInstance::render(RenderDevice* rd) {
//glTranslatef(2,7,0); //glTranslatef(2,7,0);
glDrawElements(GL_TRIANGLES, _indices.size(), GL_UNSIGNED_SHORT, &_indices[0]); glDrawElements(GL_TRIANGLES, _indices.size(), GL_UNSIGNED_SHORT, &_indices[0]);
glPopMatrix(); glPopMatrix();
rd->setObjectToWorldMatrix(forDraw); glEndList();
}
rd->setObjectToWorldMatrix(cFrame);
glCallList(glList);
//rd->setObjectToWorldMatrix(cFrame);
} }
#else #else
void PartInstance::render(RenderDevice* rd) void PartInstance::render(RenderDevice* rd)
@@ -471,6 +485,7 @@ void PartInstance::render(RenderDevice* rd)
PartInstance::~PartInstance(void) PartInstance::~PartInstance(void)
{ {
glDeleteLists(glList, 1);
} }
char pto[512]; char pto[512];
char pto2[512]; char pto2[512];

View File

@@ -40,6 +40,7 @@ public:
virtual void PropUpdate(LPPROPGRIDITEM &pItem); virtual void PropUpdate(LPPROPGRIDITEM &pItem);
void addVertex(Vector3 vertexPos,Color3 color); void addVertex(Vector3 vertexPos,Color3 color);
void addNormals(Vector3 normal); void addNormals(Vector3 normal);
void addSingularNormal(Vector3 normal);
void addTriangle(Vector3 vertexPos,Vector3 vertexPos2, Vector3 vertexPos3); void addTriangle(Vector3 vertexPos,Vector3 vertexPos2, Vector3 vertexPos3);
void debugPrintVertexIDs(RenderDevice* rd, GFontRef font, Matrix3 camRot); void debugPrintVertexIDs(RenderDevice* rd, GFontRef font, Matrix3 camRot);
void makeFace(int vertex1, int vertex2, int vertex3); void makeFace(int vertex1, int vertex2, int vertex3);
@@ -60,4 +61,5 @@ private:
std::vector<GLushort> _indices; std::vector<GLushort> _indices;
bool changed; bool changed;
Box itemBox; Box itemBox;
GLuint glList;
}; };

View File

@@ -1290,8 +1290,9 @@ void Demo::onGraphics(RenderDevice* rd) {
}*/ }*/
rd->beforePrimitive(); rd->beforePrimitive();
CoordinateFrame forDraw = rd->getObjectToWorldMatrix();
dataModel->getWorkspace()->render(rd); dataModel->getWorkspace()->render(rd);
rd->setObjectToWorldMatrix(forDraw);
//if (dataModel->children[0]->children.size()>0) //if (dataModel->children[0]->children.size()>0)
//((PartInstance*)dataModel->children[0]->children[0])->debugPrintVertexIDs(rd,fntdominant,-cameraController.getCoordinateFrame().rotation); //((PartInstance*)dataModel->children[0]->children[0])->debugPrintVertexIDs(rd,fntdominant,-cameraController.getCoordinateFrame().rotation);
rd->afterPrimitive(); rd->afterPrimitive();