首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用OpenGL时,gl_VertexIndex总是0

使用OpenGL时,gl_VertexIndex总是0
EN

Stack Overflow用户
提问于 2019-08-29 07:05:03
回答 2查看 3.9K关注 0票数 5

我正试图在OpenGL中使用spirv。以前我用gl_VertexID来计算矩形的紫外线,现在我用gl_VertexIndex代替了它。

如果我使用gl_VertexID,代码可以工作,如果我在spirv中使用gl_VertexIndexvulkan,那么代码可以工作,但是如果我在OpenGL中使用gl_VertexIndex,那么gl_VertexIndex总是0

下面是我使用的测试绘制命令:

代码语言:javascript
运行
复制
glDrawArraysInstancedBaseInstance(GL_TRIANGLES, 0, 6, 1, 2);

gl_VertexIndex不应该从0转到5

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-29 13:23:11

无论您使用的是什么阴影语言,在gl_VertexIndex中都没有OpenGL。当为OpenGL将GLSL编译成SPIR-V时,您应该得到一个编译错误。

尽管如此,gl_VertexIndexgl_VertexID的值并没有区别(与gl_InstanceIndexgl_InstanceID不同)。

票数 8
EN

Stack Overflow用户

发布于 2021-11-27 23:14:29

如果使用vulkan 1.2

命令行:

代码语言:javascript
运行
复制
$ ./glslangValidator.exe my_input.vert.glsl -S vert --target-env vulkan1.2 -o my_output.vert.spv

my_input.vert.glsl

代码语言:javascript
运行
复制
#version 450

//: -------------------------------------------------------- ://
//: How to compile:                                          ://
//: $ ./glslangValidator.exe MCV.vert.glsl                   ://
//:         -S vert                                          ://
//:         --target-env vulkan1.2                           ://
//:         -o mcv.vert.spv                                  ://
//:                                                          ://
//: Formatted for readability. Command should all be on      ://
//: one line when given to console.                          ://
//: -------------------------------------------------------- ://
//:                                                          ://
//: Got Help From Vulkan Discord:                            ://
//:                                                          ://
//: Rodrigo#1643 :                                           ://
//:                                                          ://
//: gl_VertexIndex is gl_VertexID                            ://
//: gl_BaseVertex in other words,gl_VertexID                 ://
//: does not include the base vertex,which was               ://
//: confusing for some people,specially because              ://
//: D3D always included the base vertex                      ://
//:                                                          ://
//:                                                          ://
//:                                                          ://
//: Implodee#0345 :                                          ://
//:                                                          ://
//: In Vulkan dialect glsl there's no gl_VertexID            ://
//: and gl_InstanceID they are replaced by                   ://
//: gl_VertexIndex and gl_InstanceIndex as seen here         ://
//: SC[ IMPLODE_GL_VERTEX_INDEX_SEEN_HERE_PDF ]              ://
//: SC[ IMPLODE_GL_VERTEX_INDEX_SEEN_HERE_TXT ]              ://
//: https://raw.githubusercontent.com/KhronosGroup/GLSL      ://
//:       /master/extensions/khr/GL_KHR_vulkan_glsl.txt      ://
//:                                                          ://
//:                                                          ://
//: Me :                                                     ://
//:                                                          ://
//: $ ./glslangValidator MCV.vert.glsl -S vert               ://
//: MCV.vert.glsl                                            ://
//: ERROR: 0:45: 'gl_InstanceIndex' : undeclared identifier  ://
//: ERROR: 0:45: '[]' : scalar integer expression required   ://
//: ERROR: 0:45: '' : compilation terminated                 ://
//: ERROR: 3 compilation errors.  No code generated.         ://
//:                                                          ://
//:                                                          ://
//: Implodee#0345 :                                          ://
//:                                                          ://
//: call it with --target-env vulkan1.2                      ://
//: (or your used vulkan version rather)                     ://
//: see if that works                                        ://
//:                                                          ://
//:                                                          ://
//: #define V_I ( gl_VertexID    + gl_BaseVertex )    //:WRONG 
//: #define V_I ( gl_VertexIndex + gl_InstanceIndex ) //:1.2
//: -------------------------------------------------------- ://

#define V_I gl_VertexIndex
 
layout( location = 0 ) out vec3 fragColor ;

vec2 positions[3] = vec2[](
    vec2( 0.0 , -0.5 )
,   vec2( 0.5 ,  0.5 )
,   vec2(-0.5 ,  0.5 )
);

vec3 colors[3] = vec3[](
    vec3( 1.0 , 0.0 , 0.0 )
,   vec3( 0.0 , 1.0 , 0.0 )
,   vec3( 0.0 , 0.0 , 1.0 )
);

void main(){
    gl_Position = vec4( 
        positions[ V_I ]   //: XY ://
    ,   0.0                //: Z  ://
    ,   1.0                //: W  ://
    );;
    fragColor = colors[ V_I ];
}

#undef  V_I

原始源代码来自:模块

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57704761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档