Showing the changes to libraries/render-utils/src/GeometryCache.cpp (1 of 9 files). Show all
Unified · Split
| @@ -665,22 +665,15 @@ void GeometryCache::renderQuad(const glm::vec2& topLeft, const glm::vec2& bottom · 664 unmodified lines | |||
| 665 | Vec2Pair key(topLeft, bottomRight); | 665 | Vec2Pair key(topLeft, bottomRight); |
| 666 | VerticesIndices& vbo = _quad2DVBOs[key]; | 666 | VerticesIndices& vbo = _quad2DVBOs[key]; |
| 667 | const int FLOATS_PER_VERTEX = 2; | 667 | const int FLOATS_PER_VERTEX = 2; |
| 668 | const int NUM_BYTES_PER_VERTEX = FLOATS_PER_VERTEX * sizeof(GLfloat); | ||
| 668 | const int vertices = 4; | 669 | const int vertices = 4; |
| 669 | const int indices = 4; | 670 | const int indices = 4; |
| 670 | if (vbo.first == 0) { | 671 | if (vbo.first == 0) { |
| 671 | int vertexPoints = vertices * FLOATS_PER_VERTEX; | 672 | int vertexPoints = vertices * FLOATS_PER_VERTEX; |
| 672 | GLfloat* vertexData = new GLfloat[vertexPoints]; // only vertices, no normals because we're a 2D quad | 673 | GLfloat* vertexData = new GLfloat[vertexPoints]; // only vertices, no normals because we're a 2D quad |
| 673 | GLfloat* vertex = vertexData; | 674 | GLfloat* vertex = vertexData; |
| 674 | // index array of vertex array for glDrawRangeElement() as a GL_LINES for each edge | ||
| 675 | static GLubyte cannonicalIndices[indices] = { 0, 1, 2, 3 }; | 675 | static GLubyte cannonicalIndices[indices] = { 0, 1, 2, 3 }; |
| 676 | 676 | ||
| 677 | //glBegin(GL_QUADS); | ||
| 678 | // glVertex2f(left, top); | ||
| 679 | // glVertex2f(right, top); | ||
| 680 | // glVertex2f(right, bottom); | ||
| 681 | // glVertex2f(left, bottom); | ||
| 682 | //glEnd(); | ||
| 683 | |||
| 684 | vertex[0] = topLeft.x; | 677 | vertex[0] = topLeft.x; |
| 685 | vertex[1] = topLeft.y; | 678 | vertex[1] = topLeft.y; |
| 686 | vertex[2] = bottomRight.x; | 679 | vertex[2] = bottomRight.x; |
| @@ -722,12 +715,77 @@ void GeometryCache::renderQuad(const glm::vec2& topLeft, const glm::vec2& bottom · 35 unmodified lines | |||
| 722 | } | 715 | } |
| 723 | 716 | ||
| 724 | 717 | ||
| 725 | /* | 718 | void GeometryCache::renderQuad(const glm::vec2& topLeft, const glm::vec2& bottomRight, |
| 726 | void GeometryCache::renderQuad(cont glm::vec2& topLeft, cont glm::vec2& bottomRight, | 719 | const glm::vec2& texCoordTopLeft, const glm::vec2& texCoordBottomRight) { |
| 727 | cont glm::vec2& texCoordTopLeft, cont glm::vec2& texCoordBottomRight) { | 720 | Vec2PairPair key(Vec2Pair(topLeft, bottomRight), Vec2Pair(texCoordTopLeft, texCoordBottomRight)); |
| 728 | } | 721 | |
| 729 | */ | 722 | VerticesIndices& vbo = _quad2DTextureVBOs[key]; |
| 723 | const int FLOATS_PER_VERTEX = 2 * 2; // text coords & vertices | ||
| 724 | const int NUM_BYTES_PER_VERTEX = FLOATS_PER_VERTEX * sizeof(GLfloat); | ||
| 725 | const int vertices = 4; | ||
| 726 | const int indices = 4; | ||
| 727 | if (vbo.first == 0) { | ||
| 728 | int vertexPoints = vertices * FLOATS_PER_VERTEX; | ||
| 729 | GLfloat* vertexData = new GLfloat[vertexPoints]; // text coords & vertices | ||
| 730 | GLfloat* vertex = vertexData; | ||
| 731 | static GLubyte cannonicalIndices[indices] = { 0, 1, 2, 3 }; | ||
| 732 | int v = 0; | ||
| 730 | 733 | ||
| 734 | vertex[v++] = topLeft.x; | ||
| 735 | vertex[v++] = topLeft.y; | ||
| 736 | vertex[v++] = texCoordTopLeft.x; | ||
| 737 | vertex[v++] = texCoordTopLeft.y; | ||
| 738 | |||
| 739 | vertex[v++] = bottomRight.x; | ||
| 740 | vertex[v++] = topLeft.y; | ||
| 741 | vertex[v++] = texCoordBottomRight.x; | ||
| 742 | vertex[v++] = texCoordTopLeft.y; | ||
| 743 | |||
| 744 | vertex[v++] = bottomRight.x; | ||
| 745 | vertex[v++] = bottomRight.y; | ||
| 746 | vertex[v++] = texCoordBottomRight.x; | ||
| 747 | vertex[v++] = texCoordBottomRight.y; | ||
| 748 | |||
| 749 | vertex[v++] = topLeft.x; | ||
| 750 | vertex[v++] = bottomRight.y; | ||
| 751 | vertex[v++] = texCoordTopLeft.x; | ||
| 752 | vertex[v++] = texCoordBottomRight.y; | ||
| 753 | |||
| 754 | glGenBuffers(1, &vbo.first); | ||
| 755 | glBindBuffer(GL_ARRAY_BUFFER, vbo.first); | ||
| 756 | glBufferData(GL_ARRAY_BUFFER, vertices * NUM_BYTES_PER_VERTEX, vertexData, GL_STATIC_DRAW); | ||
| 757 | delete[] vertexData; | ||
| 758 | |||
| 759 | GLushort* indexData = new GLushort[indices]; | ||
| 760 | GLushort* index = indexData; | ||
| 761 | for (int i = 0; i < indices; i++) { | ||
| 762 | index[i] = cannonicalIndices[i]; | ||
| 763 | } | ||
| 764 | |||
| 765 | glGenBuffers(1, &vbo.second); | ||
| 766 | glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo.second); | ||
| 767 | glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices * NUM_BYTES_PER_INDEX, indexData, GL_STATIC_DRAW); | ||
| 768 | delete[] indexData; | ||
| 769 | |||
| 770 | qDebug() << "new quad + texture VBO made -- _quad2DTextureVBOs.size():" << _quad2DTextureVBOs.size(); | ||
| 771 | } else { | ||
| 772 | glBindBuffer(GL_ARRAY_BUFFER, vbo.first); | ||
| 773 | glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo.second); | ||
| 774 | } | ||
| 775 | |||
| 776 | glEnableClientState(GL_VERTEX_ARRAY); | ||
| 777 | glEnableClientState(GL_TEXTURE_COORD_ARRAY); | ||
| 778 | glVertexPointer(2, GL_FLOAT, NUM_BYTES_PER_VERTEX, 0); | ||
| 779 | glTexCoordPointer(2, GL_FLOAT, NUM_BYTES_PER_VERTEX, (const void *)(2 * sizeof(float))); | ||
| 780 | |||
| 781 | glDrawRangeElementsEXT(GL_QUADS, 0, vertices - 1, indices, GL_UNSIGNED_SHORT, 0); | ||
| 782 | |||
| 783 | glDisableClientState(GL_VERTEX_ARRAY); | ||
| 784 | glDisableClientState(GL_TEXTURE_COORD_ARRAY); | ||
| 785 | |||
| 786 | glBindBuffer(GL_ARRAY_BUFFER, 0); | ||
| 787 | glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); | ||
| 788 | } | ||
| 731 | 789 | ||
| 732 | QSharedPointer<NetworkGeometry> GeometryCache::getGeometry(const QUrl& url, const QUrl& fallback, bool delayLoad) { | 790 | QSharedPointer<NetworkGeometry> GeometryCache::getGeometry(const QUrl& url, const QUrl& fallback, bool delayLoad) { |
| 733 | return getResource(url, fallback, delayLoad).staticCast<NetworkGeometry>(); | 791 | return getResource(url, fallback, delayLoad).staticCast<NetworkGeometry>(); |