1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2020 Klaralvdalens Datakonsult AB (KDAB). 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the Qt3D module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the 21 ** packaging of this file. Please review the following information to 22 ** ensure the GNU Lesser General Public License version 3 requirements 23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. 24 ** 25 ** GNU General Public License Usage 26 ** Alternatively, this file may be used under the terms of the GNU 27 ** General Public License version 2.0 or (at your option) the GNU General 28 ** Public license version 3 or any later version approved by the KDE Free 29 ** Qt Foundation. The licenses are as published by the Free Software 30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 31 ** included in the packaging of this file. Please review the following 32 ** information to ensure the GNU General Public License requirements will 33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and 34 ** https://www.gnu.org/licenses/gpl-3.0.html. 35 ** 36 ** $QT_END_LICENSE$ 37 ** 38 ****************************************************************************/ 39 40 #include <Qt3DRender/private/stringtoint_p.h> 41 #include "gllights_p.h" 42 43 #define LIGHT_POSITION_NAME QLatin1String(".position") 44 #define LIGHT_TYPE_NAME QLatin1String(".type") 45 #define LIGHT_COLOR_NAME QLatin1String(".color") 46 #define LIGHT_INTENSITY_NAME QLatin1String(".intensity") 47 #define LIGHT_DIRECTION_NAME QLatin1String(".direction") 48 #define LIGHT_LINEAR_ATTENUATION_NAME QLatin1String(".linearAttenuation") 49 #define LIGHT_QUADRATIC_ATTENUATION_NAME QLatin1String(".quadraticAttenuation") 50 #define LIGHT_CONSTANT_ATTENUATION_NAME QLatin1String(".constantAttenuation") 51 #define LIGHT_CUT_OFF_ANGLE_NAME QLatin1String(".cutOffAngle") 52 53 #define DECLARE_LIGHT_STRUCT_NAME(idx)\ 54 QLatin1String("lights[") + QLatin1Char(char('0' + idx)) + QLatin1Char(']') 55 56 #define DECLARE_LIGHT_POSITION_NAME(idx)\ 57 StringToInt::lookupId(LIGHT_STRUCT_NAMES[idx] + LIGHT_POSITION_NAME) 58 59 #define DECLARE_LIGHT_TYPE_NAME(idx)\ 60 StringToInt::lookupId(LIGHT_STRUCT_NAMES[idx] + LIGHT_TYPE_NAME) 61 62 #define DECLARE_LIGHT_COLOR_NAME(idx)\ 63 StringToInt::lookupId(LIGHT_STRUCT_NAMES[idx] + LIGHT_COLOR_NAME) 64 65 #define DECLARE_LIGHT_INTENSITY_NAME(idx)\ 66 StringToInt::lookupId(LIGHT_STRUCT_NAMES[idx] + LIGHT_INTENSITY_NAME) 67 68 #define DECLARE_LIGHT_DIRECTION_NAME(idx)\ 69 StringToInt::lookupId(LIGHT_STRUCT_NAMES[idx] + LIGHT_DIRECTION_NAME) 70 71 #define DECLARE_LIGHT_LINEAR_ATTENUATION_NAME(idx)\ 72 StringToInt::lookupId(LIGHT_STRUCT_NAMES[idx] + LIGHT_LINEAR_ATTENUATION_NAME) 73 74 #define DECLARE_LIGHT_QUADRATIC_ATTENUATION_NAME(idx)\ 75 StringToInt::lookupId(LIGHT_STRUCT_NAMES[idx] + LIGHT_QUADRATIC_ATTENUATION_NAME) 76 77 #define DECLARE_LIGHT_CONSTANT_ATTENUATION_NAME(idx)\ 78 StringToInt::lookupId(LIGHT_STRUCT_NAMES[idx] + LIGHT_CONSTANT_ATTENUATION_NAME) 79 80 #define DECLARE_LIGHT_CUT_OFF_ANGLE_NAME(idx)\ 81 StringToInt::lookupId(LIGHT_STRUCT_NAMES[idx] + LIGHT_CUT_OFF_ANGLE_NAME) 82 83 #define DECLARE_LIGHT_STRUCT_UNROLL_NAME(idx)\ 84 QLatin1String("light_") + QLatin1Char(char('0' + idx)) 85 86 #define DECLARE_LIGHT_POSITION_UNROLL_NAME(idx)\ 87 StringToInt::lookupId(LIGHT_STRUCT_UNROLL_NAMES[idx] + LIGHT_POSITION_NAME) 88 89 #define DECLARE_LIGHT_TYPE_UNROLL_NAME(idx)\ 90 StringToInt::lookupId(LIGHT_STRUCT_UNROLL_NAMES[idx] + LIGHT_TYPE_NAME) 91 92 #define DECLARE_LIGHT_COLOR_UNROLL_NAME(idx)\ 93 StringToInt::lookupId(LIGHT_STRUCT_UNROLL_NAMES[idx] + LIGHT_COLOR_NAME) 94 95 #define DECLARE_LIGHT_INTENSITY_UNROLL_NAME(idx)\ 96 StringToInt::lookupId(LIGHT_STRUCT_UNROLL_NAMES[idx] + LIGHT_INTENSITY_NAME) 97 98 #define DECLARE_LIGHT_DIRECTION_UNROLL_NAME(idx)\ 99 StringToInt::lookupId(LIGHT_STRUCT_UNROLL_NAMES[idx] + LIGHT_DIRECTION_NAME) 100 101 #define DECLARE_LIGHT_LINEAR_ATTENUATION_UNROLL_NAME(idx)\ 102 StringToInt::lookupId(LIGHT_STRUCT_UNROLL_NAMES[idx] + LIGHT_LINEAR_ATTENUATION_NAME) 103 104 #define DECLARE_LIGHT_QUADRATIC_ATTENUATION_UNROLL_NAME(idx)\ 105 StringToInt::lookupId(LIGHT_STRUCT_UNROLL_NAMES[idx] + LIGHT_QUADRATIC_ATTENUATION_NAME) 106 107 #define DECLARE_LIGHT_CONSTANT_ATTENUATION_UNROLL_NAME(idx)\ 108 StringToInt::lookupId(LIGHT_STRUCT_UNROLL_NAMES[idx] + LIGHT_CONSTANT_ATTENUATION_NAME) 109 110 #define DECLARE_LIGHT_CUT_OFF_ANGLE_UNROLL_NAME(idx)\ 111 StringToInt::lookupId(LIGHT_STRUCT_UNROLL_NAMES[idx] + LIGHT_CUT_OFF_ANGLE_NAME) 112 113 QT_BEGIN_NAMESPACE 114 115 namespace Qt3DRender { 116 namespace Render { 117 namespace OpenGL { 118 119 int GLLights::LIGHT_COUNT_NAME_ID = StringToInt::lookupId(QLatin1String("lightCount")); 120 121 QString GLLights::LIGHT_STRUCT_NAMES[MAX_LIGHTS] = { 122 DECLARE_LIGHT_STRUCT_NAME(0), 123 DECLARE_LIGHT_STRUCT_NAME(1), 124 DECLARE_LIGHT_STRUCT_NAME(2), 125 DECLARE_LIGHT_STRUCT_NAME(3), 126 DECLARE_LIGHT_STRUCT_NAME(4), 127 DECLARE_LIGHT_STRUCT_NAME(5), 128 DECLARE_LIGHT_STRUCT_NAME(6), 129 DECLARE_LIGHT_STRUCT_NAME(7) 130 }; 131 132 int GLLights::LIGHT_POSITION_NAMES[MAX_LIGHTS] = { 133 DECLARE_LIGHT_POSITION_NAME(0), 134 DECLARE_LIGHT_POSITION_NAME(1), 135 DECLARE_LIGHT_POSITION_NAME(2), 136 DECLARE_LIGHT_POSITION_NAME(3), 137 DECLARE_LIGHT_POSITION_NAME(4), 138 DECLARE_LIGHT_POSITION_NAME(5), 139 DECLARE_LIGHT_POSITION_NAME(6), 140 DECLARE_LIGHT_POSITION_NAME(7) 141 }; 142 143 int GLLights::LIGHT_TYPE_NAMES[MAX_LIGHTS] = { 144 DECLARE_LIGHT_TYPE_NAME(0), 145 DECLARE_LIGHT_TYPE_NAME(1), 146 DECLARE_LIGHT_TYPE_NAME(2), 147 DECLARE_LIGHT_TYPE_NAME(3), 148 DECLARE_LIGHT_TYPE_NAME(4), 149 DECLARE_LIGHT_TYPE_NAME(5), 150 DECLARE_LIGHT_TYPE_NAME(6), 151 DECLARE_LIGHT_TYPE_NAME(7) 152 }; 153 154 int GLLights::LIGHT_COLOR_NAMES[MAX_LIGHTS] = { 155 DECLARE_LIGHT_COLOR_NAME(0), 156 DECLARE_LIGHT_COLOR_NAME(1), 157 DECLARE_LIGHT_COLOR_NAME(2), 158 DECLARE_LIGHT_COLOR_NAME(3), 159 DECLARE_LIGHT_COLOR_NAME(4), 160 DECLARE_LIGHT_COLOR_NAME(5), 161 DECLARE_LIGHT_COLOR_NAME(6), 162 DECLARE_LIGHT_COLOR_NAME(7) 163 }; 164 165 int GLLights::LIGHT_INTENSITY_NAMES[MAX_LIGHTS] = { 166 DECLARE_LIGHT_INTENSITY_NAME(0), 167 DECLARE_LIGHT_INTENSITY_NAME(1), 168 DECLARE_LIGHT_INTENSITY_NAME(2), 169 DECLARE_LIGHT_INTENSITY_NAME(3), 170 DECLARE_LIGHT_INTENSITY_NAME(4), 171 DECLARE_LIGHT_INTENSITY_NAME(5), 172 DECLARE_LIGHT_INTENSITY_NAME(6), 173 DECLARE_LIGHT_INTENSITY_NAME(7) 174 }; 175 176 int GLLights::LIGHT_DIRECTION_NAMES[MAX_LIGHTS] = { 177 DECLARE_LIGHT_DIRECTION_NAME(0), 178 DECLARE_LIGHT_DIRECTION_NAME(1), 179 DECLARE_LIGHT_DIRECTION_NAME(2), 180 DECLARE_LIGHT_DIRECTION_NAME(3), 181 DECLARE_LIGHT_DIRECTION_NAME(4), 182 DECLARE_LIGHT_DIRECTION_NAME(5), 183 DECLARE_LIGHT_DIRECTION_NAME(6), 184 DECLARE_LIGHT_DIRECTION_NAME(7) 185 }; 186 187 int GLLights::LIGHT_LINEAR_ATTENUATION_NAMES[MAX_LIGHTS] = { 188 DECLARE_LIGHT_LINEAR_ATTENUATION_NAME(0), 189 DECLARE_LIGHT_LINEAR_ATTENUATION_NAME(1), 190 DECLARE_LIGHT_LINEAR_ATTENUATION_NAME(2), 191 DECLARE_LIGHT_LINEAR_ATTENUATION_NAME(3), 192 DECLARE_LIGHT_LINEAR_ATTENUATION_NAME(4), 193 DECLARE_LIGHT_LINEAR_ATTENUATION_NAME(5), 194 DECLARE_LIGHT_LINEAR_ATTENUATION_NAME(6), 195 DECLARE_LIGHT_LINEAR_ATTENUATION_NAME(7) 196 }; 197 198 int GLLights::LIGHT_QUADRATIC_ATTENUATION_NAMES[MAX_LIGHTS] = { 199 DECLARE_LIGHT_QUADRATIC_ATTENUATION_NAME(0), 200 DECLARE_LIGHT_QUADRATIC_ATTENUATION_NAME(1), 201 DECLARE_LIGHT_QUADRATIC_ATTENUATION_NAME(2), 202 DECLARE_LIGHT_QUADRATIC_ATTENUATION_NAME(3), 203 DECLARE_LIGHT_QUADRATIC_ATTENUATION_NAME(4), 204 DECLARE_LIGHT_QUADRATIC_ATTENUATION_NAME(5), 205 DECLARE_LIGHT_QUADRATIC_ATTENUATION_NAME(6), 206 DECLARE_LIGHT_QUADRATIC_ATTENUATION_NAME(7) 207 }; 208 209 int GLLights::LIGHT_CONSTANT_ATTENUATION_NAMES[MAX_LIGHTS] = { 210 DECLARE_LIGHT_CONSTANT_ATTENUATION_NAME(0), 211 DECLARE_LIGHT_CONSTANT_ATTENUATION_NAME(1), 212 DECLARE_LIGHT_CONSTANT_ATTENUATION_NAME(2), 213 DECLARE_LIGHT_CONSTANT_ATTENUATION_NAME(3), 214 DECLARE_LIGHT_CONSTANT_ATTENUATION_NAME(4), 215 DECLARE_LIGHT_CONSTANT_ATTENUATION_NAME(5), 216 DECLARE_LIGHT_CONSTANT_ATTENUATION_NAME(6), 217 DECLARE_LIGHT_CONSTANT_ATTENUATION_NAME(7) 218 }; 219 220 int GLLights::LIGHT_CUT_OFF_ANGLE_NAMES[MAX_LIGHTS] = { 221 DECLARE_LIGHT_CUT_OFF_ANGLE_NAME(0), 222 DECLARE_LIGHT_CUT_OFF_ANGLE_NAME(1), 223 DECLARE_LIGHT_CUT_OFF_ANGLE_NAME(2), 224 DECLARE_LIGHT_CUT_OFF_ANGLE_NAME(3), 225 DECLARE_LIGHT_CUT_OFF_ANGLE_NAME(4), 226 DECLARE_LIGHT_CUT_OFF_ANGLE_NAME(5), 227 DECLARE_LIGHT_CUT_OFF_ANGLE_NAME(6), 228 DECLARE_LIGHT_CUT_OFF_ANGLE_NAME(7) 229 }; 230 231 QString GLLights::LIGHT_STRUCT_UNROLL_NAMES[MAX_LIGHTS] = { 232 DECLARE_LIGHT_STRUCT_UNROLL_NAME(0), 233 DECLARE_LIGHT_STRUCT_UNROLL_NAME(1), 234 DECLARE_LIGHT_STRUCT_UNROLL_NAME(2), 235 DECLARE_LIGHT_STRUCT_UNROLL_NAME(3), 236 DECLARE_LIGHT_STRUCT_UNROLL_NAME(4), 237 DECLARE_LIGHT_STRUCT_UNROLL_NAME(5), 238 DECLARE_LIGHT_STRUCT_UNROLL_NAME(6), 239 DECLARE_LIGHT_STRUCT_UNROLL_NAME(7) 240 }; 241 242 int GLLights::LIGHT_POSITION_UNROLL_NAMES[MAX_LIGHTS] = { 243 DECLARE_LIGHT_POSITION_UNROLL_NAME(0), 244 DECLARE_LIGHT_POSITION_UNROLL_NAME(1), 245 DECLARE_LIGHT_POSITION_UNROLL_NAME(2), 246 DECLARE_LIGHT_POSITION_UNROLL_NAME(3), 247 DECLARE_LIGHT_POSITION_UNROLL_NAME(4), 248 DECLARE_LIGHT_POSITION_UNROLL_NAME(5), 249 DECLARE_LIGHT_POSITION_UNROLL_NAME(6), 250 DECLARE_LIGHT_POSITION_UNROLL_NAME(7) 251 }; 252 253 int GLLights::LIGHT_TYPE_UNROLL_NAMES[MAX_LIGHTS] = { 254 DECLARE_LIGHT_TYPE_UNROLL_NAME(0), 255 DECLARE_LIGHT_TYPE_UNROLL_NAME(1), 256 DECLARE_LIGHT_TYPE_UNROLL_NAME(2), 257 DECLARE_LIGHT_TYPE_UNROLL_NAME(3), 258 DECLARE_LIGHT_TYPE_UNROLL_NAME(4), 259 DECLARE_LIGHT_TYPE_UNROLL_NAME(5), 260 DECLARE_LIGHT_TYPE_UNROLL_NAME(6), 261 DECLARE_LIGHT_TYPE_UNROLL_NAME(7) 262 }; 263 264 int GLLights::LIGHT_COLOR_UNROLL_NAMES[MAX_LIGHTS] = { 265 DECLARE_LIGHT_COLOR_UNROLL_NAME(0), 266 DECLARE_LIGHT_COLOR_UNROLL_NAME(1), 267 DECLARE_LIGHT_COLOR_UNROLL_NAME(2), 268 DECLARE_LIGHT_COLOR_UNROLL_NAME(3), 269 DECLARE_LIGHT_COLOR_UNROLL_NAME(4), 270 DECLARE_LIGHT_COLOR_UNROLL_NAME(5), 271 DECLARE_LIGHT_COLOR_UNROLL_NAME(6), 272 DECLARE_LIGHT_COLOR_UNROLL_NAME(7) 273 }; 274 275 int GLLights::LIGHT_INTENSITY_UNROLL_NAMES[MAX_LIGHTS] = { 276 DECLARE_LIGHT_INTENSITY_UNROLL_NAME(0), 277 DECLARE_LIGHT_INTENSITY_UNROLL_NAME(1), 278 DECLARE_LIGHT_INTENSITY_UNROLL_NAME(2), 279 DECLARE_LIGHT_INTENSITY_UNROLL_NAME(3), 280 DECLARE_LIGHT_INTENSITY_UNROLL_NAME(4), 281 DECLARE_LIGHT_INTENSITY_UNROLL_NAME(5), 282 DECLARE_LIGHT_INTENSITY_UNROLL_NAME(6), 283 DECLARE_LIGHT_INTENSITY_UNROLL_NAME(7) 284 }; 285 286 int GLLights::LIGHT_DIRECTION_UNROLL_NAMES[MAX_LIGHTS] = { 287 DECLARE_LIGHT_DIRECTION_UNROLL_NAME(0), 288 DECLARE_LIGHT_DIRECTION_UNROLL_NAME(1), 289 DECLARE_LIGHT_DIRECTION_UNROLL_NAME(2), 290 DECLARE_LIGHT_DIRECTION_UNROLL_NAME(3), 291 DECLARE_LIGHT_DIRECTION_UNROLL_NAME(4), 292 DECLARE_LIGHT_DIRECTION_UNROLL_NAME(5), 293 DECLARE_LIGHT_DIRECTION_UNROLL_NAME(6), 294 DECLARE_LIGHT_DIRECTION_UNROLL_NAME(7) 295 }; 296 297 int GLLights::LIGHT_LINEAR_ATTENUATION_UNROLL_NAMES[MAX_LIGHTS] = { 298 DECLARE_LIGHT_LINEAR_ATTENUATION_UNROLL_NAME(0), 299 DECLARE_LIGHT_LINEAR_ATTENUATION_UNROLL_NAME(1), 300 DECLARE_LIGHT_LINEAR_ATTENUATION_UNROLL_NAME(2), 301 DECLARE_LIGHT_LINEAR_ATTENUATION_UNROLL_NAME(3), 302 DECLARE_LIGHT_LINEAR_ATTENUATION_UNROLL_NAME(4), 303 DECLARE_LIGHT_LINEAR_ATTENUATION_UNROLL_NAME(5), 304 DECLARE_LIGHT_LINEAR_ATTENUATION_UNROLL_NAME(6), 305 DECLARE_LIGHT_LINEAR_ATTENUATION_UNROLL_NAME(7) 306 }; 307 308 int GLLights::LIGHT_QUADRATIC_ATTENUATION_UNROLL_NAMES[MAX_LIGHTS] = { 309 DECLARE_LIGHT_QUADRATIC_ATTENUATION_UNROLL_NAME(0), 310 DECLARE_LIGHT_QUADRATIC_ATTENUATION_UNROLL_NAME(1), 311 DECLARE_LIGHT_QUADRATIC_ATTENUATION_UNROLL_NAME(2), 312 DECLARE_LIGHT_QUADRATIC_ATTENUATION_UNROLL_NAME(3), 313 DECLARE_LIGHT_QUADRATIC_ATTENUATION_UNROLL_NAME(4), 314 DECLARE_LIGHT_QUADRATIC_ATTENUATION_UNROLL_NAME(5), 315 DECLARE_LIGHT_QUADRATIC_ATTENUATION_UNROLL_NAME(6), 316 DECLARE_LIGHT_QUADRATIC_ATTENUATION_UNROLL_NAME(7) 317 }; 318 319 int GLLights::LIGHT_CONSTANT_ATTENUATION_UNROLL_NAMES[MAX_LIGHTS] = { 320 DECLARE_LIGHT_CONSTANT_ATTENUATION_UNROLL_NAME(0), 321 DECLARE_LIGHT_CONSTANT_ATTENUATION_UNROLL_NAME(1), 322 DECLARE_LIGHT_CONSTANT_ATTENUATION_UNROLL_NAME(2), 323 DECLARE_LIGHT_CONSTANT_ATTENUATION_UNROLL_NAME(3), 324 DECLARE_LIGHT_CONSTANT_ATTENUATION_UNROLL_NAME(4), 325 DECLARE_LIGHT_CONSTANT_ATTENUATION_UNROLL_NAME(5), 326 DECLARE_LIGHT_CONSTANT_ATTENUATION_UNROLL_NAME(6), 327 DECLARE_LIGHT_CONSTANT_ATTENUATION_UNROLL_NAME(7) 328 }; 329 330 int GLLights::LIGHT_CUT_OFF_ANGLE_UNROLL_NAMES[MAX_LIGHTS] = { 331 DECLARE_LIGHT_CUT_OFF_ANGLE_UNROLL_NAME(0), 332 DECLARE_LIGHT_CUT_OFF_ANGLE_UNROLL_NAME(1), 333 DECLARE_LIGHT_CUT_OFF_ANGLE_UNROLL_NAME(2), 334 DECLARE_LIGHT_CUT_OFF_ANGLE_UNROLL_NAME(3), 335 DECLARE_LIGHT_CUT_OFF_ANGLE_UNROLL_NAME(4), 336 DECLARE_LIGHT_CUT_OFF_ANGLE_UNROLL_NAME(5), 337 DECLARE_LIGHT_CUT_OFF_ANGLE_UNROLL_NAME(6), 338 DECLARE_LIGHT_CUT_OFF_ANGLE_UNROLL_NAME(7) 339 }; 340 341 } // namespace OpenGL 342 } // namespace Render 343 } // namespace Qt3DRender 344 345 QT_END_NAMESPACE 346