Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在LWJGL中将浮点数组传递给着色器_Java_Opengl Es_Glsl_Lwjgl - Fatal编程技术网

Java 如何在LWJGL中将浮点数组传递给着色器

Java 如何在LWJGL中将浮点数组传递给着色器,java,opengl-es,glsl,lwjgl,Java,Opengl Es,Glsl,Lwjgl,我一直在遵循LWJGL网站()上的教程,尝试向我的片段着色器发送一个随机浮点数组,但是着色器中的每个值都是0。我尝试复制粘贴“arrayOfInts”示例来尝试隔离问题,将所有内容都更改为int,但我仍然只在着色器一侧得到零。根据文档(),函数glUniform1iv存在并执行我需要的操作,但是当我尝试它时,Eclipse告诉我它在类GL20中不存在,无论是在使用int[]还是IntBuffer时,glUniform1fv也是如此。统一变量的位置为0,因此它被正确加载。生成的java数组中存储的

我一直在遵循LWJGL网站()上的教程,尝试向我的片段着色器发送一个随机浮点数组,但是着色器中的每个值都是0。我尝试复制粘贴“arrayOfInts”示例来尝试隔离问题,将所有内容都更改为int,但我仍然只在着色器一侧得到零。根据文档(),函数
glUniform1iv
存在并执行我需要的操作,但是当我尝试它时,Eclipse告诉我它在类GL20中不存在,无论是在使用
int[]
还是
IntBuffer
时,
glUniform1fv
也是如此。统一变量的位置为0,因此它被正确加载。生成的java数组中存储的值是正确的

顶点着色器:

#version 400 core

in vec3 position;
out vec2 uvPosition;

void main(void){
    gl_Position = vec4(position, 1.0);
    uvPosition = (position.xy+vec2(1.0, 1.0))/2;
}
片段着色器

#version 400 core

in vec2 uvPosition;
out vec4 outColor;

uniform int random[50];

int randomIterator = 0;

float randf(){
    return random[randomIterator++];
}

void main(void){
    outColor = vec4(random[0]/10, 1.0, 1.0, 1.0);
}
加载制服的Java代码:

    final int RAND_AMOUNT = 50;
    IntBuffer buffer = BufferUtils.createIntBuffer(RAND_AMOUNT);
    int[] array = new int[RAND_AMOUNT];
    for(int i = 0; i < RAND_AMOUNT; i++) {
        buffer.put((int)(Math.random()*9.999f));
        array[i] = (int)(Math.random()*9.999f);
    }
    buffer.rewind();
    System.out.println(buffer.get(0));
    GL20.glUniform1(glGetUniformLocation(programID, "random"), buffer); //In this line, using GL20.glUniform1iv tells me it doesn't exist. Same with
final int RAND_AMOUNT=50;
IntBuffer buffer=BufferUtils.createIntBuffer(RAND_AMOUNT);
int[]数组=新int[RAND_AMOUNT];
对于(int i=0;i
没有任何东西会抛出错误,显示为青色,表示红色分量为0。任何帮助生成随机整数或直接发送随机浮点的方法都会有所帮助。请随意提问。

在当前安装程序的默认统一块中设置统一值。因此,该程序必须在之前安装

int random\u loc=GL20.glGetUniformLocation(程序ID,“随机”)
GL20.glUseProgram(programmaid);
GL20.glUniform1(随机位置,缓冲区);

非常感谢,这很有效。“我真蠢,竟然没想到这点。”纳塔玛斯,谢谢你。不客气。别担心,这是一个常见的错误。你知道为什么glUniform1iv即使在文档中也不起作用吗?我刚开始学习OpenGL,这让我很困惑@拉比76