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