mirror of
https://github.com/Armored-Dragon/overte.git
synced 2025-03-11 16:13:16 +01:00
more removal of immediate mode
This commit is contained in:
parent
0d63391be8
commit
1bfce7d876
5 changed files with 44 additions and 27 deletions
|
@ -986,10 +986,16 @@ int Avatar::parseDataAtOffset(const QByteArray& packet, int offset) {
|
|||
return bytesRead;
|
||||
}
|
||||
|
||||
int Avatar::_jointConesID = GeometryCache::UNKNOWN_ID;
|
||||
|
||||
// render a makeshift cone section that serves as a body part connecting joint spheres
|
||||
void Avatar::renderJointConnectingCone(glm::vec3 position1, glm::vec3 position2, float radius1, float radius2) {
|
||||
|
||||
GeometryCache::SharedPointer geometryCache = DependencyManager::get<GeometryCache>();
|
||||
|
||||
glBegin(GL_TRIANGLES);
|
||||
if (_jointConesID == GeometryCache::UNKNOWN_ID) {
|
||||
_jointConesID = geometryCache->allocateID();
|
||||
}
|
||||
|
||||
glm::vec3 axis = position2 - position1;
|
||||
float length = glm::length(axis);
|
||||
|
@ -1004,6 +1010,7 @@ void Avatar::renderJointConnectingCone(glm::vec3 position1, glm::vec3 position2,
|
|||
|
||||
float anglea = 0.0f;
|
||||
float angleb = 0.0f;
|
||||
QVector<glm::vec3> points;
|
||||
|
||||
for (int i = 0; i < NUM_BODY_CONE_SIDES; i ++) {
|
||||
|
||||
|
@ -1022,16 +1029,14 @@ void Avatar::renderJointConnectingCone(glm::vec3 position1, glm::vec3 position2,
|
|||
glm::vec3 p2a = position2 + perpSin * sa * radius2 + perpCos * ca * radius2;
|
||||
glm::vec3 p2b = position2 + perpSin * sb * radius2 + perpCos * cb * radius2;
|
||||
|
||||
glVertex3f(p1a.x, p1a.y, p1a.z);
|
||||
glVertex3f(p1b.x, p1b.y, p1b.z);
|
||||
glVertex3f(p2a.x, p2a.y, p2a.z);
|
||||
glVertex3f(p1b.x, p1b.y, p1b.z);
|
||||
glVertex3f(p2a.x, p2a.y, p2a.z);
|
||||
glVertex3f(p2b.x, p2b.y, p2b.z);
|
||||
points << p1a << p1b << p2a << p1b << p2a << p2b;
|
||||
}
|
||||
|
||||
// TODO: this is really inefficient constantly recreating these vertices buffers. It would be
|
||||
// better if the avatars cached these buffers for each of the joints they are rendering
|
||||
geometryCache->updateVertices(_jointConesID, points);
|
||||
geometryCache->renderVertices(GL_TRIANGLES, _jointConesID);
|
||||
}
|
||||
|
||||
glEnd();
|
||||
}
|
||||
|
||||
void Avatar::updateCollisionGroups() {
|
||||
|
|
|
@ -244,6 +244,8 @@ private:
|
|||
void renderBillboard();
|
||||
|
||||
float getBillboardSize() const;
|
||||
|
||||
static int _jointConesID;
|
||||
};
|
||||
|
||||
#endif // hifi_Avatar_h
|
||||
|
|
|
@ -31,6 +31,7 @@ enum StandingFootState {
|
|||
|
||||
SkeletonModel::SkeletonModel(Avatar* owningAvatar, QObject* parent) :
|
||||
Model(parent),
|
||||
_triangleFanID(DependencyManager::get<GeometryCache>()->allocateID()),
|
||||
_owningAvatar(owningAvatar),
|
||||
_boundingShape(),
|
||||
_boundingShapeLocalOffset(0.0f),
|
||||
|
@ -38,7 +39,8 @@ SkeletonModel::SkeletonModel(Avatar* owningAvatar, QObject* parent) :
|
|||
_defaultEyeModelPosition(glm::vec3(0.0f, 0.0f, 0.0f)),
|
||||
_standingFoot(NO_FOOT),
|
||||
_standingOffset(0.0f),
|
||||
_clampedFootPosition(0.0f) {
|
||||
_clampedFootPosition(0.0f)
|
||||
{
|
||||
}
|
||||
|
||||
SkeletonModel::~SkeletonModel() {
|
||||
|
@ -336,6 +338,9 @@ void SkeletonModel::renderJointConstraints(int jointIndex) {
|
|||
float fanScale = directionSize * 0.75f;
|
||||
glScalef(fanScale, fanScale, fanScale);
|
||||
const int AXIS_COUNT = 3;
|
||||
|
||||
GeometryCache::SharedPointer geometryCache = DependencyManager::get<GeometryCache>();
|
||||
|
||||
for (int i = 0; i < AXIS_COUNT; i++) {
|
||||
if (joint.rotationMin[i] <= -PI + EPSILON && joint.rotationMax[i] >= PI - EPSILON) {
|
||||
continue; // unconstrained
|
||||
|
@ -350,16 +355,20 @@ void SkeletonModel::renderJointConstraints(int jointIndex) {
|
|||
otherAxis.x = 1.0f;
|
||||
}
|
||||
glColor4f(otherAxis.r, otherAxis.g, otherAxis.b, 0.75f);
|
||||
|
||||
glBegin(GL_TRIANGLE_FAN);
|
||||
glVertex3f(0.0f, 0.0f, 0.0f);
|
||||
|
||||
QVector<glm::vec3> points;
|
||||
points << glm::vec3(0.0f, 0.0f, 0.0f);
|
||||
const int FAN_SEGMENTS = 16;
|
||||
for (int j = 0; j < FAN_SEGMENTS; j++) {
|
||||
glm::vec3 rotated = glm::angleAxis(glm::mix(joint.rotationMin[i], joint.rotationMax[i],
|
||||
(float)j / (FAN_SEGMENTS - 1)), axis) * otherAxis;
|
||||
glVertex3f(rotated.x, rotated.y, rotated.z);
|
||||
points << rotated;
|
||||
}
|
||||
glEnd();
|
||||
// TODO: this is really inefficient constantly recreating these vertices buffers. It would be
|
||||
// better if the skeleton model cached these buffers for each of the joints they are rendering
|
||||
geometryCache->updateVertices(_triangleFanID, points);
|
||||
geometryCache->renderVertices(GL_TRIANGLE_FAN, _triangleFanID);
|
||||
|
||||
}
|
||||
glPopMatrix();
|
||||
|
||||
|
|
|
@ -152,6 +152,7 @@ private:
|
|||
int _right;
|
||||
};
|
||||
QHash<int, OrientationLineIDs> _jointOrientationLines;
|
||||
int _triangleFanID;
|
||||
|
||||
/// \param jointIndex index of joint in model
|
||||
/// \param position position of joint in model-frame
|
||||
|
|
|
@ -523,11 +523,11 @@ void GeometryCache::renderGrid(int x, int y, int width, int height, int rows, in
|
|||
Vec3Pair& lastKey = _lastRegisteredGrid[id];
|
||||
if (lastKey != key) {
|
||||
buffer.destroy();
|
||||
#if 1// def WANT_DEBUG
|
||||
#ifdef WANT_DEBUG
|
||||
qDebug() << "renderGrid()... RELEASING REGISTERED";
|
||||
#endif // def WANT_DEBUG
|
||||
}
|
||||
#if 1// def WANT_DEBUG
|
||||
#ifdef WANT_DEBUG
|
||||
else {
|
||||
qDebug() << "renderGrid()... REUSING PREVIOUSLY REGISTERED";
|
||||
}
|
||||
|
@ -575,7 +575,7 @@ void GeometryCache::renderGrid(int x, int y, int width, int height, int rows, in
|
|||
buffer.allocate(vertexData, vertices * 2 * sizeof(GLfloat));
|
||||
delete[] vertexData;
|
||||
|
||||
#if 1 //def WANT_DEBUG
|
||||
#ifdef WANT_DEBUG
|
||||
if (id == UNKNOWN_ID) {
|
||||
qDebug() << "new grid buffer made -- _alternateGridBuffers.size():" << _alternateGridBuffers.size();
|
||||
} else {
|
||||
|
@ -602,7 +602,7 @@ void GeometryCache::updateVertices(int id, const QVector<glm::vec2>& points) {
|
|||
|
||||
if (details.buffer.isCreated()) {
|
||||
details.buffer.destroy();
|
||||
#if 1// def WANT_DEBUG
|
||||
#ifdef WANT_DEBUG
|
||||
qDebug() << "updateVertices()... RELEASING REGISTERED";
|
||||
#endif // def WANT_DEBUG
|
||||
}
|
||||
|
@ -625,7 +625,7 @@ void GeometryCache::updateVertices(int id, const QVector<glm::vec2>& points) {
|
|||
details.buffer.allocate(vertexData, details.vertices * FLOATS_PER_VERTEX * sizeof(GLfloat));
|
||||
delete[] vertexData;
|
||||
|
||||
#if 1 //def WANT_DEBUG
|
||||
#ifdef WANT_DEBUG
|
||||
qDebug() << "new registered vertices buffer made -- _registeredVertices.size():" << _registeredVertices.size();
|
||||
#endif
|
||||
}
|
||||
|
@ -635,7 +635,7 @@ void GeometryCache::updateVertices(int id, const QVector<glm::vec3>& points) {
|
|||
|
||||
if (details.buffer.isCreated()) {
|
||||
details.buffer.destroy();
|
||||
#if 1// def WANT_DEBUG
|
||||
#ifdef WANT_DEBUG
|
||||
qDebug() << "updateVertices()... RELEASING REGISTERED";
|
||||
#endif // def WANT_DEBUG
|
||||
}
|
||||
|
@ -659,7 +659,7 @@ void GeometryCache::updateVertices(int id, const QVector<glm::vec3>& points) {
|
|||
details.buffer.allocate(vertexData, details.vertices * FLOATS_PER_VERTEX * sizeof(GLfloat));
|
||||
delete[] vertexData;
|
||||
|
||||
#if 1 //def WANT_DEBUG
|
||||
#ifdef WANT_DEBUG
|
||||
qDebug() << "new registered linestrip buffer made -- _registeredVertices.size():" << _registeredVertices.size();
|
||||
#endif
|
||||
}
|
||||
|
@ -1326,7 +1326,7 @@ void GeometryCache::renderDashedLine(const glm::vec3& start, const glm::vec3& en
|
|||
if (_lastRegisteredDashedLines[id] != key) {
|
||||
details.buffer.destroy();
|
||||
_lastRegisteredDashedLines[id] = key;
|
||||
#if 1// def WANT_DEBUG
|
||||
#ifdef WANT_DEBUG
|
||||
qDebug() << "renderDashedLine()... RELEASING REGISTERED";
|
||||
#endif // def WANT_DEBUG
|
||||
}
|
||||
|
@ -1379,7 +1379,7 @@ void GeometryCache::renderDashedLine(const glm::vec3& start, const glm::vec3& en
|
|||
details.buffer.allocate(vertexData, details.vertices * FLOATS_PER_VERTEX * sizeof(GLfloat));
|
||||
delete[] vertexData;
|
||||
|
||||
#if 1 //def WANT_DEBUG
|
||||
#ifdef WANT_DEBUG
|
||||
if (registered) {
|
||||
qDebug() << "new registered dashed line buffer made -- _registeredVertices:" << _registeredDashedLines.size();
|
||||
} else {
|
||||
|
@ -1494,11 +1494,11 @@ void GeometryCache::renderLine(const glm::vec2& p1, const glm::vec2& p2, int id)
|
|||
glDeleteBuffers(1, &vbo.first);
|
||||
glDeleteBuffers(1, &vbo.second);
|
||||
vbo.first = vbo.second = 0;
|
||||
#if 1 // def WANT_DEBUG
|
||||
#ifdef WANT_DEBUG
|
||||
qDebug() << "renderLine() 2D... RELEASING REGISTERED line";
|
||||
#endif // def WANT_DEBUG
|
||||
}
|
||||
#if 1 // def WANT_DEBUG
|
||||
#ifdef WANT_DEBUG
|
||||
else {
|
||||
qDebug() << "renderLine() 2D... REUSING PREVIOUSLY REGISTERED line";
|
||||
}
|
||||
|
@ -1544,7 +1544,7 @@ void GeometryCache::renderLine(const glm::vec2& p1, const glm::vec2& p2, int id)
|
|||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices * NUM_BYTES_PER_INDEX, indexData, GL_STATIC_DRAW);
|
||||
delete[] indexData;
|
||||
|
||||
#if 1 // def WANT_DEBUG
|
||||
#ifdef WANT_DEBUG
|
||||
if (id == UNKNOWN_ID) {
|
||||
qDebug() << "new renderLine() 2D VBO made -- _line2DVBOs.size():" << _line2DVBOs.size();
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue