History

use Austins QUAD to TRIANGLE_STRIP approach

ZappoMan committed 11 years ago

Commit b138c161 parent 05a4a6a2 files · +14 −77Browse files

Showing the changes to libraries/render-utils/src/GeometryCache.cpp (1 of 2 files). Show all

Unified · Split

libraries/render-utils/src/GeometryCache.cpp+14−75
@@ -1012,27 +1012,21 @@ void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec2& minCorner, co · 1011 unmodified lines
10121012 }
10131013
10141014 const int FLOATS_PER_VERTEX = 2; // vertices
1015− const int NUMBER_OF_INDICES = 6; // 1 quad = 2 triangles
10161015 const int VERTICES = 4; // 1 quad = 4 vertices
10171016
10181017 if (!details.isCreated) {
10191018
10201019 details.isCreated = true;
10211020 details.vertices = VERTICES;
1022− details.indices = NUMBER_OF_INDICES;
10231021 details.vertexSize = FLOATS_PER_VERTEX;
10241022
10251023 auto verticesBuffer = std::make_shared<gpu::Buffer>();
10261024 auto colorBuffer = std::make_shared<gpu::Buffer>();
1027− auto indicesBuffer = std::make_shared<gpu::Buffer>();
1028−
10291025 auto streamFormat = std::make_shared<gpu::Stream::Format>();
10301026 auto stream = std::make_shared<gpu::BufferStream>();
10311027
10321028 details.verticesBuffer = verticesBuffer;
10331029 details.colorBuffer = colorBuffer;
1034− details.indicesBuffer = indicesBuffer;
1035−
10361030 details.streamFormat = streamFormat;
10371031 details.stream = stream;
10381032
@@ -1046,8 +1040,9 @@ void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec2& minCorner, co · 7 unmodified lines
10461040 float vertexBuffer[VERTICES * FLOATS_PER_VERTEX] = {
10471041 minCorner.x, minCorner.y,
10481042 maxCorner.x, minCorner.y,
1049− maxCorner.x, maxCorner.y,
1050− minCorner.x, maxCorner.y };
1043+ minCorner.x, maxCorner.y,
1044+ maxCorner.x, maxCorner.y
1045+ };
10511046
10521047 const int NUM_COLOR_SCALARS_PER_QUAD = 4;
10531048 int compactColor = ((int(color.x * 255.0f) & 0xFF)) |
@@ -1056,24 +1051,13 @@ void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec2& minCorner, co · 2 unmodified lines
10561051 ((int(color.w * 255.0f) & 0xFF) << 24);
10571052 int colors[NUM_COLOR_SCALARS_PER_QUAD] = { compactColor, compactColor, compactColor, compactColor };
10581053
1059− // Sam's recommended triangle slices
1060− // Triangle tri1 = { v0, v1, v3 };
1061− // Triangle tri2 = { v1, v2, v3 };
1062− // NOTE: Random guy on the internet's recommended triangle slices
1063− // Triangle tri1 = { v0, v1, v2 };
1064− // Triangle tri2 = { v2, v3, v0 };
1065−
1066− quint16 indices[NUMBER_OF_INDICES] = { 0, 1, 3, 1, 2, 3 };
1067−
10681054 details.verticesBuffer->append(sizeof(vertexBuffer), (gpu::Byte*) vertexBuffer);
10691055 details.colorBuffer->append(sizeof(colors), (gpu::Byte*) colors);
1070− details.indicesBuffer->append(sizeof(indices), (gpu::Byte*) indices);
10711056 }
10721057
10731058 batch.setInputFormat(details.streamFormat);
10741059 batch.setInputStream(0, *details.stream);
1075− batch.setIndexBuffer(gpu::UINT16, details.indicesBuffer, 0);
1076− batch.drawIndexed(gpu::TRIANGLES, NUMBER_OF_INDICES, 0);
1060+ batch.draw(gpu::TRIANGLE_STRIP, 4, 0);
10771061 }
10781062
10791063 void GeometryCache::renderUnitCube(gpu::Batch& batch) {
@@ -1121,25 +1105,21 @@ void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec2& minCorner, co · 41 unmodified lines
11211105 const int VERTICES = 4; // 1 quad = 4 vertices
11221106 const int NUM_POS_COORDS = 2;
11231107 const int VERTEX_TEXCOORD_OFFSET = NUM_POS_COORDS * sizeof(float);
1124− const int NUMBER_OF_INDICES = 6; // 1 quad = 2 triangles
11251108
11261109 if (!details.isCreated) {
11271110
11281111 details.isCreated = true;
11291112 details.vertices = VERTICES;
1130− details.indices = NUMBER_OF_INDICES;
11311113 details.vertexSize = FLOATS_PER_VERTEX;
11321114
11331115 auto verticesBuffer = std::make_shared<gpu::Buffer>();
11341116 auto colorBuffer = std::make_shared<gpu::Buffer>();
1135− auto indicesBuffer = std::make_shared<gpu::Buffer>();
11361117
11371118 auto streamFormat = std::make_shared<gpu::Stream::Format>();
11381119 auto stream = std::make_shared<gpu::BufferStream>();
11391120
11401121 details.verticesBuffer = verticesBuffer;
11411122 details.colorBuffer = colorBuffer;
1142− details.indicesBuffer = indicesBuffer;
11431123
11441124 details.streamFormat = streamFormat;
11451125 details.stream = stream;
@@ -1155,8 +1135,9 @@ void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec2& minCorner, co · 9 unmodified lines
11551135 float vertexBuffer[VERTICES * FLOATS_PER_VERTEX] = {
11561136 minCorner.x, minCorner.y, texCoordMinCorner.x, texCoordMinCorner.y,
11571137 maxCorner.x, minCorner.y, texCoordMaxCorner.x, texCoordMinCorner.y,
1158− maxCorner.x, maxCorner.y, texCoordMaxCorner.x, texCoordMaxCorner.y,
1159− minCorner.x, maxCorner.y, texCoordMinCorner.x, texCoordMaxCorner.y };
1138+ minCorner.x, maxCorner.y, texCoordMinCorner.x, texCoordMaxCorner.y,
1139+ maxCorner.x, maxCorner.y, texCoordMaxCorner.x, texCoordMaxCorner.y
1140+ };
11601141
11611142
11621143 const int NUM_COLOR_SCALARS_PER_QUAD = 4;
@@ -1166,24 +1147,13 @@ void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec2& minCorner, co · 3 unmodified lines
11661147 ((int(color.w * 255.0f) & 0xFF) << 24);
11671148 int colors[NUM_COLOR_SCALARS_PER_QUAD] = { compactColor, compactColor, compactColor, compactColor };
11681149
1169− // Sam's recommended triangle slices
1170− // Triangle tri1 = { v0, v1, v3 };
1171− // Triangle tri2 = { v1, v2, v3 };
1172− // NOTE: Random guy on the internet's recommended triangle slices
1173− // Triangle tri1 = { v0, v1, v2 };
1174− // Triangle tri2 = { v2, v3, v0 };
1175−
1176− quint16 indices[NUMBER_OF_INDICES] = { 0, 1, 3, 1, 2, 3 };
1177−
11781150 details.verticesBuffer->append(sizeof(vertexBuffer), (gpu::Byte*) vertexBuffer);
11791151 details.colorBuffer->append(sizeof(colors), (gpu::Byte*) colors);
1180− details.indicesBuffer->append(sizeof(indices), (gpu::Byte*) indices);
11811152 }
11821153
11831154 batch.setInputFormat(details.streamFormat);
11841155 batch.setInputStream(0, *details.stream);
1185− batch.setIndexBuffer(gpu::UINT16, details.indicesBuffer, 0);
1186− batch.drawIndexed(gpu::TRIANGLES, NUMBER_OF_INDICES, 0);
1156+ batch.draw(gpu::TRIANGLE_STRIP, 4, 0);
11871157 }
11881158
11891159 void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec3& minCorner, const glm::vec3& maxCorner, const glm::vec4& color, int id) {
@@ -1209,26 +1179,22 @@ void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec3& minCorner, co · 19 unmodified lines
12091179 }
12101180
12111181 const int FLOATS_PER_VERTEX = 3; // vertices
1212− const int NUMBER_OF_INDICES = 6; // 1 quad = 2 triangles
12131182 const int VERTICES = 4; // 1 quad = 4 vertices
12141183
12151184 if (!details.isCreated) {
12161185
12171186 details.isCreated = true;
12181187 details.vertices = VERTICES;
1219− details.indices = NUMBER_OF_INDICES;
12201188 details.vertexSize = FLOATS_PER_VERTEX;
12211189
12221190 auto verticesBuffer = std::make_shared<gpu::Buffer>();
12231191 auto colorBuffer = std::make_shared<gpu::Buffer>();
1224− auto indicesBuffer = std::make_shared<gpu::Buffer>();
12251192
12261193 auto streamFormat = std::make_shared<gpu::Stream::Format>();
12271194 auto stream = std::make_shared<gpu::BufferStream>();
12281195
12291196 details.verticesBuffer = verticesBuffer;
12301197 details.colorBuffer = colorBuffer;
1231− details.indicesBuffer = indicesBuffer;
12321198
12331199 details.streamFormat = streamFormat;
12341200 details.stream = stream;
@@ -1243,8 +1209,9 @@ void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec3& minCorner, co · 8 unmodified lines
12431209 float vertexBuffer[VERTICES * FLOATS_PER_VERTEX] = {
12441210 minCorner.x, minCorner.y, minCorner.z,
12451211 maxCorner.x, minCorner.y, minCorner.z,
1246− maxCorner.x, maxCorner.y, maxCorner.z,
1247− minCorner.x, maxCorner.y, maxCorner.z };
1212+ minCorner.x, maxCorner.y, maxCorner.z,
1213+ maxCorner.x, maxCorner.y, maxCorner.z
1214+ };
12481215
12491216 const int NUM_COLOR_SCALARS_PER_QUAD = 4;
12501217 int compactColor = ((int(color.x * 255.0f) & 0xFF)) |
@@ -1253,24 +1220,13 @@ void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec3& minCorner, co · 2 unmodified lines
12531220 ((int(color.w * 255.0f) & 0xFF) << 24);
12541221 int colors[NUM_COLOR_SCALARS_PER_QUAD] = { compactColor, compactColor, compactColor, compactColor };
12551222
1256− // Sam's recommended triangle slices
1257− // Triangle tri1 = { v0, v1, v3 };
1258− // Triangle tri2 = { v1, v2, v3 };
1259− // NOTE: Random guy on the internet's recommended triangle slices
1260− // Triangle tri1 = { v0, v1, v2 };
1261− // Triangle tri2 = { v2, v3, v0 };
1262−
1263− quint16 indices[NUMBER_OF_INDICES] = { 0, 1, 3, 1, 2, 3 };
1264−
12651223 details.verticesBuffer->append(sizeof(vertexBuffer), (gpu::Byte*) vertexBuffer);
12661224 details.colorBuffer->append(sizeof(colors), (gpu::Byte*) colors);
1267− details.indicesBuffer->append(sizeof(indices), (gpu::Byte*) indices);
12681225 }
12691226
12701227 batch.setInputFormat(details.streamFormat);
12711228 batch.setInputStream(0, *details.stream);
1272− batch.setIndexBuffer(gpu::UINT16, details.indicesBuffer, 0);
1273− batch.drawIndexed(gpu::TRIANGLES, NUMBER_OF_INDICES, 0);
1229+ batch.draw(gpu::TRIANGLE_STRIP, 4, 0);
12741230 }
12751231
12761232 void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec3& topLeft, const glm::vec3& bottomLeft,
@@ -1315,7 +1271,6 @@ void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec3& topLeft, cons · 38 unmodified lines
13151271 }
13161272
13171273 const int FLOATS_PER_VERTEX = 3 + 2; // 3d vertices + text coords
1318− const int NUMBER_OF_INDICES = 6; // 1 quad = 2 triangles
13191274 const int VERTICES = 4; // 1 quad = 4 vertices
13201275 const int NUM_POS_COORDS = 3;
13211276 const int VERTEX_TEXCOORD_OFFSET = NUM_POS_COORDS * sizeof(float);
@@ -1324,20 +1279,15 @@ void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec3& topLeft, cons · 2 unmodified lines
13241279
13251280 details.isCreated = true;
13261281 details.vertices = VERTICES;
1327− details.indices = NUMBER_OF_INDICES;
13281282 details.vertexSize = FLOATS_PER_VERTEX; // NOTE: this isn't used for BatchItemDetails maybe we can get rid of it
13291283
13301284 auto verticesBuffer = std::make_shared<gpu::Buffer>();
13311285 auto colorBuffer = std::make_shared<gpu::Buffer>();
1332− auto indicesBuffer = std::make_shared<gpu::Buffer>();
1333−
13341286 auto streamFormat = std::make_shared<gpu::Stream::Format>();
13351287 auto stream = std::make_shared<gpu::BufferStream>();
13361288
13371289 details.verticesBuffer = verticesBuffer;
13381290 details.colorBuffer = colorBuffer;
1339− details.indicesBuffer = indicesBuffer;
1340−
13411291 details.streamFormat = streamFormat;
13421292 details.stream = stream;
13431293
@@ -1350,9 +1300,9 @@ void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec3& topLeft, cons · 6 unmodified lines
13501300
13511301
13521302 float vertexBuffer[VERTICES * FLOATS_PER_VERTEX] = {
1353− topLeft.x, topLeft.y, topLeft.z, texCoordTopLeft.x, texCoordTopLeft.y,
13541303 bottomLeft.x, bottomLeft.y, bottomLeft.z, texCoordBottomLeft.x, texCoordBottomLeft.y,
13551304 bottomRight.x, bottomRight.y, bottomRight.z, texCoordBottomRight.x, texCoordBottomRight.y,
1305+ topLeft.x, topLeft.y, topLeft.z, texCoordTopLeft.x, texCoordTopLeft.y,
13561306 topRight.x, topRight.y, topRight.z, texCoordTopRight.x, texCoordTopRight.y,
13571307 };
13581308
@@ -1363,24 +1313,13 @@ void GeometryCache::renderQuad(gpu::Batch& batch, const glm::vec3& topLeft, cons · 4 unmodified lines
13631313 ((int(color.w * 255.0f) & 0xFF) << 24);
13641314 int colors[NUM_COLOR_SCALARS_PER_QUAD] = { compactColor, compactColor, compactColor, compactColor };
13651315
1366− // Sam's recommended triangle slices
1367− // Triangle tri1 = { v0, v1, v3 };
1368− // Triangle tri2 = { v1, v2, v3 };
1369− // NOTE: Random guy on the internet's recommended triangle slices
1370− // Triangle tri1 = { v0, v1, v2 };
1371− // Triangle tri2 = { v2, v3, v0 };
1372−
1373− quint16 indices[NUMBER_OF_INDICES] = { 0, 1, 3, 1, 2, 3 };
1374−
13751316 details.verticesBuffer->append(sizeof(vertexBuffer), (gpu::Byte*) vertexBuffer);
13761317 details.colorBuffer->append(sizeof(colors), (gpu::Byte*) colors);
1377− details.indicesBuffer->append(sizeof(indices), (gpu::Byte*) indices);
13781318 }
13791319
13801320 batch.setInputFormat(details.streamFormat);
13811321 batch.setInputStream(0, *details.stream);
1382− batch.setIndexBuffer(gpu::UINT16, details.indicesBuffer, 0);
1383− batch.drawIndexed(gpu::TRIANGLES, NUMBER_OF_INDICES, 0);
1322+ batch.draw(gpu::TRIANGLE_STRIP, 4, 0);
13841323 }
13851324
13861325 void GeometryCache::renderDashedLine(gpu::Batch& batch, const glm::vec3& start, const glm::vec3& end, const glm::vec4& color, int id) {