gpt4 book ai didi

c++ - 将带有数组的结构加载到 SSBO 时会发生什么?

转载 作者:行者123 更新时间:2023-11-28 04:39:35 26 4
gpt4 key购买 nike

我从 Khronos wiki 中获取了以下 SSBO 声明:

struct ssbo_data_t
{
int foo;
float bar[42];
float baz[MY_SIZE];
} ssbo_data;

这个数据结构有两个数组,一个是固定长度的,一个是可变长度的。

CPP 端的相同声明是相同的,但为了准确说明内存的实际结构,我将声明它略有不同:

struct ssbo_data_t
{
int foo;
float bar*;
float baz*;
} ssbo_data;

换句话说,在CPP端这个数据结构占据了三个不同的部分,struct和2 arrays。结构中的字段只是指向数组的指针,看起来或多或少像这样:

enter image description here

但是我的期望是 SSBO 数据需要如下所示才能传递给着色器:

enter image description here

因此我预计,如果有人试图天真地将 CPP 纹理上传到 SSBO,我们会得到一个错误,因为我们没有上传所有数据,而只是上传整数和 2 个指针,后面跟着很多内存不太可能是我们想要的数据(假设没有发生段错误)。

这个解释正确吗?或者 OpenGL 是否有办法识别指针并将其数据适本地加载到着色器中?

如果我完全错了,请解释在这些情况下 SSBO 是如何实际加载的。

最佳答案

In other words, in the CPP side this data structure occupies three different sections, the struct and the 2 arrays.

不,它没有。数组和指针不是一回事sizeof(int[20]) 等同于 sizeof(int) * 20。而 sizeof(int*) 不等同于 sizeof(int[20])sizeof(int) * 20

数据结构的数组成员就地占用存储空间,就像任何其他成员子对象一样。

关于c++ - 将带有数组的结构加载到 SSBO 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50539388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com