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

opengl 3.3核心配置文件呈现失败

贺飞
2023-03-14

我试图用OpenGL3.3核心配置文件渲染一个简单的测试着色器。但我得到的一切都是一扇黑窗。

GLFWwindow* window;

GLuint vao;
GLuint vbo[2];
GLuint program;

const GLfloat square[8] = {
    -1.0, -1.0,
    -1.0,  1.0,
    1.0,  1.0,
    1.0, -1.0
};

const GLfloat indices[4] = { 0, 1, 2, 3 };

init opengl核心上下文和窗口

if( !glfwInit() ) {
    std::cerr << "Failed to initialize GLFW\n";
    return -1;
}

glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

// Open a window and create its OpenGL context
window = glfwCreateWindow( 1024, 768, "", 0, 0);
if( window == NULL ) {
    std::cerr << "Failed to open GLFW window.\n";
    glfwTerminate();
    return -1;
}
glfwMakeContextCurrent(window);

// Initialize GLEW
if (gl3wInit()) {
    std::cerr << "Failed to initialize GLEW" << std::endl;
    return -1;
}

if (!gl3wIsSupported(3, 3)) {
    std::cerr << "OpenGL Version 3.3 not supported" << std::endl;
    return -1;
}
glGenBuffers(2, vbo);

glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
glBufferData(GL_ARRAY_BUFFER, 8*sizeof(GLfloat), square, GL_STATIC_DRAW);

glBindBuffer(GL_ARRAY_BUFFER, vbo[1]);
glBufferData(GL_ARRAY_BUFFER, 4*sizeof(GLushort), indices, GL_STATIC_DRAW);

glGenVertexArrays(1, &vao);
glBindVertexArray(vao);

program = glCreateProgram();

GLuint vertex_shader, fragment_shader;

loadShader_FILE(vertex_shader, "shader/default.vsh", GL_VERTEX_SHADER);
glAttachShader(program, vertex_shader);

loadShader_FILE(fragment_shader, "shader/default.fsh", GL_FRAGMENT_SHADER);
glAttachShader(program, fragment_shader);

glBindAttribLocation(program, 0, "pos");

glLinkProgram(program);
glUseProgram(program);

glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
glVertexAttribPointer(
            0,
            2,
            GL_FLOAT,
            GL_FALSE,
            sizeof(GLfloat)*2,
            (void*)0);
glEnableVertexAttribArray(0);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo[1]);
glDrawElements(
            GL_TRIANGLE_STRIP,
            4,
            GL_UNSIGNED_SHORT,
            (void*)0);

glDisableVertexAttribArray(0);
glfwSwapBuffers(window);
#version 330
in vec2 pos;
out vec2 c;

void main(void)
{
    gl_Position = vec4(pos, 0.0, 1.0);
    c = (pos+1)*0.5;
}
#version 330
in vec2 c;
out vec4 color;

void main(void)
{
    color = vec4(c, 1, 1);
}

着色器编译没有错误,apitrace找不到任何opengl错误

共有1个答案

段干恺
2023-03-14
const GLfloat indices[4] = { 0, 1, 2, 3 };

您告诉OpenGL,这些是无符号的短裤,但它们是浮点的。尽管glfloat的大小是glushort的两倍,但这些数字的表示方式是非常不同的。浮点顶点索引没有太多意义。

const GLushort indices[4] = { 0, 1, 2, 3 };
 类似资料:
  • Hibernate 的常用配置文件主要分为 2 种:核心配置文件(hibernate.cfg.xml)和映射文件(Xxx.hbm.xml),它们主要用于配置数据库连接、事务管理、Hibernate 本身的配置信息以及 Hibernate 映射文件信息。 本节我们只讲解 Hibernate 核心配置文件,也即 hibernate.cfg.xml,后续将在《 Hibernate 映射文件》一节中继续讲

  • 本文向大家介绍spring boot 核心配置文件是什么?相关面试题,主要包含被问及spring boot 核心配置文件是什么?时的应答技巧和注意事项,需要的朋友参考一下 配置文件有 . properties 格式和 . yml 格式,它们主要的区别是书法风格不同。 properties 配置如下: spring. RabbitMQ. port=5672 yml 配置如下: spring: Rab

  • 关于中文分词的详细配置实例和分词词典的自定义设置,可以访问Coreseek网站中文分词核心配置查看。 核心配置: charset_dictpath = /usr/local/mmseg3/etc/ charset_type = zh_cn.utf-8 #charset_table = .................... #需将原有的该配置注释掉 ngram_le

  • 我运行ArchLinux与梅萨10在惠普笔记本电脑与英特尔高清3000 GPU。(还有一个ATI卡,但我在开机时关闭了它。)我试图用核心配置文件运行OpenGL代码。根据glxinfo,应该支持OpenGL 3.1和GLSL 1.4: 但是,当我编译GLFW程序时,请尝试强制核心配置文件,并要求使用OpenGL版本,如下所示: 以及使用GLSL#版本140编译着色器,这是打印输出: 所以,似乎Op

  • 本文向大家介绍Hadoop的核心配置是什么?相关面试题,主要包含被问及Hadoop的核心配置是什么?时的应答技巧和注意事项,需要的朋友参考一下 解答: Hadoop的核心配置通过两个xml文件来完成: 1.hadoop-default.xml; 2.hadoop-site.xml。 这些文件都使用xml格式,因此每个xml中都有一些属性,包括名称和值,但是当下这些文件都已不复存在。

  • 本文向大家介绍Dubbo 核心的配置有哪些?相关面试题,主要包含被问及Dubbo 核心的配置有哪些?时的应答技巧和注意事项,需要的朋友参考一下 我曾经面试就遇到过面试官让你写这些配置,我也是蒙逼。。 配置之间的关系见下图。