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