小编Pri*_*ter的帖子

在C中通过引用将指针传递给struct

请注意以下代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int a;
    int b;
    int c;
}A;

A *test;

void init(A* a)
{
    a->a = 3;
    a->b = 2;
    a->c = 1;
}
int main()
{
    test = malloc(sizeof(A));
    init(test);
    printf("%d\n", test->a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行良好!现在想象一下,我想mallocmain自身之外使用函数而不返回指向的指针struct。我将把malloc放在里面init并通过test地址。但这似乎不起作用。

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int a;
    int b;
    int c;
}A;

A *test;

void init(A** a)
{
    *a = malloc(sizeof(A));
    *a->a = 3; …
Run Code Online (Sandbox Code Playgroud)

c struct pointers

2
推荐指数
2
解决办法
1294
查看次数

OpenGL着色器存储缓冲区/ memoryBarrierBuffer

我目前创建了两个SSBO来处理一些灯,因为VS-FS in out接口无法处理很多灯(我使用前向着色).对于第一个我只将值传递给着色器(基本上只读一个)[cpp]:

struct GLightProperties
{
    unsigned int numLights;
    LightProperties properties[];
};

...

glp = (GLightProperties*)malloc(sizeof(GLightProperties) + sizeof(LightProperties) * lastSize);

...

glGenBuffers(1, &ssbo);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(GLightProperties) + sizeof(LightProperties) * lastSize, glp, GL_DYNAMIC_COPY);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, ssbo);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);
Run Code Online (Sandbox Code Playgroud)

着色器文件[GLSL]:

layout(std430, binding = 1) buffer Lights
{
    uint numLights;
    LightProperties properties[];
}lights;
Run Code Online (Sandbox Code Playgroud)

所以这第一个SSBO结果很好.但是,另一个目的是VS-FS接口,有一些问题:

glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo2);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(float) * 4 * 3 * lastSize, nullptr, GL_DYNAMIC_COPY);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);
Run Code Online (Sandbox Code Playgroud)

GLSL:

struct TangentProperties
{
    vec4 TangentLightPos;
    vec4 TangentViewPos;
    vec4 TangentFragPos;
};

layout(std430, binding …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glsl

2
推荐指数
1
解决办法
193
查看次数

标签 统计

c ×1

c++ ×1

glsl ×1

opengl ×1

pointers ×1

struct ×1