gpt4 book ai didi

java - OpenGL GLSL统一集返回错误

转载 作者:行者123 更新时间:2023-12-01 07:25:17 24 4
gpt4 key购买 nike

我在从着色器获取制服时遇到问题。该行:

int u = GL20.glGetUniformLocation(program, uniform);

用于检查字符串uniform定义的uniform是否在着色器中。

这是一个示例检查代码:

System.out.println(GL20.glGetUniformLocation(1, "transformationMatrix")==0);
System.out.println(GL20.glGetUniformLocation(1, "projectionMatrix")==0);

结果:

false
true

奇怪的事情来了:顶点着色器代码如下:

#version 330

layout (location = 0) in vec3 pos;
layout (location = 1) in vec3 tex;
layout (location = 2) in vec3 nor;
layout (location = 3) in vec3 col;

uniform mat4 projectionMatrix;
uniform mat4 transformationMatrix;

out vec3 normal;

void main(){

normal = nor;
gl_Position = projectionMatrix * vec4(pos, 1);
}

我已经测试过重命名制服,删除另一个制服,但 OpenGL 似乎唯一能识别的制服是“projectionMatrix”制服。

环境:Java 与 lwjglLinux 中的 OpenGl 和 mesa 10.4.0(在 Windows 上也不起作用)

最佳答案

GLSL 编译器可以从发出的可执行着色器中删除未使用的变量,作为一种优化(使用更少的寄存器等)。如果使用 transformationMatrix 统一值来计算着色器的返回值,则它将保留在着色器中,并且错误将会消失。

这不是一个“硬”错误,请随意忽略它。特别是当您出于调试目的而更改 GLSL 代码时,您可能会遇到这种情况。

关于java - OpenGL GLSL统一集返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26148105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com