繁体   English   中英

glDrawArraysInstanced在OpenGL中不进行多个绘制调用吗?

[英]glDrawArraysInstanced is not doing multiple draw calls in OpenGL?

我正在尝试绘制两个矩形(用于镶嵌),我想将它们从0,0绘制到1,1,将其他从1,0绘制到2,1

我正在使用GL_PATCHES将四边形发送到图形管道

我在齐次坐标中的顶点数据是

float vertices[32] = {
0.0, 0.0, 0.0, 1.0, //1st rec
1.0, 0.0, 0.0, 1.0,
1.0, 1.0, 0.0, 1.0,
0.0, 1.0, 0.0, 1.0,
  1.0, 0.0, 0.0, 1.0, //2nd rec
  2.0, 0.0, 0.0, 1.0,
  2.0, 1.0, 0.0, 1.0,
  1.0, 1.0, 0.0, 1.0
   };

而在C ++代码中

glPatchParameteri(GL_PATCH_VERTICES, 4);
glDrawArraysInstanced(GL_PATCHES, 0, 4, 2);

但是我在屏幕上只能得到一个从0,0到1,1的矩形补丁。 我不明白为什么它没有绘制第二个矩形

我的镶嵌评估着色器是

vec4 vert= vec4(0.0, 0.0, 0.0, 1.0);
vert.x = gl_in[0].gl_Position.x + gl_TessCoord.x;
vert.y = gl_in[0].gl_Position.y + gl_TessCoord.y;

我将此顶点转换为vec4并将其传递给gl_Position

glDrawArraysInstanced绘制指定数据的多个实例。 在您的情况下,它绘制的顶点是顶点0到4的两倍,这使您在同一位置上放置了两个正方形。

我建议您只使用glDrawArrays(GL_PATCHES,0,8)代替,但是您也可以保持调用并根据gl_InstanceID在顶点着色器中进行翻译。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM