History

Fix bevel quads

Atlante45 committed 11 years ago

Commit bdaf8a81 parent e8e1f811 file · +45 −35Browse files

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

Unified · Split

libraries/render-utils/src/GeometryCache.cpp+45−35
@@ -1026,12 +1026,12 @@ void GeometryCache::renderBevelCornersRect(gpu::Batch& batch, int x, int y, int · 1025 unmodified lines
1026 }1026 }
1027 1027
1028 const int FLOATS_PER_VERTEX = 2; // vertices1028 const int FLOATS_PER_VERTEX = 2; // vertices
1029 const int vertices = 8;1029 const int NUM_VERTICES = 12;
1030 1030
1031 if (!details.isCreated) {1031 if (!details.isCreated) {
1032 1032
1033 details.isCreated = true;1033 details.isCreated = true;
1034 details.vertices = vertices;1034 details.vertices = NUM_VERTICES;
1035 details.vertexSize = FLOATS_PER_VERTEX;1035 details.vertexSize = FLOATS_PER_VERTEX;
1036 1036
1037 gpu::BufferPointer verticesBuffer(new gpu::Buffer());1037 gpu::BufferPointer verticesBuffer(new gpu::Buffer());
@@ -1044,62 +1044,72 @@ void GeometryCache::renderBevelCornersRect(gpu::Batch& batch, int x, int y, int · 6 unmodified lines
1044 details.streamFormat = streamFormat;1044 details.streamFormat = streamFormat;
1045 details.stream = stream;1045 details.stream = stream;
1046 1046
1047 details.streamFormat->setAttribute(gpu::Stream::POSITION, 0, gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::XYZ), 0);1047 details.streamFormat->setAttribute(gpu::Stream::POSITION, 0, gpu::Element(gpu::VEC2, gpu::FLOAT, gpu::XYZ));
1048 details.streamFormat->setAttribute(gpu::Stream::COLOR, 1, gpu::Element(gpu::VEC4, gpu::UINT8, gpu::RGBA));1048 details.streamFormat->setAttribute(gpu::Stream::COLOR, 1, gpu::Element(gpu::VEC4, gpu::UINT8, gpu::RGBA));
1049 1049
1050 details.stream->addBuffer(details.verticesBuffer, 0, details.streamFormat->getChannels().at(0)._stride);1050 details.stream->addBuffer(details.verticesBuffer, 0, details.streamFormat->getChannels().at(0)._stride);
1051 details.stream->addBuffer(details.colorBuffer, 0, details.streamFormat->getChannels().at(1)._stride);1051 details.stream->addBuffer(details.colorBuffer, 0, details.streamFormat->getChannels().at(1)._stride);
1052 1052
1053 1053
1054 int vertexPoints = vertices * FLOATS_PER_VERTEX;1054 int vertexPoints = NUM_VERTICES * FLOATS_PER_VERTEX;
1055 GLfloat* vertexBuffer = new GLfloat[vertexPoints]; // only vertices, no normals because we're a 2D quad1055 GLfloat vertexBuffer[vertexPoints]; // only vertices, no normals because we're a 2D quad
1056 GLfloat* vertex = vertexBuffer;
1057 int vertexPoint = 0;1056 int vertexPoint = 0;
1058 1057
1059 // left side1058 // left side quad
1060 vertex[vertexPoint++] = x;1059 vertexBuffer[vertexPoint++] = x;
1061 vertex[vertexPoint++] = y + bevelDistance;1060 vertexBuffer[vertexPoint++] = y + bevelDistance;
1061
1062 vertexBuffer[vertexPoint++] = x + bevelDistance;
1063 vertexBuffer[vertexPoint++] = y;
1064
1065 vertexBuffer[vertexPoint++] = x + bevelDistance;
1066 vertexBuffer[vertexPoint++] = y + height;
1067
1068 vertexBuffer[vertexPoint++] = x;
1069 vertexBuffer[vertexPoint++] = y + height - bevelDistance;
1070
1071 // middle quad
1072 vertexBuffer[vertexPoint++] = x + bevelDistance;
1073 vertexBuffer[vertexPoint++] = y;
1062 1074
1063 vertex[vertexPoint++] = x;1075 vertexBuffer[vertexPoint++] = x + width - bevelDistance;
1064 vertex[vertexPoint++] = y + height - bevelDistance;1076 vertexBuffer[vertexPoint++] = y;
1077
1078 vertexBuffer[vertexPoint++] = x + width - bevelDistance;
1079 vertexBuffer[vertexPoint++] = y + height;
1080
1081 vertexBuffer[vertexPoint++] = x + bevelDistance;
1082 vertexBuffer[vertexPoint++] = y + height;
1065 1083
1066 // top side1084 // right side quad
1067 vertex[vertexPoint++] = x + bevelDistance;1085 vertexBuffer[vertexPoint++] = x + width - bevelDistance;
1068 vertex[vertexPoint++] = y + height;1086 vertexBuffer[vertexPoint++] = y;
1087
1088 vertexBuffer[vertexPoint++] = x + width;
1089 vertexBuffer[vertexPoint++] = y + bevelDistance;
1090
1091 vertexBuffer[vertexPoint++] = x + width;
1092 vertexBuffer[vertexPoint++] = y + height - bevelDistance;
1093
1094 vertexBuffer[vertexPoint++] = x + width - bevelDistance;
1095 vertexBuffer[vertexPoint++] = y + height;
1069 1096
1070 vertex[vertexPoint++] = x + width - bevelDistance;
1071 vertex[vertexPoint++] = y + height;
1072
1073 // right
1074 vertex[vertexPoint++] = x + width;
1075 vertex[vertexPoint++] = y + height - bevelDistance;
1076 vertex[vertexPoint++] = x + width;
1077 vertex[vertexPoint++] = y + bevelDistance;
1078
1079 // bottom
1080 vertex[vertexPoint++] = x + width - bevelDistance;
1081 vertex[vertexPoint++] = y;
1082 vertex[vertexPoint++] = x +bevelDistance;
1083 vertex[vertexPoint++] = y;
1084
1085 const int NUM_COLOR_SCALARS_PER_QUAD = 8;
1086 int compactColor = ((int(color.x * 255.0f) & 0xFF)) |1097 int compactColor = ((int(color.x * 255.0f) & 0xFF)) |
1087 ((int(color.y * 255.0f) & 0xFF) << 8) |1098 ((int(color.y * 255.0f) & 0xFF) << 8) |
1088 ((int(color.z * 255.0f) & 0xFF) << 16) |1099 ((int(color.z * 255.0f) & 0xFF) << 16) |
1089 ((int(color.w * 255.0f) & 0xFF) << 24);1100 ((int(color.w * 255.0f) & 0xFF) << 24);
1090 int colors[NUM_COLOR_SCALARS_PER_QUAD] = { compactColor, compactColor, compactColor, compactColor,1101 int colors[NUM_VERTICES] = { compactColor, compactColor, compactColor, compactColor,
1091 compactColor, compactColor, compactColor, compactColor };1102 compactColor, compactColor, compactColor, compactColor,
1103 compactColor, compactColor, compactColor, compactColor };
1092 1104
1093 1105
1094 details.verticesBuffer->append(sizeof(vertexBuffer), (gpu::Byte*) vertexBuffer);1106 details.verticesBuffer->append(sizeof(vertexBuffer), (gpu::Byte*) vertexBuffer);
1095 details.colorBuffer->append(sizeof(colors), (gpu::Byte*) colors);1107 details.colorBuffer->append(sizeof(colors), (gpu::Byte*) colors);
1096
1097 delete[] vertexBuffer;
1098 }1108 }
1099 1109
1100 batch.setInputFormat(details.streamFormat);1110 batch.setInputFormat(details.streamFormat);
1101 batch.setInputStream(0, *details.stream);1111 batch.setInputStream(0, *details.stream);
1102 batch.draw(gpu::QUADS, 4, 0);1112 batch.draw(gpu::QUADS, details.vertices, 0);
1103}1113}
1104 1114
1105void GeometryCache::renderQuad(const glm::vec2& minCorner, const glm::vec2& maxCorner, const glm::vec4& color, int id) {1115void GeometryCache::renderQuad(const glm::vec2& minCorner, const glm::vec2& maxCorner, const glm::vec4& color, int id) {