- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用freeglut。我之前已经使用着色器程序在单个 VBO 中成功渲染了一个三角形。
着色器程序编译、链接和验证没有抛出任何错误。我相信问题在于我存储和调用 VBO(其中 2 个)的方式,因为之前我只使用 1 个 VBO。
编辑:删除所有不必要的代码
#include <GL/glew.h>
#include <GL/freeglut.h>
#include <string.h>
#include <stdio.h>
#define countof(x) sizeof(x) / sizeof(x[0])
#define NUM_BUFFERS 2
#define INFOLOG_SIZE 1024
GLuint VBO_ids[NUM_BUFFERS];
GLfloat VBO0[] = {-1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f};
GLfloat VBO1[] = {-1.0f,-1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f,-1.0f, 0.0f};
GLfloat *VBOs[NUM_BUFFERS] = { VBO0, VBO1 };
GLuint shader_prog_id;
const GLchar *vert_src =
"#version 330\n"
"layout (location = 0) in vec3 Pos;\n"
"void main() {\n"
" gl_Position = vec4(Pos.x, Pos.y, Pos.z, 1.0); }\n";
const GLchar *frag_src =
"#version 330\n"
"out vec4 FragColor;\n"
"void main() {\n"
" FragColor = vec4(1.0, 1.0, 1.0, 1.0); }\n";
void vbo_init(void) {
glGenBuffers(NUM_BUFFERS, VBO_ids);
glBindBuffer(GL_ARRAY_BUFFER, VBO_ids[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(VBO0), VBOs[0], GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, VBO_ids[1]);
glBufferData(GL_ARRAY_BUFFER, sizeof(VBO1), VBOs[1], GL_STATIC_DRAW); }
int shader_init(const GLchar **v_src, const GLchar **f_src, GLint *v_size, GLint *f_size) {
GLint success;
shader_prog_id = glCreateProgram();
GLuint v_shader = glCreateShader(GL_VERTEX_SHADER);
GLuint f_shader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(v_shader, 1, v_src, v_size);
glShaderSource(f_shader, 1, f_src, f_size);
glCompileShader(v_shader);
glCompileShader(f_shader);
glAttachShader(shader_prog_id, v_shader);
glAttachShader(shader_prog_id, f_shader);
glLinkProgram(shader_prog_id);
glValidateProgram(shader_prog_id);
return 1; }
int draw_initialize(void) {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
vbo_init();
GLint vsrcsize = strlen(vert_src);
GLint fsrcsize = strlen(frag_src);
shader_init(&vert_src, &frag_src, &vsrcsize, &fsrcsize);
return 1; }
void draw_callback(void) {
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shader_prog_id);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBO_ids[0]);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
glDrawArrays(GL_TRIANGLES, 0, countof(VBO0)/3);
puts((char*)gluErrorString(glGetError()));
glBindBuffer(GL_ARRAY_BUFFER, VBO_ids[1]);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
glDrawArrays(GL_TRIANGLES, 0, countof(VBO1)/3);
glDisableVertexAttribArray(0);
glutSwapBuffers(); }
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
glutInitContextProfile(GLUT_CORE_PROFILE);
glutInitContextVersion(3, 3);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(600, 600);
glutCreateWindow("title");
glewInit();
draw_initialize();
glutIdleFunc(draw_callback);
glutMainLoop();
return 0; }
最佳答案
您需要提供Vertex Array Object (VAO)在核心上下文中:
int draw_initialize(void)
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
vbo_init();
GLint vsrcsize = strlen(vert_src);
GLint fsrcsize = strlen(frag_src);
shader_init(&vert_src, &frag_src, &vsrcsize, &fsrcsize);
GLuint vao = 0;
glGenVertexArrays( 1, &vao );
glBindVertexArray( vao );
return 1;
}
它们封装了顶点属性启用 (glEnableVertexAttribArray()
) 和指针 (glVertexAttribPointer()
) 状态。
另外:
glewExperimental = GL_TRUE
在 glewInit()
之前glutDisplayFunc()
,而不是希望 GLUT 通过仅注册一个空闲回调来弄清楚您的意思关于c - OpenGL 3.3 - glDrawArrays 之后无效操作错误 (1282),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32525738/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!