blob: 2d1647b3e239ff32c690c69ddc322bc660a0dcf5 [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2014 NVIDIA Corporation.
** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt 3D Studio.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef TESSELLATION_NPATCH_CM_GLSLLIB
#define TESSELLATION_NPATCH_CM_GLSLLIB GLSLLIB
#include "tessellationNPatch.glsllib"
#if TESSELLATION_CONTROL_SHADER
uniform float tessLevelOuter;
uniform float tessLevelInner;
attribute vec3 varNormal[];
attribute vec3 varObjPos[];
varying vec3 varNormalTC[];
varying vec3 varObjPosTC[];
#if QSSG_ENABLE_UV0
attribute vec3 varTexCoord0[];
varying vec3 varTexCoord0TC[];
#endif
#if QSSG_ENABLE_TEXTAN
attribute vec3 varTangent[];
attribute vec3 varObjTangent[];
varying vec3 varTangentTC[];
varying vec3 varObjTangentTC[];
#endif
#if QSSG_ENABLE_BINORMAL
attribute vec3 varBinormal[];
attribute vec3 varObjBinormal[];
varying vec3 varBinormalTC[];
varying vec3 varObjBinormalTC[];
#endif
#if QSSG_ENABLE_WORLD_POSITION
attribute vec3 varWorldPos[];
varying vec3 varWorldPosTC[];
#endif
void main() {
ctNorm[0] = varNormal[0];
ctNorm[1] = varNormal[1];
ctNorm[2] = varNormal[2];
#if QSSG_ENABLE_TEXTAN
ctTangent[0] = varObjTangent[0];
ctTangent[1] = varObjTangent[1];
ctTangent[2] = varObjTangent[2];
#endif
#if QSSG_ENABLE_WORLD_POSITION
ctWorldPos[0] = varWorldPos[0];
ctWorldPos[1] = varWorldPos[1];
ctWorldPos[2] = varWorldPos[2];
#endif
gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
tessShader( tessLevelOuter, tessLevelInner);
varObjPosTC[gl_InvocationID] = varObjPos[gl_InvocationID];
varNormalTC[gl_InvocationID] = varNormal[gl_InvocationID];
#if QSSG_ENABLE_UV0
varTexCoord0TC[gl_InvocationID] = varTexCoord0[gl_InvocationID];
#endif
#if QSSG_ENABLE_TEXTAN
varTangentTC[gl_InvocationID] = varTangent[gl_InvocationID];
varObjTangentTC[gl_InvocationID] = varObjTangent[gl_InvocationID];
#endif
#if QSSG_ENABLE_BINORMAL
varBinormalTC[gl_InvocationID] = varBinormal[gl_InvocationID];
varObjBinormalTC[gl_InvocationID] = varObjBinormal[gl_InvocationID];
#endif
#if QSSG_ENABLE_WORLD_POSITION
varWorldPosTC[gl_InvocationID] = varWorldPos[gl_InvocationID];
#endif
}
#endif
#if TESSELLATION_EVALUATION_SHADER
#if (GEOMETRY_SHADER == 1)
#define VARYING_NAME(varyingName) varyingName##TE
#else
#define VARYING_NAME(varyingName) varyingName
#endif
uniform mat3 normalMatrix;
uniform mat4 modelViewProjection_matrix;
attribute vec3 varNormalTC[];
attribute vec3 varObjPosTC[];
varying vec3 VARYING_NAME(varNormal);
varying vec3 VARYING_NAME(varObjPos);
#if QSSG_ENABLE_UV0
attribute vec3 varTexCoord0TC[];
varying vec3 VARYING_NAME(varTexCoord0);
#endif
#if QSSG_ENABLE_TEXTAN
attribute vec3 varTangentTC[];
attribute vec3 varObjTangentTC[];
varying vec3 VARYING_NAME(varTangent);
varying vec3 VARYING_NAME(varObjTangent);
#endif
#if QSSG_ENABLE_BINORMAL
attribute vec3 varBinormalTC[];
attribute vec3 varObjBinormalTC[];
varying vec3 VARYING_NAME(varBinormal);
varying vec3 VARYING_NAME(varObjBinormal);
#endif
#if QSSG_ENABLE_WORLD_POSITION
attribute vec3 varWorldPosTC[];
varying vec3 VARYING_NAME(varWorldPos);
#endif
void main() {
ctNorm[0] = varNormalTC[0];
ctNorm[1] = varNormalTC[1];
ctNorm[2] = varNormalTC[2];
#if QSSG_ENABLE_TEXTAN
ctTangent[0] = varObjTangentTC[0];
ctTangent[1] = varObjTangentTC[1];
ctTangent[2] = varObjTangentTC[2];
#endif
vec4 pos = tessShader( );
gl_Position = modelViewProjection_matrix * pos;
VARYING_NAME(varObjPos) = gl_TessCoord.z * varObjPosTC[0] + gl_TessCoord.x * varObjPosTC[1] + gl_TessCoord.y * varObjPosTC[2];
#if QSSG_ENABLE_UV0
VARYING_NAME(varTexCoord0) = gl_TessCoord.z * varTexCoord0TC[0] + gl_TessCoord.x * varTexCoord0TC[1] + gl_TessCoord.y * varTexCoord0TC[2];
#endif
#if QSSG_ENABLE_WORLD_POSITION
VARYING_NAME(varWorldPos) = gl_TessCoord.z * varWorldPosTC[0] + gl_TessCoord.x * varWorldPosTC[1] + gl_TessCoord.y * varWorldPosTC[2];
#endif
VARYING_NAME(varNormal) = normalize(normalMatrix * teNorm);
#if QSSG_ENABLE_TEXTAN
VARYING_NAME(varTangent) = normalize(normalMatrix * teTangent);
VARYING_NAME(varObjTangent) = gl_TessCoord.z * varObjTangentTC[0] + gl_TessCoord.x * varObjTangentTC[1] + gl_TessCoord.y * varObjTangentTC[2];
#endif
#if QSSG_ENABLE_BINORMAL
VARYING_NAME(varBinormal) = normalize(normalMatrix * teBinormal);
VARYING_NAME(varObjBinormal) = gl_TessCoord.z * varObjBinormalTC[0] + gl_TessCoord.x * varObjBinormalTC[1] + gl_TessCoord.y * varObjBinormalTC[2];
#endif
}
#endif
#endif