当前位置: 首页 > 知识库问答 >
问题:

LWJGL 3着色器版本150及以上渲染无

宫弘亮
2023-03-14

我在OSX上使用LWJGL 3。使用版本时,着色器工作正常

我的着色器尽可能简单:

顶点着色器:

#version 330 core

in vec3 position;

void main(void) {
  gl_Position = vec4(position, 1.0);
}

片段着色器:

#version 330 core

out vec4 outColour;

void main(void) {
  outColour = vec4(1.0, 0.0, 0.0, 1.0);
}

我创建了一个像这样的简单三角形(Scala):

val vertices = Array(
   0.0f,  0.5f,  0.0f,
  -0.5f, -0.5f,  0.0f,
   0.5f, -0.5f,  0.0f
)
val vertexBuffer = BufferUtils.createFloatBuffer(vertices.length)
vertexBuffer.put(vertices)
vertexBuffer.flip()

val buffer = GL15.glGenBuffers()
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, buffer)
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertexBuffer, GL15.GL_STATIC_DRAW)

我把它画成这样:

GL20.glUseProgram(shader)
GL20.glEnableVertexAttribArray(0)

GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, buffer)
GL20.glBindAttribLocation(shader, 0, "position")
GL20.glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0)
GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, 9)

GL20.glDisableVertexAttribArray(0)
GL20.glUseProgram(0)

着色器编译良好,程序运行,但我只是得到一个空白的屏幕!我的代码有什么明显的问题吗?

共有1个答案

秋阳荣
2023-03-14

顶点数组对象(VAO)是在核心上下文中渲染所必需的。在兼容性上下文中,它们是可选的。

但是,您可以在启动时生成一个,如果您感到懒惰,则将其保留为绑定状态:)

 类似资料:
  • “渲染”(Rendering)是即使非计算机专业的都不会觉得陌生的词,虽然在很多人说这个词的时候,并不清楚“渲染”究竟意味着什么。相反,“着色器”(Shader)很可能是大家比较陌生的词,从名字看上去似乎是用来上色的,但它具体能做什么呢? 在解释着色器之前,我们先来聊聊渲染。 渲染 用通俗的话来说,渲染就是将模型数据在屏幕上显示出来的过程。 这听起来好像很简单呢!但正如你打开一个Word写文档一样

  • 我正在渲染很多轴对齐的3D立方体。每个立方体的中心位置和/或颜色可能不同于其他立方体。这就是我现在渲染它的方式 My DrawCube()使用和存储在VBO中的顶点数据,简单地渲染立方体每一侧对应的6个四边形。glVertexPointer和glColorPointer用于设置属性元素。 这是可行的,但是我想通过使用可能是glDrawElementsInst的()来使用即时渲染。但是由于项目的一些

  • 我想在FBO中加载两个纹理,其中一个纹理包含HDR图像,我的第一个目标是将图像从第一个纹理“复制”到第二个纹理(该纹理为空),并称为“下采样纹理”。 所以我创建FBO,加载我想用颜色_附件_0书写的纹理,并绑定它;然后初始化我的着色器程序并渲染一个四边形,其中包含我要在GL\u texture\u 0中读取的纹理。 然后我解开FBO并绑定“DownSamplingTex”,然后画一个四元组。 我不

  • 我有一个非常简单的OpenGL应用程序,只渲染一个带纹理的四边形。这是我的代码,效果很好(带纹理的四边形看起来很好): 然后我想介绍一个简单的着色器。所以我稍微修改了我的代码: 顶点着色器: 片段着色器: 现在我得到的只是一个黑色的四边形:-( 我已经尝试并测试了很多东西: 着色器编译良好(无错误) 有人知道为什么我在使用着色器时看不到我的纹理吗?

  • 我用C SDL2 GLEW Opengl 4.1编程一个小的体素游戏,有点像Minecraft。 我正在尽可能优化体素渲染。 我把世界滑成一块块,而这块块又滑成一块块。 每个块包含16x16x16个块。 现在,如果编辑块(删除/放置块),我将重建完整块和相邻块,并将其与vao和vbo一起上载到图形卡。 现在,为了最小化顶点数据,我必须从cpu传输到gpu,我使用几何体着色器。 首先,这是个好主意吗

  • 文字是程序通过界面向用户传递信息的一种最为简单高效的方式,而将这些文字以合理方式的排列并渲染到屏幕上也是界面的基本能力。本章节将介绍 LCUI 中的文字排版与渲染相关概念和用法,并通过一些示例来帮助你快速理解。 简单的例子 以下例子展示了如何使用文本层(TextLayer)将一段文本渲染到 320x240 尺寸的图片中。 #include <LCUI.h> #include <LCUI/imag