| 214 | } |
| 215 | |
| 216 | void GLSLCompiler::translateGlobalVariable(glsl::astGlobalVariable *variable) { |
| 217 | m_globals.push_back(Variable()); |
| 218 | |
| 219 | Variable& var = m_globals[m_globals.size()-1]; |
| 220 | |
| 221 | // layout qualifiers |
| 222 | glsl::vector<glsl::astLayoutQualifier*> &qualifiers = variable->layoutQualifiers; |
| 223 | if (variable->layoutQualifiers.size()) { |
| 224 | for (size_t i = 0; i < qualifiers.size(); i++) { |
| 225 | glsl::astLayoutQualifier *qualifier = qualifiers[i]; |
| 226 | if (qualifier->initialValue->type == glsl::astExpression::kIntConstant) { |
| 227 | |
| 228 | // TODO: save other layout qualifiers too |
| 229 | if (strcmp(qualifier->name, "location") == 0) |
| 230 | var.InputSlot = ((glsl::astIntConstant*)qualifier->initialValue)->value; |
| 231 | // printf("[DEBUG] Setting layout qualifier...\n"); |
| 232 | } |
| 233 | } |
| 234 | } |
| 235 | |
| 236 | var.IsArray = variable->isArray; |
| 237 | var.Smooth = false; |
| 238 | var.Flat = false; |
| 239 | var.NoPerspective = false; |
| 240 | switch (variable->interpolation) { |
| 241 | case glsl::kSmooth: |
| 242 | var.Smooth = true; |
| 243 | break; |
| 244 | case glsl::kFlat: |
| 245 | var.Flat = true; |
| 246 | break; |
| 247 | case glsl::kNoPerspective: |
| 248 | var.NoPerspective = true; |
| 249 | break; |
| 250 | } |
| 251 | |
| 252 | switch (variable->storage) { |
| 253 | case glsl::kConst: var.Storage = Variable::StorageType::Constant; break; |
| 254 | case glsl::kIn: var.Storage = Variable::StorageType::In; break; |
| 255 | case glsl::kOut: var.Storage = Variable::StorageType::Out; break; |
| 256 | case glsl::kAttribute: var.Storage = Variable::StorageType::Attribute; break; |
| 257 | case glsl::kUniform: var.Storage = Variable::StorageType::Uniform; break; |
| 258 | case glsl::kVarying: var.Storage = Variable::StorageType::Varying; break; |
| 259 | case glsl::kBuffer: var.Storage = Variable::StorageType::Buffer; break; |
| 260 | case glsl::kShared: var.Storage = Variable::StorageType::Shared; break; |
| 261 | } |
| 262 | |
| 263 | |
| 264 | glsl::astVariable* varData = (glsl::astVariable*)variable; |
| 265 | var.Name = varData->name; |
| 266 | if (variable->baseType->builtin) |
| 267 | var.Type = kTypes[((glsl::astBuiltin*)variable->baseType)->type]; |
| 268 | else |
| 269 | var.Type = ((glsl::astStruct*)variable->baseType)->name; |
| 270 | |
| 271 | if (isTypeActuallyStruct(var.Type)) |
| 272 | m_initObjsInMain[var.Name] = var.Type; |
| 273 | |