1/**************************************************************************** 2** 3** Copyright (C) 2014 NVIDIA Corporation. 4** Copyright (C) 2019 The Qt Company Ltd. 5** Contact: https://www.qt.io/licensing/ 6** 7** This file is part of Qt 3D Studio. 8** 9** $QT_BEGIN_LICENSE:GPL$ 10** Commercial License Usage 11** Licensees holding valid commercial Qt licenses may use this file in 12** accordance with the commercial license agreement provided with the 13** Software or, alternatively, in accordance with the terms contained in 14** a written agreement between you and The Qt Company. For licensing terms 15** and conditions see https://www.qt.io/terms-conditions. For further 16** information use the contact form at https://www.qt.io/contact-us. 17** 18** GNU General Public License Usage 19** Alternatively, this file may be used under the terms of the GNU 20** General Public License version 3 or (at your option) any later version 21** approved by the KDE Free Qt Foundation. The licenses are as published by 22** the Free Software Foundation and appearing in the file LICENSE.GPL3 23** included in the packaging of this file. Please review the following 24** information to ensure the GNU General Public License requirements will 25** be met: https://www.gnu.org/licenses/gpl-3.0.html. 26** 27** $QT_END_LICENSE$ 28** 29****************************************************************************/ 30 31#ifndef TESSELLATION_NPATCH_CM_GLSLLIB 32#define TESSELLATION_NPATCH_CM_GLSLLIB GLSLLIB 33 34 35#include "tessellationNPatch.glsllib" 36 37 38#if TESSELLATION_CONTROL_SHADER 39 40uniform float tessLevelOuter; 41uniform float tessLevelInner; 42 43attribute vec3 varNormal[]; 44attribute vec3 varObjPos[]; 45 46varying vec3 varNormalTC[]; 47varying vec3 varObjPosTC[]; 48 49#if QSSG_ENABLE_UV0 50attribute vec3 varTexCoord0[]; 51varying vec3 varTexCoord0TC[]; 52#endif 53 54#if QSSG_ENABLE_TEXTAN 55attribute vec3 varTangent[]; 56attribute vec3 varObjTangent[]; 57varying vec3 varTangentTC[]; 58varying vec3 varObjTangentTC[]; 59#endif 60 61#if QSSG_ENABLE_BINORMAL 62attribute vec3 varBinormal[]; 63attribute vec3 varObjBinormal[]; 64varying vec3 varBinormalTC[]; 65varying vec3 varObjBinormalTC[]; 66#endif 67 68#if QSSG_ENABLE_WORLD_POSITION 69attribute vec3 varWorldPos[]; 70varying vec3 varWorldPosTC[]; 71#endif 72 73void main() { 74 75 ctNorm[0] = varNormal[0]; 76 ctNorm[1] = varNormal[1]; 77 ctNorm[2] = varNormal[2]; 78#if QSSG_ENABLE_TEXTAN 79 ctTangent[0] = varObjTangent[0]; 80 ctTangent[1] = varObjTangent[1]; 81 ctTangent[2] = varObjTangent[2]; 82#endif 83#if QSSG_ENABLE_WORLD_POSITION 84 ctWorldPos[0] = varWorldPos[0]; 85 ctWorldPos[1] = varWorldPos[1]; 86 ctWorldPos[2] = varWorldPos[2]; 87#endif 88 89 gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position; 90 tessShader( tessLevelOuter, tessLevelInner); 91 92 varObjPosTC[gl_InvocationID] = varObjPos[gl_InvocationID]; 93 varNormalTC[gl_InvocationID] = varNormal[gl_InvocationID]; 94 95#if QSSG_ENABLE_UV0 96 varTexCoord0TC[gl_InvocationID] = varTexCoord0[gl_InvocationID]; 97#endif 98#if QSSG_ENABLE_TEXTAN 99 varTangentTC[gl_InvocationID] = varTangent[gl_InvocationID]; 100 varObjTangentTC[gl_InvocationID] = varObjTangent[gl_InvocationID]; 101#endif 102#if QSSG_ENABLE_BINORMAL 103 varBinormalTC[gl_InvocationID] = varBinormal[gl_InvocationID]; 104 varObjBinormalTC[gl_InvocationID] = varObjBinormal[gl_InvocationID]; 105#endif 106#if QSSG_ENABLE_WORLD_POSITION 107 varWorldPosTC[gl_InvocationID] = varWorldPos[gl_InvocationID]; 108#endif 109} 110 111#endif 112 113 114#if TESSELLATION_EVALUATION_SHADER 115 116#if (GEOMETRY_SHADER == 1) 117#define VARYING_NAME(varyingName) varyingName##TE 118#else 119#define VARYING_NAME(varyingName) varyingName 120#endif 121 122uniform mat3 normalMatrix; 123uniform mat4 modelViewProjection_matrix; 124 125attribute vec3 varNormalTC[]; 126attribute vec3 varObjPosTC[]; 127 128varying vec3 VARYING_NAME(varNormal); 129varying vec3 VARYING_NAME(varObjPos); 130 131#if QSSG_ENABLE_UV0 132attribute vec3 varTexCoord0TC[]; 133varying vec3 VARYING_NAME(varTexCoord0); 134#endif 135 136#if QSSG_ENABLE_TEXTAN 137attribute vec3 varTangentTC[]; 138attribute vec3 varObjTangentTC[]; 139varying vec3 VARYING_NAME(varTangent); 140varying vec3 VARYING_NAME(varObjTangent); 141#endif 142 143#if QSSG_ENABLE_BINORMAL 144attribute vec3 varBinormalTC[]; 145attribute vec3 varObjBinormalTC[]; 146varying vec3 VARYING_NAME(varBinormal); 147varying vec3 VARYING_NAME(varObjBinormal); 148#endif 149 150#if QSSG_ENABLE_WORLD_POSITION 151attribute vec3 varWorldPosTC[]; 152varying vec3 VARYING_NAME(varWorldPos); 153#endif 154 155void main() { 156 157 ctNorm[0] = varNormalTC[0]; 158 ctNorm[1] = varNormalTC[1]; 159 ctNorm[2] = varNormalTC[2]; 160#if QSSG_ENABLE_TEXTAN 161 ctTangent[0] = varObjTangentTC[0]; 162 ctTangent[1] = varObjTangentTC[1]; 163 ctTangent[2] = varObjTangentTC[2]; 164#endif 165 166 vec4 pos = tessShader( ); 167 168 gl_Position = modelViewProjection_matrix * pos; 169 170 VARYING_NAME(varObjPos) = gl_TessCoord.z * varObjPosTC[0] + gl_TessCoord.x * varObjPosTC[1] + gl_TessCoord.y * varObjPosTC[2]; 171 172#if QSSG_ENABLE_UV0 173 VARYING_NAME(varTexCoord0) = gl_TessCoord.z * varTexCoord0TC[0] + gl_TessCoord.x * varTexCoord0TC[1] + gl_TessCoord.y * varTexCoord0TC[2]; 174#endif 175#if QSSG_ENABLE_WORLD_POSITION 176 VARYING_NAME(varWorldPos) = gl_TessCoord.z * varWorldPosTC[0] + gl_TessCoord.x * varWorldPosTC[1] + gl_TessCoord.y * varWorldPosTC[2]; 177#endif 178 179 VARYING_NAME(varNormal) = normalize(normalMatrix * teNorm); 180 181#if QSSG_ENABLE_TEXTAN 182 VARYING_NAME(varTangent) = normalize(normalMatrix * teTangent); 183 VARYING_NAME(varObjTangent) = gl_TessCoord.z * varObjTangentTC[0] + gl_TessCoord.x * varObjTangentTC[1] + gl_TessCoord.y * varObjTangentTC[2]; 184#endif 185#if QSSG_ENABLE_BINORMAL 186 VARYING_NAME(varBinormal) = normalize(normalMatrix * teBinormal); 187 VARYING_NAME(varObjBinormal) = gl_TessCoord.z * varObjBinormalTC[0] + gl_TessCoord.x * varObjBinormalTC[1] + gl_TessCoord.y * varObjBinormalTC[2]; 188#endif 189} 190 191#endif 192 193#endif 194 195