- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究使用无绑定(bind)纹理来快速显示一系列图像。我的引用资料是 OpenGL 4.5 红皮书。这本书说我可以使用这个片段着色器在着色器中对无绑定(bind)纹理进行采样:
#version 450 core
#extension GL_ARB_bindless_texture : require
in FS_INPUTS {
vec2 i_texcoord;
flat int i_texindex;
};
layout (binding = 0) uniform ALL_TEXTURES {
sampler2D fs_textures[200];
};
out vec4 color;
void main(void) {
color = texture(fs_textures[i_texindex], i_texcoord);
};
我创建了一个如下所示的顶点着色器:
#version 450 core
in vec2 vert;
in vec2 texcoord;
uniform int texindex;
out FS_INPUTS {
vec2 i_texcoord;
flat int i_texindex;
} tex_data;
void main(void) {
tex_data.i_texcoord = texcoord;
tex_data.i_texindex = texindex;
gl_Position = vec4(vert.x, vert.y, 0.0, 1.0);
};
如你所见,我对发生的事情的理解有点弱。
在我的 OpenGL 代码中,我创建了一堆纹理,获取它们的句柄,并使它们常驻。我用来获取纹理句柄的函数是“glGetTextureHandleARB”。可以使用另一个函数“glGetTextureSamplerHandleARB”,我可以在其中传递采样器位置。这是我所做的:
Texture* textures = new Texture[load_limit];
GLuint64* tex_handles = new GLuint64[load_limit];
for (int i=0; i<load_limit; ++i)
{
textures[i].bind();
textures[i].data(new CvImageFile(image_names[i]));
tex_handles[i] = glGetTextureHandleARB(textures[i].id());
glMakeTextureHandleResidentARB(tex_handles[i]);
textures[i].unbind();
}
我的问题是如何将我的纹理句柄绑定(bind)到片段着色器的 ALL_TEXTURES 统一属性?另外,我应该使用什么来更新顶点属性 'texindex' - 我的纹理句柄数组或纹理句柄的实际索引?
最佳答案
这是 无绑定(bind) 纹理。您不会将此类纹理“绑定(bind)”到任何东西。
在 bindless texturing ,采样器的数据值是一个数字。具体来说,glGetTextureHandleARB
返回的数字。纹理句柄是 64 位无符号整数。
在着色器中,sampler
的值类型为buffer-backed interface blocks (UBO 和 SSBO)是 64 位无符号整数。所以一个采样器数组在结构上等同于一个 64 位无符号整数数组。
因此,在 C++ 中,与您的 ALL_TEXTURES
block 等效的结构将是:
struct AllTextures
{
GLuint64 textures[200];
};
好吧,当然,假设您正确使用 std140
布局。否则,您必须查询结构的布局。
此时,您将缓冲区视为与任何其他 UBO 用法没有区别。通过将 AllTextures
粘贴到缓冲区对象中为着色器构建数据,然后将该缓冲区作为 UBO 绑定(bind)到绑定(bind) 0。您只需使用实际纹理句柄填充数组。
Also, what should I use to update the vertex attribute 'texindex' - an actual index into my texture handle array or a texture handle?
好吧,谁都行不通。不是你写的那样。
见,ARB_bindless_texture不允许您随时从任何着色器调用以任何方式访问您想要的任何纹理。除非您使用的是 NV_gpu_shader5,否则导致纹理访问的代码必须基于 dynamically uniform expressions .
因此,除非您的渲染命令中的每个顶点都获得相同的索引或句柄...您不能使用它们来选择要使用的纹理。即使是实例化也不会拯救你,因为动态统一的表达式并不关心实例化。
如果您想渲染一堆四边形而不必更改它们之间的制服(并且不必依赖 NVIDIA 扩展),那么您有几个选择。大多数支持无绑定(bind)纹理的硬件也支持ARB_shader_draw_parameters .这使您可以访问 gl_DrawID
,它表示渲染命令的当前索引 within a glMultiDraw
-style command .并且该扩展明确声明 gl_DrawID
是动态统一的。
因此您可以使用它来选择要渲染的纹理。您只需要发出一个多重绘制命令,在其中一遍又一遍地渲染相同的网格数据,但在每种情况下它会获得不同的 gl_DrawID
索引。
关于OpenGL 无绑定(bind)纹理 : Bind to uniform sampler2D array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40875564/
我正在尝试在 R 中重建这个古温度图的基本温度趋势。(Original image 和 data。) x 轴的刻度间隔从百万年的几十到百万到百万,再到万年的几十,等等,但刻度线是均匀分布的。原始图形在
我正在尝试在 R 中重建这个古温度图的基本温度趋势。(Original image 和 data。) x 轴的刻度间隔从百万年的几十到百万到百万,再到万年的几十,等等,但刻度线是均匀分布的。原始图形在
Uniform 是一个用于设置表单样式的 jQuery 插件。我在我的元素中使用它,但有时我需要关闭此插件并稍后再打开。 您可以通过以下方式(其中一种方式)打开插件:$("input, textare
我正在阅读《WebGL 初学者指南》一书,其中涉及到通过 keydown 事件更改光线方向的代码: function processKey(ev){ var lightDirection =
所以,我以前从未使用过 jQuery,但我想要一个名为 Uniform 的脚本,但我似乎无法让它工作。在 Safari 调试器中它给了我 3 个错误: [Error] SyntaxError: Une
random.uniform( ) 函数教程与实例解析 1. uniform( ) 函数说明 random.uniform(x, y)方法将随机生成一个实数,它在 [x,y] 范围内。
我对模块模式的概念还很陌生。我设法实现了 HTML5 游戏的核心功能,但我找不到一种好方法来使某些变量可用于该游戏的每个功能。 这是一个简短的伪示例,应该可以使其更加清晰: var Game = {}
我想用随机制服初始化我的自定义图层。在TensorFlow中,我可以找到以下使用initializer='uniform'的代码。但我想在 (-1.0,1.0) 之间设置随机统一输出范围。如何做到这一
我对 Python 非常陌生(因为这是我编写的第一个脚本),我只是在尝试制作一些可以工作的东西。 我写了以下内容: # Roll the Dice from random import randint
我有一个包含 n 个值(特征)的 m 个向量(样本)的矩阵,其中 m ~ 10^6,n = 20,并且所有特征的值都在 [0,1] 中。 如果我为每个特征计算直方图,它们就会大不相同。我计算了一个简单
我尝试用 GLSL 实现高度图。为此,我需要将我的图片发送到 VertexShader 并获取灰色组件。 glActiveTexture(GL_TEXTURE0); Texture.bind(); g
我正在尝试使用均匀圆形 LBP(1 个单位半径邻域中的 8 个点)实现基本的人脸识别系统。我正在拍摄一张图片,将其大小调整为 200 x 200 像素,然后将图片拆分为 8x8 小图片。然后我计算每个
众所周知,在 GPU 跑可编程管线的时候,着色器是并行运行的,每个着色器入口函数都会在 GPU 中并行执行。每个着色器对一大片统一格式的数据进行冲锋,体现 GPU 多核心的优势,可以小核同时处理数据;
我想在 (a,b)∪(c,d)∪...∪(e,f) 形式的集合中均匀生成一个随机数,其中 a 0,并且 f a, Rc, Re, R
假设我有一个 Bezier curve B(u) ,如果我增加 u参数以恒定速率我没有获得沿曲线的恒定速度运动,因为 u 之间的关系参数和评估曲线所获得的点不是线性的。 我已经阅读并实现了 David
似乎在 HLSL 中我可以但不必为来自应用程序的变量提供 uniform 关键字。对吧? 为什么会这样? 最佳答案 在 HLSL 中,全局变量默认被认为是统一的。 还确定了例如从顶点着色器阶段出来的变
所以,这是我的顶点和片段着色器: #version 120 attribute vec4 a_position; varying vec4 pos; uniform float time; void
我正在使用Uniform在选择控件上。我想隐藏其中一些,所以我这样做了: $('.selector').hide(); $.uniform.update('.selector'); $.uniform
我正在寻找要在我的控制台应用程序中应用的图像填充逻辑,它会生成 TIFF 文件。我的图像容器尺寸为 1200 * 1800 像素。 已应用以下逻辑来调整图像大小以适应此尺寸,但此逻辑应用 FIT 部分
(到目前为止,我在https://gamedev.stackexchange.com/questions/133399/can-i-map-uniform-variables中问了同样的问题,但没有答
我是一名优秀的程序员,十分优秀!