写入多于1个输出的片段着色错误
Fragment Shader Error of writing to more than 1 ouput
下面是我的片段着色器代码,用于在地板和球体上生成纹理,并在其上方生成雾效果。
当我尝试编译它时,我得到一个错误,说"片段着色器写入超过1种类型的输出gl_FragData, gl_FragColor或用户绑定的碎片数据。"
out vec4 color;
out vec2 texCoord;
uniform int fogType;
uniform int enableFloorTexture;
uniform int sphereTexture;
uniform int objectType;
uniform sampler2D texture;
uniform sampler1D stexture;
void main()
{
vec4 finColor = color;
if (objectType == 1)
{
if(enableFloorTexture == 1)
{
finColor = color * texture2D( texture, texCoord );
}
}
else if (objectType == 2)
{
if(sphereTexture != 0)
{
finColor = color * texture1D( stexture, texCoord.x );
}
}
float fogFactor = 0.0;
float fogDepth = (18.0 - 0.0);
float fogDensity = 0.09;
vec4 fogColor = vec4(0.7, 0.7, 0.7, 0.5);
float z = gl_FragCoord.z / gl_FragCoord.w;
if(fogType == 1)
{
fogFactor = (18.0 - z) / fogDepth;
}
else if (fogType == 2)
{
fogFactor = exp( -fogDensity * z );
}
else if (fogType == 3)
{
fogFactor = exp( -fogDensity * fogDensity * z * z );
}
fogFactor = clamp(fogFactor, 0.0, 1.0);
if(fogType == 0)
{
gl_FragColor = finColor;
}
else
{
gl_FragColor = mix(fogColor, finColor, fogFactor);
}
}
让我在你的程序中感到困惑的是,你正在使用color
作为输出,但你在你的程序中使用它。这只是笔误吗?
如果你想使用#version 400
输出格式,输出应该像这样:
layout(location = 0) out vec4 color;
您声明了一些输出:
out vec4 color;
out vec2 texCoord;
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- 无法在这个基本的Qt代码片段中找到错误,但我被告知它肯定存在?
- 为什么我的C++代码在以下打印链表的代码片段中显示分段错误?
- 片段着色器中的"错误:在 GLSL 1.30 及更高版本中禁止使用非常量表达式索引的采样器数组"
- 为什么以下代码片段存在编译错误
- 为什么可以无错误地编译此片段
- 代码片段的页面错误
- Dart 编译错误 - 代码库中奇怪的代码片段
- OpenGL片段着色器没有效果,如何判断错误
- OpenGL错误1281片段着色器(仅通过使用块接口)
- 为什么这个代码片段给我一个分割错误
- 写入多于1个输出的片段着色错误