java - LWJGL 3 无法使用与 LWJGL 3 的 slick-util 兼容版本正确渲染纹理
问题描述
我最近开始用 LWJGL 3 重写我的游戏,它是如此不同。我试着找教程,这个人使用了这个与 LWJGL 版本 3 兼容的 slick-util。我按照教程看了将近 3 次 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 个活动属性,并且未指定该属性的属性索引。可能索引是 0position
和 1 textureCoord
(这是大多数硬件驱动程序会做的),但你不能确定这一点。
对顶点着色器属性 indeices使用布局限定符 (GLSL):
#version 460 core
layout(location = 0) in vec3 position;
layout(location = 1) in vec3 color;
layout(location = 2) in vec2 textureCoord;
// [...]
推荐阅读
- javascript - 如何过滤 Mapbox Markerclusters?
- reactjs - 无法正确更新 react-redux 状态(数组)
- python - 如何从`中获取所有属性
` 网站中的元素 - botframework - 具有多选选项的聊天机器人
- jquery - 如何使用 FullCalendar 的样式使双边框样式元素的上边框不可见
- javascript - JS 新手,计数完成后试图阻止我的 div 计数
- ios - 新的 expo init 裸项目不为 iOS 构建
- javascript - 元素类型无效
- c# - Aws Lambda 工具包:无法加载文件或程序集'netstandard,版本 = 2.0.0.0 错误
- cypress - Cypress:想要部分模拟 XHR 响应