mirror of
https://github.com/AleziaKurdis/overte.git
synced 2025-08-18 18:09:03 +02:00
add renderBevelCornersRect to GeometryCache
This commit is contained in:
parent
bd38df2a15
commit
c2d45df541
4 changed files with 162 additions and 74 deletions
|
@ -135,29 +135,9 @@ void renderCollisionOverlay(int width, int height, float magnitude, float red, f
|
|||
}
|
||||
|
||||
void renderBevelCornersRect(int x, int y, int width, int height, int bevelDistance) {
|
||||
glBegin(GL_POLYGON);
|
||||
|
||||
// left side
|
||||
glVertex2f(x, y + bevelDistance);
|
||||
glVertex2f(x, y + height - bevelDistance);
|
||||
|
||||
// top side
|
||||
glVertex2f(x + bevelDistance, y + height);
|
||||
glVertex2f(x + width - bevelDistance, y + height);
|
||||
|
||||
// right
|
||||
glVertex2f(x + width, y + height - bevelDistance);
|
||||
glVertex2f(x + width, y + bevelDistance);
|
||||
|
||||
// bottom
|
||||
glVertex2f(x + width - bevelDistance, y);
|
||||
glVertex2f(x +bevelDistance, y);
|
||||
|
||||
glEnd();
|
||||
DependencyManager::get<GeometryCache>()->renderBevelCornersRect(x, y, width, height, bevelDistance);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void renderOrientationDirections(glm::vec3 position, const glm::quat& orientation, float size) {
|
||||
glm::vec3 pRight = position + orientation * IDENTITY_RIGHT * size;
|
||||
glm::vec3 pUp = position + orientation * IDENTITY_UP * size;
|
||||
|
|
|
@ -114,8 +114,8 @@ void ApplicationOverlay::renderReticle(glm::quat orientation, float alpha) {
|
|||
glm::vec3 bottomLeft = getPoint(reticleSize / 2.0f, reticleSize / 2.0f);
|
||||
glm::vec3 bottomRight = getPoint(-reticleSize / 2.0f, reticleSize / 2.0f);
|
||||
glColor4f(RETICLE_COLOR[0], RETICLE_COLOR[1], RETICLE_COLOR[2], alpha);
|
||||
if (_reticleQuad == GeometryCache::UNKNOWN_QUAD_ID) {
|
||||
_reticleQuad = DependencyManager::get<GeometryCache>()->allocateQuad();
|
||||
if (_reticleQuad == GeometryCache::UNKNOWN_ID) {
|
||||
_reticleQuad = DependencyManager::get<GeometryCache>()->allocateID();
|
||||
}
|
||||
DependencyManager::get<GeometryCache>()->renderQuad(topLeft, bottomLeft, bottomRight, topRight,
|
||||
glm::vec2(0.0f, 0.0f), glm::vec2(1.0f, 0.0f),
|
||||
|
@ -130,11 +130,11 @@ ApplicationOverlay::ApplicationOverlay() :
|
|||
_alpha(1.0f),
|
||||
_oculusUIRadius(1.0f),
|
||||
_crosshairTexture(0),
|
||||
_reticleQuad(GeometryCache::UNKNOWN_QUAD_ID),
|
||||
_magnifierQuad(GeometryCache::UNKNOWN_QUAD_ID),
|
||||
_audioRedQuad(GeometryCache::UNKNOWN_QUAD_ID),
|
||||
_audioGreenQuad(GeometryCache::UNKNOWN_QUAD_ID),
|
||||
_audioBlueQuad(GeometryCache::UNKNOWN_QUAD_ID)
|
||||
_reticleQuad(GeometryCache::UNKNOWN_ID),
|
||||
_magnifierQuad(GeometryCache::UNKNOWN_ID),
|
||||
_audioRedQuad(GeometryCache::UNKNOWN_ID),
|
||||
_audioGreenQuad(GeometryCache::UNKNOWN_ID),
|
||||
_audioBlueQuad(GeometryCache::UNKNOWN_ID)
|
||||
{
|
||||
memset(_reticleActive, 0, sizeof(_reticleActive));
|
||||
memset(_magActive, 0, sizeof(_reticleActive));
|
||||
|
@ -399,8 +399,8 @@ void ApplicationOverlay::displayOverlayTexture3DTV(Camera& whichCamera, float as
|
|||
|
||||
glColor3f(RETICLE_COLOR[0], RETICLE_COLOR[1], RETICLE_COLOR[2]);
|
||||
|
||||
if (_reticleQuad == GeometryCache::UNKNOWN_QUAD_ID) {
|
||||
_reticleQuad = DependencyManager::get<GeometryCache>()->allocateQuad();
|
||||
if (_reticleQuad == GeometryCache::UNKNOWN_ID) {
|
||||
_reticleQuad = DependencyManager::get<GeometryCache>()->allocateID();
|
||||
}
|
||||
|
||||
DependencyManager::get<GeometryCache>()->renderQuad(glm::vec3(x + mouseX, y + mouseY, -distance),
|
||||
|
@ -757,8 +757,8 @@ void ApplicationOverlay::renderMagnifier(glm::vec2 magPos, float sizeMult, bool
|
|||
}
|
||||
glColor4f(1.0f, 1.0f, 1.0f, _alpha);
|
||||
|
||||
if (_magnifierQuad == GeometryCache::UNKNOWN_QUAD_ID) {
|
||||
_magnifierQuad = DependencyManager::get<GeometryCache>()->allocateQuad();
|
||||
if (_magnifierQuad == GeometryCache::UNKNOWN_ID) {
|
||||
_magnifierQuad = DependencyManager::get<GeometryCache>()->allocateID();
|
||||
}
|
||||
|
||||
DependencyManager::get<GeometryCache>()->renderQuad(bottomLeft, bottomRight, topRight, topLeft,
|
||||
|
@ -865,8 +865,8 @@ void ApplicationOverlay::renderAudioMeter() {
|
|||
glColor3f(1, 1, 1);
|
||||
}
|
||||
// Draw Red Quad
|
||||
if (_audioRedQuad == GeometryCache::UNKNOWN_QUAD_ID) {
|
||||
_audioRedQuad = DependencyManager::get<GeometryCache>()->allocateQuad();
|
||||
if (_audioRedQuad == GeometryCache::UNKNOWN_ID) {
|
||||
_audioRedQuad = DependencyManager::get<GeometryCache>()->allocateID();
|
||||
}
|
||||
DependencyManager::get<GeometryCache>()->renderQuad(AUDIO_METER_X + AUDIO_METER_INSET + AUDIO_RED_START,
|
||||
audioMeterY + AUDIO_METER_INSET,
|
||||
|
@ -884,8 +884,8 @@ void ApplicationOverlay::renderAudioMeter() {
|
|||
glColor3f(1, 1, 1);
|
||||
}
|
||||
// Draw Green Quad
|
||||
if (_audioGreenQuad == GeometryCache::UNKNOWN_QUAD_ID) {
|
||||
_audioGreenQuad = DependencyManager::get<GeometryCache>()->allocateQuad();
|
||||
if (_audioGreenQuad == GeometryCache::UNKNOWN_ID) {
|
||||
_audioGreenQuad = DependencyManager::get<GeometryCache>()->allocateID();
|
||||
}
|
||||
DependencyManager::get<GeometryCache>()->renderQuad(AUDIO_METER_X + AUDIO_METER_INSET + AUDIO_GREEN_START,
|
||||
audioMeterY + AUDIO_METER_INSET,
|
||||
|
@ -902,8 +902,8 @@ void ApplicationOverlay::renderAudioMeter() {
|
|||
glColor3f(1, 1, 1);
|
||||
}
|
||||
// Draw Blue (low level) quad
|
||||
if (_audioBlueQuad == GeometryCache::UNKNOWN_QUAD_ID) {
|
||||
_audioBlueQuad = DependencyManager::get<GeometryCache>()->allocateQuad();
|
||||
if (_audioBlueQuad == GeometryCache::UNKNOWN_ID) {
|
||||
_audioBlueQuad = DependencyManager::get<GeometryCache>()->allocateID();
|
||||
}
|
||||
DependencyManager::get<GeometryCache>()->renderQuad(AUDIO_METER_X + AUDIO_METER_INSET,
|
||||
audioMeterY + AUDIO_METER_INSET,
|
||||
|
|
|
@ -25,10 +25,10 @@
|
|||
|
||||
//#define WANT_DEBUG
|
||||
|
||||
const int GeometryCache::UNKNOWN_QUAD_ID = -1;
|
||||
const int GeometryCache::UNKNOWN_ID = -1;
|
||||
|
||||
GeometryCache::GeometryCache() :
|
||||
_nextQuadID(0)
|
||||
_nextID(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -667,15 +667,116 @@ void GeometryCache::renderWireCube(float size) {
|
|||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
}
|
||||
|
||||
void GeometryCache::renderQuad(const glm::vec2& minCorner, const glm::vec2& maxCorner, int quadID) {
|
||||
void GeometryCache::renderBevelCornersRect(int x, int y, int width, int height, int bevelDistance, int id) {
|
||||
bool registeredRect = (id != UNKNOWN_ID);
|
||||
Vec3Pair key(glm::vec3(x, y, 0.0f), glm::vec3(width, height, bevelDistance));
|
||||
VerticesIndices& vbo = registeredRect ? _registeredRectVBOs[id] : _rectVBOs[key];
|
||||
|
||||
bool registeredQuad = (quadID != UNKNOWN_QUAD_ID);
|
||||
// if this is a registered quad, and we have buffers, then check to see if the geometry changed and rebuild if needed
|
||||
if (registeredRect && vbo.first != 0) {
|
||||
Vec3Pair& lastKey = _lastRegisteredRect[id];
|
||||
if (lastKey != key) {
|
||||
glDeleteBuffers(1, &vbo.first);
|
||||
glDeleteBuffers(1, &vbo.second);
|
||||
vbo.first = vbo.second = 0;
|
||||
#ifdef WANT_DEBUG
|
||||
qDebug() << "renderBevelCornersRect()... RELEASING REGISTERED RECT";
|
||||
#endif // def WANT_DEBUG
|
||||
}
|
||||
#ifdef WANT_DEBUG
|
||||
else {
|
||||
qDebug() << "renderBevelCornersRect()... REUSING PREVIOUSLY REGISTERED RECT";
|
||||
}
|
||||
#endif // def WANT_DEBUG
|
||||
}
|
||||
|
||||
const int FLOATS_PER_VERTEX = 2;
|
||||
const int NUM_BYTES_PER_VERTEX = FLOATS_PER_VERTEX * sizeof(GLfloat);
|
||||
const int vertices = 8;
|
||||
const int indices = 8;
|
||||
if (vbo.first == 0) {
|
||||
_lastRegisteredRect[id] = key;
|
||||
|
||||
int vertexPoints = vertices * FLOATS_PER_VERTEX;
|
||||
GLfloat* vertexData = new GLfloat[vertexPoints]; // only vertices, no normals because we're a 2D quad
|
||||
GLfloat* vertex = vertexData;
|
||||
static GLubyte cannonicalIndices[indices] = {0, 1, 2, 3, 4, 5, 6, 7};
|
||||
|
||||
int vertexPoint = 0;
|
||||
|
||||
// left side
|
||||
vertex[vertexPoint++] = x;
|
||||
vertex[vertexPoint++] = y + bevelDistance;
|
||||
|
||||
vertex[vertexPoint++] = x;
|
||||
vertex[vertexPoint++] = y + height - bevelDistance;
|
||||
|
||||
// top side
|
||||
vertex[vertexPoint++] = x + bevelDistance;
|
||||
vertex[vertexPoint++] = y + height;
|
||||
|
||||
vertex[vertexPoint++] = x + width - bevelDistance;
|
||||
vertex[vertexPoint++] = y + height;
|
||||
|
||||
// right
|
||||
vertex[vertexPoint++] = x + width;
|
||||
vertex[vertexPoint++] = y + height - bevelDistance;
|
||||
vertex[vertexPoint++] = x + width;
|
||||
vertex[vertexPoint++] = y + bevelDistance;
|
||||
|
||||
// bottom
|
||||
vertex[vertexPoint++] = x + width - bevelDistance;
|
||||
vertex[vertexPoint++] = y;
|
||||
vertex[vertexPoint++] = x +bevelDistance;
|
||||
vertex[vertexPoint++] = y;
|
||||
|
||||
glGenBuffers(1, &vbo.first);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vbo.first);
|
||||
glBufferData(GL_ARRAY_BUFFER, vertices * NUM_BYTES_PER_VERTEX, vertexData, GL_STATIC_DRAW);
|
||||
delete[] vertexData;
|
||||
|
||||
GLushort* indexData = new GLushort[indices];
|
||||
GLushort* index = indexData;
|
||||
for (int i = 0; i < indices; i++) {
|
||||
index[i] = cannonicalIndices[i];
|
||||
}
|
||||
|
||||
glGenBuffers(1, &vbo.second);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo.second);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices * NUM_BYTES_PER_INDEX, indexData, GL_STATIC_DRAW);
|
||||
delete[] indexData;
|
||||
|
||||
#ifdef WANT_DEBUG
|
||||
if (id == UNKNOWN_ID) {
|
||||
qDebug() << "new rect VBO made -- _rectVBOs.size():" << _rectVBOs.size();
|
||||
} else {
|
||||
qDebug() << "new registered rect VBO made -- _registeredRectVBOs.size():" << _registeredRectVBOs.size();
|
||||
}
|
||||
#endif
|
||||
|
||||
} else {
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vbo.first);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo.second);
|
||||
}
|
||||
glEnableClientState(GL_VERTEX_ARRAY);
|
||||
glVertexPointer(FLOATS_PER_VERTEX, GL_FLOAT, FLOATS_PER_VERTEX * sizeof(float), 0);
|
||||
glDrawRangeElementsEXT(GL_POLYGON, 0, vertices - 1, indices, GL_UNSIGNED_SHORT, 0);
|
||||
glDisableClientState(GL_VERTEX_ARRAY);
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
|
||||
}
|
||||
|
||||
void GeometryCache::renderQuad(const glm::vec2& minCorner, const glm::vec2& maxCorner, int id) {
|
||||
|
||||
bool registeredQuad = (id != UNKNOWN_ID);
|
||||
Vec2Pair key(minCorner, maxCorner);
|
||||
VerticesIndices& vbo = registeredQuad ? _registeredQuadVBOs[quadID] : _quad2DVBOs[key];
|
||||
VerticesIndices& vbo = registeredQuad ? _registeredQuadVBOs[id] : _quad2DVBOs[key];
|
||||
|
||||
// if this is a registered quad, and we have buffers, then check to see if the geometry changed and rebuild if needed
|
||||
if (registeredQuad && vbo.first != 0) {
|
||||
Vec2Pair& lastKey = _lastRegisteredQuad2D[quadID];
|
||||
Vec2Pair& lastKey = _lastRegisteredQuad2D[id];
|
||||
if (lastKey != key) {
|
||||
glDeleteBuffers(1, &vbo.first);
|
||||
glDeleteBuffers(1, &vbo.second);
|
||||
|
@ -696,7 +797,7 @@ void GeometryCache::renderQuad(const glm::vec2& minCorner, const glm::vec2& maxC
|
|||
const int vertices = 4;
|
||||
const int indices = 4;
|
||||
if (vbo.first == 0) {
|
||||
_lastRegisteredQuad2D[quadID] = key;
|
||||
_lastRegisteredQuad2D[id] = key;
|
||||
int vertexPoints = vertices * FLOATS_PER_VERTEX;
|
||||
GLfloat* vertexData = new GLfloat[vertexPoints]; // only vertices, no normals because we're a 2D quad
|
||||
GLfloat* vertex = vertexData;
|
||||
|
@ -728,7 +829,7 @@ void GeometryCache::renderQuad(const glm::vec2& minCorner, const glm::vec2& maxC
|
|||
delete[] indexData;
|
||||
|
||||
#ifdef WANT_DEBUG
|
||||
if (quadID == UNKNOWN_QUAD_ID) {
|
||||
if (id == UNKNOWN_ID) {
|
||||
qDebug() << "new quad VBO made -- _quad2DVBOs.size():" << _quad2DVBOs.size();
|
||||
} else {
|
||||
qDebug() << "new registered quad VBO made -- _registeredQuadVBOs.size():" << _registeredQuadVBOs.size();
|
||||
|
@ -750,15 +851,15 @@ void GeometryCache::renderQuad(const glm::vec2& minCorner, const glm::vec2& maxC
|
|||
|
||||
|
||||
void GeometryCache::renderQuad(const glm::vec2& minCorner, const glm::vec2& maxCorner,
|
||||
const glm::vec2& texCoordMinCorner, const glm::vec2& texCoordMaxCorner, int quadID) {
|
||||
const glm::vec2& texCoordMinCorner, const glm::vec2& texCoordMaxCorner, int id) {
|
||||
|
||||
bool registeredQuad = (quadID != UNKNOWN_QUAD_ID);
|
||||
bool registeredQuad = (id != UNKNOWN_ID);
|
||||
Vec2PairPair key(Vec2Pair(minCorner, maxCorner), Vec2Pair(texCoordMinCorner, texCoordMaxCorner));
|
||||
VerticesIndices& vbo = registeredQuad ? _registeredQuadVBOs[quadID] : _quad2DTextureVBOs[key];
|
||||
VerticesIndices& vbo = registeredQuad ? _registeredQuadVBOs[id] : _quad2DTextureVBOs[key];
|
||||
|
||||
// if this is a registered quad, and we have buffers, then check to see if the geometry changed and rebuild if needed
|
||||
if (registeredQuad && vbo.first != 0) {
|
||||
Vec2PairPair& lastKey = _lastRegisteredQuad2DTexture[quadID];
|
||||
Vec2PairPair& lastKey = _lastRegisteredQuad2DTexture[id];
|
||||
if (lastKey != key) {
|
||||
glDeleteBuffers(1, &vbo.first);
|
||||
glDeleteBuffers(1, &vbo.second);
|
||||
|
@ -779,7 +880,7 @@ void GeometryCache::renderQuad(const glm::vec2& minCorner, const glm::vec2& maxC
|
|||
const int vertices = 4;
|
||||
const int indices = 4;
|
||||
if (vbo.first == 0) {
|
||||
_lastRegisteredQuad2DTexture[quadID] = key;
|
||||
_lastRegisteredQuad2DTexture[id] = key;
|
||||
int vertexPoints = vertices * FLOATS_PER_VERTEX;
|
||||
GLfloat* vertexData = new GLfloat[vertexPoints]; // text coords & vertices
|
||||
GLfloat* vertex = vertexData;
|
||||
|
@ -823,7 +924,7 @@ void GeometryCache::renderQuad(const glm::vec2& minCorner, const glm::vec2& maxC
|
|||
delete[] indexData;
|
||||
|
||||
#ifdef WANT_DEBUG
|
||||
if (quadID == UNKNOWN_QUAD_ID) {
|
||||
if (id == UNKNOWN_ID) {
|
||||
qDebug() << "new quad + texture VBO made -- _quad2DTextureVBOs.size():" << _quad2DTextureVBOs.size();
|
||||
} else {
|
||||
qDebug() << "new registered quad VBO made -- _registeredQuadVBOs.size():" << _registeredQuadVBOs.size();
|
||||
|
@ -848,15 +949,15 @@ void GeometryCache::renderQuad(const glm::vec2& minCorner, const glm::vec2& maxC
|
|||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
}
|
||||
|
||||
void GeometryCache::renderQuad(const glm::vec3& minCorner, const glm::vec3& maxCorner, int quadID) {
|
||||
void GeometryCache::renderQuad(const glm::vec3& minCorner, const glm::vec3& maxCorner, int id) {
|
||||
|
||||
bool registeredQuad = (quadID != UNKNOWN_QUAD_ID);
|
||||
bool registeredQuad = (id != UNKNOWN_ID);
|
||||
Vec3Pair key(minCorner, maxCorner);
|
||||
VerticesIndices& vbo = registeredQuad ? _registeredQuadVBOs[quadID] : _quad3DVBOs[key];
|
||||
VerticesIndices& vbo = registeredQuad ? _registeredQuadVBOs[id] : _quad3DVBOs[key];
|
||||
|
||||
// if this is a registered quad, and we have buffers, then check to see if the geometry changed and rebuild if needed
|
||||
if (registeredQuad && vbo.first != 0) {
|
||||
Vec3Pair& lastKey = _lastRegisteredQuad3D[quadID];
|
||||
Vec3Pair& lastKey = _lastRegisteredQuad3D[id];
|
||||
if (lastKey != key) {
|
||||
glDeleteBuffers(1, &vbo.first);
|
||||
glDeleteBuffers(1, &vbo.second);
|
||||
|
@ -877,7 +978,7 @@ void GeometryCache::renderQuad(const glm::vec3& minCorner, const glm::vec3& maxC
|
|||
const int vertices = 4;
|
||||
const int indices = 4;
|
||||
if (vbo.first == 0) {
|
||||
_lastRegisteredQuad3D[quadID] = key;
|
||||
_lastRegisteredQuad3D[id] = key;
|
||||
int vertexPoints = vertices * FLOATS_PER_VERTEX;
|
||||
GLfloat* vertexData = new GLfloat[vertexPoints]; // only vertices
|
||||
GLfloat* vertex = vertexData;
|
||||
|
@ -917,7 +1018,7 @@ void GeometryCache::renderQuad(const glm::vec3& minCorner, const glm::vec3& maxC
|
|||
delete[] indexData;
|
||||
|
||||
#ifdef WANT_DEBUG
|
||||
if (quadID == UNKNOWN_QUAD_ID) {
|
||||
if (id == UNKNOWN_ID) {
|
||||
qDebug() << "new quad VBO made -- _quad3DVBOs.size():" << _quad3DVBOs.size();
|
||||
} else {
|
||||
qDebug() << "new registered quad VBO made -- _registeredQuadVBOs.size():" << _registeredQuadVBOs.size();
|
||||
|
@ -941,7 +1042,7 @@ void GeometryCache::renderQuad(const glm::vec3& minCorner, const glm::vec3& maxC
|
|||
void GeometryCache::renderQuad(const glm::vec3& topLeft, const glm::vec3& bottomLeft,
|
||||
const glm::vec3& bottomRight, const glm::vec3& topRight,
|
||||
const glm::vec2& texCoordTopLeft, const glm::vec2& texCoordBottomLeft,
|
||||
const glm::vec2& texCoordBottomRight, const glm::vec2& texCoordTopRight, int quadID) {
|
||||
const glm::vec2& texCoordBottomRight, const glm::vec2& texCoordTopRight, int id) {
|
||||
|
||||
#ifdef WANT_DEBUG
|
||||
qDebug() << "renderQuad() vec3 + texture VBO...";
|
||||
|
@ -953,13 +1054,13 @@ void GeometryCache::renderQuad(const glm::vec3& topLeft, const glm::vec3& bottom
|
|||
qDebug() << " texCoordBottomRight:" << texCoordBottomRight;
|
||||
#endif //def WANT_DEBUG
|
||||
|
||||
bool registeredQuad = (quadID != UNKNOWN_QUAD_ID);
|
||||
bool registeredQuad = (id != UNKNOWN_ID);
|
||||
Vec3PairVec2Pair key(Vec3Pair(topLeft, bottomRight), Vec2Pair(texCoordTopLeft, texCoordBottomRight));
|
||||
VerticesIndices& vbo = registeredQuad ? _registeredQuadVBOs[quadID] : _quad3DTextureVBOs[key];
|
||||
VerticesIndices& vbo = registeredQuad ? _registeredQuadVBOs[id] : _quad3DTextureVBOs[key];
|
||||
|
||||
// if this is a registered quad, and we have buffers, then check to see if the geometry changed and rebuild if needed
|
||||
if (registeredQuad && vbo.first != 0) {
|
||||
Vec3PairVec2Pair& lastKey = _lastRegisteredQuad3DTexture[quadID];
|
||||
Vec3PairVec2Pair& lastKey = _lastRegisteredQuad3DTexture[id];
|
||||
if (lastKey != key) {
|
||||
glDeleteBuffers(1, &vbo.first);
|
||||
glDeleteBuffers(1, &vbo.second);
|
||||
|
@ -980,7 +1081,7 @@ void GeometryCache::renderQuad(const glm::vec3& topLeft, const glm::vec3& bottom
|
|||
const int vertices = 4;
|
||||
const int indices = 4;
|
||||
if (vbo.first == 0) {
|
||||
_lastRegisteredQuad3DTexture[quadID] = key;
|
||||
_lastRegisteredQuad3DTexture[id] = key;
|
||||
int vertexPoints = vertices * FLOATS_PER_VERTEX;
|
||||
GLfloat* vertexData = new GLfloat[vertexPoints]; // text coords & vertices
|
||||
GLfloat* vertex = vertexData;
|
||||
|
@ -1028,7 +1129,7 @@ void GeometryCache::renderQuad(const glm::vec3& topLeft, const glm::vec3& bottom
|
|||
delete[] indexData;
|
||||
|
||||
#ifdef WANT_DEBUG
|
||||
if (quadID == UNKNOWN_QUAD_ID) {
|
||||
if (id == UNKNOWN_ID) {
|
||||
qDebug() << " _quad3DTextureVBOs.size():" << _quad3DTextureVBOs.size();
|
||||
} else {
|
||||
qDebug() << "new registered quad VBO made -- _registeredQuadVBOs.size():" << _registeredQuadVBOs.size();
|
||||
|
|
|
@ -81,6 +81,9 @@ class GeometryCache : public ResourceCache {
|
|||
SINGLETON_DEPENDENCY(GeometryCache)
|
||||
|
||||
public:
|
||||
int allocateID() { return _nextID++; }
|
||||
static const int UNKNOWN_ID;
|
||||
|
||||
void renderHemisphere(int slices, int stacks);
|
||||
void renderSphere(float radius, int slices, int stacks, bool solid = true);
|
||||
void renderSquare(int xDivisions, int yDivisions);
|
||||
|
@ -89,24 +92,22 @@ public:
|
|||
void renderGrid(int xDivisions, int yDivisions);
|
||||
void renderSolidCube(float size);
|
||||
void renderWireCube(float size);
|
||||
void renderBevelCornersRect(int x, int y, int width, int height, int bevelDistance, int id = UNKNOWN_ID);
|
||||
|
||||
int allocateQuad() { return _nextQuadID++; }
|
||||
static const int UNKNOWN_QUAD_ID;
|
||||
|
||||
void renderQuad(int x, int y, int width, int height, int quadID = UNKNOWN_QUAD_ID)
|
||||
{ renderQuad(glm::vec2(x,y), glm::vec2(x + width, y + height), quadID); }
|
||||
void renderQuad(int x, int y, int width, int height, int id = UNKNOWN_ID)
|
||||
{ renderQuad(glm::vec2(x,y), glm::vec2(x + width, y + height), id); }
|
||||
|
||||
void renderQuad(const glm::vec2& minCorner, const glm::vec2& maxCorner, int quadID = UNKNOWN_QUAD_ID);
|
||||
void renderQuad(const glm::vec2& minCorner, const glm::vec2& maxCorner, int id = UNKNOWN_ID);
|
||||
|
||||
void renderQuad(const glm::vec2& minCorner, const glm::vec2& maxCorner,
|
||||
const glm::vec2& texCoordMinCorner, const glm::vec2& texCoordMaxCorner, int quadID = UNKNOWN_QUAD_ID);
|
||||
const glm::vec2& texCoordMinCorner, const glm::vec2& texCoordMaxCorner, int id = UNKNOWN_ID);
|
||||
|
||||
void renderQuad(const glm::vec3& minCorner, const glm::vec3& maxCorner, int quadID = UNKNOWN_QUAD_ID);
|
||||
void renderQuad(const glm::vec3& minCorner, const glm::vec3& maxCorner, int id = UNKNOWN_ID);
|
||||
|
||||
void renderQuad(const glm::vec3& topLeft, const glm::vec3& bottomLeft,
|
||||
const glm::vec3& bottomRight, const glm::vec3& topRight,
|
||||
const glm::vec2& texCoordTopLeft, const glm::vec2& texCoordBottomLeft,
|
||||
const glm::vec2& texCoordBottomRight, const glm::vec2& texCoordTopRight, int quadID = UNKNOWN_QUAD_ID);
|
||||
const glm::vec2& texCoordBottomRight, const glm::vec2& texCoordTopRight, int id = UNKNOWN_ID);
|
||||
|
||||
/// Loads geometry from the specified URL.
|
||||
/// \param fallback a fallback URL to load if the desired one is unavailable
|
||||
|
@ -137,13 +138,19 @@ private:
|
|||
QHash<Vec3Pair, VerticesIndices> _quad3DVBOs;
|
||||
QHash<Vec3PairVec2Pair, VerticesIndices> _quad3DTextureVBOs;
|
||||
QHash<int, VerticesIndices> _registeredQuadVBOs;
|
||||
int _nextQuadID;
|
||||
int _nextID;
|
||||
|
||||
QHash<int, Vec2Pair> _lastRegisteredQuad2D;
|
||||
QHash<int, Vec2PairPair> _lastRegisteredQuad2DTexture;
|
||||
QHash<int, Vec3Pair> _lastRegisteredQuad3D;
|
||||
QHash<int, Vec3PairVec2Pair> _lastRegisteredQuad3DTexture;
|
||||
|
||||
QHash<int, Vec3Pair> _lastRegisteredRect;
|
||||
QHash<Vec3Pair, VerticesIndices> _rectVBOs;
|
||||
QHash<int, VerticesIndices> _registeredRectVBOs;
|
||||
|
||||
|
||||
|
||||
QHash<IntPair, QOpenGLBuffer> _gridBuffers;
|
||||
|
||||
QHash<QUrl, QWeakPointer<NetworkGeometry> > _networkGeometry;
|
||||
|
|
Loading…
Reference in a new issue