- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我将 OpenGL 与 LWJGL 和我自己的非常小的框架一起用于琐碎的任务。我正在关注OpenGL SuperBible: Comprehensive Tutorial and Reference (6th Edition)这本书。
我将列出程序中最重要的部分:
public class GameController extends Controller {
private Program test1Program;
private int vaoId;
@Override
protected void init() {
glViewport(0, 0, 800, 600);
test1Program = new Program(
new VertexShader("src/shaders/test.vert.glsl").create(),
new ControlShader("src/shaders/test.cont.glsl").create(),
new EvaluationShader("src/shaders/test.eval.glsl").create(),
new FragmentShader("src/shaders/test.frag.glsl").create()
).create();
vaoId = glGenVertexArrays();
glBindVertexArray(vaoId);
}
@Override
protected void draw(double msDelta) {
glClearColor((float)Math.sin(currentTime / 1000f) * 0.5f + 0.5f, (float)Math.cos(currentTime / 1000f) * 0.5f + 0.5f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
test1Program.use();
glVertexAttrib4f(0, (float)Math.sin(currentTime / 1000f) * 0.5f, (float)Math.cos(currentTime / 1000f) * 0.5f, 0.0f, 0.0f);
glVertexAttrib4f(1, (float)Math.sin(currentTime / 1000f * 2f) * 0.5f + 0.5f, (float)Math.cos(currentTime / 1000f * 2f) * 0.5f + 0.5f, 0.0f, 1.0f);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glDrawArrays(GL_TRIANGLES, 0, 3);
}
@Override
protected void shutdown() {
test1Program.delete();
glDeleteVertexArrays(vaoId);
}
public static void main(String[] args) {
Controller controller = new GameController();
controller.start();
}
}
我的自定义 VertexShader
、ControlShader
、EvaluationShader
和 FragmentShader
正在运行,如果着色器代码无法正确编译或者没有正确链接,然后将抛出异常并且我会注意到它。所以我已经验证了那些和 Program
工作正常。
错误(Exception in thread "main"org.lwjgl.opengl.OpenGLException: Invalid operation (1282)
)在调用 glDrawArrays
时抛出。
测试.vert.glsl:
#version 440 core
layout(location = 0) in vec4 offset;
layout(location = 1) in vec4 color;
out VS_OUT {
vec4 color;
} vs_out;
void main() {
const vec4 vertices[3] = vec4[3](
vec4(0.25, -0.25, 0.5, 1.0),
vec4(-0.25, -0.25, 0.5, 1.0),
vec4(0.25, 0.25, 0.5, 1.0)
);
gl_Position = vertices[gl_VertexID] + offset;
vs_out.color = color;
}
测试.cont.glsl:
#version 440 core
layout(vertices = 3) out;
void main() {
if (gl_InvocationID == 0) {
gl_TessLevelInner[0] = 5.0;
gl_TessLevelOuter[0] = 5.0;
gl_TessLevelOuter[1] = 5.0;
gl_TessLevelOuter[2] = 5.0;
}
gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
}
测试.eval.glsl:
#version 440 core
layout(triangles, equal_spacing, cw) in;
void main() {
gl_Position = (gl_TessCoord.x * gl_in[0].gl_Position + gl_TessCoord.y * gl_in[1].gl_Position + gl_TessCoord.z * gl_in[2].gl_Position);
}
#version 440 core
in VS_OUT {
vec4 color;
} fs_in;
out vec4 color;
void main() {
color = fs_in.color;
}
我已经对我的所有代码进行了三次检查,并与本书进行了交叉检查,但不知道为什么它不起作用。如有任何帮助,我将不胜感激,并会在必要时提供更多信息。
最佳答案
我刚刚找到了答案:
glDrawArrays(GL_TRIANGLES, 0, 3);
需要:
glDrawArrays(GL_PATCHES, 0, 3);
如果 OpenGL 做出更多努力来说明问题所在,我们将不胜感激。
书中也没有任何地方(明确地)提到我需要使用 GL_PATCHES
,我只是通过查看书中可编译示例的源代码来弄清楚这一点。
关于java - 曲面分割着色器上的 GL_INVALID_OPERATION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21123001/
每次我尝试使用 Qt QOpenGLTexture 上传具有多个 mipmap 级别的 DXT1 纹理时,我都会收到 GL_INVALID_OPERATION。对于 mipmap 级别 0,一切正常,
我正在使用 this lovely tutorial. 进行阴影转换这个过程是,我们将场景渲染到一个帧缓冲区,附加到它的是一个立方体贴图来保存深度值。然后,我们将这个立方体贴图传递给片段着色器,片段着
为什么是glTexSubImage2D()突然导致 GL_INVALID_OPERATION? 我正在尝试将我过时的增强现实应用程序从 iOS4.x 升级到 iOS5.x,但我遇到了困难。我运行的是
我将 OpenGL 与 LWJGL 和我自己的非常小的框架一起用于琐碎的任务。我正在关注OpenGL SuperBible: Comprehensive Tutorial and Reference
我正在开发一些图形应用程序,在 glPopAttrib() 之后我得到了一个 GL_INVALID_OPERATION。预测答案“您似乎在 glBegin/glEnd block 中调用了 glPop
我正在尝试从已有效编译和链接的程序中检索二进制文件。我已经通过 GL_PROGRAM_BINARY_LENGTH 收到了它的长度。该文档说有两个实例可能会发生 GL_INVALID_OPERATION
当我尝试为 gound 分配几何图形时,我在示例的最开始遇到异常,here和 here : 此时 gl4.glNamedBufferData(vertexBuffer[0], Vertex.size(
我已将错误范围缩小到此 OpenGL 调用: glVertexAttribPointer(var.vertex, 4, GL_FLOAT, GL_FALSE, 0, 0); 前面没有错误,后面有 GL
我当前正在连接 OpenGL 应用程序并收到GL_INVALID_OPERATION。整个 GL 分散在多个文件中,很难从中创建示例,但我已经使用 apitrace 创建了 OpenGL 跟踪。这是造
我正在浏览 OGLdev教程,而且我一直坚持让顶点数组对象工作。相关代码如下: glBindBuffer(GL_ARRAY_BUFFER, buffers[POS_VB]); FloatBuffer
我有两个具有 TextureView 的 fragment 来显示相机预览或播放视频。 在使用应用程序一段时间后,玩弄屏幕,我在 logcat 中收到此错误 OpenGLRenderer﹕ GL_IN
嘿,我有一个抽象所有与着色器相关的类,名为 Shader.cpp : #include "Shader.h" #include "Renderer.h" #include #include Sha
我目前正在研究阴影贴图。我找到了 Paul 的项目 http://www.paulsprojects.net/tutorials/smt/smt.html ,我目前正在尝试实现这一点。但我无法获得合适
当我在下面的代码中调用 glUniformMatrix4fv 或 glUniform4fv 时,它每次都会引发 GL_INVALID_OPERATION,我尝试更改我传递矩阵数据的方式,我传递 id
我正在使用 OpenGL 核心配置文件 3.3 版 当我调用 glVertexAttribPointer 时,我得到 GL_INVALID_OPERATION。我已经 checkout http://
我目前正在学习 OpenGL 3.X,正在使用 ubuntu 14.04。我正在使用 C 语言创建我的应用程序和 SDL2 库。 命令 glxinfo | grep "OpenGL version"
我的目标是让实例化渲染工作,但即使是单个 glDrawElements 现在也会失败。注意:此代码已在 Windows 上运行。然而在 OS X 上它失败了 GL_INVALID_OPERATION
这是我的(包装的)OpenGL 调用,它导致 GL_INVALID_OPERATION: GLTextures.TexImage2D(TexImage2DTarget.TEXTURE_2D, 0, T
我试图让 OpenGL ES 2.0 在 Windows 7 上使用(Google 的)Angle 运行,但是无论我把它放在哪里,glGetError() 都会无限返回 GL_INVALID_OPER
我正在尝试找出模板。现在我只是用模板值绘制一些框,然后读取值。每次我用 GL_STENCIL_INDEX 调用 glReadPixels 时,我都会得到 GL_INVALID_OPERATION。这是
我是一名优秀的程序员,十分优秀!