Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
OpenGL着色器编译非常慢_Opengl_Glsl - Fatal编程技术网

OpenGL着色器编译非常慢

OpenGL着色器编译非常慢,opengl,glsl,Opengl,Glsl,所以我有顶点和片段着色器,当我在Intel UHD 630上编译它时,我甚至没有注意到任何减速。但在我的GTX1060上,编译大约需要10秒。有人知道为什么会这样吗 编辑: 当我将MAX_CHUNK_COUNT的值编辑为较低的值时,它编译得更快。但我不明白缓冲区和编译有什么关系。在我的应用程序中,至少还有4个着色器包含多个SSBO,这些着色器不会造成任何减速。我还发现减速发生在glLinkProgram() 解决方案:根据我在互联网上找到的chagningChunkData ChunkData[

所以我有顶点和片段着色器,当我在Intel UHD 630上编译它时,我甚至没有注意到任何减速。但在我的GTX1060上,编译大约需要10秒。有人知道为什么会这样吗

编辑: 当我将MAX_CHUNK_COUNT的值编辑为较低的值时,它编译得更快。但我不明白缓冲区和编译有什么关系。在我的应用程序中,至少还有4个着色器包含多个SSBO,这些着色器不会造成任何减速。我还发现减速发生在
glLinkProgram()

解决方案:根据我在互联网上找到的chagning
ChunkData ChunkData[MAX_CHUNK_COUNT]
ChunkData ChunkData[]解决了减速问题,这很好,但是我测试这个程序的另一台机器由于某种原因不支持动态大小的SSBO,所以我的程序很可能是无用的

顶点:

#version 430 core
#define MAX_CHUNK_COUNT 64

layout (location = 0) in vec2 vertexPosition;

struct ChunkData
{
    mat4 model;
    uvec2 texture[3][1024];
    vec2 textureCoordinates[3][4096];
};

layout(std430) readonly buffer ChunkDataStorage
{
    ChunkData chunkData[MAX_CHUNK_COUNT];
};

out VS_OUT
{
    flat uvec2 TextureHandle;
    vec2 texturePosition;
}vs_out;

uniform mat4 projection;
uniform int renderTarget;

void main()
{
    vs_out.TextureHandle = chunkData[gl_InstanceID].texture[renderTarget][gl_VertexID / 4];
    vs_out.texturePosition = chunkData[gl_InstanceID].textureCoordinates[renderTarget][gl_VertexID];
    gl_Position = projection * chunkData[gl_InstanceID].model * vec4(vertexPosition, 0.0, 1.0);
}
片段:

#version 430 core
#extension GL_ARB_bindless_texture : require

in VS_OUT
{
    flat uvec2 TextureHandle;
    vec2 texturePosition;
}fs_in;

out vec4 fragmentColor;
void main()
{
    fragmentColor = texture(sampler2D(fs_in.TextureHandle), fs_in.texturePosition);
}

这是webgl、opengl还是vulkan?它在OpenGLLinux或windows中?它在windows上什么驱动程序版本?这是webgl、opengl或vulkan?它在OpenGLLinux或windows中?它在windows上什么驱动程序版本?