是否可以将着色器变量声明为输入和输出?

2023-12-09

我同时使用顶点着色器和几何着色器。我的顶点着色器只不过将其输入转发到几何着色器。

#version 330 core
layout (location = 0) in uint xy;
layout (location = 1) in uint znt;

out uint out_xy;
out uint out_znt;

void main()
{
    out_xy = xy;
    out_znt = znt;
}

是否可以申报xy and znt作为输入和输出,这样我就不需要重命名它们?


是否可以将着色器变量声明为输入和输出?

不。变量的名称是标识符,两个不同的变量必须具有不同的标识符。


See GLSL - OpenGL 着色语言 4.6; 3.7 标识符;第18页

标识符用于变量名称、函数名称、结构名称和字段选择器...

... 更一般地说,这是一个编译时错误 重新声明一个变量, ...


但是当然可以使用实例名称声明接口块。正如尼可波拉斯的回答所述。在这种情况下,可以通过接口块的实例名称和变量名称来访问变量。

但是仍然无法使用没有实例名称的接口块并在实例块内重用变量名称。

See GLSL - OpenGL 着色语言 4.6; 4.3.9 接口块;第54页

如果未使用实例名称 (instance-name),则块内部声明的名称的作用域为全局级别,并且可以像在块外部声明的名称一样进行访问。如果使用实例名称(instance-name),则它将所有成员放入其自己的名称空间内的范围内,并通过字段访问 选择器 ( . ) 运算符(类似于结构)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以将着色器变量声明为输入和输出? 的相关文章

  • OpenGL:始终相同的颜色

    我正在 Windows 上编写一个程序 使用c opengl 2 1 and SDL我在顶点颜色方面遇到了一些问题 我在用着glColor3f设置每个顶点集的颜色 但它似乎不起作用 无论我选择什么颜色 我都会将每个顶点绘制为红色 我检查了传
  • 渲染缓冲区大于窗口大小 - OpenGL

    我正在尝试绘制大于屏幕尺寸 即 320x480 的渲染缓冲区 512x512 执行 glReadPixels 后 图像看起来是正确的 除非图像的尺寸超过了屏幕尺寸 在本例中 超过了水平 320 和垂直 480 是什么原因导致这种异常现象呢
  • 按像素值偏移 gl_Position 或 gl_Vertex

    我的属性包含像素值 我想用这个属性值来偏移我的 gl vertex 问题是我的 gl vertex 以世界单位为单位 而 offset attribute 以像素为单位 如果我将屏幕尺寸作为统一发送 然后将像素转换为 1 到 1 值 并将其
  • 如何在opengl中使用四元数绕屏幕中心旋转?

    我正在尝试实现轨迹球 轨迹球旋转 但我的中心有问题 回转 无论如何 我希望中心成为屏幕的中心 让我解释一下到目前为止我所做的事情 我创建了一个四元数 旋转轴 向量起点x向量结束 角度 向量起点 向量结束 从该四元数中 我创建了一个旋转矩阵
  • 创建并使用我自己的纹理图集的 mipmap

    我目前正在使用自动 mipmap 生成 C OpenTK GL GenerateMipmap GenerateMipmapTarget Texture2D 我使用的纹理平铺为 16px 的块 所以我的问题是 是否可以使用不会缩小至 1x1
  • 纹理采样:根据LOD值计算BIAS值

    GL ES 2 0 中的功能纹理2DLod在片段着色器中不可用 我需要移植 GLSL 着色器 在 GL ES 2 0 中我只能使用二维纹理 sampler2D 采样器 vec2 坐标 浮点数bias 告诉我如何计算 a 的值bias相当于已
  • 如何在多采样纹理上渲染帧缓冲区对象?

    我目前有一个使用多个通道的渲染引擎 其中图像的各个部分在纹理上渲染 然后使用着色器进行组合 它有效 现在我想激活多重采样 我在这里读到 http www opengl org wiki Framebuffer Object Examples
  • 我可以在 WebGL 的 GLSL 中使用什么作为数组索引?

    是否只允许使用常量 或者我可以将其用于循环索引或任何其他动态值 In WebGL GLES2 是的 只允许使用常量 但是 如果您的代码可以展开 无论是由您自己还是由编译器 那么它就被视为一个常量 并且您有一个解决方法 例如 问题 unifo
  • 与整数纹理进行 Alpha 混合以进行对象拾取

    问题描述 你好 在我们的 WebGL 应用程序中 我们正在绘制许多 甚至数十万 形状 并且我们想要发现当前鼠标位于哪个形状 我正在寻找一种有效的方法 Details 形状定义为有符号距离函数 https en wikipedia org w
  • 如何在OpenGL中像这样绘制连接的带状线

    我想用以下方式绘制一系列连接线 GL LINE STRIP 我尝试过自己编写代码 但没有得到想要的结果 所以我来到这里 帮助我找出我错在哪里 这里我只给出我的draw 函数 glBegin GL LINE STRIP glVertex2f
  • GLSL 上的稳健 atan(y,x) 用于将 XY 坐标转换为角度

    在GLSL 特别是我正在使用的3 00 中 有两个版本atan atan y over x 只能返回 PI 2 PI 2 之间的角度 而atan y x 可以考虑所有 4 个象限 因此角度范围涵盖 PI PI 的所有内容 就像atan2 在
  • Shader的功能参数表现

    我试图了解如何在着色器语言中实现传递参数 我读过几篇文章和文档 但仍然有一些疑问 特别是我试图理解与C 函数调用 特别强调性能 之间略有差异HLSL Cg and GLSL但我猜下划线的实现非常相似 到目前为止我所理解的 除非另有说明 函数
  • glTranslatef 不在 glBegin .. glEnd 中工作

    我正在尝试并排绘制不同颜色的两个方块 我的问题是我无法让 glTranslatef 将第二个方块向右移动 第二个方块只是绘制在第一个方块上 void display void glClear GL COLOR BUFFER BIT glMa
  • 是否可以在 Mac OS X 上构建 FreeGLUT?

    我正在做一些关于 OpenGL 的教程 http www arcsynthesis org gltut Basics Tutorial 2001 html那个使用FreeGLUT http freeglut sourceforge net
  • 计算着色器中的 Image2D

    我想使用 image2D 作为顶点的 2D 存储 该顶点将由计算着色器修改 但不起作用 创建纹理 glGenTextures 1 HeightMap glBindTexture GL TEXTURE 2D HeightMap glTexIm
  • Libgdx SpriteBatch.draw() 指定 4 个顶点

    我正在使用 libGdx 创建一个 2d 游戏 并尝试使用这个特殊的方法来绘制一个简单的 2d 纹理 分别指定 4 个顶点 draw Texture texture float spriteVertices int offset int l
  • glsl 着色器 - 颜色混合,正常模式(就像在 Photoshop 中一样)

    我试图创建混合 2 种颜色的效果 实际上是图像和颜色作为图像叠加 就像在 Photoshop 颜色叠加 和 正常混合 模式中一样 我正在使用 libgdx 这就是我到目前为止所拥有的 attribute vec4 a position at
  • Raspberry PI 上的 JavaFX:加载库存着色器时出错

    目前我正在尝试部署我的 JavaFX 应用程序 该应用程序可以在 Windows 上的 Raspberry Model B v1 2 上顺利运行 由于 JavaFX 不能直接在 Raspi 上使用 我已经按照此处所述使用 Gluon 进行了
  • 光照不适用于 gluSphere

    这是一个简单的问题 我有点羞于寻求帮助 我正在对 gluSphere 进行简单调用来渲染球体 但是 即使我很确定我正确添加了法线和照明 它也无法正确照亮 但是 如果我添加纹理 模型会正常点亮 但它似乎总是平滑的 并且我无法将其更改为平面 这
  • 如何重复更新单个 Vulkan 渲染通道内对象数量的统一数据并使更新同步?

    我正在尝试将我的 OpenGL 3D 游戏引擎移植到 Vulkan 游戏场景中有大量的 3D 对象 每个对象都有自己的属性 模型矩阵 灯光等 并且对象是完全动态的 这意味着在游戏过程中可能会出现一些 3D 对象 而另一些可能会被移除 使用

随机推荐