我最近开始用LWJGL 3重写我的游戏,感觉太不一样了,我试着找了一下教程,这个人用了这个兼容LWJGL 3版本的slick-util,我按照教程看了差不多三遍30分钟的教程,也没弄明白是哪里出了问题,我查了一下它的github仓库,还是没弄明白为什么我的纹理不能正常加载。
这里是他的教程的github仓库。请在此输入链接描述
下面是教程视频 请在此输入链接描述
跳到时间戳。32:02
我真的需要帮助,我试了一整天,我不能让这个工作!让我知道,如果分享代码是必要的,因为也许你们中的一个人可能已经有这个错误,并且已经知道解决方案。
顶点规范与着色器程序的属性索引不匹配。
pbo = storeData(positionBuffer, 0, 3); // [...] cbo = storeData(colorBuffer, 1, 3); // [...] tbo = storeData(textureBuffer, 2, 2);
你的顶点着色器
#version 460 core in vec3 position; in vec3 color; in vec2 textureCoord; out vec3 passColor; out vec2 passTextureCoord; void main() { gl_Position = vec4(position, 1.0); passColor = color; passTextureCoord = textureCoord; }
你的片段着色器
#version 330 core in vec3 passColor; in vec2 passTextureCoord; out vec4 outColor; uniform sampler2D tex; void main() { outColor = texture(tex, passTextureCoord); }
属性指数不会自动列举(0,1,2,...)。属性 color
甚至没有得到一个属性索引,因为它不是一个活动的程序资源。color
被设置为接口变量 passColor
但该变量不是 用过的 的碎片着色器中。因此,这个着色器程序只有2个活动属性,而且这个属性的属性指数没有指定。可能的情况是,这些属性的指数是0 position
和1 textureCoord
大多数硬件驱动程序都会这样做),但你不能确定这一点。
使用 布局限定器(GLSL) 对于 顶点着色器属性indeices:
#version 460 core
layout(location = 0) in vec3 position;
layout(location = 1) in vec3 color;
layout(location = 2) in vec2 textureCoord;
// [...]