Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 如何使用glMultiDrawArraysIndirect渲染简单三角形?_Opengl_Opengl 4 - Fatal编程技术网

Opengl 如何使用glMultiDrawArraysIndirect渲染简单三角形?

Opengl 如何使用glMultiDrawArraysIndirect渲染简单三角形?,opengl,opengl-4,Opengl,Opengl 4,我决定选择OpenGL,现在我已经渲染了一个简单的三角形,我想学习如何使用其他方式来渲染,比如glmultidrawArrayIndirect 网上似乎没有任何简单的例子包含这个函数。我试着在GitHub上搜索开源代码,但大部分都是文档和复杂的框架 有人能解释一下用glMultiDrawArraysIndirect渲染Hello World三角形的步骤吗 下面是我用来渲染简单三角形的工作代码。我有一张支持OpenGL的4.5卡 static const char * vs_source[] =

我决定选择OpenGL,现在我已经渲染了一个简单的三角形,我想学习如何使用其他方式来渲染,比如
glmultidrawArrayIndirect

网上似乎没有任何简单的例子包含这个函数。我试着在GitHub上搜索开源代码,但大部分都是文档和复杂的框架

有人能解释一下用
glMultiDrawArraysIndirect
渲染Hello World三角形的步骤吗

下面是我用来渲染简单三角形的工作代码。我有一张支持OpenGL的4.5卡

static const char * vs_source[] =
{
    "#version 450 core                                                 \n"
    "                                                                  \n"
    "void main(void)                                                   \n"
    "{                                                                 \n"
    "    const vec4 vertices[] = vec4[](vec4( 0.25, -0.25, 0.5, 1.0),  \n"
    "                                   vec4(-0.25, -0.25, 0.5, 1.0),  \n"
    "                                   vec4( 0.25,  0.25, 0.5, 1.0)); \n"
    "                                                                  \n"
    "    gl_Position = vertices[gl_VertexID];                          \n"
    "}                                                                 \n"
};

static const char * fs_source[] =
{
    "#version 450 core                                                 \n"
    "                                                                  \n"
    "out vec4 color;                                                   \n"
    "                                                                  \n"
    "void main(void)                                                   \n"
    "{                                                                 \n"
    "    color = vec4(0.0, 0.8, 1.0, 1.0);                             \n"
    "}                                                                 \n"
};

program = glCreateProgram();
GLuint fs = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fs, 1, fs_source, NULL);
glCompileShader(fs);

GLuint vs = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vs, 1, vs_source, NULL);
glCompileShader(vs);

glAttachShader(program, vs);
glAttachShader(program, fs);
glLinkProgram(program);

glCreateVertexArrays(1, &vao);


while (!glfwWindowShouldClose(window))
{
    const GLfloat green[] = { 0.0f, 0.25f, 0.0f, 1.0f };
    glClearBufferfv(GL_COLOR, 0, green);

    glUseProgram(program);
    glDrawArrays(GL_TRIANGLES, 0, 3);

    glfwSwapBuffers(window);
    glfwPollEvents();
}

您对函数的哪一部分有问题?@Nicolas仅替换
glDrawArray
似乎是不够的(空白输出)。我不太确定如何使用这个函数,因为我似乎在网上找不到任何简单的例子。这就是为什么我想找一个关于函数如何工作以产生输出的解释/示例。想必,你已经,对吧?我的问题是你不清楚其中的哪一部分。您知道常规的
glmultidrawArray
是如何工作的吗?或者你的问题是正确的缓冲区对象设置工作吗?@Nicolas我读过,但我不确定如何设置缓冲区,因为文档中没有提到这一点。它是否与
glmultidrawArray
相同?我还没有研究过
glmultidrawArray
。如果是这样的话,那听起来是正确的方向@泰克曼,你可以在g-truck.net上找到完整的示例,或者下载OpenGL 4.3 orange book的源代码。同样,从你的代码中不可能看出你是如何做到这一点的。你的draw调用也是错误的。你对函数的哪一部分有问题?@Nicolas仅仅替换
glDrawArray
似乎还不够(空白输出)。我不太确定如何使用该函数,因为我似乎无法在网上找到任何简单的示例。这就是为什么我要寻找关于函数如何工作以生成输出的解释/示例。想必,你已经,对吧?我的问题是,你不清楚其中的哪一部分。你知道常规的
glmultidrawArray
是如何工作的吗?还是我正确的缓冲区对象设置工作是什么问题?@NicolBolas我读过,但我不确定如何设置缓冲区,因为文档中没有提到。它与
glMultiDrawArrays
相同吗?我还没有研究过
glMultiDrawArrays
。如果是这样,那么听起来方向是正确的!@Tek man,你可以找到完整的examp介绍如何在g-truck.net上进行此操作,或下载OpenGL 4.3 orange book的源代码。同样,从您的代码中也无法看到您是如何尝试进行此操作的。您的draw调用也是错误的。