小编Tre*_*ngs的帖子

当c ++没有指定struct layout时,为什么glBufferData缓冲区可以用于UBO和SSBO

我正在浏览这个页面,了解如何在openGL中使用统一缓冲区对象,并看到以下结构:

struct shader_data_t
{
    float camera_position[4];
    float light_position[4];
    float light_diffuse[4];
} shader_data;
Run Code Online (Sandbox Code Playgroud)

使用缓冲区缓冲到openGL Uniform Buffer Object中

GLuint ubo = 0;
glGenBuffers(1, &ubo);
glBindBuffer(GL_UNIFORM_BUFFER, ubo);
glBufferData(GL_UNIFORM_BUFFER, sizeof(shader_data), &shader_data, GL_DYNAMIC_DRAW);
glBindBuffer(GL_UNIFORM_BUFFER, 0);
Run Code Online (Sandbox Code Playgroud)

并在着色器中使用

...
layout (std140) uniform shader_data
{ 
  vec4 camera_position;
  vec4 light_position;
  vec4 light_diffuse;
};
...
Run Code Online (Sandbox Code Playgroud)

但是,当glBufferData转换结构指针和void指针时,我不明白openGl如何知道如何将结构中的数据映射到制服,这应该使openGL不知道结构的内存布局.c ++ struct layout是实现定义的,虽然UBO的作者和其他用户用虚拟变量手动填充c ++结构以匹配着色器中的标准化std140布局,但是什么阻止c ++编译器添加更多填充并破坏布局?在c ++标准中是否有一个强有力的保证,即不会插入更多的填充,或者这是一个"实际可移植"的交易?

c++ opengl struct

3
推荐指数
1
解决办法
677
查看次数

如何在angular-cli项目中添加其他页面?

基于对我的另一个问题的评论(gradle如何将文件javascript fies添加到war文件中的目录)我正在尝试使用angular-cli来帮助构建和管理角度项目.但是,我似乎无法找到有关如何在项目中创建第二个网页的任何文档,这对我来说似乎是一项非常基本的任务.我试着创建一个"组件" ng g component {component name},但这并没有为构建结果添加任何内容.

javascript angular-cli angular

3
推荐指数
1
解决办法
8235
查看次数

标签 统计

angular ×1

angular-cli ×1

c++ ×1

javascript ×1

opengl ×1

struct ×1